Wîkîferheng
kuwiktionary
https://ku.wiktionary.org/wiki/Destp%C3%AAk
MediaWiki 1.47.0-wmf.17
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
balafir
0
3622
6342800
6334515
2026-08-26T21:25:23Z
Wikihez
7344
/* Navdêr */
6342800
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA|balafiř}} {{r-ya req}}
=== Navdêr ===
[[Wêne:Airbus A380 blue sky.jpg|thumb|Balafirek]]
{{navdêr|ku|z=m}}
# {{f|ku|pûrizm}} [[alav|Alavên]] pê[[firîn]]ê.
#: {{hevmane|ku|teyare|firoke}}
#* {{J:Hawar:1998:2|sernav=Sînema di Şerên Flandr û Dinkerkê de|nivîskar=Evdirehmanê Rojkî|hj=36|r=874|jêgirtin=Min mizgînî lê dikir, eskerekî belçîkî gote min ko di van '''balafiran''' de carina bimbeyên siwarkirî hene{{...}}}}
#* {{J:Firat Cewerî:Kevoka Spî:1996|jêgirtin={{...}}bilêta xwe ya '''balafirê''' ji ser masê hilanî, xiste bêrîka xwe{{...}}}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|بالافڕ}}
* {{ku-kr|балафьр'}}
==== Formên alternatîv ====
* {{g|ku|balefir}}
==== Jê ====
* {{g|ku|balafirgeh}}
* {{g|ku|balafirvan}}
* {{g|ku|balafirxane}}
==== Têkildar ====
* {{g|ku|firvan}}
==== Etîmolojî ====
{{neo|ku}} ji {{qertaf|ku|bala<t:jor>|fir<crz:rehê dema niha ji [[firîn]]>|hrf=ya ku li jor difire}}.
Li gorî {{w|Celadet Alî Bedirxan}} cara ewil di 1919an de di nav kurdên Geliyê Goban de li şûna {{q|ku|teyare}} hatiye çêkirin.{{eref|{{kitêb|tr|sal=1933|nivîskar=Celadet Alî Bedirxan|amadekar=Nurî Dersîmî|sernav=Mümtaz Mütefekkir CELADET ÂLİ BEDİRHAN'ın (Türkiye Reisicumhuru Gazi Mustafa Kemal Paşa Hazretlerine) Yazdığı Açık MEKTUP|sala weşandinê=1977|r=29|jêgirtin=1919 senesinde Geliye Goban Kürtleri ilk defa teyyareyi gördükleri zaman ona isim vermekte tereddüt etmemişlerdi. Teyyareye derhal BALAFIR demişlerdi.{{...}}Adeta aêroplane'nin bir tercümesi. Şu fark ile ki havada yerine yukarıda uçan, BALA yukarı demektir, FIR ise uçmak manasında olan FIRİN mastarının maddei asliyesidir.}}}}
{{çavkanî-etîm}}
==== Bide ber ====
* {{g|ku|firok}}
* {{g|ku|helîkopter}}
* {{g|ku|balafira rewiyan}}
==== Werger ====
{{werger-ser}}
* {{Z|ab}}: {{W-|ab|аероплан}}
* {{Z|af}}: {{W+|af|vliegtuig}}
* {{Z|ak}}: {{W-|ak|adupire}}, {{W-|ak|wiemhyɛn}}
* {{Z|akz}}: {{W-|akz|piɬɬawakáyka}}
* {{Z|sq}}: {{W+|sq|aeroplan|n}}
* {{Z|ale}}: {{W-|ale|igax̂tax̂}}
* {{Z|de}}: {{W+|de|Flugzeug|nt}}
* {{Z|am}}: {{W-|am|አይሮፕላን}}
* {{Z|ami}}: {{W-|ami|hikoki}}
* {{Z|aii}}: {{W-|aii|ܛܲܝܵܣܬܵܐ|m|tr=ṭāyasta}}
* {{Z|as}}: {{W-|as|আকাশীযান}}
* {{Z|ast}}: {{W+|ast|avión|n}}
* {{Z|tay}}: {{W-|tay|hikoki'}}
* {{Z|ay}}: {{W-|ay|latajamach'iwa}}
* {{Z|az}}: {{W+|az|təyyarə}}, {{W-|az|uçaq}}
* {{Z|bm}}: {{W-|bm|sannakurun}}
* {{Z|eu}}: {{W+|eu|hegazkin}}
* {{Z|ba}}: {{W-|ba|самолёт}}
* {{Z|be}}: {{W+|be|самалёт|n}}, {{W-|be|аэрапла́н|n}}
* {{Z|bn}}: {{W+|bn|খপোত}}, {{W+|bn|উড়োজাহাজ}}, {{W+|bn|বিমান}}, {{W+|bn|আকাশযান}}
* {{Z|bcl}}: {{W-|bcl|eroplano}}
* {{Z|bol}}: {{W-|bol|jirginsama}}
* {{Z|br}}: {{W+|br|karr-nij|n}}, {{W-|br|nijerez|m}}
* {{Z|bg}}: {{W+|bg|самоле́т|n}}, {{W-|bg|авио́н|n}}, {{W+|bg|аеропла́н|n}}
* {{Z|bnn}}: {{W-|bnn|kusbabai}}
* {{Z|my}}: {{W+|my|လေယာဉ်ပျံ}}
* {{Z|ce}}: {{W-|ce|кема}}, {{W-|ce|хӏаваан кема}}
* {{Z|cs}}: {{W+|cs|letoun|n}}, {{W+|cs|letadlo|nt}}
* {{Z|chr}}: {{W-|chr|ᏥᏳ ᎦᏃᎯᎵᏙᎯ}}
* {{Z|chy}}: {{W-|chy|ame'hahtȯtse}}
* {{Z|ny}}: {{W-|ny|ndege}}
* {{Z|cic}}: {{W-|cic|piini' wakaa'}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|飛機}}
*: {{Z|dng}}: {{W-|dng|фиҗи}}
*: {{Z|gan}}: {{W-|gan|飛機|tr=fi1 ji1}}
*: {{Z|hak}}: {{W-|hak|飛行機|tr=fî-hàng-kî, pî-hàng-kî, fî-yàng-kî, pî-yàng-kî}}, {{W-|hak|飛機|tr=fî-kî}}
*: {{Z|cjy}}: {{W-|cjy|飛機|tr=fei1 ji1}}
*: {{Z|cmn}}: {{W+|cmn|飛機}}, {{W+|cmn|飛行機}}
*: {{Z|mnp}}: {{W-|mnp|飛機|tr=hí-gí}}
*: {{Z|cdo}}: {{W-|cdo|飛機|tr=hĭ-*gĭ}}, {{W-|cdo|飛船|tr=buŏi-sùng}}
*: {{Z|nan}}: {{W+|nan|飛機|tr=hui-ki}}, {{W+|nan|飛行機|tr=hui-hêng-ki, poe-hêng-ki, pe-hêng-ki, hue-lêng-ki, hui-lêng-ki, poe-lêng-ki, hoe-nn̄g-ki}}, {{W+|nan|飛船|tr=poe-chûn, pe-chûn, hui-chûn}}
*: {{Z|wuu}}: {{W-|wuu|飛機}}
*: {{Z|hsn}}: {{W-|hsn|飛機|tr=fei1 ji1}}
* {{Z|ckt}}: {{W-|ckt|риӈэнэӈ|tr=riṇėnėṇ}}
* {{Z|da}}: {{W+|da|flyvemaskine|g}}, {{W+|da|fly|nt}}
* {{Z|dwu}}: {{W-|dwu|ḏikarr}}
* {{Z|ovd}}: {{W-|ovd|flygmasin|n}}, {{W-|ovd|fliuogmasin|n}}, {{W-|ovd|flygplan|nt}}
* {{Z|id}}: {{W+|id|pesawat}}, {{W+|id|pesawat terbang}}, {{W+|id|kapal terbang}}
* {{Z|ar}}: {{W+|ar|طَائِرَة|m}}, {{W+|ar|طَيَّارَة|m}}
*: {{Z|arz}}: {{W-|arz|طيارة|m|tr=ṭayyāra}}
* {{Z|hy}}: {{W+|hy|օդանավ}}, {{W+|hy|ինքնաթիռ}}, {{W+|hy|աերոպլան}}
* {{Z|eo}}: {{W-|eo|avio}}, {{W-|eo|aviadilo}}, {{W-|eo|flugmaŝino}}
* {{Z|et}}: {{W+|et|lennuk}}
* {{Z|gur}}: {{W-|gur|alupele}}
* {{Z|fa}}: {{W+|fa|هواپیما|tr=havâpeymâ}}, {{W+|fa|طیاره|tr=tayyâre}}
* {{Z|fo}}: {{W-|fo|flogfar|nt}}
* {{Z|fi}}: {{W+|fi|lentokone}}
* {{Z|fr}}: {{W+|fr|avion|n}}, {{W+|fr|aéroplane|n}}
* {{Z|fy}}: {{W-|fy|fleantúch|nt}}, {{W-|fy|fleanmasine}}
* {{Z|ff}}:
*: Adlamî: {{W-|ff|𞤤𞤢𞥄𞤲𞤢-𞤱𞤭𞥅𞤪𞤮𞥅𞤸𞤢}}, {{W-|ff|𞤢𞤪𞤢𞤨𞤵𞤤𞤫𞤤}}, {{W-|ff|𞤢𞤱𞤭𞤴𞤮𞤲}}
*: Latînî: {{W-|ff|laana-wiirooha}}, {{W-|ff|arapulel}}, {{W-|ff|awiyon}}
* {{Z|gd}}: {{W-|gd|itealan|n}}
* {{Z|gl}}: {{W+|gl|avión|n}}, {{W+|gl|aeroplano|n}}
* {{Z|gu}}: {{W-|gu|વિમાન}}
* {{Z|ka}}: {{W+|ka|თვითმფრინავი}}, {{W-|ka|აეროპლანი}}
* {{Z|gn}}: {{W-|gn|kurusu veve}}
* {{Z|haw}}: {{W-|haw|mokulele}}, {{W-|haw|mokuea}}
* {{Z|ha}}: {{W+|ha|jirgin sama}}
* {{Z|hi}}: {{W+|hi|विमान|n}}, {{W-|hi|हवाई जहाज़|n}}, {{W-|hi|वायु-यान|n}}
* {{Z|mww}}: {{W-|mww|dav hlau}}
* {{Z|nl}}: {{W+|nl|vliegtuig|nt}}
* {{Z|he}}: {{W+|he|מָטוֹס|n|tr=matós}}, {{W+|he|אֲוִירוֹן|nt|tr=avirón}}
* {{Z|io}}: {{W+|io|aeroplano}}
* {{Z|en}}: {{W+|en|airplane}}, {{W+|en|aeroplane}}
* {{Z|izh}}: {{W-|izh|samoljotta}}, {{W-|izh|aeroplana}}
* {{Z|ia}}: {{W-|ia|avion}}, {{W-|ia|aeroplano}}
* {{Z|iu}}: {{W-|iu|ᑎᖕᒥᓲᖅ}}
* {{Z|ik}}: {{W-|ik|tiŋŋun}}
* {{Z|ga}}: {{W+|ga|eitleán|n}}
* {{Z|it}}: {{W+|it|aereo|n}}, {{W+|it|aeroplano|n}}, {{W+|it|apparecchio|n}}, {{W+|it|aeromobile|m}}
* {{Z|is}}: {{W+|is|flugvél|m}}
* {{Z|ja}}: {{W+|ja|飛行機|tr=ひこうき, hikōki}}, {{W+|ja|航空機|tr=こうくうき, kōkūki}}
* {{Z|jv}}: {{W-|jv|ꦩꦺꦴꦤ꧀ꦠꦺꦴꦂꦩꦧꦸꦂ|tr=montor mabur}}
* {{Z|kl}}: {{W-|kl|timmisartoq}}
* {{Z|xnb}}: {{W-|xnb|hikoki}}
* {{Z|kn}}: {{W+|kn|ವಿಮಾನ}}, {{W-|kn|ಏರೋಪ್ಲೇನ್}}, {{W+|kn|ಏರೋಪ್ಲೇನು}}, {{W+|kn|ಗಾಳಿತೇರು}}
* {{Z|ca}}: {{W+|ca|avió|n}}
* {{Z|ckv}}: {{W-|ckv|hikuki}}
* {{Z|qu}}: {{W-|qu|antanka}}, {{W-|qu|lata pisqu}}, {{W-|qu|maraq}}
* {{Z|ks}}: {{W-|ks|پلین}}
* {{Z|ky}}: {{W+|ky|самолёт}}, {{W+|ky|учак}}, {{W+|ky|аэроплан}}
* {{Z|kg}}: {{W-|kg|ndèke}}
* {{Z|si}}: {{W-|si|ගුවන්යානය}}, {{W-|si|අහස්යානය}}
* {{Z|cku}}: {{W-|cku|piththawaika}}
* {{Z|ko}}: {{W+|ko|비행기}}, {{W+|ko|항공기}}
* {{Z|kw}}: {{W-|kw|jynn ebron|n}}
* {{Z|mfe}}: {{W-|mfe|avyon}}
* {{Z|crs}}: {{W-|crs|avyon}}
* {{Z|crl}}: {{W-|crl|ᑳᐱᒥᐦᔮᒥᑭᐦᒡ}}, {{W-|crl|ᑳᐱᐹᒥᐦᔮᒥᑭᐦᒡ}}
* {{Z|crj}}: {{W-|crj|ᑳᐱᒥᐦᔮᒪᑲᐦᒡ}}
* {{Z|lbe}}: {{W-|lbe|самолет}}, {{W-|lbe|айрипӏалан}}
* {{Z|lkt}}: {{W-|lkt|kiŋyékhiyapi}}
* {{Z|la}}: {{W-|la|aeroplanum|nt}}
* {{Z|lv}}: {{W-|lv|lidmašīna|m}}, {{W-|lv|gaisa kuģis|m}}
* {{Z|lo}}: {{W-|lo|ອາກາດຍານ}}, {{W-|lo|ເຄື່ອງບິນ}}, {{W-|lo|ເຮືອບິນ}}, {{W+|lo|ຍົນ}}
* {{Z|ln}}: {{W-|ln|mpɛ́pɔ}}
* {{Z|lt}}: {{W+|lt|lėktuvas|n}}, {{W-|lt|aeroplanas|n}}
* {{Z|mk}}: {{W-|mk|авио́н|n}}
* {{Z|mg}}: {{W+|mg|fiaramanidina}}
* {{Z|ml}}: {{W+|ml|വിമാനം}}
* {{Z|ms}}: {{W+|ms|kapal terbang}}
* {{Z|mt}}: {{W-|mt|ajruplan|n}}
* {{Z|mnc}}: {{W-|mnc|ᡩᡝᠶᡝᡨᡠᠨ}}
* {{Z|gv}}: {{W-|gv|etlan|n}}, {{W-|gv|greie etlee|n}}
* {{Z|mns-nor}}: {{W-|mns-nor|товлыӈхап}}
* {{Z|mi}}: {{W+|mi|manurere}}, {{W-|mi|eropereina}}, {{W-|mi|aropereina}}, {{W-|mi|rererangi}}, {{W+|mi|waka rererangi}}, {{W+|mi|wakarere}}
* {{Z|mr}}: {{W-|mr|विमान}}
* Marî:
*: {{Z|mhr}}: {{W-|mhr|кÿртньыгайык}}
* {{Z|hu}}: {{W+|hu|repülőgép}}, {{W+|hu|repülő}}
* {{Z|lus}}: {{W-|lus|thlawhtheihna}}
* {{Z|mwl}}: {{W-|mwl|abion|n}}
* {{Z|mn}}:
*: Kirîlî: {{W+|mn|нисэх онгоц}}, {{W+|mn|онгоц}}, {{W+|mn|нисгэл}}
*: Mongolî: {{W-|mn|ᠨᠢᠰᠬᠦ ᠣᠩᠭᠤᠴᠠ}}, {{W-|mn|ᠣᠩᠭᠤᠴᠠ}}, {{W-|mn|ᠨᠢᠰᠬᠡᠯ}}
* {{Z|mos}}: {{W-|mos|nasaar-sɩlga}}, {{W-|mos|sɩlga}}
* {{Z|nah}}: {{W+|nah|tepoztōtōtl}}, {{W-|nah|tepozpatlanqui}}
* {{Z|nap}}: {{W-|nap|arioplàno|n}}, {{W-|nap|apparècchio|n}}
* {{Z|nv}}: {{W-|nv|chidí naatʼaʼí}}
* {{Z|ne}}: {{W-|ne|विमान}}, {{W+|ne|हवाईजहाज}}, {{W-|ne|प्लेन|tr=plen}}
* {{Z|niu}}: {{W-|niu|vakalele}}
* {{Z|nrf}}: {{W-|nrf|avion|n}}
* {{Z|no}}:
*: {{Z|no}}: {{W+|no|fly|nt}}
*: {{Z|nn}}: {{W-|nn|fly|nt}}
* {{Z|oj}}: {{W-|oj|bemisemagak}}
* {{Z|oc}}: {{W+|oc|avion|n}}
* {{Z|or}}: {{W-|or|ଉଡ଼ାଜାହାଜ}}, {{W+|or|ବିମାନ}}
* {{Z|om}}: {{W-|om|xiyyaara}}
* {{Z|os}}: {{W-|os|хӕдтӕхӕг}}
* {{Z|ota}}: {{W-|ota|طیاره|tr=tayyare}}
* {{Z|ug}}: {{W-|ug|ئايروپىلان}}
* {{Z|uz}}: {{W+|uz|tayyora}}, {{W+|uz|samolyot}}, {{W+|uz|aeroplan}}
* {{Z|pwn}}: {{W-|pwn|hikuki}}
* {{Z|pi}}: {{W-|pi|ākāsayāna|nt}}, {{W-|pi|vehāsayāna|nt}}
* {{Z|ps}}: {{W+|ps|الوتکه|m|tr=alwatëka}}, {{W+|ps|طياره|m|tr=tayāra}}, {{W-|ps|هوايي جهاز}}
* {{Z|pdt}}: {{W-|pdt|Loftschepp|nt}}
* {{Z|pl}}: {{W+|pl|samolot|n}}, {{W+|pl|aeroplan|n}}
* {{Z|pt}}: {{W+|pt|avião|n}}, {{W+|pt|aeroplano|n}}
* {{Z|pa}}: {{W-|pa|ਹਵਾਈ-ਜਹਾਜ਼}}, {{W-|pa|ਜਹਾਜ਼}}
* {{Z|pyu}}: {{W-|pyu|hikuki}}
* {{Z|kk}}: {{W+|kk|ұшақ}}, {{W-|kk|самолет}}, {{W-|kk|аэроплан}}
* {{Z|rm}}: {{W-|rm|aviun|n}}, {{W-|rm|eroplan|n}}
* {{Z|ro}}: {{W+|ro|aeroplan|nt}}, {{W+|ro|avion|nt}}
* {{Z|dru}}: {{W-|dru|ngiapapalay}}
* {{Z|ru}}: {{W+|ru|самолёт|n}}, {{W+|ru|аэропла́н|n}}
* {{Z|sxr}}: {{W-|sxr|saliamiapihlihli}}
* {{Z|xsy}}: {{W-|xsy|kamahayap}}
* {{Z|szy}}: {{W-|szy|hikuki}}, {{W-|szy|babelbel}}
* {{Z|se}}: {{W-|se|girdi}}
* {{Z|smn}}: {{W-|smn|kirdemmaašin}}
* {{Z|sms}}: {{W-|sms|jarplan}}
* {{Z|sm}}: {{W-|sm|vaʻalele}}
* {{Z|sa}}: {{W+|sa|विमान}}, {{W-|sa|वायु-यान}}
* {{Z|ceb}}: {{W-|ceb|eroplano}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|авѝо̄н|n}}, {{W-|sh|зра̏копло̄в|n}}
*: Latînî: {{W+|sh|avìōn|n}}, {{W+|sh|zrȁkoplōv|n}}
* {{Z|sk}}: {{W+|sk|lietadlo|nt}}
* {{Z|sl}}: {{W+|sl|letalo|nt}}, {{W+|sl|avion|n}}
* {{Z|so}}: {{W-|so|diyaarad}}
* Sorbî:
*: {{Z|hsb}}: {{W-|hsb|lětadło|nt}}
* {{Z|ses}}: {{W-|ses|beenehii}}
* {{Z|st}}: {{W+|st|sefofane}}
* {{Z|es}}: {{W+|es|avión|n}}, {{W+|es|aeroplano|n}}
* {{Z|sw}}: {{W+|sw|ndege}}, {{W+|sw|eropleni|c9|c10}}
* {{Z|sv}}: {{W+|sv|flygplan|nt}}, {{W+|sv|flygmaskin|g}}
* {{Z|shn}}: {{W-|shn|လေႇယိၼ်ႇပျၢၼ်ႇ}}, {{W-|shn|ႁိူဝ်းမိၼ်}}
* {{Z|zdj}}: {{W-|zdj|roplani}}, {{W-|zdj|ropulani}}
* {{Z|sn}}: {{W-|sn|ndege}}
* {{Z|tg}}: {{W+|tg|самолёт}}, {{W+|tg|тайёра}}, {{W+|tg|ҳавопаймо}}, {{W-|tg|аэроплан}}
* {{Z|tl}}: {{W+|tl|eroplano}}
* {{Z|ta}}: {{W+|ta|விமானம்}}, {{W+|ta|வானவூர்தி}}
* {{Z|trv}}: {{W-|trv|asu}}, {{W-|trv|skaya}}, {{W-|trv|sapah skiya}}
* {{Z|th}}: {{W+|th|เครื่องบิน}}, {{W+|th|อากาศยาน}}, {{W+|th|เรือบิน}}
* {{Z|te}}: {{W+|te|విమానము}}
* {{Z|crh}}: {{W-|crh|tayare}}, {{W-|crh|uçaq}}
* {{Z|tt}}: {{W+|tt|очкыч}}, {{W-|tt|самолёт}}, {{W-|tt|аэроплан}}
* {{Z|ti}}: {{W-|ti|ነፋሪት}}
* {{Z|tr}}: {{W+|tr|uçak}}, {{W+|tr|tayyare}}
* {{Z|tk}}: {{W-|tk|samolýot}}, {{W-|tk|uçar}}, {{W+|tk|aeroplan}}
* {{Z|bo}}: {{W-|bo|གནམ་གྲུ}}, {{W-|bo|ལྕགས་བྱ}}
* {{Z|tkl}}: {{W-|tkl|vakalele}}
* {{Z|tpi}}: {{W+|tpi|balus}}
* {{Z|to}}: {{W-|to|vakapuna}}
* {{Z|tsu}}: {{W-|tsu|hikoki}}
* {{Z|tum}}: {{W-|tum|ndege}}
* {{Z|tvl}}: {{W-|tvl|vakalele}}
* {{Z|ur}}: {{W-|ur|طَیّارَہ|n|tr=tayyāra}}, {{W-|ur|ہَوائی جَہاز|n|tr=hawāī jahāz}}, {{W-|ur|جَہاز|n|tr=jahāz}}, {{W-|ur|ہَوا پَیما|n|tr=hawā paimā}}, {{W-|ur|وِمان|n|tr=vimān}}
* {{Z|uk}}: {{W+|uk|літа́к|n}}, {{W+|uk|аеропла́н|n}}
* {{Z|vi}}: {{W+|vi|máy bay}}, {{W+|vi|phi cơ}}
* {{Z|vo}}: {{W+|vo|flitöm}}, {{W-|vo|flitömil}}, {{W-|vo|leflitöm}}
* {{Z|vro}}: {{W-|vro|linnuk}}, {{W-|vro|aeroplaan}}
* {{Z|wls}}: {{W-|wls|vakalele}}
* {{Z|war}}: {{W-|war|eroplano}}
* {{Z|cy}}: {{W+|cy|awyren|m}}
* {{Z|km}}: {{W-|km|កប៉ាល់ហោះ}}, {{W-|km|យន្តហោះ}}, {{W-|km|សកុណាយន្ត}}
* {{Z|sah}}: {{W-|sah|самолет}}, {{W-|sah|сөмөлүөт}}, {{W-|sah|көтөр-аал}}
* {{Z|tao}}: {{W-|tao|sikoki}}
* {{Z|yi}}: {{W-|yi|אַעראָפּלאַן|n}}, {{W-|yi|עראָפּלאַן|n}}
* {{Z|yij}}: {{W-|yij|barbarrnyungu}}
* {{Z|yog}}: {{W-|yog|eroplano}}
* {{Z|yoi}}: {{W-|yoi|飛行機|tr=ひぐんき, higunki}}, {{W-|yoi|飛行機|tr=ちこーき, chikouki}}
* {{Z|yo}}: {{W-|yo|ọkọ̀ òfurufú}}
* {{Z|el}}: {{W+|el|αεροπλάνο|nt}}, {{W+|el|αεροσκάφος|nt}}
* {{Z|za}}: {{W-|za|feihgih}}
{{werger-bin}}
:{{werger çavkanî|en|airplane|beş=Ev qismê Wergerê|oldid=75545646}}
== {{ziman|zza}} ==
=== Navdêr ===
{{navdêr|zza|z=}}
# [[balafir]], [[teyare]]<ref>[http://www.kovarabir.com/wp-content/uploads/Ferheng%C3%AA-Dimil%C3%AE-%C3%BB-Kurmanc%C3%AE-B-b.pdf www.kovarabir.com]</ref>
#* {{bêmînak|zza}}
=== Çavkanî ===
{{çavkanî}}
11ivfk3p3zuu74pewqmq7p6nur4t4d9
6342819
6342800
2026-08-26T23:03:10Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342819
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA|balafiř}} {{r-ya req}}
=== Navdêr ===
[[Wêne:Airbus A380 blue sky.jpg|thumb|Balafirek]]
{{navdêr|ku|z=m}}
# {{f|ku|pûrizm}} [[alav|Alavên]] pê[[firîn]]ê.
#: {{hevmane|ku|teyare|firoke}}
#* {{J:Hawar:1998:2|sernav=Sînema di Şerên Flandr û Dinkerkê de|nivîskar=Evdirehmanê Rojkî|hj=36|r=874|jêgirtin=Min mizgînî lê dikir, eskerekî belçîkî gote min ko di van '''balafiran''' de carina bimbeyên siwarkirî hene{{...}}}}
#* {{J:Firat Cewerî:Kevoka Spî:1996|jêgirtin={{...}}bilêta xwe ya '''balafirê''' ji ser masê hilanî, xiste bêrîka xwe{{...}}}}
#* {{J:Hawar:1:1998|sernav=Armanc, Awayê Xebat û Nivîsandina Hawarê|hejmar=1|r=23|jêgirtin=Herweqî xelqê Geliyê Goyan, berî çardeh salan, gava tiyare dîtin, tavil bizarê xwe '''balafir''' nav lê qirin.}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|بالافڕ}}
* {{ku-kr|балафьр'}}
==== Formên alternatîv ====
* {{g|ku|balefir}}
==== Jê ====
* {{g|ku|balafirgeh}}
* {{g|ku|balafirvan}}
* {{g|ku|balafirxane}}
==== Têkildar ====
* {{g|ku|firvan}}
==== Etîmolojî ====
{{neo|ku}} ji {{qertaf|ku|bala<t:jor>|fir<crz:rehê dema niha ji [[firîn]]>|hrf=ya ku li jor difire}}.
Li gorî {{w|Celadet Alî Bedirxan}} cara ewil di 1919an de di nav kurdên Geliyê Goban de li şûna {{q|ku|teyare}} hatiye çêkirin.{{eref|{{kitêb|tr|sal=1933|nivîskar=Celadet Alî Bedirxan|amadekar=Nurî Dersîmî|sernav=Mümtaz Mütefekkir CELADET ÂLİ BEDİRHAN'ın (Türkiye Reisicumhuru Gazi Mustafa Kemal Paşa Hazretlerine) Yazdığı Açık MEKTUP|sala weşandinê=1977|r=29|jêgirtin=1919 senesinde Geliye Goban Kürtleri ilk defa teyyareyi gördükleri zaman ona isim vermekte tereddüt etmemişlerdi. Teyyareye derhal BALAFIR demişlerdi.{{...}}Adeta aêroplane'nin bir tercümesi. Şu fark ile ki havada yerine yukarıda uçan, BALA yukarı demektir, FIR ise uçmak manasında olan FIRİN mastarının maddei asliyesidir.}}}}
{{çavkanî-etîm}}
==== Bide ber ====
* {{g|ku|firok}}
* {{g|ku|helîkopter}}
* {{g|ku|balafira rewiyan}}
==== Werger ====
{{werger-ser}}
* {{Z|ab}}: {{W-|ab|аероплан}}
* {{Z|af}}: {{W+|af|vliegtuig}}
* {{Z|ak}}: {{W-|ak|adupire}}, {{W-|ak|wiemhyɛn}}
* {{Z|akz}}: {{W-|akz|piɬɬawakáyka}}
* {{Z|sq}}: {{W+|sq|aeroplan|n}}
* {{Z|ale}}: {{W-|ale|igax̂tax̂}}
* {{Z|de}}: {{W+|de|Flugzeug|nt}}
* {{Z|am}}: {{W-|am|አይሮፕላን}}
* {{Z|ami}}: {{W-|ami|hikoki}}
* {{Z|aii}}: {{W-|aii|ܛܲܝܵܣܬܵܐ|m|tr=ṭāyasta}}
* {{Z|as}}: {{W-|as|আকাশীযান}}
* {{Z|ast}}: {{W+|ast|avión|n}}
* {{Z|tay}}: {{W-|tay|hikoki'}}
* {{Z|ay}}: {{W-|ay|latajamach'iwa}}
* {{Z|az}}: {{W+|az|təyyarə}}, {{W-|az|uçaq}}
* {{Z|bm}}: {{W-|bm|sannakurun}}
* {{Z|eu}}: {{W+|eu|hegazkin}}
* {{Z|ba}}: {{W-|ba|самолёт}}
* {{Z|be}}: {{W+|be|самалёт|n}}, {{W-|be|аэрапла́н|n}}
* {{Z|bn}}: {{W+|bn|খপোত}}, {{W+|bn|উড়োজাহাজ}}, {{W+|bn|বিমান}}, {{W+|bn|আকাশযান}}
* {{Z|bcl}}: {{W-|bcl|eroplano}}
* {{Z|bol}}: {{W-|bol|jirginsama}}
* {{Z|br}}: {{W+|br|karr-nij|n}}, {{W-|br|nijerez|m}}
* {{Z|bg}}: {{W+|bg|самоле́т|n}}, {{W-|bg|авио́н|n}}, {{W+|bg|аеропла́н|n}}
* {{Z|bnn}}: {{W-|bnn|kusbabai}}
* {{Z|my}}: {{W+|my|လေယာဉ်ပျံ}}
* {{Z|ce}}: {{W-|ce|кема}}, {{W-|ce|хӏаваан кема}}
* {{Z|cs}}: {{W+|cs|letoun|n}}, {{W+|cs|letadlo|nt}}
* {{Z|chr}}: {{W-|chr|ᏥᏳ ᎦᏃᎯᎵᏙᎯ}}
* {{Z|chy}}: {{W-|chy|ame'hahtȯtse}}
* {{Z|ny}}: {{W-|ny|ndege}}
* {{Z|cic}}: {{W-|cic|piini' wakaa'}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|飛機}}
*: {{Z|dng}}: {{W-|dng|фиҗи}}
*: {{Z|gan}}: {{W-|gan|飛機|tr=fi1 ji1}}
*: {{Z|hak}}: {{W-|hak|飛行機|tr=fî-hàng-kî, pî-hàng-kî, fî-yàng-kî, pî-yàng-kî}}, {{W-|hak|飛機|tr=fî-kî}}
*: {{Z|cjy}}: {{W-|cjy|飛機|tr=fei1 ji1}}
*: {{Z|cmn}}: {{W+|cmn|飛機}}, {{W+|cmn|飛行機}}
*: {{Z|mnp}}: {{W-|mnp|飛機|tr=hí-gí}}
*: {{Z|cdo}}: {{W-|cdo|飛機|tr=hĭ-*gĭ}}, {{W-|cdo|飛船|tr=buŏi-sùng}}
*: {{Z|nan}}: {{W+|nan|飛機|tr=hui-ki}}, {{W+|nan|飛行機|tr=hui-hêng-ki, poe-hêng-ki, pe-hêng-ki, hue-lêng-ki, hui-lêng-ki, poe-lêng-ki, hoe-nn̄g-ki}}, {{W+|nan|飛船|tr=poe-chûn, pe-chûn, hui-chûn}}
*: {{Z|wuu}}: {{W-|wuu|飛機}}
*: {{Z|hsn}}: {{W-|hsn|飛機|tr=fei1 ji1}}
* {{Z|ckt}}: {{W-|ckt|риӈэнэӈ|tr=riṇėnėṇ}}
* {{Z|da}}: {{W+|da|flyvemaskine|g}}, {{W+|da|fly|nt}}
* {{Z|dwu}}: {{W-|dwu|ḏikarr}}
* {{Z|ovd}}: {{W-|ovd|flygmasin|n}}, {{W-|ovd|fliuogmasin|n}}, {{W-|ovd|flygplan|nt}}
* {{Z|id}}: {{W+|id|pesawat}}, {{W+|id|pesawat terbang}}, {{W+|id|kapal terbang}}
* {{Z|ar}}: {{W+|ar|طَائِرَة|m}}, {{W+|ar|طَيَّارَة|m}}
*: {{Z|arz}}: {{W-|arz|طيارة|m|tr=ṭayyāra}}
* {{Z|hy}}: {{W+|hy|օդանավ}}, {{W+|hy|ինքնաթիռ}}, {{W+|hy|աերոպլան}}
* {{Z|eo}}: {{W-|eo|avio}}, {{W-|eo|aviadilo}}, {{W-|eo|flugmaŝino}}
* {{Z|et}}: {{W+|et|lennuk}}
* {{Z|gur}}: {{W-|gur|alupele}}
* {{Z|fa}}: {{W+|fa|هواپیما|tr=havâpeymâ}}, {{W+|fa|طیاره|tr=tayyâre}}
* {{Z|fo}}: {{W-|fo|flogfar|nt}}
* {{Z|fi}}: {{W+|fi|lentokone}}
* {{Z|fr}}: {{W+|fr|avion|n}}, {{W+|fr|aéroplane|n}}
* {{Z|fy}}: {{W-|fy|fleantúch|nt}}, {{W-|fy|fleanmasine}}
* {{Z|ff}}:
*: Adlamî: {{W-|ff|𞤤𞤢𞥄𞤲𞤢-𞤱𞤭𞥅𞤪𞤮𞥅𞤸𞤢}}, {{W-|ff|𞤢𞤪𞤢𞤨𞤵𞤤𞤫𞤤}}, {{W-|ff|𞤢𞤱𞤭𞤴𞤮𞤲}}
*: Latînî: {{W-|ff|laana-wiirooha}}, {{W-|ff|arapulel}}, {{W-|ff|awiyon}}
* {{Z|gd}}: {{W-|gd|itealan|n}}
* {{Z|gl}}: {{W+|gl|avión|n}}, {{W+|gl|aeroplano|n}}
* {{Z|gu}}: {{W-|gu|વિમાન}}
* {{Z|ka}}: {{W+|ka|თვითმფრინავი}}, {{W-|ka|აეროპლანი}}
* {{Z|gn}}: {{W-|gn|kurusu veve}}
* {{Z|haw}}: {{W-|haw|mokulele}}, {{W-|haw|mokuea}}
* {{Z|ha}}: {{W+|ha|jirgin sama}}
* {{Z|hi}}: {{W+|hi|विमान|n}}, {{W-|hi|हवाई जहाज़|n}}, {{W-|hi|वायु-यान|n}}
* {{Z|mww}}: {{W-|mww|dav hlau}}
* {{Z|nl}}: {{W+|nl|vliegtuig|nt}}
* {{Z|he}}: {{W+|he|מָטוֹס|n|tr=matós}}, {{W+|he|אֲוִירוֹן|nt|tr=avirón}}
* {{Z|io}}: {{W+|io|aeroplano}}
* {{Z|en}}: {{W+|en|airplane}}, {{W+|en|aeroplane}}
* {{Z|izh}}: {{W-|izh|samoljotta}}, {{W-|izh|aeroplana}}
* {{Z|ia}}: {{W-|ia|avion}}, {{W-|ia|aeroplano}}
* {{Z|iu}}: {{W-|iu|ᑎᖕᒥᓲᖅ}}
* {{Z|ik}}: {{W-|ik|tiŋŋun}}
* {{Z|ga}}: {{W+|ga|eitleán|n}}
* {{Z|it}}: {{W+|it|aereo|n}}, {{W+|it|aeroplano|n}}, {{W+|it|apparecchio|n}}, {{W+|it|aeromobile|m}}
* {{Z|is}}: {{W+|is|flugvél|m}}
* {{Z|ja}}: {{W+|ja|飛行機|tr=ひこうき, hikōki}}, {{W+|ja|航空機|tr=こうくうき, kōkūki}}
* {{Z|jv}}: {{W-|jv|ꦩꦺꦴꦤ꧀ꦠꦺꦴꦂꦩꦧꦸꦂ|tr=montor mabur}}
* {{Z|kl}}: {{W-|kl|timmisartoq}}
* {{Z|xnb}}: {{W-|xnb|hikoki}}
* {{Z|kn}}: {{W+|kn|ವಿಮಾನ}}, {{W-|kn|ಏರೋಪ್ಲೇನ್}}, {{W+|kn|ಏರೋಪ್ಲೇನು}}, {{W+|kn|ಗಾಳಿತೇರು}}
* {{Z|ca}}: {{W+|ca|avió|n}}
* {{Z|ckv}}: {{W-|ckv|hikuki}}
* {{Z|qu}}: {{W-|qu|antanka}}, {{W-|qu|lata pisqu}}, {{W-|qu|maraq}}
* {{Z|ks}}: {{W-|ks|پلین}}
* {{Z|ky}}: {{W+|ky|самолёт}}, {{W+|ky|учак}}, {{W+|ky|аэроплан}}
* {{Z|kg}}: {{W-|kg|ndèke}}
* {{Z|si}}: {{W-|si|ගුවන්යානය}}, {{W-|si|අහස්යානය}}
* {{Z|cku}}: {{W-|cku|piththawaika}}
* {{Z|ko}}: {{W+|ko|비행기}}, {{W+|ko|항공기}}
* {{Z|kw}}: {{W-|kw|jynn ebron|n}}
* {{Z|mfe}}: {{W-|mfe|avyon}}
* {{Z|crs}}: {{W-|crs|avyon}}
* {{Z|crl}}: {{W-|crl|ᑳᐱᒥᐦᔮᒥᑭᐦᒡ}}, {{W-|crl|ᑳᐱᐹᒥᐦᔮᒥᑭᐦᒡ}}
* {{Z|crj}}: {{W-|crj|ᑳᐱᒥᐦᔮᒪᑲᐦᒡ}}
* {{Z|lbe}}: {{W-|lbe|самолет}}, {{W-|lbe|айрипӏалан}}
* {{Z|lkt}}: {{W-|lkt|kiŋyékhiyapi}}
* {{Z|la}}: {{W-|la|aeroplanum|nt}}
* {{Z|lv}}: {{W-|lv|lidmašīna|m}}, {{W-|lv|gaisa kuģis|m}}
* {{Z|lo}}: {{W-|lo|ອາກາດຍານ}}, {{W-|lo|ເຄື່ອງບິນ}}, {{W-|lo|ເຮືອບິນ}}, {{W+|lo|ຍົນ}}
* {{Z|ln}}: {{W-|ln|mpɛ́pɔ}}
* {{Z|lt}}: {{W+|lt|lėktuvas|n}}, {{W-|lt|aeroplanas|n}}
* {{Z|mk}}: {{W-|mk|авио́н|n}}
* {{Z|mg}}: {{W+|mg|fiaramanidina}}
* {{Z|ml}}: {{W+|ml|വിമാനം}}
* {{Z|ms}}: {{W+|ms|kapal terbang}}
* {{Z|mt}}: {{W-|mt|ajruplan|n}}
* {{Z|mnc}}: {{W-|mnc|ᡩᡝᠶᡝᡨᡠᠨ}}
* {{Z|gv}}: {{W-|gv|etlan|n}}, {{W-|gv|greie etlee|n}}
* {{Z|mns-nor}}: {{W-|mns-nor|товлыӈхап}}
* {{Z|mi}}: {{W+|mi|manurere}}, {{W-|mi|eropereina}}, {{W-|mi|aropereina}}, {{W-|mi|rererangi}}, {{W+|mi|waka rererangi}}, {{W+|mi|wakarere}}
* {{Z|mr}}: {{W-|mr|विमान}}
* Marî:
*: {{Z|mhr}}: {{W-|mhr|кÿртньыгайык}}
* {{Z|hu}}: {{W+|hu|repülőgép}}, {{W+|hu|repülő}}
* {{Z|lus}}: {{W-|lus|thlawhtheihna}}
* {{Z|mwl}}: {{W-|mwl|abion|n}}
* {{Z|mn}}:
*: Kirîlî: {{W+|mn|нисэх онгоц}}, {{W+|mn|онгоц}}, {{W+|mn|нисгэл}}
*: Mongolî: {{W-|mn|ᠨᠢᠰᠬᠦ ᠣᠩᠭᠤᠴᠠ}}, {{W-|mn|ᠣᠩᠭᠤᠴᠠ}}, {{W-|mn|ᠨᠢᠰᠬᠡᠯ}}
* {{Z|mos}}: {{W-|mos|nasaar-sɩlga}}, {{W-|mos|sɩlga}}
* {{Z|nah}}: {{W+|nah|tepoztōtōtl}}, {{W-|nah|tepozpatlanqui}}
* {{Z|nap}}: {{W-|nap|arioplàno|n}}, {{W-|nap|apparècchio|n}}
* {{Z|nv}}: {{W-|nv|chidí naatʼaʼí}}
* {{Z|ne}}: {{W-|ne|विमान}}, {{W+|ne|हवाईजहाज}}, {{W-|ne|प्लेन|tr=plen}}
* {{Z|niu}}: {{W-|niu|vakalele}}
* {{Z|nrf}}: {{W-|nrf|avion|n}}
* {{Z|no}}:
*: {{Z|no}}: {{W+|no|fly|nt}}
*: {{Z|nn}}: {{W-|nn|fly|nt}}
* {{Z|oj}}: {{W-|oj|bemisemagak}}
* {{Z|oc}}: {{W+|oc|avion|n}}
* {{Z|or}}: {{W-|or|ଉଡ଼ାଜାହାଜ}}, {{W+|or|ବିମାନ}}
* {{Z|om}}: {{W-|om|xiyyaara}}
* {{Z|os}}: {{W-|os|хӕдтӕхӕг}}
* {{Z|ota}}: {{W-|ota|طیاره|tr=tayyare}}
* {{Z|ug}}: {{W-|ug|ئايروپىلان}}
* {{Z|uz}}: {{W+|uz|tayyora}}, {{W+|uz|samolyot}}, {{W+|uz|aeroplan}}
* {{Z|pwn}}: {{W-|pwn|hikuki}}
* {{Z|pi}}: {{W-|pi|ākāsayāna|nt}}, {{W-|pi|vehāsayāna|nt}}
* {{Z|ps}}: {{W+|ps|الوتکه|m|tr=alwatëka}}, {{W+|ps|طياره|m|tr=tayāra}}, {{W-|ps|هوايي جهاز}}
* {{Z|pdt}}: {{W-|pdt|Loftschepp|nt}}
* {{Z|pl}}: {{W+|pl|samolot|n}}, {{W+|pl|aeroplan|n}}
* {{Z|pt}}: {{W+|pt|avião|n}}, {{W+|pt|aeroplano|n}}
* {{Z|pa}}: {{W-|pa|ਹਵਾਈ-ਜਹਾਜ਼}}, {{W-|pa|ਜਹਾਜ਼}}
* {{Z|pyu}}: {{W-|pyu|hikuki}}
* {{Z|kk}}: {{W+|kk|ұшақ}}, {{W-|kk|самолет}}, {{W-|kk|аэроплан}}
* {{Z|rm}}: {{W-|rm|aviun|n}}, {{W-|rm|eroplan|n}}
* {{Z|ro}}: {{W+|ro|aeroplan|nt}}, {{W+|ro|avion|nt}}
* {{Z|dru}}: {{W-|dru|ngiapapalay}}
* {{Z|ru}}: {{W+|ru|самолёт|n}}, {{W+|ru|аэропла́н|n}}
* {{Z|sxr}}: {{W-|sxr|saliamiapihlihli}}
* {{Z|xsy}}: {{W-|xsy|kamahayap}}
* {{Z|szy}}: {{W-|szy|hikuki}}, {{W-|szy|babelbel}}
* {{Z|se}}: {{W-|se|girdi}}
* {{Z|smn}}: {{W-|smn|kirdemmaašin}}
* {{Z|sms}}: {{W-|sms|jarplan}}
* {{Z|sm}}: {{W-|sm|vaʻalele}}
* {{Z|sa}}: {{W+|sa|विमान}}, {{W-|sa|वायु-यान}}
* {{Z|ceb}}: {{W-|ceb|eroplano}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|авѝо̄н|n}}, {{W-|sh|зра̏копло̄в|n}}
*: Latînî: {{W+|sh|avìōn|n}}, {{W+|sh|zrȁkoplōv|n}}
* {{Z|sk}}: {{W+|sk|lietadlo|nt}}
* {{Z|sl}}: {{W+|sl|letalo|nt}}, {{W+|sl|avion|n}}
* {{Z|so}}: {{W-|so|diyaarad}}
* Sorbî:
*: {{Z|hsb}}: {{W-|hsb|lětadło|nt}}
* {{Z|ses}}: {{W-|ses|beenehii}}
* {{Z|st}}: {{W+|st|sefofane}}
* {{Z|es}}: {{W+|es|avión|n}}, {{W+|es|aeroplano|n}}
* {{Z|sw}}: {{W+|sw|ndege}}, {{W+|sw|eropleni|c9|c10}}
* {{Z|sv}}: {{W+|sv|flygplan|nt}}, {{W+|sv|flygmaskin|g}}
* {{Z|shn}}: {{W-|shn|လေႇယိၼ်ႇပျၢၼ်ႇ}}, {{W-|shn|ႁိူဝ်းမိၼ်}}
* {{Z|zdj}}: {{W-|zdj|roplani}}, {{W-|zdj|ropulani}}
* {{Z|sn}}: {{W-|sn|ndege}}
* {{Z|tg}}: {{W+|tg|самолёт}}, {{W+|tg|тайёра}}, {{W+|tg|ҳавопаймо}}, {{W-|tg|аэроплан}}
* {{Z|tl}}: {{W+|tl|eroplano}}
* {{Z|ta}}: {{W+|ta|விமானம்}}, {{W+|ta|வானவூர்தி}}
* {{Z|trv}}: {{W-|trv|asu}}, {{W-|trv|skaya}}, {{W-|trv|sapah skiya}}
* {{Z|th}}: {{W+|th|เครื่องบิน}}, {{W+|th|อากาศยาน}}, {{W+|th|เรือบิน}}
* {{Z|te}}: {{W+|te|విమానము}}
* {{Z|crh}}: {{W-|crh|tayare}}, {{W-|crh|uçaq}}
* {{Z|tt}}: {{W+|tt|очкыч}}, {{W-|tt|самолёт}}, {{W-|tt|аэроплан}}
* {{Z|ti}}: {{W-|ti|ነፋሪት}}
* {{Z|tr}}: {{W+|tr|uçak}}, {{W+|tr|tayyare}}
* {{Z|tk}}: {{W-|tk|samolýot}}, {{W-|tk|uçar}}, {{W+|tk|aeroplan}}
* {{Z|bo}}: {{W-|bo|གནམ་གྲུ}}, {{W-|bo|ལྕགས་བྱ}}
* {{Z|tkl}}: {{W-|tkl|vakalele}}
* {{Z|tpi}}: {{W+|tpi|balus}}
* {{Z|to}}: {{W-|to|vakapuna}}
* {{Z|tsu}}: {{W-|tsu|hikoki}}
* {{Z|tum}}: {{W-|tum|ndege}}
* {{Z|tvl}}: {{W-|tvl|vakalele}}
* {{Z|ur}}: {{W-|ur|طَیّارَہ|n|tr=tayyāra}}, {{W-|ur|ہَوائی جَہاز|n|tr=hawāī jahāz}}, {{W-|ur|جَہاز|n|tr=jahāz}}, {{W-|ur|ہَوا پَیما|n|tr=hawā paimā}}, {{W-|ur|وِمان|n|tr=vimān}}
* {{Z|uk}}: {{W+|uk|літа́к|n}}, {{W+|uk|аеропла́н|n}}
* {{Z|vi}}: {{W+|vi|máy bay}}, {{W+|vi|phi cơ}}
* {{Z|vo}}: {{W+|vo|flitöm}}, {{W-|vo|flitömil}}, {{W-|vo|leflitöm}}
* {{Z|vro}}: {{W-|vro|linnuk}}, {{W-|vro|aeroplaan}}
* {{Z|wls}}: {{W-|wls|vakalele}}
* {{Z|war}}: {{W-|war|eroplano}}
* {{Z|cy}}: {{W+|cy|awyren|m}}
* {{Z|km}}: {{W-|km|កប៉ាល់ហោះ}}, {{W-|km|យន្តហោះ}}, {{W-|km|សកុណាយន្ត}}
* {{Z|sah}}: {{W-|sah|самолет}}, {{W-|sah|сөмөлүөт}}, {{W-|sah|көтөр-аал}}
* {{Z|tao}}: {{W-|tao|sikoki}}
* {{Z|yi}}: {{W-|yi|אַעראָפּלאַן|n}}, {{W-|yi|עראָפּלאַן|n}}
* {{Z|yij}}: {{W-|yij|barbarrnyungu}}
* {{Z|yog}}: {{W-|yog|eroplano}}
* {{Z|yoi}}: {{W-|yoi|飛行機|tr=ひぐんき, higunki}}, {{W-|yoi|飛行機|tr=ちこーき, chikouki}}
* {{Z|yo}}: {{W-|yo|ọkọ̀ òfurufú}}
* {{Z|el}}: {{W+|el|αεροπλάνο|nt}}, {{W+|el|αεροσκάφος|nt}}
* {{Z|za}}: {{W-|za|feihgih}}
{{werger-bin}}
:{{werger çavkanî|en|airplane|beş=Ev qismê Wergerê|oldid=75545646}}
== {{ziman|zza}} ==
=== Navdêr ===
{{navdêr|zza|z=}}
# [[balafir]], [[teyare]]<ref>[http://www.kovarabir.com/wp-content/uploads/Ferheng%C3%AA-Dimil%C3%AE-%C3%BB-Kurmanc%C3%AE-B-b.pdf www.kovarabir.com]</ref>
#* {{bêmînak|zza}}
=== Çavkanî ===
{{çavkanî}}
h386sebanpm1i5dijxpdszn863cmz53
6342821
6342819
2026-08-26T23:06:21Z
Wikihez
7344
6342821
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA|balafiř}} {{r-ya req}}
=== Navdêr ===
[[Wêne:Airbus A380 blue sky.jpg|thumb|Balafirek]]
{{navdêr|ku|z=m}}
# {{f|ku|pûrizm}} [[alav|Alavên]] pê[[firîn]]ê.
#: {{hevmane|ku|teyare|firoke}}
#* {{J:Hawar:1998:2|sernav=Sînema di Şerên Flandr û Dinkerkê de|nivîskar=Evdirehmanê Rojkî|hj=36|r=874|jêgirtin=Min mizgînî lê dikir, eskerekî belçîkî gote min ko di van '''balafiran''' de carina bimbeyên siwarkirî hene{{...}}}}
#* {{J:Firat Cewerî:Kevoka Spî:1996|jêgirtin={{...}}bilêta xwe ya '''balafirê''' ji ser masê hilanî, xiste bêrîka xwe{{...}}}}
#* {{J:Hawar:1:1998|sernav=Armanc, Awayê Xebat û Nivîsandina Hawarê|hejmar=1|r=23|jêgirtin=Herweqî xelqê{{j-wesf|beriya guhartina herfên Q-K}} Geliyê Goyan, berî çardeh salan, gava tiyare dîtin, tavil bizarê xwe '''balafir''' nav lê qirin.}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|بالافڕ}}
* {{ku-kr|балафьр'}}
==== Formên alternatîv ====
* {{g|ku|balefir}}
==== Jê ====
* {{g|ku|balafirgeh}}
* {{g|ku|balafirvan}}
* {{g|ku|balafirxane}}
==== Têkildar ====
* {{g|ku|firvan}}
==== Etîmolojî ====
{{neo|ku}} ji {{qertaf|ku|bala<t:jor>|fir<crz:rehê dema niha ji [[firîn]]>|hrf=ya ku li jor difire}}.
Li gorî {{w|Celadet Alî Bedirxan}} cara ewil di 1919an de di nav kurdên Geliyê Goban (Geliyê Goyan){{eref|{{J:Hawar:1:1998|sernav=Armanc, Awayê Xebat û Nivîsandina Hawarê|hejmar=1|r=23|jêgirtin=Herweqî xelqê Geliyê Goyan, berî çardeh salan, gava tiyare dîtin, tavil bizarê xwe balafir nav lê qirin.|wekçavkanî=1}}}} de li şûna {{q|ku|teyare}} hatiye çêkirin.{{eref|{{kitêb|tr|sal=1933|nivîskar=Celadet Alî Bedirxan|amadekar=Nurî Dersîmî|sernav=Mümtaz Mütefekkir CELADET ÂLİ BEDİRHAN'ın (Türkiye Reisicumhuru Gazi Mustafa Kemal Paşa Hazretlerine) Yazdığı Açık MEKTUP|sala weşandinê=1977|r=29|jêgirtin=1919 senesinde Geliye Goban Kürtleri ilk defa teyyareyi gördükleri zaman ona isim vermekte tereddüt etmemişlerdi. Teyyareye derhal BALAFIR demişlerdi.{{...}}Adeta aêroplane'nin bir tercümesi. Şu fark ile ki havada yerine yukarıda uçan, BALA yukarı demektir, FIR ise uçmak manasında olan FIRİN mastarının maddei asliyesidir.}}}}
{{çavkanî-etîm}}
==== Bide ber ====
* {{g|ku|firok}}
* {{g|ku|helîkopter}}
* {{g|ku|balafira rewiyan}}
==== Werger ====
{{werger-ser}}
* {{Z|ab}}: {{W-|ab|аероплан}}
* {{Z|af}}: {{W+|af|vliegtuig}}
* {{Z|ak}}: {{W-|ak|adupire}}, {{W-|ak|wiemhyɛn}}
* {{Z|akz}}: {{W-|akz|piɬɬawakáyka}}
* {{Z|sq}}: {{W+|sq|aeroplan|n}}
* {{Z|ale}}: {{W-|ale|igax̂tax̂}}
* {{Z|de}}: {{W+|de|Flugzeug|nt}}
* {{Z|am}}: {{W-|am|አይሮፕላን}}
* {{Z|ami}}: {{W-|ami|hikoki}}
* {{Z|aii}}: {{W-|aii|ܛܲܝܵܣܬܵܐ|m|tr=ṭāyasta}}
* {{Z|as}}: {{W-|as|আকাশীযান}}
* {{Z|ast}}: {{W+|ast|avión|n}}
* {{Z|tay}}: {{W-|tay|hikoki'}}
* {{Z|ay}}: {{W-|ay|latajamach'iwa}}
* {{Z|az}}: {{W+|az|təyyarə}}, {{W-|az|uçaq}}
* {{Z|bm}}: {{W-|bm|sannakurun}}
* {{Z|eu}}: {{W+|eu|hegazkin}}
* {{Z|ba}}: {{W-|ba|самолёт}}
* {{Z|be}}: {{W+|be|самалёт|n}}, {{W-|be|аэрапла́н|n}}
* {{Z|bn}}: {{W+|bn|খপোত}}, {{W+|bn|উড়োজাহাজ}}, {{W+|bn|বিমান}}, {{W+|bn|আকাশযান}}
* {{Z|bcl}}: {{W-|bcl|eroplano}}
* {{Z|bol}}: {{W-|bol|jirginsama}}
* {{Z|br}}: {{W+|br|karr-nij|n}}, {{W-|br|nijerez|m}}
* {{Z|bg}}: {{W+|bg|самоле́т|n}}, {{W-|bg|авио́н|n}}, {{W+|bg|аеропла́н|n}}
* {{Z|bnn}}: {{W-|bnn|kusbabai}}
* {{Z|my}}: {{W+|my|လေယာဉ်ပျံ}}
* {{Z|ce}}: {{W-|ce|кема}}, {{W-|ce|хӏаваан кема}}
* {{Z|cs}}: {{W+|cs|letoun|n}}, {{W+|cs|letadlo|nt}}
* {{Z|chr}}: {{W-|chr|ᏥᏳ ᎦᏃᎯᎵᏙᎯ}}
* {{Z|chy}}: {{W-|chy|ame'hahtȯtse}}
* {{Z|ny}}: {{W-|ny|ndege}}
* {{Z|cic}}: {{W-|cic|piini' wakaa'}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|飛機}}
*: {{Z|dng}}: {{W-|dng|фиҗи}}
*: {{Z|gan}}: {{W-|gan|飛機|tr=fi1 ji1}}
*: {{Z|hak}}: {{W-|hak|飛行機|tr=fî-hàng-kî, pî-hàng-kî, fî-yàng-kî, pî-yàng-kî}}, {{W-|hak|飛機|tr=fî-kî}}
*: {{Z|cjy}}: {{W-|cjy|飛機|tr=fei1 ji1}}
*: {{Z|cmn}}: {{W+|cmn|飛機}}, {{W+|cmn|飛行機}}
*: {{Z|mnp}}: {{W-|mnp|飛機|tr=hí-gí}}
*: {{Z|cdo}}: {{W-|cdo|飛機|tr=hĭ-*gĭ}}, {{W-|cdo|飛船|tr=buŏi-sùng}}
*: {{Z|nan}}: {{W+|nan|飛機|tr=hui-ki}}, {{W+|nan|飛行機|tr=hui-hêng-ki, poe-hêng-ki, pe-hêng-ki, hue-lêng-ki, hui-lêng-ki, poe-lêng-ki, hoe-nn̄g-ki}}, {{W+|nan|飛船|tr=poe-chûn, pe-chûn, hui-chûn}}
*: {{Z|wuu}}: {{W-|wuu|飛機}}
*: {{Z|hsn}}: {{W-|hsn|飛機|tr=fei1 ji1}}
* {{Z|ckt}}: {{W-|ckt|риӈэнэӈ|tr=riṇėnėṇ}}
* {{Z|da}}: {{W+|da|flyvemaskine|g}}, {{W+|da|fly|nt}}
* {{Z|dwu}}: {{W-|dwu|ḏikarr}}
* {{Z|ovd}}: {{W-|ovd|flygmasin|n}}, {{W-|ovd|fliuogmasin|n}}, {{W-|ovd|flygplan|nt}}
* {{Z|id}}: {{W+|id|pesawat}}, {{W+|id|pesawat terbang}}, {{W+|id|kapal terbang}}
* {{Z|ar}}: {{W+|ar|طَائِرَة|m}}, {{W+|ar|طَيَّارَة|m}}
*: {{Z|arz}}: {{W-|arz|طيارة|m|tr=ṭayyāra}}
* {{Z|hy}}: {{W+|hy|օդանավ}}, {{W+|hy|ինքնաթիռ}}, {{W+|hy|աերոպլան}}
* {{Z|eo}}: {{W-|eo|avio}}, {{W-|eo|aviadilo}}, {{W-|eo|flugmaŝino}}
* {{Z|et}}: {{W+|et|lennuk}}
* {{Z|gur}}: {{W-|gur|alupele}}
* {{Z|fa}}: {{W+|fa|هواپیما|tr=havâpeymâ}}, {{W+|fa|طیاره|tr=tayyâre}}
* {{Z|fo}}: {{W-|fo|flogfar|nt}}
* {{Z|fi}}: {{W+|fi|lentokone}}
* {{Z|fr}}: {{W+|fr|avion|n}}, {{W+|fr|aéroplane|n}}
* {{Z|fy}}: {{W-|fy|fleantúch|nt}}, {{W-|fy|fleanmasine}}
* {{Z|ff}}:
*: Adlamî: {{W-|ff|𞤤𞤢𞥄𞤲𞤢-𞤱𞤭𞥅𞤪𞤮𞥅𞤸𞤢}}, {{W-|ff|𞤢𞤪𞤢𞤨𞤵𞤤𞤫𞤤}}, {{W-|ff|𞤢𞤱𞤭𞤴𞤮𞤲}}
*: Latînî: {{W-|ff|laana-wiirooha}}, {{W-|ff|arapulel}}, {{W-|ff|awiyon}}
* {{Z|gd}}: {{W-|gd|itealan|n}}
* {{Z|gl}}: {{W+|gl|avión|n}}, {{W+|gl|aeroplano|n}}
* {{Z|gu}}: {{W-|gu|વિમાન}}
* {{Z|ka}}: {{W+|ka|თვითმფრინავი}}, {{W-|ka|აეროპლანი}}
* {{Z|gn}}: {{W-|gn|kurusu veve}}
* {{Z|haw}}: {{W-|haw|mokulele}}, {{W-|haw|mokuea}}
* {{Z|ha}}: {{W+|ha|jirgin sama}}
* {{Z|hi}}: {{W+|hi|विमान|n}}, {{W-|hi|हवाई जहाज़|n}}, {{W-|hi|वायु-यान|n}}
* {{Z|mww}}: {{W-|mww|dav hlau}}
* {{Z|nl}}: {{W+|nl|vliegtuig|nt}}
* {{Z|he}}: {{W+|he|מָטוֹס|n|tr=matós}}, {{W+|he|אֲוִירוֹן|nt|tr=avirón}}
* {{Z|io}}: {{W+|io|aeroplano}}
* {{Z|en}}: {{W+|en|airplane}}, {{W+|en|aeroplane}}
* {{Z|izh}}: {{W-|izh|samoljotta}}, {{W-|izh|aeroplana}}
* {{Z|ia}}: {{W-|ia|avion}}, {{W-|ia|aeroplano}}
* {{Z|iu}}: {{W-|iu|ᑎᖕᒥᓲᖅ}}
* {{Z|ik}}: {{W-|ik|tiŋŋun}}
* {{Z|ga}}: {{W+|ga|eitleán|n}}
* {{Z|it}}: {{W+|it|aereo|n}}, {{W+|it|aeroplano|n}}, {{W+|it|apparecchio|n}}, {{W+|it|aeromobile|m}}
* {{Z|is}}: {{W+|is|flugvél|m}}
* {{Z|ja}}: {{W+|ja|飛行機|tr=ひこうき, hikōki}}, {{W+|ja|航空機|tr=こうくうき, kōkūki}}
* {{Z|jv}}: {{W-|jv|ꦩꦺꦴꦤ꧀ꦠꦺꦴꦂꦩꦧꦸꦂ|tr=montor mabur}}
* {{Z|kl}}: {{W-|kl|timmisartoq}}
* {{Z|xnb}}: {{W-|xnb|hikoki}}
* {{Z|kn}}: {{W+|kn|ವಿಮಾನ}}, {{W-|kn|ಏರೋಪ್ಲೇನ್}}, {{W+|kn|ಏರೋಪ್ಲೇನು}}, {{W+|kn|ಗಾಳಿತೇರು}}
* {{Z|ca}}: {{W+|ca|avió|n}}
* {{Z|ckv}}: {{W-|ckv|hikuki}}
* {{Z|qu}}: {{W-|qu|antanka}}, {{W-|qu|lata pisqu}}, {{W-|qu|maraq}}
* {{Z|ks}}: {{W-|ks|پلین}}
* {{Z|ky}}: {{W+|ky|самолёт}}, {{W+|ky|учак}}, {{W+|ky|аэроплан}}
* {{Z|kg}}: {{W-|kg|ndèke}}
* {{Z|si}}: {{W-|si|ගුවන්යානය}}, {{W-|si|අහස්යානය}}
* {{Z|cku}}: {{W-|cku|piththawaika}}
* {{Z|ko}}: {{W+|ko|비행기}}, {{W+|ko|항공기}}
* {{Z|kw}}: {{W-|kw|jynn ebron|n}}
* {{Z|mfe}}: {{W-|mfe|avyon}}
* {{Z|crs}}: {{W-|crs|avyon}}
* {{Z|crl}}: {{W-|crl|ᑳᐱᒥᐦᔮᒥᑭᐦᒡ}}, {{W-|crl|ᑳᐱᐹᒥᐦᔮᒥᑭᐦᒡ}}
* {{Z|crj}}: {{W-|crj|ᑳᐱᒥᐦᔮᒪᑲᐦᒡ}}
* {{Z|lbe}}: {{W-|lbe|самолет}}, {{W-|lbe|айрипӏалан}}
* {{Z|lkt}}: {{W-|lkt|kiŋyékhiyapi}}
* {{Z|la}}: {{W-|la|aeroplanum|nt}}
* {{Z|lv}}: {{W-|lv|lidmašīna|m}}, {{W-|lv|gaisa kuģis|m}}
* {{Z|lo}}: {{W-|lo|ອາກາດຍານ}}, {{W-|lo|ເຄື່ອງບິນ}}, {{W-|lo|ເຮືອບິນ}}, {{W+|lo|ຍົນ}}
* {{Z|ln}}: {{W-|ln|mpɛ́pɔ}}
* {{Z|lt}}: {{W+|lt|lėktuvas|n}}, {{W-|lt|aeroplanas|n}}
* {{Z|mk}}: {{W-|mk|авио́н|n}}
* {{Z|mg}}: {{W+|mg|fiaramanidina}}
* {{Z|ml}}: {{W+|ml|വിമാനം}}
* {{Z|ms}}: {{W+|ms|kapal terbang}}
* {{Z|mt}}: {{W-|mt|ajruplan|n}}
* {{Z|mnc}}: {{W-|mnc|ᡩᡝᠶᡝᡨᡠᠨ}}
* {{Z|gv}}: {{W-|gv|etlan|n}}, {{W-|gv|greie etlee|n}}
* {{Z|mns-nor}}: {{W-|mns-nor|товлыӈхап}}
* {{Z|mi}}: {{W+|mi|manurere}}, {{W-|mi|eropereina}}, {{W-|mi|aropereina}}, {{W-|mi|rererangi}}, {{W+|mi|waka rererangi}}, {{W+|mi|wakarere}}
* {{Z|mr}}: {{W-|mr|विमान}}
* Marî:
*: {{Z|mhr}}: {{W-|mhr|кÿртньыгайык}}
* {{Z|hu}}: {{W+|hu|repülőgép}}, {{W+|hu|repülő}}
* {{Z|lus}}: {{W-|lus|thlawhtheihna}}
* {{Z|mwl}}: {{W-|mwl|abion|n}}
* {{Z|mn}}:
*: Kirîlî: {{W+|mn|нисэх онгоц}}, {{W+|mn|онгоц}}, {{W+|mn|нисгэл}}
*: Mongolî: {{W-|mn|ᠨᠢᠰᠬᠦ ᠣᠩᠭᠤᠴᠠ}}, {{W-|mn|ᠣᠩᠭᠤᠴᠠ}}, {{W-|mn|ᠨᠢᠰᠬᠡᠯ}}
* {{Z|mos}}: {{W-|mos|nasaar-sɩlga}}, {{W-|mos|sɩlga}}
* {{Z|nah}}: {{W+|nah|tepoztōtōtl}}, {{W-|nah|tepozpatlanqui}}
* {{Z|nap}}: {{W-|nap|arioplàno|n}}, {{W-|nap|apparècchio|n}}
* {{Z|nv}}: {{W-|nv|chidí naatʼaʼí}}
* {{Z|ne}}: {{W-|ne|विमान}}, {{W+|ne|हवाईजहाज}}, {{W-|ne|प्लेन|tr=plen}}
* {{Z|niu}}: {{W-|niu|vakalele}}
* {{Z|nrf}}: {{W-|nrf|avion|n}}
* {{Z|no}}:
*: {{Z|no}}: {{W+|no|fly|nt}}
*: {{Z|nn}}: {{W-|nn|fly|nt}}
* {{Z|oj}}: {{W-|oj|bemisemagak}}
* {{Z|oc}}: {{W+|oc|avion|n}}
* {{Z|or}}: {{W-|or|ଉଡ଼ାଜାହାଜ}}, {{W+|or|ବିମାନ}}
* {{Z|om}}: {{W-|om|xiyyaara}}
* {{Z|os}}: {{W-|os|хӕдтӕхӕг}}
* {{Z|ota}}: {{W-|ota|طیاره|tr=tayyare}}
* {{Z|ug}}: {{W-|ug|ئايروپىلان}}
* {{Z|uz}}: {{W+|uz|tayyora}}, {{W+|uz|samolyot}}, {{W+|uz|aeroplan}}
* {{Z|pwn}}: {{W-|pwn|hikuki}}
* {{Z|pi}}: {{W-|pi|ākāsayāna|nt}}, {{W-|pi|vehāsayāna|nt}}
* {{Z|ps}}: {{W+|ps|الوتکه|m|tr=alwatëka}}, {{W+|ps|طياره|m|tr=tayāra}}, {{W-|ps|هوايي جهاز}}
* {{Z|pdt}}: {{W-|pdt|Loftschepp|nt}}
* {{Z|pl}}: {{W+|pl|samolot|n}}, {{W+|pl|aeroplan|n}}
* {{Z|pt}}: {{W+|pt|avião|n}}, {{W+|pt|aeroplano|n}}
* {{Z|pa}}: {{W-|pa|ਹਵਾਈ-ਜਹਾਜ਼}}, {{W-|pa|ਜਹਾਜ਼}}
* {{Z|pyu}}: {{W-|pyu|hikuki}}
* {{Z|kk}}: {{W+|kk|ұшақ}}, {{W-|kk|самолет}}, {{W-|kk|аэроплан}}
* {{Z|rm}}: {{W-|rm|aviun|n}}, {{W-|rm|eroplan|n}}
* {{Z|ro}}: {{W+|ro|aeroplan|nt}}, {{W+|ro|avion|nt}}
* {{Z|dru}}: {{W-|dru|ngiapapalay}}
* {{Z|ru}}: {{W+|ru|самолёт|n}}, {{W+|ru|аэропла́н|n}}
* {{Z|sxr}}: {{W-|sxr|saliamiapihlihli}}
* {{Z|xsy}}: {{W-|xsy|kamahayap}}
* {{Z|szy}}: {{W-|szy|hikuki}}, {{W-|szy|babelbel}}
* {{Z|se}}: {{W-|se|girdi}}
* {{Z|smn}}: {{W-|smn|kirdemmaašin}}
* {{Z|sms}}: {{W-|sms|jarplan}}
* {{Z|sm}}: {{W-|sm|vaʻalele}}
* {{Z|sa}}: {{W+|sa|विमान}}, {{W-|sa|वायु-यान}}
* {{Z|ceb}}: {{W-|ceb|eroplano}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|авѝо̄н|n}}, {{W-|sh|зра̏копло̄в|n}}
*: Latînî: {{W+|sh|avìōn|n}}, {{W+|sh|zrȁkoplōv|n}}
* {{Z|sk}}: {{W+|sk|lietadlo|nt}}
* {{Z|sl}}: {{W+|sl|letalo|nt}}, {{W+|sl|avion|n}}
* {{Z|so}}: {{W-|so|diyaarad}}
* Sorbî:
*: {{Z|hsb}}: {{W-|hsb|lětadło|nt}}
* {{Z|ses}}: {{W-|ses|beenehii}}
* {{Z|st}}: {{W+|st|sefofane}}
* {{Z|es}}: {{W+|es|avión|n}}, {{W+|es|aeroplano|n}}
* {{Z|sw}}: {{W+|sw|ndege}}, {{W+|sw|eropleni|c9|c10}}
* {{Z|sv}}: {{W+|sv|flygplan|nt}}, {{W+|sv|flygmaskin|g}}
* {{Z|shn}}: {{W-|shn|လေႇယိၼ်ႇပျၢၼ်ႇ}}, {{W-|shn|ႁိူဝ်းမိၼ်}}
* {{Z|zdj}}: {{W-|zdj|roplani}}, {{W-|zdj|ropulani}}
* {{Z|sn}}: {{W-|sn|ndege}}
* {{Z|tg}}: {{W+|tg|самолёт}}, {{W+|tg|тайёра}}, {{W+|tg|ҳавопаймо}}, {{W-|tg|аэроплан}}
* {{Z|tl}}: {{W+|tl|eroplano}}
* {{Z|ta}}: {{W+|ta|விமானம்}}, {{W+|ta|வானவூர்தி}}
* {{Z|trv}}: {{W-|trv|asu}}, {{W-|trv|skaya}}, {{W-|trv|sapah skiya}}
* {{Z|th}}: {{W+|th|เครื่องบิน}}, {{W+|th|อากาศยาน}}, {{W+|th|เรือบิน}}
* {{Z|te}}: {{W+|te|విమానము}}
* {{Z|crh}}: {{W-|crh|tayare}}, {{W-|crh|uçaq}}
* {{Z|tt}}: {{W+|tt|очкыч}}, {{W-|tt|самолёт}}, {{W-|tt|аэроплан}}
* {{Z|ti}}: {{W-|ti|ነፋሪት}}
* {{Z|tr}}: {{W+|tr|uçak}}, {{W+|tr|tayyare}}
* {{Z|tk}}: {{W-|tk|samolýot}}, {{W-|tk|uçar}}, {{W+|tk|aeroplan}}
* {{Z|bo}}: {{W-|bo|གནམ་གྲུ}}, {{W-|bo|ལྕགས་བྱ}}
* {{Z|tkl}}: {{W-|tkl|vakalele}}
* {{Z|tpi}}: {{W+|tpi|balus}}
* {{Z|to}}: {{W-|to|vakapuna}}
* {{Z|tsu}}: {{W-|tsu|hikoki}}
* {{Z|tum}}: {{W-|tum|ndege}}
* {{Z|tvl}}: {{W-|tvl|vakalele}}
* {{Z|ur}}: {{W-|ur|طَیّارَہ|n|tr=tayyāra}}, {{W-|ur|ہَوائی جَہاز|n|tr=hawāī jahāz}}, {{W-|ur|جَہاز|n|tr=jahāz}}, {{W-|ur|ہَوا پَیما|n|tr=hawā paimā}}, {{W-|ur|وِمان|n|tr=vimān}}
* {{Z|uk}}: {{W+|uk|літа́к|n}}, {{W+|uk|аеропла́н|n}}
* {{Z|vi}}: {{W+|vi|máy bay}}, {{W+|vi|phi cơ}}
* {{Z|vo}}: {{W+|vo|flitöm}}, {{W-|vo|flitömil}}, {{W-|vo|leflitöm}}
* {{Z|vro}}: {{W-|vro|linnuk}}, {{W-|vro|aeroplaan}}
* {{Z|wls}}: {{W-|wls|vakalele}}
* {{Z|war}}: {{W-|war|eroplano}}
* {{Z|cy}}: {{W+|cy|awyren|m}}
* {{Z|km}}: {{W-|km|កប៉ាល់ហោះ}}, {{W-|km|យន្តហោះ}}, {{W-|km|សកុណាយន្ត}}
* {{Z|sah}}: {{W-|sah|самолет}}, {{W-|sah|сөмөлүөт}}, {{W-|sah|көтөр-аал}}
* {{Z|tao}}: {{W-|tao|sikoki}}
* {{Z|yi}}: {{W-|yi|אַעראָפּלאַן|n}}, {{W-|yi|עראָפּלאַן|n}}
* {{Z|yij}}: {{W-|yij|barbarrnyungu}}
* {{Z|yog}}: {{W-|yog|eroplano}}
* {{Z|yoi}}: {{W-|yoi|飛行機|tr=ひぐんき, higunki}}, {{W-|yoi|飛行機|tr=ちこーき, chikouki}}
* {{Z|yo}}: {{W-|yo|ọkọ̀ òfurufú}}
* {{Z|el}}: {{W+|el|αεροπλάνο|nt}}, {{W+|el|αεροσκάφος|nt}}
* {{Z|za}}: {{W-|za|feihgih}}
{{werger-bin}}
:{{werger çavkanî|en|airplane|beş=Ev qismê Wergerê|oldid=75545646}}
== {{ziman|zza}} ==
=== Navdêr ===
{{navdêr|zza|z=}}
# [[balafir]], [[teyare]]<ref>[http://www.kovarabir.com/wp-content/uploads/Ferheng%C3%AA-Dimil%C3%AE-%C3%BB-Kurmanc%C3%AE-B-b.pdf www.kovarabir.com]</ref>
#* {{bêmînak|zza}}
=== Çavkanî ===
{{çavkanî}}
q34k1rnc25ltks2l2uei5m705ao3r8e
6342825
6342821
2026-08-27T06:32:46Z
Wikihez
7344
/* Têkildar */ bêçavkanî (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342825
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA|balafiř}} {{r-ya req}}
=== Navdêr ===
[[Wêne:Airbus A380 blue sky.jpg|thumb|Balafirek]]
{{navdêr|ku|z=m}}
# {{f|ku|pûrizm}} [[alav|Alavên]] pê[[firîn]]ê.
#: {{hevmane|ku|teyare|firoke}}
#* {{J:Hawar:1998:2|sernav=Sînema di Şerên Flandr û Dinkerkê de|nivîskar=Evdirehmanê Rojkî|hj=36|r=874|jêgirtin=Min mizgînî lê dikir, eskerekî belçîkî gote min ko di van '''balafiran''' de carina bimbeyên siwarkirî hene{{...}}}}
#* {{J:Firat Cewerî:Kevoka Spî:1996|jêgirtin={{...}}bilêta xwe ya '''balafirê''' ji ser masê hilanî, xiste bêrîka xwe{{...}}}}
#* {{J:Hawar:1:1998|sernav=Armanc, Awayê Xebat û Nivîsandina Hawarê|hejmar=1|r=23|jêgirtin=Herweqî xelqê{{j-wesf|beriya guhartina herfên Q-K}} Geliyê Goyan, berî çardeh salan, gava tiyare dîtin, tavil bizarê xwe '''balafir''' nav lê qirin.}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|بالافڕ}}
* {{ku-kr|балафьр'}}
==== Formên alternatîv ====
* {{g|ku|balefir}}
==== Jê ====
* {{g|ku|balafirgeh}}
* {{g|ku|balafirvan}}
* {{g|ku|balafirxane}}
==== Etîmolojî ====
{{neo|ku}} ji {{qertaf|ku|bala<t:jor>|fir<crz:rehê dema niha ji [[firîn]]>|hrf=ya ku li jor difire}}.
Li gorî {{w|Celadet Alî Bedirxan}} cara ewil di 1919an de di nav kurdên Geliyê Goban (Geliyê Goyan){{eref|{{J:Hawar:1:1998|sernav=Armanc, Awayê Xebat û Nivîsandina Hawarê|hejmar=1|r=23|jêgirtin=Herweqî xelqê Geliyê Goyan, berî çardeh salan, gava tiyare dîtin, tavil bizarê xwe balafir nav lê qirin.|wekçavkanî=1}}}} de li şûna {{q|ku|teyare}} hatiye çêkirin.{{eref|{{kitêb|tr|sal=1933|nivîskar=Celadet Alî Bedirxan|amadekar=Nurî Dersîmî|sernav=Mümtaz Mütefekkir CELADET ÂLİ BEDİRHAN'ın (Türkiye Reisicumhuru Gazi Mustafa Kemal Paşa Hazretlerine) Yazdığı Açık MEKTUP|sala weşandinê=1977|r=29|jêgirtin=1919 senesinde Geliye Goban Kürtleri ilk defa teyyareyi gördükleri zaman ona isim vermekte tereddüt etmemişlerdi. Teyyareye derhal BALAFIR demişlerdi.{{...}}Adeta aêroplane'nin bir tercümesi. Şu fark ile ki havada yerine yukarıda uçan, BALA yukarı demektir, FIR ise uçmak manasında olan FIRİN mastarının maddei asliyesidir.}}}}
{{çavkanî-etîm}}
==== Bide ber ====
* {{g|ku|firok}}
* {{g|ku|helîkopter}}
* {{g|ku|balafira rewiyan}}
==== Werger ====
{{werger-ser}}
* {{Z|ab}}: {{W-|ab|аероплан}}
* {{Z|af}}: {{W+|af|vliegtuig}}
* {{Z|ak}}: {{W-|ak|adupire}}, {{W-|ak|wiemhyɛn}}
* {{Z|akz}}: {{W-|akz|piɬɬawakáyka}}
* {{Z|sq}}: {{W+|sq|aeroplan|n}}
* {{Z|ale}}: {{W-|ale|igax̂tax̂}}
* {{Z|de}}: {{W+|de|Flugzeug|nt}}
* {{Z|am}}: {{W-|am|አይሮፕላን}}
* {{Z|ami}}: {{W-|ami|hikoki}}
* {{Z|aii}}: {{W-|aii|ܛܲܝܵܣܬܵܐ|m|tr=ṭāyasta}}
* {{Z|as}}: {{W-|as|আকাশীযান}}
* {{Z|ast}}: {{W+|ast|avión|n}}
* {{Z|tay}}: {{W-|tay|hikoki'}}
* {{Z|ay}}: {{W-|ay|latajamach'iwa}}
* {{Z|az}}: {{W+|az|təyyarə}}, {{W-|az|uçaq}}
* {{Z|bm}}: {{W-|bm|sannakurun}}
* {{Z|eu}}: {{W+|eu|hegazkin}}
* {{Z|ba}}: {{W-|ba|самолёт}}
* {{Z|be}}: {{W+|be|самалёт|n}}, {{W-|be|аэрапла́н|n}}
* {{Z|bn}}: {{W+|bn|খপোত}}, {{W+|bn|উড়োজাহাজ}}, {{W+|bn|বিমান}}, {{W+|bn|আকাশযান}}
* {{Z|bcl}}: {{W-|bcl|eroplano}}
* {{Z|bol}}: {{W-|bol|jirginsama}}
* {{Z|br}}: {{W+|br|karr-nij|n}}, {{W-|br|nijerez|m}}
* {{Z|bg}}: {{W+|bg|самоле́т|n}}, {{W-|bg|авио́н|n}}, {{W+|bg|аеропла́н|n}}
* {{Z|bnn}}: {{W-|bnn|kusbabai}}
* {{Z|my}}: {{W+|my|လေယာဉ်ပျံ}}
* {{Z|ce}}: {{W-|ce|кема}}, {{W-|ce|хӏаваан кема}}
* {{Z|cs}}: {{W+|cs|letoun|n}}, {{W+|cs|letadlo|nt}}
* {{Z|chr}}: {{W-|chr|ᏥᏳ ᎦᏃᎯᎵᏙᎯ}}
* {{Z|chy}}: {{W-|chy|ame'hahtȯtse}}
* {{Z|ny}}: {{W-|ny|ndege}}
* {{Z|cic}}: {{W-|cic|piini' wakaa'}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|飛機}}
*: {{Z|dng}}: {{W-|dng|фиҗи}}
*: {{Z|gan}}: {{W-|gan|飛機|tr=fi1 ji1}}
*: {{Z|hak}}: {{W-|hak|飛行機|tr=fî-hàng-kî, pî-hàng-kî, fî-yàng-kî, pî-yàng-kî}}, {{W-|hak|飛機|tr=fî-kî}}
*: {{Z|cjy}}: {{W-|cjy|飛機|tr=fei1 ji1}}
*: {{Z|cmn}}: {{W+|cmn|飛機}}, {{W+|cmn|飛行機}}
*: {{Z|mnp}}: {{W-|mnp|飛機|tr=hí-gí}}
*: {{Z|cdo}}: {{W-|cdo|飛機|tr=hĭ-*gĭ}}, {{W-|cdo|飛船|tr=buŏi-sùng}}
*: {{Z|nan}}: {{W+|nan|飛機|tr=hui-ki}}, {{W+|nan|飛行機|tr=hui-hêng-ki, poe-hêng-ki, pe-hêng-ki, hue-lêng-ki, hui-lêng-ki, poe-lêng-ki, hoe-nn̄g-ki}}, {{W+|nan|飛船|tr=poe-chûn, pe-chûn, hui-chûn}}
*: {{Z|wuu}}: {{W-|wuu|飛機}}
*: {{Z|hsn}}: {{W-|hsn|飛機|tr=fei1 ji1}}
* {{Z|ckt}}: {{W-|ckt|риӈэнэӈ|tr=riṇėnėṇ}}
* {{Z|da}}: {{W+|da|flyvemaskine|g}}, {{W+|da|fly|nt}}
* {{Z|dwu}}: {{W-|dwu|ḏikarr}}
* {{Z|ovd}}: {{W-|ovd|flygmasin|n}}, {{W-|ovd|fliuogmasin|n}}, {{W-|ovd|flygplan|nt}}
* {{Z|id}}: {{W+|id|pesawat}}, {{W+|id|pesawat terbang}}, {{W+|id|kapal terbang}}
* {{Z|ar}}: {{W+|ar|طَائِرَة|m}}, {{W+|ar|طَيَّارَة|m}}
*: {{Z|arz}}: {{W-|arz|طيارة|m|tr=ṭayyāra}}
* {{Z|hy}}: {{W+|hy|օդանավ}}, {{W+|hy|ինքնաթիռ}}, {{W+|hy|աերոպլան}}
* {{Z|eo}}: {{W-|eo|avio}}, {{W-|eo|aviadilo}}, {{W-|eo|flugmaŝino}}
* {{Z|et}}: {{W+|et|lennuk}}
* {{Z|gur}}: {{W-|gur|alupele}}
* {{Z|fa}}: {{W+|fa|هواپیما|tr=havâpeymâ}}, {{W+|fa|طیاره|tr=tayyâre}}
* {{Z|fo}}: {{W-|fo|flogfar|nt}}
* {{Z|fi}}: {{W+|fi|lentokone}}
* {{Z|fr}}: {{W+|fr|avion|n}}, {{W+|fr|aéroplane|n}}
* {{Z|fy}}: {{W-|fy|fleantúch|nt}}, {{W-|fy|fleanmasine}}
* {{Z|ff}}:
*: Adlamî: {{W-|ff|𞤤𞤢𞥄𞤲𞤢-𞤱𞤭𞥅𞤪𞤮𞥅𞤸𞤢}}, {{W-|ff|𞤢𞤪𞤢𞤨𞤵𞤤𞤫𞤤}}, {{W-|ff|𞤢𞤱𞤭𞤴𞤮𞤲}}
*: Latînî: {{W-|ff|laana-wiirooha}}, {{W-|ff|arapulel}}, {{W-|ff|awiyon}}
* {{Z|gd}}: {{W-|gd|itealan|n}}
* {{Z|gl}}: {{W+|gl|avión|n}}, {{W+|gl|aeroplano|n}}
* {{Z|gu}}: {{W-|gu|વિમાન}}
* {{Z|ka}}: {{W+|ka|თვითმფრინავი}}, {{W-|ka|აეროპლანი}}
* {{Z|gn}}: {{W-|gn|kurusu veve}}
* {{Z|haw}}: {{W-|haw|mokulele}}, {{W-|haw|mokuea}}
* {{Z|ha}}: {{W+|ha|jirgin sama}}
* {{Z|hi}}: {{W+|hi|विमान|n}}, {{W-|hi|हवाई जहाज़|n}}, {{W-|hi|वायु-यान|n}}
* {{Z|mww}}: {{W-|mww|dav hlau}}
* {{Z|nl}}: {{W+|nl|vliegtuig|nt}}
* {{Z|he}}: {{W+|he|מָטוֹס|n|tr=matós}}, {{W+|he|אֲוִירוֹן|nt|tr=avirón}}
* {{Z|io}}: {{W+|io|aeroplano}}
* {{Z|en}}: {{W+|en|airplane}}, {{W+|en|aeroplane}}
* {{Z|izh}}: {{W-|izh|samoljotta}}, {{W-|izh|aeroplana}}
* {{Z|ia}}: {{W-|ia|avion}}, {{W-|ia|aeroplano}}
* {{Z|iu}}: {{W-|iu|ᑎᖕᒥᓲᖅ}}
* {{Z|ik}}: {{W-|ik|tiŋŋun}}
* {{Z|ga}}: {{W+|ga|eitleán|n}}
* {{Z|it}}: {{W+|it|aereo|n}}, {{W+|it|aeroplano|n}}, {{W+|it|apparecchio|n}}, {{W+|it|aeromobile|m}}
* {{Z|is}}: {{W+|is|flugvél|m}}
* {{Z|ja}}: {{W+|ja|飛行機|tr=ひこうき, hikōki}}, {{W+|ja|航空機|tr=こうくうき, kōkūki}}
* {{Z|jv}}: {{W-|jv|ꦩꦺꦴꦤ꧀ꦠꦺꦴꦂꦩꦧꦸꦂ|tr=montor mabur}}
* {{Z|kl}}: {{W-|kl|timmisartoq}}
* {{Z|xnb}}: {{W-|xnb|hikoki}}
* {{Z|kn}}: {{W+|kn|ವಿಮಾನ}}, {{W-|kn|ಏರೋಪ್ಲೇನ್}}, {{W+|kn|ಏರೋಪ್ಲೇನು}}, {{W+|kn|ಗಾಳಿತೇರು}}
* {{Z|ca}}: {{W+|ca|avió|n}}
* {{Z|ckv}}: {{W-|ckv|hikuki}}
* {{Z|qu}}: {{W-|qu|antanka}}, {{W-|qu|lata pisqu}}, {{W-|qu|maraq}}
* {{Z|ks}}: {{W-|ks|پلین}}
* {{Z|ky}}: {{W+|ky|самолёт}}, {{W+|ky|учак}}, {{W+|ky|аэроплан}}
* {{Z|kg}}: {{W-|kg|ndèke}}
* {{Z|si}}: {{W-|si|ගුවන්යානය}}, {{W-|si|අහස්යානය}}
* {{Z|cku}}: {{W-|cku|piththawaika}}
* {{Z|ko}}: {{W+|ko|비행기}}, {{W+|ko|항공기}}
* {{Z|kw}}: {{W-|kw|jynn ebron|n}}
* {{Z|mfe}}: {{W-|mfe|avyon}}
* {{Z|crs}}: {{W-|crs|avyon}}
* {{Z|crl}}: {{W-|crl|ᑳᐱᒥᐦᔮᒥᑭᐦᒡ}}, {{W-|crl|ᑳᐱᐹᒥᐦᔮᒥᑭᐦᒡ}}
* {{Z|crj}}: {{W-|crj|ᑳᐱᒥᐦᔮᒪᑲᐦᒡ}}
* {{Z|lbe}}: {{W-|lbe|самолет}}, {{W-|lbe|айрипӏалан}}
* {{Z|lkt}}: {{W-|lkt|kiŋyékhiyapi}}
* {{Z|la}}: {{W-|la|aeroplanum|nt}}
* {{Z|lv}}: {{W-|lv|lidmašīna|m}}, {{W-|lv|gaisa kuģis|m}}
* {{Z|lo}}: {{W-|lo|ອາກາດຍານ}}, {{W-|lo|ເຄື່ອງບິນ}}, {{W-|lo|ເຮືອບິນ}}, {{W+|lo|ຍົນ}}
* {{Z|ln}}: {{W-|ln|mpɛ́pɔ}}
* {{Z|lt}}: {{W+|lt|lėktuvas|n}}, {{W-|lt|aeroplanas|n}}
* {{Z|mk}}: {{W-|mk|авио́н|n}}
* {{Z|mg}}: {{W+|mg|fiaramanidina}}
* {{Z|ml}}: {{W+|ml|വിമാനം}}
* {{Z|ms}}: {{W+|ms|kapal terbang}}
* {{Z|mt}}: {{W-|mt|ajruplan|n}}
* {{Z|mnc}}: {{W-|mnc|ᡩᡝᠶᡝᡨᡠᠨ}}
* {{Z|gv}}: {{W-|gv|etlan|n}}, {{W-|gv|greie etlee|n}}
* {{Z|mns-nor}}: {{W-|mns-nor|товлыӈхап}}
* {{Z|mi}}: {{W+|mi|manurere}}, {{W-|mi|eropereina}}, {{W-|mi|aropereina}}, {{W-|mi|rererangi}}, {{W+|mi|waka rererangi}}, {{W+|mi|wakarere}}
* {{Z|mr}}: {{W-|mr|विमान}}
* Marî:
*: {{Z|mhr}}: {{W-|mhr|кÿртньыгайык}}
* {{Z|hu}}: {{W+|hu|repülőgép}}, {{W+|hu|repülő}}
* {{Z|lus}}: {{W-|lus|thlawhtheihna}}
* {{Z|mwl}}: {{W-|mwl|abion|n}}
* {{Z|mn}}:
*: Kirîlî: {{W+|mn|нисэх онгоц}}, {{W+|mn|онгоц}}, {{W+|mn|нисгэл}}
*: Mongolî: {{W-|mn|ᠨᠢᠰᠬᠦ ᠣᠩᠭᠤᠴᠠ}}, {{W-|mn|ᠣᠩᠭᠤᠴᠠ}}, {{W-|mn|ᠨᠢᠰᠬᠡᠯ}}
* {{Z|mos}}: {{W-|mos|nasaar-sɩlga}}, {{W-|mos|sɩlga}}
* {{Z|nah}}: {{W+|nah|tepoztōtōtl}}, {{W-|nah|tepozpatlanqui}}
* {{Z|nap}}: {{W-|nap|arioplàno|n}}, {{W-|nap|apparècchio|n}}
* {{Z|nv}}: {{W-|nv|chidí naatʼaʼí}}
* {{Z|ne}}: {{W-|ne|विमान}}, {{W+|ne|हवाईजहाज}}, {{W-|ne|प्लेन|tr=plen}}
* {{Z|niu}}: {{W-|niu|vakalele}}
* {{Z|nrf}}: {{W-|nrf|avion|n}}
* {{Z|no}}:
*: {{Z|no}}: {{W+|no|fly|nt}}
*: {{Z|nn}}: {{W-|nn|fly|nt}}
* {{Z|oj}}: {{W-|oj|bemisemagak}}
* {{Z|oc}}: {{W+|oc|avion|n}}
* {{Z|or}}: {{W-|or|ଉଡ଼ାଜାହାଜ}}, {{W+|or|ବିମାନ}}
* {{Z|om}}: {{W-|om|xiyyaara}}
* {{Z|os}}: {{W-|os|хӕдтӕхӕг}}
* {{Z|ota}}: {{W-|ota|طیاره|tr=tayyare}}
* {{Z|ug}}: {{W-|ug|ئايروپىلان}}
* {{Z|uz}}: {{W+|uz|tayyora}}, {{W+|uz|samolyot}}, {{W+|uz|aeroplan}}
* {{Z|pwn}}: {{W-|pwn|hikuki}}
* {{Z|pi}}: {{W-|pi|ākāsayāna|nt}}, {{W-|pi|vehāsayāna|nt}}
* {{Z|ps}}: {{W+|ps|الوتکه|m|tr=alwatëka}}, {{W+|ps|طياره|m|tr=tayāra}}, {{W-|ps|هوايي جهاز}}
* {{Z|pdt}}: {{W-|pdt|Loftschepp|nt}}
* {{Z|pl}}: {{W+|pl|samolot|n}}, {{W+|pl|aeroplan|n}}
* {{Z|pt}}: {{W+|pt|avião|n}}, {{W+|pt|aeroplano|n}}
* {{Z|pa}}: {{W-|pa|ਹਵਾਈ-ਜਹਾਜ਼}}, {{W-|pa|ਜਹਾਜ਼}}
* {{Z|pyu}}: {{W-|pyu|hikuki}}
* {{Z|kk}}: {{W+|kk|ұшақ}}, {{W-|kk|самолет}}, {{W-|kk|аэроплан}}
* {{Z|rm}}: {{W-|rm|aviun|n}}, {{W-|rm|eroplan|n}}
* {{Z|ro}}: {{W+|ro|aeroplan|nt}}, {{W+|ro|avion|nt}}
* {{Z|dru}}: {{W-|dru|ngiapapalay}}
* {{Z|ru}}: {{W+|ru|самолёт|n}}, {{W+|ru|аэропла́н|n}}
* {{Z|sxr}}: {{W-|sxr|saliamiapihlihli}}
* {{Z|xsy}}: {{W-|xsy|kamahayap}}
* {{Z|szy}}: {{W-|szy|hikuki}}, {{W-|szy|babelbel}}
* {{Z|se}}: {{W-|se|girdi}}
* {{Z|smn}}: {{W-|smn|kirdemmaašin}}
* {{Z|sms}}: {{W-|sms|jarplan}}
* {{Z|sm}}: {{W-|sm|vaʻalele}}
* {{Z|sa}}: {{W+|sa|विमान}}, {{W-|sa|वायु-यान}}
* {{Z|ceb}}: {{W-|ceb|eroplano}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|авѝо̄н|n}}, {{W-|sh|зра̏копло̄в|n}}
*: Latînî: {{W+|sh|avìōn|n}}, {{W+|sh|zrȁkoplōv|n}}
* {{Z|sk}}: {{W+|sk|lietadlo|nt}}
* {{Z|sl}}: {{W+|sl|letalo|nt}}, {{W+|sl|avion|n}}
* {{Z|so}}: {{W-|so|diyaarad}}
* Sorbî:
*: {{Z|hsb}}: {{W-|hsb|lětadło|nt}}
* {{Z|ses}}: {{W-|ses|beenehii}}
* {{Z|st}}: {{W+|st|sefofane}}
* {{Z|es}}: {{W+|es|avión|n}}, {{W+|es|aeroplano|n}}
* {{Z|sw}}: {{W+|sw|ndege}}, {{W+|sw|eropleni|c9|c10}}
* {{Z|sv}}: {{W+|sv|flygplan|nt}}, {{W+|sv|flygmaskin|g}}
* {{Z|shn}}: {{W-|shn|လေႇယိၼ်ႇပျၢၼ်ႇ}}, {{W-|shn|ႁိူဝ်းမိၼ်}}
* {{Z|zdj}}: {{W-|zdj|roplani}}, {{W-|zdj|ropulani}}
* {{Z|sn}}: {{W-|sn|ndege}}
* {{Z|tg}}: {{W+|tg|самолёт}}, {{W+|tg|тайёра}}, {{W+|tg|ҳавопаймо}}, {{W-|tg|аэроплан}}
* {{Z|tl}}: {{W+|tl|eroplano}}
* {{Z|ta}}: {{W+|ta|விமானம்}}, {{W+|ta|வானவூர்தி}}
* {{Z|trv}}: {{W-|trv|asu}}, {{W-|trv|skaya}}, {{W-|trv|sapah skiya}}
* {{Z|th}}: {{W+|th|เครื่องบิน}}, {{W+|th|อากาศยาน}}, {{W+|th|เรือบิน}}
* {{Z|te}}: {{W+|te|విమానము}}
* {{Z|crh}}: {{W-|crh|tayare}}, {{W-|crh|uçaq}}
* {{Z|tt}}: {{W+|tt|очкыч}}, {{W-|tt|самолёт}}, {{W-|tt|аэроплан}}
* {{Z|ti}}: {{W-|ti|ነፋሪት}}
* {{Z|tr}}: {{W+|tr|uçak}}, {{W+|tr|tayyare}}
* {{Z|tk}}: {{W-|tk|samolýot}}, {{W-|tk|uçar}}, {{W+|tk|aeroplan}}
* {{Z|bo}}: {{W-|bo|གནམ་གྲུ}}, {{W-|bo|ལྕགས་བྱ}}
* {{Z|tkl}}: {{W-|tkl|vakalele}}
* {{Z|tpi}}: {{W+|tpi|balus}}
* {{Z|to}}: {{W-|to|vakapuna}}
* {{Z|tsu}}: {{W-|tsu|hikoki}}
* {{Z|tum}}: {{W-|tum|ndege}}
* {{Z|tvl}}: {{W-|tvl|vakalele}}
* {{Z|ur}}: {{W-|ur|طَیّارَہ|n|tr=tayyāra}}, {{W-|ur|ہَوائی جَہاز|n|tr=hawāī jahāz}}, {{W-|ur|جَہاز|n|tr=jahāz}}, {{W-|ur|ہَوا پَیما|n|tr=hawā paimā}}, {{W-|ur|وِمان|n|tr=vimān}}
* {{Z|uk}}: {{W+|uk|літа́к|n}}, {{W+|uk|аеропла́н|n}}
* {{Z|vi}}: {{W+|vi|máy bay}}, {{W+|vi|phi cơ}}
* {{Z|vo}}: {{W+|vo|flitöm}}, {{W-|vo|flitömil}}, {{W-|vo|leflitöm}}
* {{Z|vro}}: {{W-|vro|linnuk}}, {{W-|vro|aeroplaan}}
* {{Z|wls}}: {{W-|wls|vakalele}}
* {{Z|war}}: {{W-|war|eroplano}}
* {{Z|cy}}: {{W+|cy|awyren|m}}
* {{Z|km}}: {{W-|km|កប៉ាល់ហោះ}}, {{W-|km|យន្តហោះ}}, {{W-|km|សកុណាយន្ត}}
* {{Z|sah}}: {{W-|sah|самолет}}, {{W-|sah|сөмөлүөт}}, {{W-|sah|көтөр-аал}}
* {{Z|tao}}: {{W-|tao|sikoki}}
* {{Z|yi}}: {{W-|yi|אַעראָפּלאַן|n}}, {{W-|yi|עראָפּלאַן|n}}
* {{Z|yij}}: {{W-|yij|barbarrnyungu}}
* {{Z|yog}}: {{W-|yog|eroplano}}
* {{Z|yoi}}: {{W-|yoi|飛行機|tr=ひぐんき, higunki}}, {{W-|yoi|飛行機|tr=ちこーき, chikouki}}
* {{Z|yo}}: {{W-|yo|ọkọ̀ òfurufú}}
* {{Z|el}}: {{W+|el|αεροπλάνο|nt}}, {{W+|el|αεροσκάφος|nt}}
* {{Z|za}}: {{W-|za|feihgih}}
{{werger-bin}}
:{{werger çavkanî|en|airplane|beş=Ev qismê Wergerê|oldid=75545646}}
== {{ziman|zza}} ==
=== Navdêr ===
{{navdêr|zza|z=}}
# [[balafir]], [[teyare]]<ref>[http://www.kovarabir.com/wp-content/uploads/Ferheng%C3%AA-Dimil%C3%AE-%C3%BB-Kurmanc%C3%AE-B-b.pdf www.kovarabir.com]</ref>
#* {{bêmînak|zza}}
=== Çavkanî ===
{{çavkanî}}
5mquwapsqfgkno2r7kt45lpw7lhpfai
6342826
6342825
2026-08-27T06:33:50Z
Wikihez
7344
/* Etîmolojî */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342826
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA|balafiř}} {{r-ya req}}
=== Navdêr ===
[[Wêne:Airbus A380 blue sky.jpg|thumb|Balafirek]]
{{navdêr|ku|z=m}}
# {{f|ku|pûrizm}} [[alav|Alavên]] pê[[firîn]]ê.
#: {{hevmane|ku|teyare|firoke}}
#* {{J:Hawar:1998:2|sernav=Sînema di Şerên Flandr û Dinkerkê de|nivîskar=Evdirehmanê Rojkî|hj=36|r=874|jêgirtin=Min mizgînî lê dikir, eskerekî belçîkî gote min ko di van '''balafiran''' de carina bimbeyên siwarkirî hene{{...}}}}
#* {{J:Firat Cewerî:Kevoka Spî:1996|jêgirtin={{...}}bilêta xwe ya '''balafirê''' ji ser masê hilanî, xiste bêrîka xwe{{...}}}}
#* {{J:Hawar:1:1998|sernav=Armanc, Awayê Xebat û Nivîsandina Hawarê|hejmar=1|r=23|jêgirtin=Herweqî xelqê{{j-wesf|beriya guhartina herfên Q-K}} Geliyê Goyan, berî çardeh salan, gava tiyare dîtin, tavil bizarê xwe '''balafir''' nav lê qirin.}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|بالافڕ}}
* {{ku-kr|балафьр'}}
==== Formên alternatîv ====
* {{g|ku|balefir}}
==== Jê ====
* {{g|ku|balafirgeh}}
* {{g|ku|balafirvan}}
* {{g|ku|balafirxane}}
==== Etîmolojî ====
{{neo|ku}} ji {{qertaf|ku|bala<t:jor>|fir<crz:rehê dema niha ji [[firîn]]>|hrf=ya ku li jor difire}}.
Li gorî {{w|Celadet Alî Bedirxan}} cara ewil di 1919an de di nav kurdên Geliyê Goban ({{w|Geliyê Goyan}}){{eref|{{J:Hawar:1:1998|sernav=Armanc, Awayê Xebat û Nivîsandina Hawarê|hejmar=1|r=23|jêgirtin=Herweqî xelqê Geliyê Goyan, berî çardeh salan, gava tiyare dîtin, tavil bizarê xwe balafir nav lê qirin.|wekçavkanî=1}}}} de li şûna {{q|ku|teyare}} hatiye çêkirin.{{eref|{{kitêb|tr|sal=1933|nivîskar=Celadet Alî Bedirxan|amadekar=Nurî Dersîmî|sernav=Mümtaz Mütefekkir CELADET ÂLİ BEDİRHAN'ın (Türkiye Reisicumhuru Gazi Mustafa Kemal Paşa Hazretlerine) Yazdığı Açık MEKTUP|sala weşandinê=1977|r=29|jêgirtin=1919 senesinde Geliye Goban Kürtleri ilk defa teyyareyi gördükleri zaman ona isim vermekte tereddüt etmemişlerdi. Teyyareye derhal BALAFIR demişlerdi.{{...}}Adeta aêroplane'nin bir tercümesi. Şu fark ile ki havada yerine yukarıda uçan, BALA yukarı demektir, FIR ise uçmak manasında olan FIRİN mastarının maddei asliyesidir.}}}}
{{çavkanî-etîm}}
==== Bide ber ====
* {{g|ku|firok}}
* {{g|ku|helîkopter}}
* {{g|ku|balafira rewiyan}}
==== Werger ====
{{werger-ser}}
* {{Z|ab}}: {{W-|ab|аероплан}}
* {{Z|af}}: {{W+|af|vliegtuig}}
* {{Z|ak}}: {{W-|ak|adupire}}, {{W-|ak|wiemhyɛn}}
* {{Z|akz}}: {{W-|akz|piɬɬawakáyka}}
* {{Z|sq}}: {{W+|sq|aeroplan|n}}
* {{Z|ale}}: {{W-|ale|igax̂tax̂}}
* {{Z|de}}: {{W+|de|Flugzeug|nt}}
* {{Z|am}}: {{W-|am|አይሮፕላን}}
* {{Z|ami}}: {{W-|ami|hikoki}}
* {{Z|aii}}: {{W-|aii|ܛܲܝܵܣܬܵܐ|m|tr=ṭāyasta}}
* {{Z|as}}: {{W-|as|আকাশীযান}}
* {{Z|ast}}: {{W+|ast|avión|n}}
* {{Z|tay}}: {{W-|tay|hikoki'}}
* {{Z|ay}}: {{W-|ay|latajamach'iwa}}
* {{Z|az}}: {{W+|az|təyyarə}}, {{W-|az|uçaq}}
* {{Z|bm}}: {{W-|bm|sannakurun}}
* {{Z|eu}}: {{W+|eu|hegazkin}}
* {{Z|ba}}: {{W-|ba|самолёт}}
* {{Z|be}}: {{W+|be|самалёт|n}}, {{W-|be|аэрапла́н|n}}
* {{Z|bn}}: {{W+|bn|খপোত}}, {{W+|bn|উড়োজাহাজ}}, {{W+|bn|বিমান}}, {{W+|bn|আকাশযান}}
* {{Z|bcl}}: {{W-|bcl|eroplano}}
* {{Z|bol}}: {{W-|bol|jirginsama}}
* {{Z|br}}: {{W+|br|karr-nij|n}}, {{W-|br|nijerez|m}}
* {{Z|bg}}: {{W+|bg|самоле́т|n}}, {{W-|bg|авио́н|n}}, {{W+|bg|аеропла́н|n}}
* {{Z|bnn}}: {{W-|bnn|kusbabai}}
* {{Z|my}}: {{W+|my|လေယာဉ်ပျံ}}
* {{Z|ce}}: {{W-|ce|кема}}, {{W-|ce|хӏаваан кема}}
* {{Z|cs}}: {{W+|cs|letoun|n}}, {{W+|cs|letadlo|nt}}
* {{Z|chr}}: {{W-|chr|ᏥᏳ ᎦᏃᎯᎵᏙᎯ}}
* {{Z|chy}}: {{W-|chy|ame'hahtȯtse}}
* {{Z|ny}}: {{W-|ny|ndege}}
* {{Z|cic}}: {{W-|cic|piini' wakaa'}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|飛機}}
*: {{Z|dng}}: {{W-|dng|фиҗи}}
*: {{Z|gan}}: {{W-|gan|飛機|tr=fi1 ji1}}
*: {{Z|hak}}: {{W-|hak|飛行機|tr=fî-hàng-kî, pî-hàng-kî, fî-yàng-kî, pî-yàng-kî}}, {{W-|hak|飛機|tr=fî-kî}}
*: {{Z|cjy}}: {{W-|cjy|飛機|tr=fei1 ji1}}
*: {{Z|cmn}}: {{W+|cmn|飛機}}, {{W+|cmn|飛行機}}
*: {{Z|mnp}}: {{W-|mnp|飛機|tr=hí-gí}}
*: {{Z|cdo}}: {{W-|cdo|飛機|tr=hĭ-*gĭ}}, {{W-|cdo|飛船|tr=buŏi-sùng}}
*: {{Z|nan}}: {{W+|nan|飛機|tr=hui-ki}}, {{W+|nan|飛行機|tr=hui-hêng-ki, poe-hêng-ki, pe-hêng-ki, hue-lêng-ki, hui-lêng-ki, poe-lêng-ki, hoe-nn̄g-ki}}, {{W+|nan|飛船|tr=poe-chûn, pe-chûn, hui-chûn}}
*: {{Z|wuu}}: {{W-|wuu|飛機}}
*: {{Z|hsn}}: {{W-|hsn|飛機|tr=fei1 ji1}}
* {{Z|ckt}}: {{W-|ckt|риӈэнэӈ|tr=riṇėnėṇ}}
* {{Z|da}}: {{W+|da|flyvemaskine|g}}, {{W+|da|fly|nt}}
* {{Z|dwu}}: {{W-|dwu|ḏikarr}}
* {{Z|ovd}}: {{W-|ovd|flygmasin|n}}, {{W-|ovd|fliuogmasin|n}}, {{W-|ovd|flygplan|nt}}
* {{Z|id}}: {{W+|id|pesawat}}, {{W+|id|pesawat terbang}}, {{W+|id|kapal terbang}}
* {{Z|ar}}: {{W+|ar|طَائِرَة|m}}, {{W+|ar|طَيَّارَة|m}}
*: {{Z|arz}}: {{W-|arz|طيارة|m|tr=ṭayyāra}}
* {{Z|hy}}: {{W+|hy|օդանավ}}, {{W+|hy|ինքնաթիռ}}, {{W+|hy|աերոպլան}}
* {{Z|eo}}: {{W-|eo|avio}}, {{W-|eo|aviadilo}}, {{W-|eo|flugmaŝino}}
* {{Z|et}}: {{W+|et|lennuk}}
* {{Z|gur}}: {{W-|gur|alupele}}
* {{Z|fa}}: {{W+|fa|هواپیما|tr=havâpeymâ}}, {{W+|fa|طیاره|tr=tayyâre}}
* {{Z|fo}}: {{W-|fo|flogfar|nt}}
* {{Z|fi}}: {{W+|fi|lentokone}}
* {{Z|fr}}: {{W+|fr|avion|n}}, {{W+|fr|aéroplane|n}}
* {{Z|fy}}: {{W-|fy|fleantúch|nt}}, {{W-|fy|fleanmasine}}
* {{Z|ff}}:
*: Adlamî: {{W-|ff|𞤤𞤢𞥄𞤲𞤢-𞤱𞤭𞥅𞤪𞤮𞥅𞤸𞤢}}, {{W-|ff|𞤢𞤪𞤢𞤨𞤵𞤤𞤫𞤤}}, {{W-|ff|𞤢𞤱𞤭𞤴𞤮𞤲}}
*: Latînî: {{W-|ff|laana-wiirooha}}, {{W-|ff|arapulel}}, {{W-|ff|awiyon}}
* {{Z|gd}}: {{W-|gd|itealan|n}}
* {{Z|gl}}: {{W+|gl|avión|n}}, {{W+|gl|aeroplano|n}}
* {{Z|gu}}: {{W-|gu|વિમાન}}
* {{Z|ka}}: {{W+|ka|თვითმფრინავი}}, {{W-|ka|აეროპლანი}}
* {{Z|gn}}: {{W-|gn|kurusu veve}}
* {{Z|haw}}: {{W-|haw|mokulele}}, {{W-|haw|mokuea}}
* {{Z|ha}}: {{W+|ha|jirgin sama}}
* {{Z|hi}}: {{W+|hi|विमान|n}}, {{W-|hi|हवाई जहाज़|n}}, {{W-|hi|वायु-यान|n}}
* {{Z|mww}}: {{W-|mww|dav hlau}}
* {{Z|nl}}: {{W+|nl|vliegtuig|nt}}
* {{Z|he}}: {{W+|he|מָטוֹס|n|tr=matós}}, {{W+|he|אֲוִירוֹן|nt|tr=avirón}}
* {{Z|io}}: {{W+|io|aeroplano}}
* {{Z|en}}: {{W+|en|airplane}}, {{W+|en|aeroplane}}
* {{Z|izh}}: {{W-|izh|samoljotta}}, {{W-|izh|aeroplana}}
* {{Z|ia}}: {{W-|ia|avion}}, {{W-|ia|aeroplano}}
* {{Z|iu}}: {{W-|iu|ᑎᖕᒥᓲᖅ}}
* {{Z|ik}}: {{W-|ik|tiŋŋun}}
* {{Z|ga}}: {{W+|ga|eitleán|n}}
* {{Z|it}}: {{W+|it|aereo|n}}, {{W+|it|aeroplano|n}}, {{W+|it|apparecchio|n}}, {{W+|it|aeromobile|m}}
* {{Z|is}}: {{W+|is|flugvél|m}}
* {{Z|ja}}: {{W+|ja|飛行機|tr=ひこうき, hikōki}}, {{W+|ja|航空機|tr=こうくうき, kōkūki}}
* {{Z|jv}}: {{W-|jv|ꦩꦺꦴꦤ꧀ꦠꦺꦴꦂꦩꦧꦸꦂ|tr=montor mabur}}
* {{Z|kl}}: {{W-|kl|timmisartoq}}
* {{Z|xnb}}: {{W-|xnb|hikoki}}
* {{Z|kn}}: {{W+|kn|ವಿಮಾನ}}, {{W-|kn|ಏರೋಪ್ಲೇನ್}}, {{W+|kn|ಏರೋಪ್ಲೇನು}}, {{W+|kn|ಗಾಳಿತೇರು}}
* {{Z|ca}}: {{W+|ca|avió|n}}
* {{Z|ckv}}: {{W-|ckv|hikuki}}
* {{Z|qu}}: {{W-|qu|antanka}}, {{W-|qu|lata pisqu}}, {{W-|qu|maraq}}
* {{Z|ks}}: {{W-|ks|پلین}}
* {{Z|ky}}: {{W+|ky|самолёт}}, {{W+|ky|учак}}, {{W+|ky|аэроплан}}
* {{Z|kg}}: {{W-|kg|ndèke}}
* {{Z|si}}: {{W-|si|ගුවන්යානය}}, {{W-|si|අහස්යානය}}
* {{Z|cku}}: {{W-|cku|piththawaika}}
* {{Z|ko}}: {{W+|ko|비행기}}, {{W+|ko|항공기}}
* {{Z|kw}}: {{W-|kw|jynn ebron|n}}
* {{Z|mfe}}: {{W-|mfe|avyon}}
* {{Z|crs}}: {{W-|crs|avyon}}
* {{Z|crl}}: {{W-|crl|ᑳᐱᒥᐦᔮᒥᑭᐦᒡ}}, {{W-|crl|ᑳᐱᐹᒥᐦᔮᒥᑭᐦᒡ}}
* {{Z|crj}}: {{W-|crj|ᑳᐱᒥᐦᔮᒪᑲᐦᒡ}}
* {{Z|lbe}}: {{W-|lbe|самолет}}, {{W-|lbe|айрипӏалан}}
* {{Z|lkt}}: {{W-|lkt|kiŋyékhiyapi}}
* {{Z|la}}: {{W-|la|aeroplanum|nt}}
* {{Z|lv}}: {{W-|lv|lidmašīna|m}}, {{W-|lv|gaisa kuģis|m}}
* {{Z|lo}}: {{W-|lo|ອາກາດຍານ}}, {{W-|lo|ເຄື່ອງບິນ}}, {{W-|lo|ເຮືອບິນ}}, {{W+|lo|ຍົນ}}
* {{Z|ln}}: {{W-|ln|mpɛ́pɔ}}
* {{Z|lt}}: {{W+|lt|lėktuvas|n}}, {{W-|lt|aeroplanas|n}}
* {{Z|mk}}: {{W-|mk|авио́н|n}}
* {{Z|mg}}: {{W+|mg|fiaramanidina}}
* {{Z|ml}}: {{W+|ml|വിമാനം}}
* {{Z|ms}}: {{W+|ms|kapal terbang}}
* {{Z|mt}}: {{W-|mt|ajruplan|n}}
* {{Z|mnc}}: {{W-|mnc|ᡩᡝᠶᡝᡨᡠᠨ}}
* {{Z|gv}}: {{W-|gv|etlan|n}}, {{W-|gv|greie etlee|n}}
* {{Z|mns-nor}}: {{W-|mns-nor|товлыӈхап}}
* {{Z|mi}}: {{W+|mi|manurere}}, {{W-|mi|eropereina}}, {{W-|mi|aropereina}}, {{W-|mi|rererangi}}, {{W+|mi|waka rererangi}}, {{W+|mi|wakarere}}
* {{Z|mr}}: {{W-|mr|विमान}}
* Marî:
*: {{Z|mhr}}: {{W-|mhr|кÿртньыгайык}}
* {{Z|hu}}: {{W+|hu|repülőgép}}, {{W+|hu|repülő}}
* {{Z|lus}}: {{W-|lus|thlawhtheihna}}
* {{Z|mwl}}: {{W-|mwl|abion|n}}
* {{Z|mn}}:
*: Kirîlî: {{W+|mn|нисэх онгоц}}, {{W+|mn|онгоц}}, {{W+|mn|нисгэл}}
*: Mongolî: {{W-|mn|ᠨᠢᠰᠬᠦ ᠣᠩᠭᠤᠴᠠ}}, {{W-|mn|ᠣᠩᠭᠤᠴᠠ}}, {{W-|mn|ᠨᠢᠰᠬᠡᠯ}}
* {{Z|mos}}: {{W-|mos|nasaar-sɩlga}}, {{W-|mos|sɩlga}}
* {{Z|nah}}: {{W+|nah|tepoztōtōtl}}, {{W-|nah|tepozpatlanqui}}
* {{Z|nap}}: {{W-|nap|arioplàno|n}}, {{W-|nap|apparècchio|n}}
* {{Z|nv}}: {{W-|nv|chidí naatʼaʼí}}
* {{Z|ne}}: {{W-|ne|विमान}}, {{W+|ne|हवाईजहाज}}, {{W-|ne|प्लेन|tr=plen}}
* {{Z|niu}}: {{W-|niu|vakalele}}
* {{Z|nrf}}: {{W-|nrf|avion|n}}
* {{Z|no}}:
*: {{Z|no}}: {{W+|no|fly|nt}}
*: {{Z|nn}}: {{W-|nn|fly|nt}}
* {{Z|oj}}: {{W-|oj|bemisemagak}}
* {{Z|oc}}: {{W+|oc|avion|n}}
* {{Z|or}}: {{W-|or|ଉଡ଼ାଜାହାଜ}}, {{W+|or|ବିମାନ}}
* {{Z|om}}: {{W-|om|xiyyaara}}
* {{Z|os}}: {{W-|os|хӕдтӕхӕг}}
* {{Z|ota}}: {{W-|ota|طیاره|tr=tayyare}}
* {{Z|ug}}: {{W-|ug|ئايروپىلان}}
* {{Z|uz}}: {{W+|uz|tayyora}}, {{W+|uz|samolyot}}, {{W+|uz|aeroplan}}
* {{Z|pwn}}: {{W-|pwn|hikuki}}
* {{Z|pi}}: {{W-|pi|ākāsayāna|nt}}, {{W-|pi|vehāsayāna|nt}}
* {{Z|ps}}: {{W+|ps|الوتکه|m|tr=alwatëka}}, {{W+|ps|طياره|m|tr=tayāra}}, {{W-|ps|هوايي جهاز}}
* {{Z|pdt}}: {{W-|pdt|Loftschepp|nt}}
* {{Z|pl}}: {{W+|pl|samolot|n}}, {{W+|pl|aeroplan|n}}
* {{Z|pt}}: {{W+|pt|avião|n}}, {{W+|pt|aeroplano|n}}
* {{Z|pa}}: {{W-|pa|ਹਵਾਈ-ਜਹਾਜ਼}}, {{W-|pa|ਜਹਾਜ਼}}
* {{Z|pyu}}: {{W-|pyu|hikuki}}
* {{Z|kk}}: {{W+|kk|ұшақ}}, {{W-|kk|самолет}}, {{W-|kk|аэроплан}}
* {{Z|rm}}: {{W-|rm|aviun|n}}, {{W-|rm|eroplan|n}}
* {{Z|ro}}: {{W+|ro|aeroplan|nt}}, {{W+|ro|avion|nt}}
* {{Z|dru}}: {{W-|dru|ngiapapalay}}
* {{Z|ru}}: {{W+|ru|самолёт|n}}, {{W+|ru|аэропла́н|n}}
* {{Z|sxr}}: {{W-|sxr|saliamiapihlihli}}
* {{Z|xsy}}: {{W-|xsy|kamahayap}}
* {{Z|szy}}: {{W-|szy|hikuki}}, {{W-|szy|babelbel}}
* {{Z|se}}: {{W-|se|girdi}}
* {{Z|smn}}: {{W-|smn|kirdemmaašin}}
* {{Z|sms}}: {{W-|sms|jarplan}}
* {{Z|sm}}: {{W-|sm|vaʻalele}}
* {{Z|sa}}: {{W+|sa|विमान}}, {{W-|sa|वायु-यान}}
* {{Z|ceb}}: {{W-|ceb|eroplano}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|авѝо̄н|n}}, {{W-|sh|зра̏копло̄в|n}}
*: Latînî: {{W+|sh|avìōn|n}}, {{W+|sh|zrȁkoplōv|n}}
* {{Z|sk}}: {{W+|sk|lietadlo|nt}}
* {{Z|sl}}: {{W+|sl|letalo|nt}}, {{W+|sl|avion|n}}
* {{Z|so}}: {{W-|so|diyaarad}}
* Sorbî:
*: {{Z|hsb}}: {{W-|hsb|lětadło|nt}}
* {{Z|ses}}: {{W-|ses|beenehii}}
* {{Z|st}}: {{W+|st|sefofane}}
* {{Z|es}}: {{W+|es|avión|n}}, {{W+|es|aeroplano|n}}
* {{Z|sw}}: {{W+|sw|ndege}}, {{W+|sw|eropleni|c9|c10}}
* {{Z|sv}}: {{W+|sv|flygplan|nt}}, {{W+|sv|flygmaskin|g}}
* {{Z|shn}}: {{W-|shn|လေႇယိၼ်ႇပျၢၼ်ႇ}}, {{W-|shn|ႁိူဝ်းမိၼ်}}
* {{Z|zdj}}: {{W-|zdj|roplani}}, {{W-|zdj|ropulani}}
* {{Z|sn}}: {{W-|sn|ndege}}
* {{Z|tg}}: {{W+|tg|самолёт}}, {{W+|tg|тайёра}}, {{W+|tg|ҳавопаймо}}, {{W-|tg|аэроплан}}
* {{Z|tl}}: {{W+|tl|eroplano}}
* {{Z|ta}}: {{W+|ta|விமானம்}}, {{W+|ta|வானவூர்தி}}
* {{Z|trv}}: {{W-|trv|asu}}, {{W-|trv|skaya}}, {{W-|trv|sapah skiya}}
* {{Z|th}}: {{W+|th|เครื่องบิน}}, {{W+|th|อากาศยาน}}, {{W+|th|เรือบิน}}
* {{Z|te}}: {{W+|te|విమానము}}
* {{Z|crh}}: {{W-|crh|tayare}}, {{W-|crh|uçaq}}
* {{Z|tt}}: {{W+|tt|очкыч}}, {{W-|tt|самолёт}}, {{W-|tt|аэроплан}}
* {{Z|ti}}: {{W-|ti|ነፋሪት}}
* {{Z|tr}}: {{W+|tr|uçak}}, {{W+|tr|tayyare}}
* {{Z|tk}}: {{W-|tk|samolýot}}, {{W-|tk|uçar}}, {{W+|tk|aeroplan}}
* {{Z|bo}}: {{W-|bo|གནམ་གྲུ}}, {{W-|bo|ལྕགས་བྱ}}
* {{Z|tkl}}: {{W-|tkl|vakalele}}
* {{Z|tpi}}: {{W+|tpi|balus}}
* {{Z|to}}: {{W-|to|vakapuna}}
* {{Z|tsu}}: {{W-|tsu|hikoki}}
* {{Z|tum}}: {{W-|tum|ndege}}
* {{Z|tvl}}: {{W-|tvl|vakalele}}
* {{Z|ur}}: {{W-|ur|طَیّارَہ|n|tr=tayyāra}}, {{W-|ur|ہَوائی جَہاز|n|tr=hawāī jahāz}}, {{W-|ur|جَہاز|n|tr=jahāz}}, {{W-|ur|ہَوا پَیما|n|tr=hawā paimā}}, {{W-|ur|وِمان|n|tr=vimān}}
* {{Z|uk}}: {{W+|uk|літа́к|n}}, {{W+|uk|аеропла́н|n}}
* {{Z|vi}}: {{W+|vi|máy bay}}, {{W+|vi|phi cơ}}
* {{Z|vo}}: {{W+|vo|flitöm}}, {{W-|vo|flitömil}}, {{W-|vo|leflitöm}}
* {{Z|vro}}: {{W-|vro|linnuk}}, {{W-|vro|aeroplaan}}
* {{Z|wls}}: {{W-|wls|vakalele}}
* {{Z|war}}: {{W-|war|eroplano}}
* {{Z|cy}}: {{W+|cy|awyren|m}}
* {{Z|km}}: {{W-|km|កប៉ាល់ហោះ}}, {{W-|km|យន្តហោះ}}, {{W-|km|សកុណាយន្ត}}
* {{Z|sah}}: {{W-|sah|самолет}}, {{W-|sah|сөмөлүөт}}, {{W-|sah|көтөр-аал}}
* {{Z|tao}}: {{W-|tao|sikoki}}
* {{Z|yi}}: {{W-|yi|אַעראָפּלאַן|n}}, {{W-|yi|עראָפּלאַן|n}}
* {{Z|yij}}: {{W-|yij|barbarrnyungu}}
* {{Z|yog}}: {{W-|yog|eroplano}}
* {{Z|yoi}}: {{W-|yoi|飛行機|tr=ひぐんき, higunki}}, {{W-|yoi|飛行機|tr=ちこーき, chikouki}}
* {{Z|yo}}: {{W-|yo|ọkọ̀ òfurufú}}
* {{Z|el}}: {{W+|el|αεροπλάνο|nt}}, {{W+|el|αεροσκάφος|nt}}
* {{Z|za}}: {{W-|za|feihgih}}
{{werger-bin}}
:{{werger çavkanî|en|airplane|beş=Ev qismê Wergerê|oldid=75545646}}
== {{ziman|zza}} ==
=== Navdêr ===
{{navdêr|zza|z=}}
# [[balafir]], [[teyare]]<ref>[http://www.kovarabir.com/wp-content/uploads/Ferheng%C3%AA-Dimil%C3%AE-%C3%BB-Kurmanc%C3%AE-B-b.pdf www.kovarabir.com]</ref>
#* {{bêmînak|zza}}
=== Çavkanî ===
{{çavkanî}}
200i3lzykbwg1mo58cvvxjrnoykmoz9
6342840
6342826
2026-08-27T07:08:21Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342840
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA|balafiř}} {{r-ya req}}
=== Navdêr ===
[[Wêne:Airbus A380 blue sky.jpg|thumb|Balafirek]]
{{navdêr|ku|z=m}}
# {{f|ku|pûrizm}} [[alav|Alavên]] pê[[firîn]]ê.
#: {{hevmane|ku|teyare|firoke}}
#* {{J:Hawar:1:1998|sernav=Armanc, Awayê Xebat û Nivîsandina Hawarê|hejmar=1|r=23|jêgirtin=Herweqî xelqê{{j-wesf|beriya guhartina herfên Q-K}} Geliyê Goyan, berî çardeh salan, gava tiyare dîtin, tavil bizarê xwe '''balafir''' nav lê qirin.}}
#* {{J:Hawar:1998:2|sernav=Sînema di Şerên Flandr û Dinkerkê de|nivîskar=Evdirehmanê Rojkî|hj=36|r=874|jêgirtin=Min mizgînî lê dikir, eskerekî belçîkî gote min ko di van '''balafiran''' de carina bimbeyên siwarkirî hene{{...}}}}
#* {{J:Firat Cewerî:Kevoka Spî:1996|jêgirtin={{...}}bilêta xwe ya '''balafirê''' ji ser masê hilanî, xiste bêrîka xwe{{...}}}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|بالافڕ}}
* {{ku-kr|балафьр'}}
==== Formên alternatîv ====
* {{g|ku|balefir}}
==== Jê ====
* {{g|ku|balafirgeh}}
* {{g|ku|balafirvan}}
* {{g|ku|balafirxane}}
==== Etîmolojî ====
{{neo|ku}} ji {{qertaf|ku|bala<t:jor>|fir<crz:rehê dema niha ji [[firîn]]>|hrf=ya ku li jor difire}}.
Li gorî {{w|Celadet Alî Bedirxan}} cara ewil di 1919an de di nav kurdên Geliyê Goban ({{w|Geliyê Goyan}}){{eref|{{J:Hawar:1:1998|sernav=Armanc, Awayê Xebat û Nivîsandina Hawarê|hejmar=1|r=23|jêgirtin=Herweqî xelqê Geliyê Goyan, berî çardeh salan, gava tiyare dîtin, tavil bizarê xwe balafir nav lê qirin.|wekçavkanî=1}}}} de li şûna {{q|ku|teyare}} hatiye çêkirin.{{eref|{{kitêb|tr|sal=1933|nivîskar=Celadet Alî Bedirxan|amadekar=Nurî Dersîmî|sernav=Mümtaz Mütefekkir CELADET ÂLİ BEDİRHAN'ın (Türkiye Reisicumhuru Gazi Mustafa Kemal Paşa Hazretlerine) Yazdığı Açık MEKTUP|sala weşandinê=1977|r=29|jêgirtin=1919 senesinde Geliye Goban Kürtleri ilk defa teyyareyi gördükleri zaman ona isim vermekte tereddüt etmemişlerdi. Teyyareye derhal BALAFIR demişlerdi.{{...}}Adeta aêroplane'nin bir tercümesi. Şu fark ile ki havada yerine yukarıda uçan, BALA yukarı demektir, FIR ise uçmak manasında olan FIRİN mastarının maddei asliyesidir.}}}}
{{çavkanî-etîm}}
==== Bide ber ====
* {{g|ku|firok}}
* {{g|ku|helîkopter}}
* {{g|ku|balafira rewiyan}}
==== Werger ====
{{werger-ser}}
* {{Z|ab}}: {{W-|ab|аероплан}}
* {{Z|af}}: {{W+|af|vliegtuig}}
* {{Z|ak}}: {{W-|ak|adupire}}, {{W-|ak|wiemhyɛn}}
* {{Z|akz}}: {{W-|akz|piɬɬawakáyka}}
* {{Z|sq}}: {{W+|sq|aeroplan|n}}
* {{Z|ale}}: {{W-|ale|igax̂tax̂}}
* {{Z|de}}: {{W+|de|Flugzeug|nt}}
* {{Z|am}}: {{W-|am|አይሮፕላን}}
* {{Z|ami}}: {{W-|ami|hikoki}}
* {{Z|aii}}: {{W-|aii|ܛܲܝܵܣܬܵܐ|m|tr=ṭāyasta}}
* {{Z|as}}: {{W-|as|আকাশীযান}}
* {{Z|ast}}: {{W+|ast|avión|n}}
* {{Z|tay}}: {{W-|tay|hikoki'}}
* {{Z|ay}}: {{W-|ay|latajamach'iwa}}
* {{Z|az}}: {{W+|az|təyyarə}}, {{W-|az|uçaq}}
* {{Z|bm}}: {{W-|bm|sannakurun}}
* {{Z|eu}}: {{W+|eu|hegazkin}}
* {{Z|ba}}: {{W-|ba|самолёт}}
* {{Z|be}}: {{W+|be|самалёт|n}}, {{W-|be|аэрапла́н|n}}
* {{Z|bn}}: {{W+|bn|খপোত}}, {{W+|bn|উড়োজাহাজ}}, {{W+|bn|বিমান}}, {{W+|bn|আকাশযান}}
* {{Z|bcl}}: {{W-|bcl|eroplano}}
* {{Z|bol}}: {{W-|bol|jirginsama}}
* {{Z|br}}: {{W+|br|karr-nij|n}}, {{W-|br|nijerez|m}}
* {{Z|bg}}: {{W+|bg|самоле́т|n}}, {{W-|bg|авио́н|n}}, {{W+|bg|аеропла́н|n}}
* {{Z|bnn}}: {{W-|bnn|kusbabai}}
* {{Z|my}}: {{W+|my|လေယာဉ်ပျံ}}
* {{Z|ce}}: {{W-|ce|кема}}, {{W-|ce|хӏаваан кема}}
* {{Z|cs}}: {{W+|cs|letoun|n}}, {{W+|cs|letadlo|nt}}
* {{Z|chr}}: {{W-|chr|ᏥᏳ ᎦᏃᎯᎵᏙᎯ}}
* {{Z|chy}}: {{W-|chy|ame'hahtȯtse}}
* {{Z|ny}}: {{W-|ny|ndege}}
* {{Z|cic}}: {{W-|cic|piini' wakaa'}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|飛機}}
*: {{Z|dng}}: {{W-|dng|фиҗи}}
*: {{Z|gan}}: {{W-|gan|飛機|tr=fi1 ji1}}
*: {{Z|hak}}: {{W-|hak|飛行機|tr=fî-hàng-kî, pî-hàng-kî, fî-yàng-kî, pî-yàng-kî}}, {{W-|hak|飛機|tr=fî-kî}}
*: {{Z|cjy}}: {{W-|cjy|飛機|tr=fei1 ji1}}
*: {{Z|cmn}}: {{W+|cmn|飛機}}, {{W+|cmn|飛行機}}
*: {{Z|mnp}}: {{W-|mnp|飛機|tr=hí-gí}}
*: {{Z|cdo}}: {{W-|cdo|飛機|tr=hĭ-*gĭ}}, {{W-|cdo|飛船|tr=buŏi-sùng}}
*: {{Z|nan}}: {{W+|nan|飛機|tr=hui-ki}}, {{W+|nan|飛行機|tr=hui-hêng-ki, poe-hêng-ki, pe-hêng-ki, hue-lêng-ki, hui-lêng-ki, poe-lêng-ki, hoe-nn̄g-ki}}, {{W+|nan|飛船|tr=poe-chûn, pe-chûn, hui-chûn}}
*: {{Z|wuu}}: {{W-|wuu|飛機}}
*: {{Z|hsn}}: {{W-|hsn|飛機|tr=fei1 ji1}}
* {{Z|ckt}}: {{W-|ckt|риӈэнэӈ|tr=riṇėnėṇ}}
* {{Z|da}}: {{W+|da|flyvemaskine|g}}, {{W+|da|fly|nt}}
* {{Z|dwu}}: {{W-|dwu|ḏikarr}}
* {{Z|ovd}}: {{W-|ovd|flygmasin|n}}, {{W-|ovd|fliuogmasin|n}}, {{W-|ovd|flygplan|nt}}
* {{Z|id}}: {{W+|id|pesawat}}, {{W+|id|pesawat terbang}}, {{W+|id|kapal terbang}}
* {{Z|ar}}: {{W+|ar|طَائِرَة|m}}, {{W+|ar|طَيَّارَة|m}}
*: {{Z|arz}}: {{W-|arz|طيارة|m|tr=ṭayyāra}}
* {{Z|hy}}: {{W+|hy|օդանավ}}, {{W+|hy|ինքնաթիռ}}, {{W+|hy|աերոպլան}}
* {{Z|eo}}: {{W-|eo|avio}}, {{W-|eo|aviadilo}}, {{W-|eo|flugmaŝino}}
* {{Z|et}}: {{W+|et|lennuk}}
* {{Z|gur}}: {{W-|gur|alupele}}
* {{Z|fa}}: {{W+|fa|هواپیما|tr=havâpeymâ}}, {{W+|fa|طیاره|tr=tayyâre}}
* {{Z|fo}}: {{W-|fo|flogfar|nt}}
* {{Z|fi}}: {{W+|fi|lentokone}}
* {{Z|fr}}: {{W+|fr|avion|n}}, {{W+|fr|aéroplane|n}}
* {{Z|fy}}: {{W-|fy|fleantúch|nt}}, {{W-|fy|fleanmasine}}
* {{Z|ff}}:
*: Adlamî: {{W-|ff|𞤤𞤢𞥄𞤲𞤢-𞤱𞤭𞥅𞤪𞤮𞥅𞤸𞤢}}, {{W-|ff|𞤢𞤪𞤢𞤨𞤵𞤤𞤫𞤤}}, {{W-|ff|𞤢𞤱𞤭𞤴𞤮𞤲}}
*: Latînî: {{W-|ff|laana-wiirooha}}, {{W-|ff|arapulel}}, {{W-|ff|awiyon}}
* {{Z|gd}}: {{W-|gd|itealan|n}}
* {{Z|gl}}: {{W+|gl|avión|n}}, {{W+|gl|aeroplano|n}}
* {{Z|gu}}: {{W-|gu|વિમાન}}
* {{Z|ka}}: {{W+|ka|თვითმფრინავი}}, {{W-|ka|აეროპლანი}}
* {{Z|gn}}: {{W-|gn|kurusu veve}}
* {{Z|haw}}: {{W-|haw|mokulele}}, {{W-|haw|mokuea}}
* {{Z|ha}}: {{W+|ha|jirgin sama}}
* {{Z|hi}}: {{W+|hi|विमान|n}}, {{W-|hi|हवाई जहाज़|n}}, {{W-|hi|वायु-यान|n}}
* {{Z|mww}}: {{W-|mww|dav hlau}}
* {{Z|nl}}: {{W+|nl|vliegtuig|nt}}
* {{Z|he}}: {{W+|he|מָטוֹס|n|tr=matós}}, {{W+|he|אֲוִירוֹן|nt|tr=avirón}}
* {{Z|io}}: {{W+|io|aeroplano}}
* {{Z|en}}: {{W+|en|airplane}}, {{W+|en|aeroplane}}
* {{Z|izh}}: {{W-|izh|samoljotta}}, {{W-|izh|aeroplana}}
* {{Z|ia}}: {{W-|ia|avion}}, {{W-|ia|aeroplano}}
* {{Z|iu}}: {{W-|iu|ᑎᖕᒥᓲᖅ}}
* {{Z|ik}}: {{W-|ik|tiŋŋun}}
* {{Z|ga}}: {{W+|ga|eitleán|n}}
* {{Z|it}}: {{W+|it|aereo|n}}, {{W+|it|aeroplano|n}}, {{W+|it|apparecchio|n}}, {{W+|it|aeromobile|m}}
* {{Z|is}}: {{W+|is|flugvél|m}}
* {{Z|ja}}: {{W+|ja|飛行機|tr=ひこうき, hikōki}}, {{W+|ja|航空機|tr=こうくうき, kōkūki}}
* {{Z|jv}}: {{W-|jv|ꦩꦺꦴꦤ꧀ꦠꦺꦴꦂꦩꦧꦸꦂ|tr=montor mabur}}
* {{Z|kl}}: {{W-|kl|timmisartoq}}
* {{Z|xnb}}: {{W-|xnb|hikoki}}
* {{Z|kn}}: {{W+|kn|ವಿಮಾನ}}, {{W-|kn|ಏರೋಪ್ಲೇನ್}}, {{W+|kn|ಏರೋಪ್ಲೇನು}}, {{W+|kn|ಗಾಳಿತೇರು}}
* {{Z|ca}}: {{W+|ca|avió|n}}
* {{Z|ckv}}: {{W-|ckv|hikuki}}
* {{Z|qu}}: {{W-|qu|antanka}}, {{W-|qu|lata pisqu}}, {{W-|qu|maraq}}
* {{Z|ks}}: {{W-|ks|پلین}}
* {{Z|ky}}: {{W+|ky|самолёт}}, {{W+|ky|учак}}, {{W+|ky|аэроплан}}
* {{Z|kg}}: {{W-|kg|ndèke}}
* {{Z|si}}: {{W-|si|ගුවන්යානය}}, {{W-|si|අහස්යානය}}
* {{Z|cku}}: {{W-|cku|piththawaika}}
* {{Z|ko}}: {{W+|ko|비행기}}, {{W+|ko|항공기}}
* {{Z|kw}}: {{W-|kw|jynn ebron|n}}
* {{Z|mfe}}: {{W-|mfe|avyon}}
* {{Z|crs}}: {{W-|crs|avyon}}
* {{Z|crl}}: {{W-|crl|ᑳᐱᒥᐦᔮᒥᑭᐦᒡ}}, {{W-|crl|ᑳᐱᐹᒥᐦᔮᒥᑭᐦᒡ}}
* {{Z|crj}}: {{W-|crj|ᑳᐱᒥᐦᔮᒪᑲᐦᒡ}}
* {{Z|lbe}}: {{W-|lbe|самолет}}, {{W-|lbe|айрипӏалан}}
* {{Z|lkt}}: {{W-|lkt|kiŋyékhiyapi}}
* {{Z|la}}: {{W-|la|aeroplanum|nt}}
* {{Z|lv}}: {{W-|lv|lidmašīna|m}}, {{W-|lv|gaisa kuģis|m}}
* {{Z|lo}}: {{W-|lo|ອາກາດຍານ}}, {{W-|lo|ເຄື່ອງບິນ}}, {{W-|lo|ເຮືອບິນ}}, {{W+|lo|ຍົນ}}
* {{Z|ln}}: {{W-|ln|mpɛ́pɔ}}
* {{Z|lt}}: {{W+|lt|lėktuvas|n}}, {{W-|lt|aeroplanas|n}}
* {{Z|mk}}: {{W-|mk|авио́н|n}}
* {{Z|mg}}: {{W+|mg|fiaramanidina}}
* {{Z|ml}}: {{W+|ml|വിമാനം}}
* {{Z|ms}}: {{W+|ms|kapal terbang}}
* {{Z|mt}}: {{W-|mt|ajruplan|n}}
* {{Z|mnc}}: {{W-|mnc|ᡩᡝᠶᡝᡨᡠᠨ}}
* {{Z|gv}}: {{W-|gv|etlan|n}}, {{W-|gv|greie etlee|n}}
* {{Z|mns-nor}}: {{W-|mns-nor|товлыӈхап}}
* {{Z|mi}}: {{W+|mi|manurere}}, {{W-|mi|eropereina}}, {{W-|mi|aropereina}}, {{W-|mi|rererangi}}, {{W+|mi|waka rererangi}}, {{W+|mi|wakarere}}
* {{Z|mr}}: {{W-|mr|विमान}}
* Marî:
*: {{Z|mhr}}: {{W-|mhr|кÿртньыгайык}}
* {{Z|hu}}: {{W+|hu|repülőgép}}, {{W+|hu|repülő}}
* {{Z|lus}}: {{W-|lus|thlawhtheihna}}
* {{Z|mwl}}: {{W-|mwl|abion|n}}
* {{Z|mn}}:
*: Kirîlî: {{W+|mn|нисэх онгоц}}, {{W+|mn|онгоц}}, {{W+|mn|нисгэл}}
*: Mongolî: {{W-|mn|ᠨᠢᠰᠬᠦ ᠣᠩᠭᠤᠴᠠ}}, {{W-|mn|ᠣᠩᠭᠤᠴᠠ}}, {{W-|mn|ᠨᠢᠰᠬᠡᠯ}}
* {{Z|mos}}: {{W-|mos|nasaar-sɩlga}}, {{W-|mos|sɩlga}}
* {{Z|nah}}: {{W+|nah|tepoztōtōtl}}, {{W-|nah|tepozpatlanqui}}
* {{Z|nap}}: {{W-|nap|arioplàno|n}}, {{W-|nap|apparècchio|n}}
* {{Z|nv}}: {{W-|nv|chidí naatʼaʼí}}
* {{Z|ne}}: {{W-|ne|विमान}}, {{W+|ne|हवाईजहाज}}, {{W-|ne|प्लेन|tr=plen}}
* {{Z|niu}}: {{W-|niu|vakalele}}
* {{Z|nrf}}: {{W-|nrf|avion|n}}
* {{Z|no}}:
*: {{Z|no}}: {{W+|no|fly|nt}}
*: {{Z|nn}}: {{W-|nn|fly|nt}}
* {{Z|oj}}: {{W-|oj|bemisemagak}}
* {{Z|oc}}: {{W+|oc|avion|n}}
* {{Z|or}}: {{W-|or|ଉଡ଼ାଜାହାଜ}}, {{W+|or|ବିମାନ}}
* {{Z|om}}: {{W-|om|xiyyaara}}
* {{Z|os}}: {{W-|os|хӕдтӕхӕг}}
* {{Z|ota}}: {{W-|ota|طیاره|tr=tayyare}}
* {{Z|ug}}: {{W-|ug|ئايروپىلان}}
* {{Z|uz}}: {{W+|uz|tayyora}}, {{W+|uz|samolyot}}, {{W+|uz|aeroplan}}
* {{Z|pwn}}: {{W-|pwn|hikuki}}
* {{Z|pi}}: {{W-|pi|ākāsayāna|nt}}, {{W-|pi|vehāsayāna|nt}}
* {{Z|ps}}: {{W+|ps|الوتکه|m|tr=alwatëka}}, {{W+|ps|طياره|m|tr=tayāra}}, {{W-|ps|هوايي جهاز}}
* {{Z|pdt}}: {{W-|pdt|Loftschepp|nt}}
* {{Z|pl}}: {{W+|pl|samolot|n}}, {{W+|pl|aeroplan|n}}
* {{Z|pt}}: {{W+|pt|avião|n}}, {{W+|pt|aeroplano|n}}
* {{Z|pa}}: {{W-|pa|ਹਵਾਈ-ਜਹਾਜ਼}}, {{W-|pa|ਜਹਾਜ਼}}
* {{Z|pyu}}: {{W-|pyu|hikuki}}
* {{Z|kk}}: {{W+|kk|ұшақ}}, {{W-|kk|самолет}}, {{W-|kk|аэроплан}}
* {{Z|rm}}: {{W-|rm|aviun|n}}, {{W-|rm|eroplan|n}}
* {{Z|ro}}: {{W+|ro|aeroplan|nt}}, {{W+|ro|avion|nt}}
* {{Z|dru}}: {{W-|dru|ngiapapalay}}
* {{Z|ru}}: {{W+|ru|самолёт|n}}, {{W+|ru|аэропла́н|n}}
* {{Z|sxr}}: {{W-|sxr|saliamiapihlihli}}
* {{Z|xsy}}: {{W-|xsy|kamahayap}}
* {{Z|szy}}: {{W-|szy|hikuki}}, {{W-|szy|babelbel}}
* {{Z|se}}: {{W-|se|girdi}}
* {{Z|smn}}: {{W-|smn|kirdemmaašin}}
* {{Z|sms}}: {{W-|sms|jarplan}}
* {{Z|sm}}: {{W-|sm|vaʻalele}}
* {{Z|sa}}: {{W+|sa|विमान}}, {{W-|sa|वायु-यान}}
* {{Z|ceb}}: {{W-|ceb|eroplano}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|авѝо̄н|n}}, {{W-|sh|зра̏копло̄в|n}}
*: Latînî: {{W+|sh|avìōn|n}}, {{W+|sh|zrȁkoplōv|n}}
* {{Z|sk}}: {{W+|sk|lietadlo|nt}}
* {{Z|sl}}: {{W+|sl|letalo|nt}}, {{W+|sl|avion|n}}
* {{Z|so}}: {{W-|so|diyaarad}}
* Sorbî:
*: {{Z|hsb}}: {{W-|hsb|lětadło|nt}}
* {{Z|ses}}: {{W-|ses|beenehii}}
* {{Z|st}}: {{W+|st|sefofane}}
* {{Z|es}}: {{W+|es|avión|n}}, {{W+|es|aeroplano|n}}
* {{Z|sw}}: {{W+|sw|ndege}}, {{W+|sw|eropleni|c9|c10}}
* {{Z|sv}}: {{W+|sv|flygplan|nt}}, {{W+|sv|flygmaskin|g}}
* {{Z|shn}}: {{W-|shn|လေႇယိၼ်ႇပျၢၼ်ႇ}}, {{W-|shn|ႁိူဝ်းမိၼ်}}
* {{Z|zdj}}: {{W-|zdj|roplani}}, {{W-|zdj|ropulani}}
* {{Z|sn}}: {{W-|sn|ndege}}
* {{Z|tg}}: {{W+|tg|самолёт}}, {{W+|tg|тайёра}}, {{W+|tg|ҳавопаймо}}, {{W-|tg|аэроплан}}
* {{Z|tl}}: {{W+|tl|eroplano}}
* {{Z|ta}}: {{W+|ta|விமானம்}}, {{W+|ta|வானவூர்தி}}
* {{Z|trv}}: {{W-|trv|asu}}, {{W-|trv|skaya}}, {{W-|trv|sapah skiya}}
* {{Z|th}}: {{W+|th|เครื่องบิน}}, {{W+|th|อากาศยาน}}, {{W+|th|เรือบิน}}
* {{Z|te}}: {{W+|te|విమానము}}
* {{Z|crh}}: {{W-|crh|tayare}}, {{W-|crh|uçaq}}
* {{Z|tt}}: {{W+|tt|очкыч}}, {{W-|tt|самолёт}}, {{W-|tt|аэроплан}}
* {{Z|ti}}: {{W-|ti|ነፋሪት}}
* {{Z|tr}}: {{W+|tr|uçak}}, {{W+|tr|tayyare}}
* {{Z|tk}}: {{W-|tk|samolýot}}, {{W-|tk|uçar}}, {{W+|tk|aeroplan}}
* {{Z|bo}}: {{W-|bo|གནམ་གྲུ}}, {{W-|bo|ལྕགས་བྱ}}
* {{Z|tkl}}: {{W-|tkl|vakalele}}
* {{Z|tpi}}: {{W+|tpi|balus}}
* {{Z|to}}: {{W-|to|vakapuna}}
* {{Z|tsu}}: {{W-|tsu|hikoki}}
* {{Z|tum}}: {{W-|tum|ndege}}
* {{Z|tvl}}: {{W-|tvl|vakalele}}
* {{Z|ur}}: {{W-|ur|طَیّارَہ|n|tr=tayyāra}}, {{W-|ur|ہَوائی جَہاز|n|tr=hawāī jahāz}}, {{W-|ur|جَہاز|n|tr=jahāz}}, {{W-|ur|ہَوا پَیما|n|tr=hawā paimā}}, {{W-|ur|وِمان|n|tr=vimān}}
* {{Z|uk}}: {{W+|uk|літа́к|n}}, {{W+|uk|аеропла́н|n}}
* {{Z|vi}}: {{W+|vi|máy bay}}, {{W+|vi|phi cơ}}
* {{Z|vo}}: {{W+|vo|flitöm}}, {{W-|vo|flitömil}}, {{W-|vo|leflitöm}}
* {{Z|vro}}: {{W-|vro|linnuk}}, {{W-|vro|aeroplaan}}
* {{Z|wls}}: {{W-|wls|vakalele}}
* {{Z|war}}: {{W-|war|eroplano}}
* {{Z|cy}}: {{W+|cy|awyren|m}}
* {{Z|km}}: {{W-|km|កប៉ាល់ហោះ}}, {{W-|km|យន្តហោះ}}, {{W-|km|សកុណាយន្ត}}
* {{Z|sah}}: {{W-|sah|самолет}}, {{W-|sah|сөмөлүөт}}, {{W-|sah|көтөр-аал}}
* {{Z|tao}}: {{W-|tao|sikoki}}
* {{Z|yi}}: {{W-|yi|אַעראָפּלאַן|n}}, {{W-|yi|עראָפּלאַן|n}}
* {{Z|yij}}: {{W-|yij|barbarrnyungu}}
* {{Z|yog}}: {{W-|yog|eroplano}}
* {{Z|yoi}}: {{W-|yoi|飛行機|tr=ひぐんき, higunki}}, {{W-|yoi|飛行機|tr=ちこーき, chikouki}}
* {{Z|yo}}: {{W-|yo|ọkọ̀ òfurufú}}
* {{Z|el}}: {{W+|el|αεροπλάνο|nt}}, {{W+|el|αεροσκάφος|nt}}
* {{Z|za}}: {{W-|za|feihgih}}
{{werger-bin}}
:{{werger çavkanî|en|airplane|beş=Ev qismê Wergerê|oldid=75545646}}
== {{ziman|zza}} ==
=== Navdêr ===
{{navdêr|zza|z=}}
# [[balafir]], [[teyare]]<ref>[http://www.kovarabir.com/wp-content/uploads/Ferheng%C3%AA-Dimil%C3%AE-%C3%BB-Kurmanc%C3%AE-B-b.pdf www.kovarabir.com]</ref>
#* {{bêmînak|zza}}
=== Çavkanî ===
{{çavkanî}}
pwcowtrbuqwhywlwyaoc9cpyjx4pnjx
pirs
0
3933
6342822
6341587
2026-08-26T23:11:05Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342822
wikitext
text/x-wiki
{{bnr-h|-pirs-}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{IPA|ku|/pˤɪɾs/}}
* {{ku-kîte}}
=== Navdêr ===
[[Wêne:Text document with red question mark.svg|thumb|150px|Nîşana pirsê]]
{{navdêr|ku|z=m}}, {{p-ya nerm}}, {{r-ya nerm}}
# [[tişt|Tişta]] [[kes]]ek ji [[yek]] [[din]] re [[gotin|dibêje]] bi [[hêvî|hêviya]] ku [[hin]] [[agadarî|agadariyan]] jê [[wergirtin|wergire]].
#: {{hevmane|ku|siwal}}
#: {{nm|ku|Min çend '''pirs''' ji te hene.}}
#* {{J:Melayê Cizîrî:Dîwana Melayê Cizîrî|jêgirtin=Firyad-i der ber kewkeban</br>Pirsê bike j' bîdarê çerx</br>Van rehrewên himmetbelend}}
#* {{J:Antoine de Saint-Exupéry:Mîrzayê Biçûk|jêgirtin=Mirovên mezin di şûna van '''pirs'''an de dibêjin:"Ew çend salî ye? Çend birayên wî hene? Ew çend kîlo ye? Bavê wî di mehê de çiqas peran distîne?" Ew tenê bi '''pirs'''ên wilo bawer dikin ku dikarin xweş wî nas bikin.}}
# [[doz]], [[mesele]]
#* {{bêmînak|ku}}
#: {{nm|ku|'''Pirs'''a kurdî divê di zûtirîn demê de bêt çareserkirin.}}
# [[pirsgirêk]], [[arîşe]], [[kêşe]], [[problem]]
#* {{bêmînak|ku}}
# [[kelîme]]
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|پرس}}
* {{ku-kr|пьрс}}
==== Formên alternatîv ====
* {{hw|ku|pirsiyar||Dihok}}
* {{hw|ku|pisyar}}
==== Hevmane ====
* {{g|ku|siwal}}
==== Dijmane ====
* {{g|ku|bersiv}}
==== Jê ====
{{kol3|ku|cure=Jê
|pirsandin
|pirser
|pirserî
|pirsgirêk
|pirsîn
|pirskar
|pirskarî
|pirsker
|pirskerî
|pirseşan
|pirsiyar
|rapirs
|rapirsandin
|rapirsî
|rapirsîn
|pirs kirin<q:lêker>
|pirskirin<q:navdêr>
|pirskirî<q:rengdêr>
}}
==== Etîmolojî ====
Ji {{ji|ine-pro|ku|-}} *[[preḱ-]], têkildarî [[پرسیدن]] (porsîden) ya farisî, ''pursîden'' ya [[pehlewî]], ''fraθ-'' ya farisiya kevn, [[hevkok]]a [[पृच्छति]] (pṛccháti) ya sanskrîtî, [[просить]] (prosti) ya rusî, [[հարց]] (harc') ya ermeniya kevn, [[posco]] ya latînî, [[frignan]] ya inglîziya kevn, [[Frage]] ya elmanî û [[fråga]] ya swêdî. Zêdetir agahî li rûpela '''[[pirsîn]]'''.
==== Werger ====
{{werger-ser}}
* {{Z|ab}}: {{W-|ab|азҵаара}}
* {{Z|ady}}: {{W-|ady|упчӏэ}}
* {{Z|af}}: {{W+|af|vraag}}
* {{Z|sq}}: {{W+|sq|pyetje|m}}
* {{Z|de}}: {{W+|de|Frage|m}}, {{W+|de|Anfrage|m}}
* {{Z|alt}}: {{W-|alt|сурак}}
* {{Z|am}}: {{W-|am|ጥያቄ}}
* {{Z|rup}}: {{W-|rup|ãntribari|m}}
* {{Z|as}}: {{W-|as|প্ৰশ্ন}}
* {{Z|ast}}: {{W-|ast|entruga|m}}, {{W-|ast|pregunta|m}}
* {{Z|av}}: {{W-|av|суал}}
* {{Z|az}}: {{W+|az|sual}}, {{W+|az|soru}}
* {{Z|eu}}: {{W-|eu|galdera}}, {{W-|eu|itaun}}
* {{Z|ba}}: {{W-|ba|һорау}}
* {{Z|be}}: {{W+|be|пыта́нне|nt}}
* {{Z|bal}}: {{W-|bal|جست|tr=just}}, {{W-|bal|سوال|tr=sawál, suwál}}
* {{Z|bn}}: {{W+|bn|প্রশ্ন|tr=prôśnô}}, {{W+|bn|সওয়াল|tr=śôwal}}
* {{Z|bcl}}: {{W-|bcl|hapot}}
* {{Z|br}}: {{W+|br|goulenn|n}}
* {{Z|bg}}: {{W+|bg|въпро́с|n}}, {{W+|bg|пи́тане|nt}}, {{W+|bg|запи́тване|nt}}
* {{Z|my}}: {{W+|my|ပုစ္ဆာ}}, {{W+|my|အမေး}}, {{W+|my|မေးခွန်း}}
* {{Z|bua}}: {{W-|bua|асуудал}}
* {{Z|ccc}}: {{W-|ccc|inajpeki}}
* {{Z|ce}}: {{W-|ce|хаттар}}
* {{Z|cs}}: {{W+|cs|otázka|m}}
* {{Z|chr}}: {{W-|chr|ᎠᏛᏛᎲᏍᎩ}}
* {{Z|ny}}: {{W-|ny|funso}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|問題|tr=man6 tai4}}
*: {{Z|dng}}: {{W-|dng|вынти}}
*: {{Z|hak}}: {{W-|hak|問題|tr=mun-thì}}
*: {{Z|cmn}}: {{W+|cmn|問題|tr=wèntí}}
*: {{Z|cdo}}: {{W-|cdo|問題|tr=ông-dà̤}}
*: {{Z|nan}}: {{W+|nan|問題|tr=būn-tôe, būn-tê}}
*: {{Z|wuu}}: {{W-|wuu|問題}}
* {{Z|ckt}}: {{W-|ckt|пынԓён|tr=pynḷjon}}
* {{Z|cv}}: {{W-|cv|ыйту}}
* {{Z|da}}: {{W+|da|spørgsmål|nt}}
* {{Z|ovd}}: {{W-|ovd|fråga|m}}
* {{Z|id}}: {{W+|id|pertanyaan}}, {{W+|id|soal}}
* {{Z|ar}}: {{W+|ar|سُؤَال|n}}
*: {{Z|acw}}: {{W-|acw|سؤال|n|tr=suʔāl}}
*: {{Z|ajp}}: {{W-|ajp|سؤال|n|tr=suʔāl}}
* {{Z|hy}}: {{W+|hy|հարց}}
* {{Z|eo}}: {{W+|eo|demando}}
* {{Z|et}}: {{W+|et|küsimus}}
* {{Z|pal}}: {{W-|pal|tr-pursišn}}
* {{Z|fa}}: {{W+|fa|پرسش|tr=porseš}}, {{W+|fa|سؤال|tr=so'âl}}
* {{Z|fo}}: {{W-|fo|spurningur|n}}
* {{Z|fi}}: {{W+|fi|kysymys}}
* {{Z|fr}}: {{W+|fr|question|m}}
* {{Z|fur}}: {{W-|fur|domande|m}}
* {{Z|gd}}: {{W-|gd|ceist|m}}
* {{Z|gl}}: {{W+|gl|pregunta|m}}, {{W+|gl|cuestión|m}}
* {{Z|gu}}: {{W-|gu|પ્રશ્ન}}
* {{Z|ka}}: {{W-|ka|კითხვა}}, {{W-|ka|საკითხი}}
* {{Z|haw}}: {{W-|haw|nīnau}}, {{W-|haw|ui}}
* {{Z|ha}}: {{W+|ha|tambaya}}
* {{Z|hi}}: {{W+|hi|सवाल|n}}, {{W+|hi|प्रश्न|n}}
* {{Z|mww}}: {{W-|mww|lo lus noog}}
* {{Z|nl}}: {{W+|nl|vraag|m}}
* {{Z|hrx}}: {{W-|hrx|Froh|m}}
* {{Z|he}}: {{W+|he|שְׁאֵלָה|m|tr=she'elá}}
* {{Z|io}}: {{W+|io|questiono}}
* {{Z|ang}}: {{W-|ang|āscung|m}}
* {{Z|enm}}: {{W-|enm|questioun}}, {{W-|enm|frain}}, {{W-|enm|fraign}}
* {{Z|en}}: {{W+|en|question}}
* {{Z|ia}}: {{W-|ia|question}}
* {{Z|ga}}: {{W+|ga|ceist|m}}
* {{Z|it}}: {{W+|it|domanda|m}}
* {{Z|is}}: {{W+|is|spurning|m}}, {{W-|is|spursmál|nt}}
* {{Z|ja}}: {{W+|ja|質問|tr=しつもん, shitsumon}}
* {{Z|kl}}: {{W-|kl|apeqqut}}
* {{Z|xal}}: {{W-|xal|сурвр}}
* {{Z|kn}}: {{W+|kn|ಪ್ರಶ್ನೆ}}
* {{Z|pam}}: {{W-|pam|kutang}}
* {{Z|krc}}: {{W-|krc|соруу|tr=soruw}}
* {{Z|kaa}}: {{W-|kaa|soraw}}, {{W-|kaa|sawal}}
* {{Z|ca}}: {{W+|ca|demanda|m}}, {{W+|ca|qüestió|m}}
* {{Z|ky}}: {{W+|ky|суроо}}
* {{Z|si}}: {{W-|si|ප්රශ්නය}}
* {{Z|ko}}: {{W+|ko|질문}}
* {{Z|kw}}: {{W-|kw|govyn|n}}, {{W-|kw|kwestyon|n}}
* {{Z|kpy}}: {{W-|kpy|пыӈлон|tr=pəŋlon}}
* {{Z|kum}}: {{W-|kum|сорав|tr=}}, {{W-|kum|суал|tr=}}
* {{Z|lad}}: {{W-|lad|פריגונטה|tr=pregunto}}
* {{Z|la}}: {{W-|la|rogātiō|m}}
* {{Z|lv}}: {{W-|lv|jautājums|n}}
* {{Z|lo}}: {{W-|lo|ຄຳຖາມ}}
* {{Z|lez}}: {{W-|lez|суал}}, {{W-|lez|жузна}}
* {{Z|lt}}: {{W+|lt|klausimas|n}}
* {{Z|liv}}: {{W-|liv|kizzimi}}
* {{Z|lmo}}: {{W-|lmo|questión|m}}
* {{Z|lb}}: {{W+|lb|Fro|m}}
* {{Z|mk}}: {{W-|mk|прашање|nt}}
* {{Z|mg}}: {{W+|mg|fanontaniana}}
* {{Z|ml}}: {{W+|ml|ചോദ്യം}}
* {{Z|ms}}: {{W+|ms|soalan}}, {{W+|ms|pertanyaan}}, {{W+|ms|tanya}}
* {{Z|mt}}: {{W-|mt|kwistjoni|m}}, {{W-|mt|mistoqsija|m}}
* {{Z|mi}}: {{W-|mi|pātai}}, {{W-|mi|ui}}, {{W-|mi|whakaui}}
* {{Z|mr}}: {{W-|mr|प्रश्न}}
* {{Z|hu}}: {{W+|hu|kérdés}}
* {{Z|mn}}:
*: Kirîlî: {{W+|mn|асуудал}}
* {{Z|nv}}: {{W-|nv|naʼídíkid}}
* {{Z|ne}}: {{W-|ne|प्रश्न}}
* {{Z|nrf}}: {{W-|nrf|tchestchion|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|spørsmål|nt}}
*: {{Z|nn}}: {{W-|nn|spørsmål|nt}}
* {{Z|oc}}: {{W+|oc|question|m}}
* {{Z|or}}: {{W+|or|ପ୍ରଶ୍ନ}}
* {{Z|om}}: {{W-|om|gaaffii}}
* {{Z|os}}: {{W-|os|фарста}}, {{W-|os|фарст}}
* {{Z|ug}}: {{W-|ug|سوئلا}}, {{W-|ug|سوراق}}
* {{Z|uz}}: {{W+|uz|soʻroq}}, {{W+|uz|savol}}
* {{Z|ps}}: {{W+|ps|پوښتنه|m|tr=puӽtᶕna}}, {{W+|ps|سوال|n|tr=swāl}}, {{W-|ps|مسأله|m|tr=masalá}}
* {{Z|pl}}: {{W+|pl|pytanie|nt}}
* {{Z|pt}}: {{W+|pt|questão|m}}, {{W+|pt|pergunta|m}}
* {{Z|pa}}: {{W+|pa|ਸਵਾਲ}}, {{W-|pa|ਪ੍ਰਸ਼ਨ|n}}
* {{Z|kk}}: {{W-|kk|сұрақ}}, {{W-|kk|сұрау}}, {{W+|kk|сауал}}
* {{Z|rm}}: {{W-|rm|dumonda|m}}
* {{Z|ro}}: {{W+|ro|întrebare|m}}
* {{Z|ru}}: {{W+|ru|вопро́с|n}}
* {{Z|se}}: {{W-|se|gažaldat}}, {{W-|se|jearaldat}}
* {{Z|sma}}: {{W-|sma|gyhtjelasse}}
* {{Z|sms}}: {{W-|sms|kõõččmoš}}
* {{Z|sa}}: {{W+|sa|प्रश्न}}, {{W+|sa|पृच्छा|m}}
* {{Z|scn}}: {{W+|scn|dumanna|m}}, {{W+|scn|dimanna|m}}, {{W+|scn|dimanna|m}}, {{W+|scn|dumanna|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|пи́та̄ње|nt}}
*: Latînî: {{W+|sh|pítānje|nt}}
* {{Z|sco}}: {{W-|sco|quaisten}}
* {{Z|cu}}:
*: Kirîlî: {{W-|cu|пытаниѥ|nt}}, {{W-|cu|вопросъ|n}}
* {{Z|orv}}: {{W-|orv|пытаниѥ|nt}}
* {{Z|sk}}: {{W+|sk|otázka|m}}
* {{Z|sl}}: {{W+|sl|vprašanje|nt}}
* {{Z|es}}: {{W+|es|pregunta|m}}, {{W+|es|cuestión|m}}
* {{Z|sw}}: {{W+|sw|swali}}
* {{Z|sv}}: {{W+|sv|fråga|g}}, {{W+|sv|spörsmål|nt}}, {{W-|sv|spörjning|g}}
* {{Z|cjs}}: {{W-|cjs|сурағ|tr=surağ}}
* {{Z|tab}}: {{W-|tab|суал}}
* {{Z|tg}}: {{W-|tg|пурсиш}}, {{W+|tg|савол}}
* {{Z|tl}}: {{W+|tl|tanong}}
* {{Z|ta}}: {{W+|ta|கேள்வி}}
* {{Z|twf}}: {{W-|twf|cìakǫ’óna}}
* {{Z|th}}: {{W+|th|คำถาม}}
* {{Z|te}}: {{W+|te|ప్రశ్న}}
* {{Z|crh}}: {{W-|crh|sual}}
* {{Z|tt}}: {{W-|tt|сорау}}
* {{Z|ti}}: {{W-|ti|ሕቶ}}
* {{Z|tr}}: {{W+|tr|soru}}
* {{Z|tk}}: {{W-|tk|sorag}}, {{W-|tk|sowal}}
* {{Z|bo}}: {{W-|bo|དོགས་གནད}}
* {{Z|txb}}: {{W-|txb|prāśśäṃ}}
* {{Z|tyv}}: {{W-|tyv|айтырыг}}
* {{Z|ur}}: {{W-|ur|سوال|n|tr=savāl}}
* {{Z|uk}}: {{W+|uk|пита́ння|nt}}
* {{Z|vec}}: {{W-|vec|dimanda|m}}
* {{Z|vi}}: {{W+|vi|câu hỏi}}
* {{Z|vo}}: {{W+|vo|säk}}
* {{Z|war}}: {{W-|war|paki-ana}}, {{W-|war|pangutana}}
* {{Z|cy}}: {{W+|cy|cwestiwn|n}}
* {{Z|kjh}}: {{W-|kjh|сурағ}}, {{W-|kjh|сурығ}}
* {{Z|km}}: {{W-|km|សំនួរ}}
* {{Z|sah}}: {{W-|sah|ыйытыы}}
* {{Z|yi}}: {{W-|yi|פֿראַגע|m}}
* {{Z|yo}}: {{W-|yo|ìbéèrè}}
* {{Z|esu}}: {{W-|esu|apyun}}
* {{Z|el}}: {{W+|el|ερώτηση|m}}
*: Kevn: {{W-|grc|ἐρώτημα|nt}}
{{werger-bin}}
:{{werger çavkanî|en|question|oldid=75627421|beş=Ev qismê Wergerê}}
bsy7bv21dlo620rw0gk511d5i48hpqb
6342824
6342822
2026-08-26T23:17:00Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342824
wikitext
text/x-wiki
{{bnr-h|-pirs-}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{IPA|ku|/pˤɪɾs/}}
* {{ku-kîte}}
=== Navdêr ===
[[Wêne:Text document with red question mark.svg|thumb|150px|Nîşana pirsê]]
{{navdêr|ku|z=m}}, {{p-ya nerm}}, {{r-ya nerm}}
# [[tişt|Tişta]] [[kes]]ek ji [[yek]] [[din]] re [[gotin|dibêje]] bi [[hêvî|hêviya]] ku [[hin]] [[agadarî|agadariyan]] jê [[wergirtin|wergire]].
#: {{hevmane|ku|siwal}}
#: {{nm|ku|Min çend '''pirs''' ji te hene.}}
#* {{J:Melayê Cizîrî:Dîwana Melayê Cizîrî|jêgirtin=Firyad-i der ber kewkeban</br>Pirsê bike j' bîdarê çerx</br>Van rehrewên himmetbelend}}
#* {{J:Antoine de Saint-Exupéry:Mîrzayê Biçûk|jêgirtin=Mirovên mezin di şûna van '''pirs'''an de dibêjin:"Ew çend salî ye? Çend birayên wî hene? Ew çend kîlo ye? Bavê wî di mehê de çiqas peran distîne?" Ew tenê bi '''pirs'''ên wilo bawer dikin ku dikarin xweş wî nas bikin.}}
# [[doz]], [[mesele]]
#* {{bêmînak|ku}}
#: {{nm|ku|'''Pirs'''a kurdî divê di zûtirîn demê de bêt çareserkirin.}}
# [[pirsgirêk]], [[arîşe]], [[kêşe]], [[problem]]
#* {{bêmînak|ku}}
# [[kelîme]]
#* {{J:Hawar:1:1998|sernav=Armanc, Awayê Xebat û Nivîsandina Hawarê|hejmar=1|r=24|rûpela-orîjînal=22|jêgirtin=Em li pey wan {{j-îzah|1==kelîmeyên kêm tên emilandin}} in, hîn bi hîn em wan diêxin dest û disenifînin û gora meḧcetê jî ji nuh ve ser awayê hevedudanina '''pirsên''' qurdî{{j-wesf|beriya guhartina herfên Q-K}} '''pirsinen''' nuh çêdiqin{{...}}}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|پرس}}
* {{ku-kr|пьрс}}
==== Formên alternatîv ====
* {{hw|ku|pirsiyar||Dihok}}
* {{hw|ku|pisyar}}
==== Hevmane ====
* {{g|ku|siwal}}
==== Dijmane ====
* {{g|ku|bersiv}}
==== Jê ====
{{kol3|ku|cure=Jê
|pirsandin
|pirser
|pirserî
|pirsgirêk
|pirsîn
|pirskar
|pirskarî
|pirsker
|pirskerî
|pirseşan
|pirsiyar
|rapirs
|rapirsandin
|rapirsî
|rapirsîn
|pirs kirin<q:lêker>
|pirskirin<q:navdêr>
|pirskirî<q:rengdêr>
}}
==== Etîmolojî ====
Ji {{ji|ine-pro|ku|-}} *[[preḱ-]], têkildarî [[پرسیدن]] (porsîden) ya farisî, ''pursîden'' ya [[pehlewî]], ''fraθ-'' ya farisiya kevn, [[hevkok]]a [[पृच्छति]] (pṛccháti) ya sanskrîtî, [[просить]] (prosti) ya rusî, [[հարց]] (harc') ya ermeniya kevn, [[posco]] ya latînî, [[frignan]] ya inglîziya kevn, [[Frage]] ya elmanî û [[fråga]] ya swêdî. Zêdetir agahî li rûpela '''[[pirsîn]]'''.
==== Werger ====
{{werger-ser}}
* {{Z|ab}}: {{W-|ab|азҵаара}}
* {{Z|ady}}: {{W-|ady|упчӏэ}}
* {{Z|af}}: {{W+|af|vraag}}
* {{Z|sq}}: {{W+|sq|pyetje|m}}
* {{Z|de}}: {{W+|de|Frage|m}}, {{W+|de|Anfrage|m}}
* {{Z|alt}}: {{W-|alt|сурак}}
* {{Z|am}}: {{W-|am|ጥያቄ}}
* {{Z|rup}}: {{W-|rup|ãntribari|m}}
* {{Z|as}}: {{W-|as|প্ৰশ্ন}}
* {{Z|ast}}: {{W-|ast|entruga|m}}, {{W-|ast|pregunta|m}}
* {{Z|av}}: {{W-|av|суал}}
* {{Z|az}}: {{W+|az|sual}}, {{W+|az|soru}}
* {{Z|eu}}: {{W-|eu|galdera}}, {{W-|eu|itaun}}
* {{Z|ba}}: {{W-|ba|һорау}}
* {{Z|be}}: {{W+|be|пыта́нне|nt}}
* {{Z|bal}}: {{W-|bal|جست|tr=just}}, {{W-|bal|سوال|tr=sawál, suwál}}
* {{Z|bn}}: {{W+|bn|প্রশ্ন|tr=prôśnô}}, {{W+|bn|সওয়াল|tr=śôwal}}
* {{Z|bcl}}: {{W-|bcl|hapot}}
* {{Z|br}}: {{W+|br|goulenn|n}}
* {{Z|bg}}: {{W+|bg|въпро́с|n}}, {{W+|bg|пи́тане|nt}}, {{W+|bg|запи́тване|nt}}
* {{Z|my}}: {{W+|my|ပုစ္ဆာ}}, {{W+|my|အမေး}}, {{W+|my|မေးခွန်း}}
* {{Z|bua}}: {{W-|bua|асуудал}}
* {{Z|ccc}}: {{W-|ccc|inajpeki}}
* {{Z|ce}}: {{W-|ce|хаттар}}
* {{Z|cs}}: {{W+|cs|otázka|m}}
* {{Z|chr}}: {{W-|chr|ᎠᏛᏛᎲᏍᎩ}}
* {{Z|ny}}: {{W-|ny|funso}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|問題|tr=man6 tai4}}
*: {{Z|dng}}: {{W-|dng|вынти}}
*: {{Z|hak}}: {{W-|hak|問題|tr=mun-thì}}
*: {{Z|cmn}}: {{W+|cmn|問題|tr=wèntí}}
*: {{Z|cdo}}: {{W-|cdo|問題|tr=ông-dà̤}}
*: {{Z|nan}}: {{W+|nan|問題|tr=būn-tôe, būn-tê}}
*: {{Z|wuu}}: {{W-|wuu|問題}}
* {{Z|ckt}}: {{W-|ckt|пынԓён|tr=pynḷjon}}
* {{Z|cv}}: {{W-|cv|ыйту}}
* {{Z|da}}: {{W+|da|spørgsmål|nt}}
* {{Z|ovd}}: {{W-|ovd|fråga|m}}
* {{Z|id}}: {{W+|id|pertanyaan}}, {{W+|id|soal}}
* {{Z|ar}}: {{W+|ar|سُؤَال|n}}
*: {{Z|acw}}: {{W-|acw|سؤال|n|tr=suʔāl}}
*: {{Z|ajp}}: {{W-|ajp|سؤال|n|tr=suʔāl}}
* {{Z|hy}}: {{W+|hy|հարց}}
* {{Z|eo}}: {{W+|eo|demando}}
* {{Z|et}}: {{W+|et|küsimus}}
* {{Z|pal}}: {{W-|pal|tr-pursišn}}
* {{Z|fa}}: {{W+|fa|پرسش|tr=porseš}}, {{W+|fa|سؤال|tr=so'âl}}
* {{Z|fo}}: {{W-|fo|spurningur|n}}
* {{Z|fi}}: {{W+|fi|kysymys}}
* {{Z|fr}}: {{W+|fr|question|m}}
* {{Z|fur}}: {{W-|fur|domande|m}}
* {{Z|gd}}: {{W-|gd|ceist|m}}
* {{Z|gl}}: {{W+|gl|pregunta|m}}, {{W+|gl|cuestión|m}}
* {{Z|gu}}: {{W-|gu|પ્રશ્ન}}
* {{Z|ka}}: {{W-|ka|კითხვა}}, {{W-|ka|საკითხი}}
* {{Z|haw}}: {{W-|haw|nīnau}}, {{W-|haw|ui}}
* {{Z|ha}}: {{W+|ha|tambaya}}
* {{Z|hi}}: {{W+|hi|सवाल|n}}, {{W+|hi|प्रश्न|n}}
* {{Z|mww}}: {{W-|mww|lo lus noog}}
* {{Z|nl}}: {{W+|nl|vraag|m}}
* {{Z|hrx}}: {{W-|hrx|Froh|m}}
* {{Z|he}}: {{W+|he|שְׁאֵלָה|m|tr=she'elá}}
* {{Z|io}}: {{W+|io|questiono}}
* {{Z|ang}}: {{W-|ang|āscung|m}}
* {{Z|enm}}: {{W-|enm|questioun}}, {{W-|enm|frain}}, {{W-|enm|fraign}}
* {{Z|en}}: {{W+|en|question}}
* {{Z|ia}}: {{W-|ia|question}}
* {{Z|ga}}: {{W+|ga|ceist|m}}
* {{Z|it}}: {{W+|it|domanda|m}}
* {{Z|is}}: {{W+|is|spurning|m}}, {{W-|is|spursmál|nt}}
* {{Z|ja}}: {{W+|ja|質問|tr=しつもん, shitsumon}}
* {{Z|kl}}: {{W-|kl|apeqqut}}
* {{Z|xal}}: {{W-|xal|сурвр}}
* {{Z|kn}}: {{W+|kn|ಪ್ರಶ್ನೆ}}
* {{Z|pam}}: {{W-|pam|kutang}}
* {{Z|krc}}: {{W-|krc|соруу|tr=soruw}}
* {{Z|kaa}}: {{W-|kaa|soraw}}, {{W-|kaa|sawal}}
* {{Z|ca}}: {{W+|ca|demanda|m}}, {{W+|ca|qüestió|m}}
* {{Z|ky}}: {{W+|ky|суроо}}
* {{Z|si}}: {{W-|si|ප්රශ්නය}}
* {{Z|ko}}: {{W+|ko|질문}}
* {{Z|kw}}: {{W-|kw|govyn|n}}, {{W-|kw|kwestyon|n}}
* {{Z|kpy}}: {{W-|kpy|пыӈлон|tr=pəŋlon}}
* {{Z|kum}}: {{W-|kum|сорав|tr=}}, {{W-|kum|суал|tr=}}
* {{Z|lad}}: {{W-|lad|פריגונטה|tr=pregunto}}
* {{Z|la}}: {{W-|la|rogātiō|m}}
* {{Z|lv}}: {{W-|lv|jautājums|n}}
* {{Z|lo}}: {{W-|lo|ຄຳຖາມ}}
* {{Z|lez}}: {{W-|lez|суал}}, {{W-|lez|жузна}}
* {{Z|lt}}: {{W+|lt|klausimas|n}}
* {{Z|liv}}: {{W-|liv|kizzimi}}
* {{Z|lmo}}: {{W-|lmo|questión|m}}
* {{Z|lb}}: {{W+|lb|Fro|m}}
* {{Z|mk}}: {{W-|mk|прашање|nt}}
* {{Z|mg}}: {{W+|mg|fanontaniana}}
* {{Z|ml}}: {{W+|ml|ചോദ്യം}}
* {{Z|ms}}: {{W+|ms|soalan}}, {{W+|ms|pertanyaan}}, {{W+|ms|tanya}}
* {{Z|mt}}: {{W-|mt|kwistjoni|m}}, {{W-|mt|mistoqsija|m}}
* {{Z|mi}}: {{W-|mi|pātai}}, {{W-|mi|ui}}, {{W-|mi|whakaui}}
* {{Z|mr}}: {{W-|mr|प्रश्न}}
* {{Z|hu}}: {{W+|hu|kérdés}}
* {{Z|mn}}:
*: Kirîlî: {{W+|mn|асуудал}}
* {{Z|nv}}: {{W-|nv|naʼídíkid}}
* {{Z|ne}}: {{W-|ne|प्रश्न}}
* {{Z|nrf}}: {{W-|nrf|tchestchion|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|spørsmål|nt}}
*: {{Z|nn}}: {{W-|nn|spørsmål|nt}}
* {{Z|oc}}: {{W+|oc|question|m}}
* {{Z|or}}: {{W+|or|ପ୍ରଶ୍ନ}}
* {{Z|om}}: {{W-|om|gaaffii}}
* {{Z|os}}: {{W-|os|фарста}}, {{W-|os|фарст}}
* {{Z|ug}}: {{W-|ug|سوئلا}}, {{W-|ug|سوراق}}
* {{Z|uz}}: {{W+|uz|soʻroq}}, {{W+|uz|savol}}
* {{Z|ps}}: {{W+|ps|پوښتنه|m|tr=puӽtᶕna}}, {{W+|ps|سوال|n|tr=swāl}}, {{W-|ps|مسأله|m|tr=masalá}}
* {{Z|pl}}: {{W+|pl|pytanie|nt}}
* {{Z|pt}}: {{W+|pt|questão|m}}, {{W+|pt|pergunta|m}}
* {{Z|pa}}: {{W+|pa|ਸਵਾਲ}}, {{W-|pa|ਪ੍ਰਸ਼ਨ|n}}
* {{Z|kk}}: {{W-|kk|сұрақ}}, {{W-|kk|сұрау}}, {{W+|kk|сауал}}
* {{Z|rm}}: {{W-|rm|dumonda|m}}
* {{Z|ro}}: {{W+|ro|întrebare|m}}
* {{Z|ru}}: {{W+|ru|вопро́с|n}}
* {{Z|se}}: {{W-|se|gažaldat}}, {{W-|se|jearaldat}}
* {{Z|sma}}: {{W-|sma|gyhtjelasse}}
* {{Z|sms}}: {{W-|sms|kõõččmoš}}
* {{Z|sa}}: {{W+|sa|प्रश्न}}, {{W+|sa|पृच्छा|m}}
* {{Z|scn}}: {{W+|scn|dumanna|m}}, {{W+|scn|dimanna|m}}, {{W+|scn|dimanna|m}}, {{W+|scn|dumanna|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|пи́та̄ње|nt}}
*: Latînî: {{W+|sh|pítānje|nt}}
* {{Z|sco}}: {{W-|sco|quaisten}}
* {{Z|cu}}:
*: Kirîlî: {{W-|cu|пытаниѥ|nt}}, {{W-|cu|вопросъ|n}}
* {{Z|orv}}: {{W-|orv|пытаниѥ|nt}}
* {{Z|sk}}: {{W+|sk|otázka|m}}
* {{Z|sl}}: {{W+|sl|vprašanje|nt}}
* {{Z|es}}: {{W+|es|pregunta|m}}, {{W+|es|cuestión|m}}
* {{Z|sw}}: {{W+|sw|swali}}
* {{Z|sv}}: {{W+|sv|fråga|g}}, {{W+|sv|spörsmål|nt}}, {{W-|sv|spörjning|g}}
* {{Z|cjs}}: {{W-|cjs|сурағ|tr=surağ}}
* {{Z|tab}}: {{W-|tab|суал}}
* {{Z|tg}}: {{W-|tg|пурсиш}}, {{W+|tg|савол}}
* {{Z|tl}}: {{W+|tl|tanong}}
* {{Z|ta}}: {{W+|ta|கேள்வி}}
* {{Z|twf}}: {{W-|twf|cìakǫ’óna}}
* {{Z|th}}: {{W+|th|คำถาม}}
* {{Z|te}}: {{W+|te|ప్రశ్న}}
* {{Z|crh}}: {{W-|crh|sual}}
* {{Z|tt}}: {{W-|tt|сорау}}
* {{Z|ti}}: {{W-|ti|ሕቶ}}
* {{Z|tr}}: {{W+|tr|soru}}
* {{Z|tk}}: {{W-|tk|sorag}}, {{W-|tk|sowal}}
* {{Z|bo}}: {{W-|bo|དོགས་གནད}}
* {{Z|txb}}: {{W-|txb|prāśśäṃ}}
* {{Z|tyv}}: {{W-|tyv|айтырыг}}
* {{Z|ur}}: {{W-|ur|سوال|n|tr=savāl}}
* {{Z|uk}}: {{W+|uk|пита́ння|nt}}
* {{Z|vec}}: {{W-|vec|dimanda|m}}
* {{Z|vi}}: {{W+|vi|câu hỏi}}
* {{Z|vo}}: {{W+|vo|säk}}
* {{Z|war}}: {{W-|war|paki-ana}}, {{W-|war|pangutana}}
* {{Z|cy}}: {{W+|cy|cwestiwn|n}}
* {{Z|kjh}}: {{W-|kjh|сурағ}}, {{W-|kjh|сурығ}}
* {{Z|km}}: {{W-|km|សំនួរ}}
* {{Z|sah}}: {{W-|sah|ыйытыы}}
* {{Z|yi}}: {{W-|yi|פֿראַגע|m}}
* {{Z|yo}}: {{W-|yo|ìbéèrè}}
* {{Z|esu}}: {{W-|esu|apyun}}
* {{Z|el}}: {{W+|el|ερώτηση|m}}
*: Kevn: {{W-|grc|ἐρώτημα|nt}}
{{werger-bin}}
:{{werger çavkanî|en|question|oldid=75627421|beş=Ev qismê Wergerê}}
ibwgzrou85464veqiak2q2f7wsmca0p
firîn
0
4592
6342841
6306790
2026-08-27T07:11:41Z
Wikihez
7344
6342841
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* fi[[ř]]în, firrîn
* {{IPA|ku|/fɪ'ri:n/}}
* {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-firîn.wav|dever=Bidlîs}}
* {{ku-kîte}}
=== Lêker ===
{{ku-tewîn-lk|firîn|form=negerguhêz|niha=fir|borî=firî|borî2=firiya}}
[[Wêne:Flying Falcon.jpg|thumb|[[baz|Bazek]] '''difire'''.]]
{{lêker|ku|c=x-ngh}}, {{r-ya req}}
# Li [[hewa]] [[meşîn]], li hewa [[livîn]], li hewa [[hatin]] û [[çûn]], li hewa ji derekê [[gihiştin]] derek din.
#: {{nm|ku|Ma fîl jî '''difirin'''?!}}
# [[rabûn|Rabûn]] hewa û li hewa çûn.
#: {{nm|ku|Baz ji cihê xwe '''firî''' û hinda bû.}}
# Bi [[firoke]]yê [[hatin]] yan [[çûn]].
#: {{nm|ku|Ji Almanyayê '''firîn''' Kurdistanê.}}
==== Bi alfabeyên din ====
* {{ku-ar|فڕین}}
==== Formên alternatîv ====
* {{g|ku|firrîn}}
==== Jê ====
{{kol3|ku|cure=Jê
|firandin
|firgeh
|firinde
|firok
|firoke
|firokegeh
|firokexane
|hilfirîn
}}
==== Têkildar ====
* {{g|ku|pirîn}}
==== Etîmolojî ====
Hevreha soranî {{g|ckb|فڕین|tr=firrîn}}, [[kurdiya başûrî]] [[perrîn]], [[şahzênî]] / [[şêxbizinî]] [[perandin]], [[elperandin]], zazakî [[firrayene]], [[perrayene]], hewramî [[firrey]], farisî {{g|fa|پریدن}} (perîden), pehlewî ''perîten'', [[hevreh]]ên din ya kurmancî [[fir]], [[per]], [[pel]](ên daran), [[pelg]], [[belg]], sanskrîtî [[पत्त्र]] (pettre: per), rusî [[перо́ ]](peró: per), yûnaniya kevn [[πτερόν]] (ptêron: per, çeng, bask), lîtwanî [[sparnas]] (firîn), îngilîziya kevn û navîn [[feþer]] (per), îngilîziya nû [[feather]] (per), almanî [[Feder]], latînî [[penna]] (< *petna)... hemû ji {{ji|ine-pro|ku|-}} *[[péth₂r̥]] ([[per]], [[bask]], [[çeng]]) ji *[[peth₂-]] (firîn) e ku serekaniya avestayî [[𐬞𐬀𐬙𐬀𐬌𐬙𐬌]] (peteyti: firîn), sanskrîtî [[पतति]] (peteti: firîn), latînî [[petō]] (firîn)... e. [[ფრენა]] (prêna) ya gurcî belkî ji îranî be lê ji ber dengê firînê di gelek zimanan de ew bi dengekê wek "per-" e: bo nimûne aramî [[ܦܪܚ]] (prex), îbranî [[פרח]] (pirex). Tevî ku "firîn" ya kurdî dişibe "[[fly]]" ya îngilîzî û [[voler]] ya fransî jî, ew ne [[hevreh]] in. Heta niha di hin peyvên îranî yan hindûewropî de P di bin tesîra erebî de dibû F (bo nimûne: [[fisteq]] ji [[piste]], bi pehlewî ''pisteg''). Lê di "firîn"ê de ne ji tesîra erebî ye ji ber ku ew peyv neketiye erebî. Heman diyardeya guherîna P bi F bi awayekê gelek berbelavtir di zimanên germenî de diyar e. Bo nimûne kurdî "[[pênc]]" lê almanî [[fünf]], swêdî [[fem]] û îngilîzî [[five]].
==== Bide ber====
* {{g|ku|birîn}}
* {{g|ku|fûrîn}}
==== Bi zaravayên din ====
* {{Z|zza}}: {{W-|zza|firayene}}, perayene, fir, dayene, raperayene
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|fliegen}}, {{W|de|Abflug}} {{n}}, {{W|de|Flug}} {{n}}, {{W|de|Flattern}}, {{W|de|Fliehen}}, {{W|de|abfliegen}}, {{W|de|aufwinden}}, {{W|de|flattern}}, {{W|de|fliehen}}, {{W|de|in die Höhe ragen}}, {{W|de|verfliegen}}
* {{Z|zh}}: {{W|zh|飛}}, {{W|zh|飞}}
* {{Z|da}}: {{W|da|flyve}}
* {{Z|id}}: {{W|id|terbang}}, {{W|id|layang}}
* {{Z|ar}}: {{W|ar|طار|tr=țare}}, {{W|ar|الطیران|guman=erê}}, {{W|ar|تحليق|guman=erê}}, {{W|ar|طيران|guman=erê}}
* {{Z|eo}}: {{W|eo|lendama}}
* {{Z|fa}}: {{W-|fa|پرواز کردن|tr=pervaz kerden}}, [[پریدن]] (perîden), {{W|fa|پریدن}}, {{W|fa|پرواز}}, {{W|fa|جست}}, {{W|fa|بر فشاندن|guman=erê}}
* {{Z|fi}}: {{W|fi|lentää}}
* {{Z|fr}}: {{W|fr|voler}}
* {{Z|gn}}: {{W|gn|veve}}
* {{Z|nl}}: {{W|nl|vliegen}}
* {{Z|he}}: {{W|he|טס}}
* {{Z|io}}: {{W|io|flugar}}
* {{Z|ilo}}: {{W|ilo|agtayab}}
* {{Z|en}}: (to) [[fly]], {{W|en|flight}}, {{W|en|levitate}}, {{W|en|skirr}}, {{W|en|soar}}, {{W|en|volatilize}}, {{W|en|whirr}}, {{W|en|whirring}}, {{W|en|take wing}}, {{W|en|flit}}, {{W|en|flutier|guman=erê}}, {{W|en|flutter|guman=erê}}, {{W|en|flypast|guman=erê}}, {{W|en|levitating|guman=erê}}, {{W|en|volatilization|guman=erê}}
* {{Z|it}}: {{W|it|volare}}
* {{Z|ja}}: {{W|ja|飛ぶ|tr=[[とぶ]], tobu}}
* {{Z|pl}}: {{W|pl|latać}}
* {{Z|pt}}: {{W|pt|voar}}
* {{Z|ro}}: {{W|ro|zbura}}
* {{Z|ru}}: {{W|ru|летать}}, {{W|ru|лететь}}
* {{Z|sh}}: {{W|sh|letjeti}}
* {{Z|sk}}: {{W|sk|lietať}}
* {{Z|es}}: {{W|es|volar}}
* {{Z|sv}}: {{W|sv|flyga}}
* {{Z|tl}}: {{W|tl|lumupad}}
* {{Z|tr}}: {{W|tr|uçmak}}, {{W|tr|kırılmak}}, {{W|tr|uçma}}, {{W|tr|uçum|guman=erê}}, {{W|tr|uçuş|guman=erê}}, {{W|tr|havalanma|guman=erê}}
* {{Z|tpi}}: {{W|tpi|flai}}
* {{Z|tpn}}: {{W|tpn|bebé}}
{{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}}
== {{ziman|ckb}} ==
=== Lêker ===
{{lêker|ckb|sc=Latn}}
# {{g|ku|firîn}}, [[firiyan]]
#* {{bênimûne|ckb}}
gbftobl2tnbbf40isf0s65nc3a1fsok
firandin
0
4598
6342842
6306696
2026-08-27T07:12:14Z
Wikihez
7344
[[Bikarhêner:Wikihez/templateScript2.js|TS]]: sererastkirin
6342842
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Lêker ===
{{ku-tewîn-lk|firandin|form=gerguhêz|niha=firîn|borî=firand}}
{{lêker|ku|c=x-gh}}, {{r-ya req}}
# dan [[firîn]], wisan kirin ku tiştek bifire
#: {{nimûne|ku|Çivîkan ji seer [[gulberoj]]an '''bifirîne'''.}}
#: {{nimûne|ku|Ew [[firoke]]yan '''difirîne'''.|[[pîlot]] e|rêz=1}}
# {{f|ku|mecazî}} mezinkirin, zêdepesinandin
#* {{bêmînak|ku}}
==== Bi alfabeyên din ====
* {{ku-ar|فڕاندن}}
==== Têkildar ====
* {{g|ku|firinde}}
* {{g|ku|firok}}
* {{g|ku|firoke}}
* {{g|ku|firokegeh}}
* {{g|ku|firokexane}}
==== Etîmolojî ====
Ji {{paş|ku|fir|-andin}}.
==== Bide ber ====
* {{g|ku|pirandin}}
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|fliegen lassen}}
* {{Z|ar}}: {{W|ar|التطییر|guman=erê}}
* {{Z|fa}}: {{W|fa|پرتاب کردن}}
* {{Z|en}}: {{W|en|whiffle}}, {{W|en|whiffet}}, {{W|en|levitate|guman=erê}}, {{W|en|volatilize|guman=erê}}, {{W|en|send flying|guman=erê}}
* {{Z|tr}}: {{W|tr|ıslık çalmak}}, {{W|tr|kaçırma}}, {{W|tr|kırmak}}, {{W|tr|savurma}}, {{W|tr|uçurma}}, {{W|tr|uçurmak}}, {{W|tr|ıslıklamak|guman=erê}}, {{W|tr|kaçırmak|guman=erê}}, {{W|tr|burkma|guman=erê}}
{{werger-bin}}
=== Navdêr ===
{{navdêr|ku|z=m}}, {{r-ya req}}
# dan [[firîn]], wisan kirin ku tiştek bifire
#* {{bêmînak|ku}}
# {{f|ku|mecazî}} [[mezinkirin]], zêdepesinandin
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Werger ====
{{werger-ser}}
{{werger-bin}}
f35kywsicq33yjp9yliuytq8vablzx7
nihal
0
5687
6342865
6337999
2026-08-27T08:10:03Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342865
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr 1 ===
[[Wêne:Georgia, Khevi, Suatisi Valley - Village Suatisi.jpg|thumb|Nihalek.]]
{{navdêr|ku|z=m}}
# {{f|ku|erdnîgarî}} [[newal]], [[dol]], [[gelî|geliyên]] [[biçûk]]
#* {{bênimûne|ku}}
#* {{J:Shamdinani Stories I:2026|rûpel=40|jêgirtin=Dibêjin di '''nihalekê''' da rîwîyek hebû. Awek nîw boş bi nîweka '''nihalê''' da dihate xar. Bazeberek hebû, rîwî lê derbaz dibû her wextê ḥez kiriba.}}
==== Ji wêjeya klasîk ====
* {{J:Melayê Cizîrî:Dîwana Melayê Cizîrî|jêgirtin=Tu ji nayê di sema'ê bike bawer meke behs<br />Bi wê '''nihal'''ê bi deraxûş û bidê canê şirîn<br />Şaxê 'umrê bixwe ber jê we ji Qeyser meke behs}}
==== Bi alfabeyên din ====
* {{ku-ar|نهال}}
==== Formên alternatîv ====
* [[nehal]]
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|ar}}: {{W-|ar|الضاهر|guman=erê}}, {{W-|ar|الضهر|guman=erê}}, {{W-|ar|العـرض|guman=erê}}, {{W-|ar|النوض|guman=erê}}, {{W+|ar|الوادي|guman=erê}}, {{W-|ar|الولاج|guman=erê}}
* {{Z|en}}: {{W+|en|gorge|guman=erê}}, {{W+|en|gully|guman=erê}}, {{W+|en|vale|guman=erê}}, {{W+|en|valley|guman=erê}}, {{W+|en|dene|guman=erê}}, {{W+|en|nullah|guman=erê}}, {{W+|en|house slipper|guman=erê}}
{{werger-bin}}
=== Navdêr 2 ===
{{navdêr|ku|z=?}}
# [[nial]], [[şimik]]
#* {{bênimûne|ku}}
tvn054d8c62eei9natf9jsdqzbanwg0
firoke
0
9138
6342843
6335385
2026-08-27T07:12:27Z
Wikihez
7344
6342843
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}, {{r-ya req}}
# [[balafir]], [[teyare]], [[makîne]]yên pê[[firîn]]ê, <br>[[alav]]ên pê[[firîn]]ê yên ku bo [[firandin]]a [[nefer]]an yan jî bo [[leşker]]an tên [[bikaranîn]]
#: '''''firoke'''yên sivîl''
#: '''''firoke'''yên [[ceng]]ê''
#* {{J:Xelîl Duhokî:Antolojiya Çîroka Nû ya Kurmancên Başûr|jêgirtin=Neçe ... ma te haj qîreqîra '''firokêt''' seybaba nîne... Nê li vêrê guhêt me kerr kirin.}}
#* {{J:K. Mezher Ehmed:Çend Rûpel Ji Dîroka Gelê Kurd|jêgirtin=Arnold Wilson neçar ma Bexdad bi cî bihêle û bi '''firokeyek''' taybetî biçe wir}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Formên alternatîv ====
* [[firroke]]
* [[froke]]
==== Jê ====
* [[firokevan]]
* [[firokevanî]]
==== Etîmolojî ====
[[firîn|fir]] + [[-ok]] + [[-e]]
==== Bide ber ====
* [[firok]]
==== Cûnên firokeyan ====
* [[helîkopter]]
* [[firoka bêmirov]]
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|Flugzeug|n}}, {{W|de|Flieger|m}}, {{W|de|Hubschrauber|m}}
* {{Z|bm}}: {{W|bm|sannakurun}}
* {{Z|my}}: {{W|my|ေလယာဥ္ပံ}} (leyaiɲpǝ̃)
* {{Z|zh}}:
*: (''sade''): [[飞机]] (fēi.jī)
*: (''kevnare''): {{W|zh|飛機}} (fēi.jī)
* {{Z|ar}}: {{W|ar|َطَائِرة}} (taîre)
* {{Z|eo}}: {{W|eo|aeroplano}}
* {{Z|fa}}: {{W|fa|هواپیما}}
* {{Z|fi}}: {{W|fi|lentokone}}
* {{Z|fr}}: {{W|fr|avion}}
* {{Z|fur}}: {{W|fur|avion}}
* {{Z|nl}}: {{W|nl|vliegtuig}}
* {{Z|he}}: {{W|he|מָטוֹס}} (maṭos); {{W|he|אֲוִירוֹן}} (avyron)
* {{Z|io}}: {{W|io|aviono}}, {{W|io|aeroplano}}
* {{Z|en}}: {{W|en|aeroplane}}, {{W|en|airplane}}, {{W|en|plane}}, {{W|en|aircraft|guman=erê}}, {{W|en|airoran|guman=erê}}, {{W|en|avion|guman=erê}}
* {{Z|it}}: {{W|it|aereo}}
* {{Z|ja}}: {{W|ja|飛行機}} (ひこうき)
* [[kantonî]]: [[飛機]] (fèi.gèi)
* {{Z|ca}}: {{W|ca|avió}}
* {{Z|hu}}: {{W|hu|repülőgép}}
* {{Z|no}}: {{W|no|fly}}
* {{Z|pt}}: {{W|pt|avião}}
* {{Z|ro}}: {{W|ro|avion#Roumain}}
* {{Z|ru}}: {{W|ru|самолёт}} (samolǒt)
* {{Z|sc}}: {{W|sc|abioni}}
* {{Z|sh}}: {{W|sh|avion}}
* {{Z|sh}}: {{W|sh|авион}} (avion)
* {{Z|sl}}: {{W|sl|avion}}
* {{Z|es}}: {{W|es|avión}}
* {{Z|sv}}: {{W+|sv|flygplan}}
* {{Z|tl}}: {{W|tl|eropláno}}
* {{Z|th}}: {{W|th|เครื่องบิน}} (kʰrɨaŋbin)
* {{Z|tr}}: {{W|tr|uçak}}, {{W|tr|palaz}}, {{W|tr|uçar}}, {{W|tr|uçucu}}
* {{Z|bo}}: {{W|bo|ག་ནམ་གུྲ་}} (nǝm.ɖu)
* {{Z|tpi}}: {{W|tpi|balus}}
* [[valensî]]: [[avio]]
* {{Z|wa}}: {{W|wa|aviyon}}
{{werger-bin}}
6es4pi4lsntdz528y6lodz1fo34huiz
emir
0
9801
6342866
6335313
2026-08-27T08:15:48Z
Wikihez
7344
[[Bikarhêner:Wikihez/templateScript2.js|TS]]: sererastkirin
6342866
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr 1 ===
{{navdêr|ku|z=n}}
# [[gotin|Gotin]]a kesek dibêje û [[divê]] kesek din wek wê gotinê bike.
#: {{hevmane|ku|ferman|ferwar}}
#: {{nimûne|ku|Serokê wan '''emrê''' rawestandina şerrî daye.|Serokê wan gotiye ku nabe şerr bêt kirin.|rêz=1}}
==== Tewandin ====
{{ku-tewîn-nav/nû|nêr}}
==== Formên alternatîv ====
* {{g|ku|emr}}
==== Jê ====
{{kol3|ku|cure=Jê
|emir dan<q:lêker>
|emir kirin<q:lêker>
|emir wergirtin
|emirdan<q:navdêr>
|emirkirin<q:navdêr>
|emirwergirtin<q:navdêr>
|emirdayî<q:rengdêr>
|emirkirî<q:rengdêr>
|emirwergirtî
|binemir
|binemirî
|emirber
|emiberî
|emirdar
|emirdarî
|emirder
|emiderî
|emirname
|emîr
|emîrat
|mîr
|mîrî
|mîrîtî
|mîrnişîn
|mîrnişînî
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|أمر|tr=emr|w=[[ferman]], [[ragihandin]]}}, {{g|ar|أمر|tr=emere|w=[[ferman]] dan/kirin}}, hevreha aramî û îbranî ''[[אמר]]'' (e-m-r-: [[gotin]], [[ferman]] kirin), {{ji|akk|ku|emaru|w=dîtin, ketin ber çavan}} ji {{ji|sem-pro}}.
==== Werger ====
{{werger-ser}}
* {{Z|fa}}: {{W+|fa|پروانگی}}, {{W+|fa|فرمان}}, {{W+|fa|دستور}}
* {{Z|en}}: {{W+|en|behest}}, {{W+|en|decree}}, {{W+|en|command}}, {{W+|en|rule}}, {{W+|en|ukase|guman=erê}}
* {{Z|tr}}: {{W+|tr|ferman}}, {{W+|tr|komut}}
{{werger-bin}}
=== Navdêr 1 ===
{{navdêr|ku|z=n}}
# (salên jiyanê) {{rastnivîs|imr}}
#* {{J:Firat Cewerî:Girtî:1986|jêgirtin=Hemîdo yekî dirêj û zeyif bû. '''Emrê''' wî an çil hebû an tunebû. Lê porê wî spî bûbû.}}
== {{ziman|en}} ==
=== Navdêr ===
{{navdêr|en}}
# [[mîr]] <ref>Ferhenga Kurdî-Îngîlîzî ya Salah Sadallah</ref>
#* {{bêmînak|en}}
=== Çavkanî ===
{{çavkanî}}
== {{ziman|tr}} ==
=== Navdêr ===
{{navdêr|tr}}
# [[ferman]], [[ferwar]], emir
#: {{mk|tr|ikide bir bana dönüp benden bir '''emrim''' olup olmadığını soruyordu|hema car caran li min difetilî û dipirsî ka fermaneke min heye an na}}
# [[fermanname]], [[emirname]]
#: {{mk|tr|atama '''emri''' hâlâ çıkmadı|fermannameya tayînkirinê hîna derneketiye|rêz=1}}
cj2pl6e2tz1l9ahwswuyuldljdqccay
6342867
6342866
2026-08-27T08:16:36Z
Wikihez
7344
/* Navdêr 1 */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342867
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr 1 ===
{{navdêr|ku|z=n}}
# [[gotin|Gotin]]a kesek dibêje û [[divê]] kesek din wek wê gotinê bike.
#: {{hevmane|ku|ferman|ferwar}}
#: {{nimûne|ku|Serokê wan '''emrê''' rawestandina şerrî daye.|Serokê wan gotiye ku nabe şerr bêt kirin.|rêz=1}}
==== Tewandin ====
{{ku-tewîn-nav/nû|nêr}}
==== Formên alternatîv ====
* {{g|ku|emr}}
==== Jê ====
{{kol3|ku|cure=Jê
|emir dan<q:lêker>
|emir kirin<q:lêker>
|emir wergirtin
|emirdan<q:navdêr>
|emirkirin<q:navdêr>
|emirwergirtin<q:navdêr>
|emirdayî<q:rengdêr>
|emirkirî<q:rengdêr>
|emirwergirtî
|binemir
|binemirî
|emirber
|emiberî
|emirdar
|emirdarî
|emirder
|emiderî
|emirname
|emîr
|emîrat
|mîr
|mîrî
|mîrîtî
|mîrnişîn
|mîrnişînî
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|أمر|tr=emr|w=[[ferman]], [[ragihandin]]}}, {{g|ar|أمر|tr=emere|w=[[ferman]] dan/kirin}}, hevreha aramî û îbranî ''[[אמר]]'' (e-m-r-: [[gotin]], [[ferman]] kirin), {{ji|akk|ku|emaru|w=dîtin, ketin ber çavan}} ji {{ji|sem-pro}}.
==== Werger ====
{{werger-ser}}
* {{Z|fa}}: {{W+|fa|پروانگی}}, {{W+|fa|فرمان}}, {{W+|fa|دستور}}
* {{Z|en}}: {{W+|en|behest}}, {{W+|en|decree}}, {{W+|en|command}}, {{W+|en|rule}}, {{W+|en|ukase|guman=erê}}
* {{Z|tr}}: {{W+|tr|ferman}}, {{W+|tr|komut}}
{{werger-bin}}
=== Navdêr 2 ===
{{navdêr|ku|z=n}}
# (salên jiyanê) {{rastnivîs|imr}}
#* {{J:Firat Cewerî:Girtî:1986|jêgirtin=Hemîdo yekî dirêj û zeyif bû. '''Emrê''' wî an çil hebû an tunebû. Lê porê wî spî bûbû.}}
== {{ziman|en}} ==
=== Navdêr ===
{{navdêr|en}}
# [[mîr]] <ref>Ferhenga Kurdî-Îngîlîzî ya Salah Sadallah</ref>
#* {{bêmînak|en}}
=== Çavkanî ===
{{çavkanî}}
== {{ziman|tr}} ==
=== Navdêr ===
{{navdêr|tr}}
# [[ferman]], [[ferwar]], emir
#: {{mk|tr|ikide bir bana dönüp benden bir '''emrim''' olup olmadığını soruyordu|hema car caran li min difetilî û dipirsî ka fermaneke min heye an na}}
# [[fermanname]], [[emirname]]
#: {{mk|tr|atama '''emri''' hâlâ çıkmadı|fermannameya tayînkirinê hîna derneketiye|rêz=1}}
lk9x1a53vqd0w2pf9bcxz3v8y6co7d7
6342868
6342867
2026-08-27T08:17:59Z
Wikihez
7344
6342868
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr 1 ===
{{navdêr|ku|z=n}}
# [[gotin|Gotin]]a kesek dibêje û [[divê]] kesek din wek wê gotinê bike.
#: {{hevmane|ku|ferman|ferwar}}
#: {{nimûne|ku|Serokê wan '''emrê''' rawestandina şerrî daye.|Serokê wan gotiye ku nabe şerr bêt kirin.|rêz=1}}
==== Tewandin ====
{{ku-tewîn-nav/nû|nêr}}
==== Formên alternatîv ====
* {{g|ku|emr}}
==== Jê ====
{{kol3|ku|cure=Jê
|emir dan<q:lêker>
|emir kirin<q:lêker>
|emir wergirtin
|emirdan<q:navdêr>
|emirkirin<q:navdêr>
|emirwergirtin<q:navdêr>
|emirdayî<q:rengdêr>
|emirkirî<q:rengdêr>
|emirwergirtî
|binemir
|binemirî
|emirber
|emiberî
|emirdar
|emirdarî
|emirder
|emiderî
|emirname
|emîr
|emîrat
|mîr
|mîrî
|mîrîtî
|mîrnişîn
|mîrnişînî
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|أمر|tr=emr|w=[[ferman]], [[ragihandin]]}}, {{g|ar|أمر|tr=emere|w=[[ferman]] dan/kirin}}, hevreha aramî û îbranî ''[[אמר]]'' (e-m-r-: [[gotin]], [[ferman]] kirin), {{ji|akk|ku|emaru|w=dîtin, ketin ber çavan}} ji {{ji|sem-pro}}.
==== Werger ====
{{werger-ser}}
* {{Z|fa}}: {{W+|fa|پروانگی}}, {{W+|fa|فرمان}}, {{W+|fa|دستور}}
* {{Z|en}}: {{W+|en|behest}}, {{W+|en|decree}}, {{W+|en|command}}, {{W+|en|rule}}, {{W+|en|ukase|guman=erê}}
* {{Z|tr}}: {{W+|tr|ferman}}, {{W+|tr|komut}}
{{werger-bin}}
=== Navdêr 2 ===
{{navdêr|ku|z=n}}
# (salên jiyanê) {{rastnivîs|imr}}
#* {{J:Firat Cewerî:Girtî:1986|jêgirtin=Hemîdo yekî dirêj û zeyif bû. '''Emrê''' wî an çil hebû an tunebû. Lê porê wî spî bûbû.}}
== {{ziman|en}} ==
=== Navdêr ===
{{navdêr|en}}
# [[mîr]] <ref>Ferhenga Kurdî-Îngîlîzî ya Salah Sadallah</ref>
#* {{bêmînak|en}}
=== Çavkanî ===
{{çavkanî}}
== {{ziman|tr}} ==
=== Navdêr ===
{{navdêr|tr}}
# [[ferman]], [[ferwar]], emir
#: {{mk|tr|ikide bir bana dönüp benden bir '''emrim''' olup olmadığını soruyordu|hema car caran li min difetilî û dipirsî ka fermaneke min heye an na}}
# [[fermanname]], [[emirname]]
#: {{mk|tr|atama '''emri''' hâlâ çıkmadı|fermannameya tayînkirinê hîna derneketiye|rêz=1}}
8mxp4d4ed1qdo9eqowg9q5iunqclc5f
6342869
6342868
2026-08-27T08:48:35Z
Wikihez
7344
/* {{ziman|ku}} */
6342869
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr 1 ===
{{navdêr|ku|z=n}}
# [[gotin|Gotin]]a kesek dibêje û [[divê]] kesek din wek wê gotinê bike.
#: {{hevmane|ku|ferman|ferwar}}
#: {{nm|ku|Serokê wan '''emrê''' rawestandina şerrî daye.|Serokê wan gotiye ku nabe şerr bêt kirin.|rêz=1}}
==== Tewandin ====
{{ku-tewîn-nav/nû|nêr}}
==== Formên alternatîv ====
* {{g|ku|emr}}
==== Jê ====
{{kol3|ku|cure=Jê
|emir dan<q:lêker>
|emir kirin<q:lêker>
|emir wergirtin
|emirdan<q:navdêr>
|emirkirin<q:navdêr>
|emirwergirtin<q:navdêr>
|emirdayî<q:rengdêr>
|emirkirî<q:rengdêr>
|emirwergirtî
|binemir
|binemirî
|emirber
|emiberî
|emirdar
|emirdarî
|emirder
|emiderî
|emirname
|emîr
|emîrat
|mîr
|mîrî
|mîrîtî
|mîrnişîn
|mîrnişînî
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|أمر|tr=emr|w=[[ferman]], [[ragihandin]]}}, {{g|ar|أمر|tr=emere|w=[[ferman]] dan/kirin}}, hevreha aramî û îbranî ''[[אמר]]'' (e-m-r-: [[gotin]], [[ferman]] kirin), {{ji|akk|ku|emaru|w=dîtin, ketin ber çavan}} ji {{ji|sem-pro}}.
==== Werger ====
{{werger-ser}}
* {{Z|fa}}: {{W+|fa|پروانگی}}, {{W+|fa|فرمان}}, {{W+|fa|دستور}}
* {{Z|en}}: {{W+|en|behest}}, {{W+|en|decree}}, {{W+|en|command}}, {{W+|en|rule}}, {{W+|en|ukase|guman=erê}}
* {{Z|tr}}: {{W+|tr|ferman}}, {{W+|tr|komut}}
{{werger-bin}}
=== Navdêr 2 ===
{{navdêr|ku|z=n}}
# (salên jiyanê) {{rastnivîs|imr}}
#* {{J:Firat Cewerî:Girtî:1986|jêgirtin=Hemîdo yekî dirêj û zeyif bû. '''Emrê''' wî an çil hebû an tunebû. Lê porê wî spî bûbû.}}
== {{ziman|en}} ==
=== Navdêr ===
{{navdêr|en}}
# [[mîr]] <ref>Ferhenga Kurdî-Îngîlîzî ya Salah Sadallah</ref>
#* {{bêmînak|en}}
=== Çavkanî ===
{{çavkanî}}
== {{ziman|tr}} ==
=== Navdêr ===
{{navdêr|tr}}
# [[ferman]], [[ferwar]], emir
#: {{mk|tr|ikide bir bana dönüp benden bir '''emrim''' olup olmadığını soruyordu|hema car caran li min difetilî û dipirsî ka fermaneke min heye an na}}
# [[fermanname]], [[emirname]]
#: {{mk|tr|atama '''emri''' hâlâ çıkmadı|fermannameya tayînkirinê hîna derneketiye|rêz=1}}
hgdw5hghiovqu6vyziyub7rr0vpg1tc
6342876
6342869
2026-08-27T09:14:04Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342876
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr 1 ===
{{navdêr|ku|z=n}}
# [[gotin|Gotin]]a kesek dibêje û [[divê]] kesek din wek wê gotinê bike.
#: {{hevmane|ku|ferman|ferwar}}
#: {{nm|ku|Serokê wan '''emrê''' rawestandina şerrî daye.|Serokê wan gotiye ku nabe şerr bêt kirin.|rêz=1}}
#* {{J:Shamdinani Stories I:2026|rûpel=44|jêgirtin=Cenabê mam rîwî çi '''emir''' difermon?}}
==== Tewandin ====
{{ku-tewîn-nav/nû|nêr}}
==== Formên alternatîv ====
* {{g|ku|emr}}
==== Jê ====
{{kol3|ku|cure=Jê
|emir dan<q:lêker>
|emir kirin<q:lêker>
|emir wergirtin
|emirdan<q:navdêr>
|emirkirin<q:navdêr>
|emirwergirtin<q:navdêr>
|emirdayî<q:rengdêr>
|emirkirî<q:rengdêr>
|emirwergirtî
|binemir
|binemirî
|emirber
|emiberî
|emirdar
|emirdarî
|emirder
|emiderî
|emirname
|emîr
|emîrat
|mîr
|mîrî
|mîrîtî
|mîrnişîn
|mîrnişînî
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|أمر|tr=emr|w=[[ferman]], [[ragihandin]]}}, {{g|ar|أمر|tr=emere|w=[[ferman]] dan/kirin}}, hevreha aramî û îbranî ''[[אמר]]'' (e-m-r-: [[gotin]], [[ferman]] kirin), {{ji|akk|ku|emaru|w=dîtin, ketin ber çavan}} ji {{ji|sem-pro}}.
==== Werger ====
{{werger-ser}}
* {{Z|fa}}: {{W+|fa|پروانگی}}, {{W+|fa|فرمان}}, {{W+|fa|دستور}}
* {{Z|en}}: {{W+|en|behest}}, {{W+|en|decree}}, {{W+|en|command}}, {{W+|en|rule}}, {{W+|en|ukase|guman=erê}}
* {{Z|tr}}: {{W+|tr|ferman}}, {{W+|tr|komut}}
{{werger-bin}}
=== Navdêr 2 ===
{{navdêr|ku|z=n}}
# (salên jiyanê) {{rastnivîs|imr}}
#* {{J:Firat Cewerî:Girtî:1986|jêgirtin=Hemîdo yekî dirêj û zeyif bû. '''Emrê''' wî an çil hebû an tunebû. Lê porê wî spî bûbû.}}
5x1zq5i7pjttin5sz2fhqqs779m2wyb
6342877
6342876
2026-08-27T09:15:06Z
Wikihez
7344
Restored revision 6342869 by [[Special:Contributions/Wikihez|Wikihez]] ([[User talk:Wikihez|talk]]) ([[:m:User:Xiplus/TwinkleGlobal|TwinkleGlobal]])
6342877
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr 1 ===
{{navdêr|ku|z=n}}
# [[gotin|Gotin]]a kesek dibêje û [[divê]] kesek din wek wê gotinê bike.
#: {{hevmane|ku|ferman|ferwar}}
#: {{nm|ku|Serokê wan '''emrê''' rawestandina şerrî daye.|Serokê wan gotiye ku nabe şerr bêt kirin.|rêz=1}}
==== Tewandin ====
{{ku-tewîn-nav/nû|nêr}}
==== Formên alternatîv ====
* {{g|ku|emr}}
==== Jê ====
{{kol3|ku|cure=Jê
|emir dan<q:lêker>
|emir kirin<q:lêker>
|emir wergirtin
|emirdan<q:navdêr>
|emirkirin<q:navdêr>
|emirwergirtin<q:navdêr>
|emirdayî<q:rengdêr>
|emirkirî<q:rengdêr>
|emirwergirtî
|binemir
|binemirî
|emirber
|emiberî
|emirdar
|emirdarî
|emirder
|emiderî
|emirname
|emîr
|emîrat
|mîr
|mîrî
|mîrîtî
|mîrnişîn
|mîrnişînî
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|أمر|tr=emr|w=[[ferman]], [[ragihandin]]}}, {{g|ar|أمر|tr=emere|w=[[ferman]] dan/kirin}}, hevreha aramî û îbranî ''[[אמר]]'' (e-m-r-: [[gotin]], [[ferman]] kirin), {{ji|akk|ku|emaru|w=dîtin, ketin ber çavan}} ji {{ji|sem-pro}}.
==== Werger ====
{{werger-ser}}
* {{Z|fa}}: {{W+|fa|پروانگی}}, {{W+|fa|فرمان}}, {{W+|fa|دستور}}
* {{Z|en}}: {{W+|en|behest}}, {{W+|en|decree}}, {{W+|en|command}}, {{W+|en|rule}}, {{W+|en|ukase|guman=erê}}
* {{Z|tr}}: {{W+|tr|ferman}}, {{W+|tr|komut}}
{{werger-bin}}
=== Navdêr 2 ===
{{navdêr|ku|z=n}}
# (salên jiyanê) {{rastnivîs|imr}}
#* {{J:Firat Cewerî:Girtî:1986|jêgirtin=Hemîdo yekî dirêj û zeyif bû. '''Emrê''' wî an çil hebû an tunebû. Lê porê wî spî bûbû.}}
== {{ziman|en}} ==
=== Navdêr ===
{{navdêr|en}}
# [[mîr]] <ref>Ferhenga Kurdî-Îngîlîzî ya Salah Sadallah</ref>
#* {{bêmînak|en}}
=== Çavkanî ===
{{çavkanî}}
== {{ziman|tr}} ==
=== Navdêr ===
{{navdêr|tr}}
# [[ferman]], [[ferwar]], emir
#: {{mk|tr|ikide bir bana dönüp benden bir '''emrim''' olup olmadığını soruyordu|hema car caran li min difetilî û dipirsî ka fermaneke min heye an na}}
# [[fermanname]], [[emirname]]
#: {{mk|tr|atama '''emri''' hâlâ çıkmadı|fermannameya tayînkirinê hîna derneketiye|rêz=1}}
hgdw5hghiovqu6vyziyub7rr0vpg1tc
6342879
6342877
2026-08-27T09:18:34Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342879
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr 1 ===
{{navdêr|ku|z=n}}
# [[gotin|Gotin]]a kesek dibêje û [[divê]] kesek din wek wê gotinê bike.
#: {{hevmane|ku|ferman|ferwar}}
#: {{nm|ku|Serokê wan '''emrê''' rawestandina şerrî daye.|Serokê wan gotiye ku nabe şerr bêt kirin.|rêz=1}}
#* {{J:Shamdinani Stories I:2026|rûpel=44|jêgirtin=Cenabê mam rîwî çi '''emir''' difermon?}}
==== Tewandin ====
{{ku-tewîn-nav/nû|nêr}}
==== Formên alternatîv ====
* {{g|ku|emr}}
==== Jê ====
{{kol3|ku|cure=Jê
|emir dan<q:lêker>
|emir kirin<q:lêker>
|emir wergirtin
|emirdan<q:navdêr>
|emirkirin<q:navdêr>
|emirwergirtin<q:navdêr>
|emirdayî<q:rengdêr>
|emirkirî<q:rengdêr>
|emirwergirtî
|binemir
|binemirî
|emirber
|emiberî
|emirdar
|emirdarî
|emirder
|emiderî
|emirname
|emîr
|emîrat
|mîr
|mîrî
|mîrîtî
|mîrnişîn
|mîrnişînî
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|أمر|tr=emr|w=[[ferman]], [[ragihandin]]}}, {{g|ar|أمر|tr=emere|w=[[ferman]] dan/kirin}}, hevreha aramî û îbranî ''[[אמר]]'' (e-m-r-: [[gotin]], [[ferman]] kirin), {{ji|akk|ku|emaru|w=dîtin, ketin ber çavan}} ji {{ji|sem-pro}}.
==== Werger ====
{{werger-ser}}
* {{Z|fa}}: {{W+|fa|پروانگی}}, {{W+|fa|فرمان}}, {{W+|fa|دستور}}
* {{Z|en}}: {{W+|en|behest}}, {{W+|en|decree}}, {{W+|en|command}}, {{W+|en|rule}}, {{W+|en|ukase|guman=erê}}
* {{Z|tr}}: {{W+|tr|ferman}}, {{W+|tr|komut}}
{{werger-bin}}
=== Navdêr 2 ===
{{navdêr|ku|z=n}}
# (salên jiyanê) {{rastnivîs|imr}}
#* {{J:Firat Cewerî:Girtî:1986|jêgirtin=Hemîdo yekî dirêj û zeyif bû. '''Emrê''' wî an çil hebû an tunebû. Lê porê wî spî bûbû.}}
== {{ziman|en}} ==
=== Navdêr ===
{{navdêr|en}}
# [[mîr]] <ref>Ferhenga Kurdî-Îngîlîzî ya Salah Sadallah</ref>
#* {{bêmînak|en}}
=== Çavkanî ===
{{çavkanî}}
== {{ziman|tr}} ==
=== Navdêr ===
{{navdêr|tr}}
# [[ferman]], [[ferwar]], emir
#: {{mk|tr|ikide bir bana dönüp benden bir '''emrim''' olup olmadığını soruyordu|hema car caran li min difetilî û dipirsî ka fermaneke min heye an na}}
# [[fermanname]], [[emirname]]
#: {{mk|tr|atama '''emri''' hâlâ çıkmadı|fermannameya tayînkirinê hîna derneketiye|rêz=1}}
tau52shrao45f0mplyrvt8ultrpsgag
6342886
6342879
2026-08-27T10:12:15Z
Balyozbot
7867
Bot: Paqijiyên kozmetîk (Lînk paqij kir.)
6342886
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr 1 ===
{{navdêr|ku|z=n}}
# [[gotin|Gotina]] kesek dibêje û [[divê]] kesek din wek wê gotinê bike.
#: {{hevmane|ku|ferman|ferwar}}
#: {{nm|ku|Serokê wan '''emrê''' rawestandina şerrî daye.|Serokê wan gotiye ku nabe şerr bêt kirin.|rêz=1}}
#* {{J:Shamdinani Stories I:2026|rûpel=44|jêgirtin=Cenabê mam rîwî çi '''emir''' difermon?}}
==== Tewandin ====
{{ku-tewîn-nav/nû|nêr}}
==== Formên alternatîv ====
* {{g|ku|emr}}
==== Jê ====
{{kol3|ku|cure=Jê
|emir dan<q:lêker>
|emir kirin<q:lêker>
|emir wergirtin
|emirdan<q:navdêr>
|emirkirin<q:navdêr>
|emirwergirtin<q:navdêr>
|emirdayî<q:rengdêr>
|emirkirî<q:rengdêr>
|emirwergirtî
|binemir
|binemirî
|emirber
|emiberî
|emirdar
|emirdarî
|emirder
|emiderî
|emirname
|emîr
|emîrat
|mîr
|mîrî
|mîrîtî
|mîrnişîn
|mîrnişînî
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|أمر|tr=emr|w=[[ferman]], [[ragihandin]]}}, {{g|ar|أمر|tr=emere|w=[[ferman]] dan/kirin}}, hevreha aramî û îbranî ''[[אמר]]'' (e-m-r-: [[gotin]], [[ferman]] kirin), {{ji|akk|ku|emaru|w=dîtin, ketin ber çavan}} ji {{ji|sem-pro}}.
==== Werger ====
{{werger-ser}}
* {{Z|fa}}: {{W+|fa|پروانگی}}, {{W+|fa|فرمان}}, {{W+|fa|دستور}}
* {{Z|en}}: {{W+|en|behest}}, {{W+|en|decree}}, {{W+|en|command}}, {{W+|en|rule}}, {{W+|en|ukase|guman=erê}}
* {{Z|tr}}: {{W+|tr|ferman}}, {{W+|tr|komut}}
{{werger-bin}}
=== Navdêr 2 ===
{{navdêr|ku|z=n}}
# (salên jiyanê) {{rastnivîs|imr}}
#* {{J:Firat Cewerî:Girtî:1986|jêgirtin=Hemîdo yekî dirêj û zeyif bû. '''Emrê''' wî an çil hebû an tunebû. Lê porê wî spî bûbû.}}
== {{ziman|en}} ==
=== Navdêr ===
{{navdêr|en}}
# [[mîr]] <ref>Ferhenga Kurdî-Îngîlîzî ya Salah Sadallah</ref>
#* {{bêmînak|en}}
=== Çavkanî ===
{{çavkanî}}
== {{ziman|tr}} ==
=== Navdêr ===
{{navdêr|tr}}
# [[ferman]], [[ferwar]], emir
#: {{mk|tr|ikide bir bana dönüp benden bir '''emrim''' olup olmadığını soruyordu|hema car caran li min difetilî û dipirsî ka fermaneke min heye an na}}
# [[fermanname]], [[emirname]]
#: {{mk|tr|atama '''emri''' hâlâ çıkmadı|fermannameya tayînkirinê hîna derneketiye|rêz=1}}
rr2kgxc50wmix7injrjbei6dqu933dn
zexm
0
12644
6342778
6337004
2026-08-26T20:32:17Z
Wikihez
7344
/* Rengdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342778
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Rengdêr ===
{{ku-tewîn-rd|zexm}}
{{rengdêr|ku}}
# {{rastnivîs|zexim}}
#* {{J:Hawar:1998:2|r=762|hj=52|sernav=Roviyê Ker|nivîskar=w:Osman Sebrî|jêgirtin=(...) Gurî bûbû qels û rût/ Roviyekî '''zexm''' û têr / Jê ra dike silavê (...)}}
#* {{J:Mele Xelîlê Sêrtî:Nehc-ul Enam:1988|jêgirtin=Li wî qametek mu'tedil bû letîf, / Ne kurt û dirêj û ne '''zexm''' û zeîf.}}
#* {{J:Mehmed Uzun:Hawara Dîcleyê 1:2003|jêgirtin=Tevî vê yekê av gur, pêl bi '''zexm''' û doraliyên bihurê tijî kevir bûn.}}
8btawubf5dfpgjnr36la3ea1jy6o01k
6342779
6342778
2026-08-26T20:35:41Z
Wikihez
7344
/* Rengdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342779
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Rengdêr ===
{{ku-tewîn-rd|zexm}}
{{rengdêr|ku}}
# {{rastnivîs|zexim}}
#* {{J:Hawar:1998:2|r=1100|hj=52|sernav=Roviyê Ker|nivîskar=w:Osman Sebrî|jêgirtin=(...) Gurî bûbû qels û rût/ Roviyekî '''zexm''' û têr / Jê ra dike silavê (...)}}
#* {{J:Mele Xelîlê Sêrtî:Nehc-ul Enam:1988|jêgirtin=Li wî qametek mu'tedil bû letîf, / Ne kurt û dirêj û ne '''zexm''' û zeîf.}}
#* {{J:Mehmed Uzun:Hawara Dîcleyê 1:2003|jêgirtin=Tevî vê yekê av gur, pêl bi '''zexm''' û doraliyên bihurê tijî kevir bûn.}}
seza2hpmkc8ng53dvbnjlcdofbtm7l1
Deryaya Navîn
0
12726
6342782
6250145
2026-08-26T20:43:00Z
Wikihez
7344
/* Serenav */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342782
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Serenav ===
[[Wêne:Mediterranean Sea political map-ku.svg|thumb|Deryaya Navîn]]
{{navdêr|ku|[[derya|Deryaya]] [[navîn|Navîn]]|z=m}}
# [[derya]]ya [[navber]]a [[Ewropa]] û [[Afrîka]] û [[Rojhilata Navîn]]
#* {{bêmînak|ku}}
==== Formên alternatîv ====
* [[Deryaya Spî]]
* [[Derya Navîn]]
* [[Deryaya Naverast]]
* [[Derya Spî]]
* [[Derya Naverast]]
* [[Behra Navîn]]
* [[Behra Spî]]
* [[Behra Naverast]]
==== Bide ber ====
* [[Deryaya Atlas]]
* [[Deryaya Pasîfîk]]
* [[Deryaya Reş]]
* [[Deryaya Sor]]
* [[Deryaya Mirî]]
==== Etîmolojî ====
[[derya]] + [[-ya]] + [[navîn]]
==== Werger ====
{{werger-ser}}
* {{Z|af}}: {{W-|af|Middellandse See}}
* {{Z|sq}}: {{W+|sq|Deti Mesdhe|n}}
* {{Z|goh}}: {{W-|goh|Wentilsēo}}
* {{Z|de}}: {{W+|de|Mittelmeer|nt}}
* {{Z|am}}: {{W-|am|ሜድትራኒያን ባሕር}}
* {{Z|an}}: {{W-|an|Mar Mediterrania}}
* {{Z|aii}}: {{W-|aii|ܝܵܡܵܐ ܚܘܵܪܵܐ ܡܸܨܥܵܝܵܐ|n|tr=yama ḳwara miṣʿaya}}
* {{Z|ast}}: {{W-|ast|Mar Mediterraneu}}
* {{Z|az}}: {{W+|az|Aralıq dənizi}}
* {{Z|eu}}: {{W-|eu|Mediterraneo itsasoa}}
* {{Z|be}}: {{W-|be|Міжзе́мнае мо́ра|nt}}
* {{Z|bn}}: {{W-|bn|ভূমধ্যসাগর}}
* {{Z|br}}: {{W-|br|Mor Kreizdouar}}
* {{Z|bg}}: {{W-|bg|Средизе́мно море́|nt}}
* {{Z|my}}: {{W-|my|မြေထဲပင်လယ်}}
* {{Z|cs}}: {{W+|cs|Středozemní moře|nt}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|地中海|tr=dei6 zung1 hoi2}}
*: {{Z|cmn}}: {{W+|cmn|地中海|tr=Dìzhōnghǎi}}
* {{Z|da}}: {{W+|da|Middelhavet|nt}}
* {{Z|id}}: {{W-|id|Laut Tengah}}
* {{Z|ar}}: {{W+|ar|الْبَحْر الْأَبْيَض الْمُتَوَسِّط|n}}
* {{Z|hy}}: {{W-|hy|Միջերկրական ծով}}
*: {{Z|xcl}}: {{W-|xcl|Յունաց ծով}}
* {{Z|eo}}: {{W-|eo|Mediteraneo}}
* {{Z|et}}: {{W+|et|Vahemeri}}
* {{Z|ext}}: {{W-|ext|Mari Mediterráneu}}
* {{Z|fa}}: {{W+|fa|دریای مدیترانه|tr=daryâ-ye mediterâne}}, {{W-|fa|دریای روم|tr=daryây-e rum}}, {{W-|fa|دریای شام|tr=daryây-e šâm}}, {{W-|fa|دریای میانه|tr=daryây-e miyâne}}
* {{Z|fo}}: {{W-|fo|Miðjarðarhav}}
* {{Z|fi}}: {{W+|fi|Välimeri}}
* {{Z|fr}}: {{W+|fr|mer Méditerranée|m}}, {{W+|fr|Méditerranée|m}}
* {{Z|frr}}: {{W-|frr|Madlunsia}}
* {{Z|fy}}: {{W-|fy|Middellânske See}}
* {{Z|gd}}: {{W-|gd|Muir Mheadhanach|cuda=A' Mhuir Mheadhanach|m}}
* {{Z|gl}}: {{W-|gl|Mar Mediterráneo}}
* {{Z|gu}}: {{W-|gu|ભૂમધ્ય સાગર}}
* {{Z|ka}}: {{W-|ka|ხმელთაშუა ზღვა}}
* {{Z|ha}}: {{W-|ha|Bahar Rum}}
* {{Z|hi}}: {{W+|hi|भूमध्य सागर|n}}
* {{Z|nl}}: {{W+|nl|Middellandse Zee|m}}
* {{Z|he}}: {{W-|he|הַיָּם הַתִּיכוֹן|tr=ha-yam ha-tikhón}}
* {{Z|ang}}: {{W-|ang|Wendelsǣ|m}}
* {{Z|enm}}: {{W-|enm|Grete See}}
* {{Z|en}}: {{W+|en|Mediterranean Sea}}
* {{Z|ga}}: {{W-|ga|Meánmhuir|cuda=an Mheánmhuir|m}}
* {{Z|it}}: {{W+|it|Mar Mediterraneo|n}}, {{W+|it|Mediterraneo|n}}, {{W-|it|Medioceano|n}}
* {{Z|is}}: {{W+|is|Miðjarðarhaf|nt}}
* {{Z|ja}}: {{W+|ja|地中海|tr=ちちゅうかい, Chichūkai}}
* {{Z|kn}}: {{W-|kn|ಮೆಡಿಟರೇನಿಯನ್ ಸಮುದ್ರ}}
* {{Z|csb}}: {{W-|csb|Strzódzemné Mòrze|nt}}
* {{Z|ca}}: {{W-|ca|Mar Mediterrània|m}}, {{W-|ca|Mar Mediterrani|n}}, {{W-|ca|Mediterrània|m}}, {{W-|ca|Mediterrani|n}}
* {{Z|ky}}: {{W-|ky|Жер ортолук деңиз}}
* {{Z|ko}}: {{W-|ko|^지중해}}, {{W+|ko|地中海}}
* {{Z|kw}}: {{W-|kw|an Kresvor|n}}
* {{Z|co}}: {{W-|co|Mar Mediterraniu|n}}, {{W-|co|Mari Mediterraniu|n}}
* {{Z|kum}}: {{W-|kum|Орта денгизи|tr=Orta deñizi}}
* {{Z|la}}: {{W-|la|Mare Mediterraneum|nt}}, {{W-|la|Mare Nostrum|nt}}, {{W-|la|Mare Internum|nt}}
* {{Z|lv}}: {{W+|lv|Vidusjūra|m}}
* {{Z|lo}}: {{W-|lo|ທະເລເມດີແຕກລາເນ}}
* {{Z|lt}}: {{W+|lt|Viduržemio jūra}}
* {{Z|lb}}: {{W-|lb|Mëttelmier}}
* {{Z|mk}}: {{W-|mk|Средозе́мно Море|nt}}
* {{Z|ml}}: {{W+|ml|മധ്യധരണ്യാഴി}}
* {{Z|ms}}: {{W-|ms|Laut Mediterranean}}, {{W-|ms|Laut Tengah}}
* {{Z|mt}}: {{W-|mt|Baħar Mediterran|cuda=il-Baħar Mediterran}}
* {{Z|mi}}: {{W-|mi|Moana o waenga}}
* {{Z|mr}}: {{W-|mr|भूमध्य समुद्र}}
* {{Z|hu}}: {{W+|hu|Földközi-tenger}}
* {{Z|xmf}}: {{W-|xmf|სქირონაშქა ზუღა}}
* {{Z|mn}}:
*: Kirîlî: {{W-|mn|Газрын Дундад тэнгис}}
* {{Z|nv}}: {{W-|nv|Médíwííyin Sii|sc=Latn}}
* {{Z|ne}}: {{W-|ne|मेडिटरिनियन सागर}}
* {{Z|nrf}}: {{W-|nrf|Méditerrannée|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|Middelhavet|nt}}
*: {{Z|nn}}: {{W+|nn|Middelhavet|nt}}
* {{Z|oc}}: {{W-|oc|Mar Mediterranèa|m}}
* {{Z|ota}}: {{W-|ota|بحر روم|tr=Bahr-i Rûm}}, {{W-|ota|بحر سفید|tr=Bahr-i Sefid}}, {{W-|ota|اق دڭز|tr=Ak deñiz}}
* {{Z|ug}}: {{W-|ug|يەر ئوتتۇرا دېڭىزى}}
* {{Z|uz}}: {{W-|uz|Oq dengiz}}
* {{Z|pl}}: {{W+|pl|Morze Śródziemne|nt}}
* {{Z|pt}}: {{W+|pt|Mediterrâneo|n}}, {{W+|pt|Mar Mediterrâneo|n}}
* {{Z|pa}}: {{W-|pa|ਭੂ-ਮੱਧ ਸਮੁੰਦਰ}}
* {{Z|kk}}: {{W-|kk|Жерорта теңізі}}
* {{Z|rm}}: {{W-|rm|Mar Mediterrana}}
* {{Z|ro}}: {{W+|ro|Marea Mediterană|m}}
* {{Z|ru}}: {{W-|ru|Средизе́мное мо́ре|nt}}
* {{Z|ceb}}: {{W-|ceb|Dagat Mediteranyo}}
* {{Z|scn}}: {{W-|scn|Mari Miditirràniu|n}}, {{W-|scn|Miditirràniu|n}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|Средоземно море|nt}}
*: Latînî: {{W-|sh|Sredozemno more|nt}}
* {{Z|sk}}: {{W+|sk|Stredozemné more}}
* {{Z|sl}}: {{W-|sl|Sredozemsko morje|nt}}
* {{Z|so}}: {{W-|so|Bada Dhexe}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|Srjejźne mórjo|nt}}
*: {{Z|hsb}}: {{W-|hsb|Srjedźne morjo|nt}}
* {{Z|es}}: {{W+|es|mar Mediterráneo|n}}, {{W+|es|Mediterráneo|n}}
* {{Z|sw}}: {{W-|sw|Bahari ya Mediteranea}}, {{W-|sw|Bahari ya Kati}}
* {{Z|sv}}: {{W+|sv|Medelhavet|nt}}
* {{Z|tg}}: {{W-|tg|Баҳри Миёназамин}}
* {{Z|tl}}: {{W-|tl|Dagat Mediteraneo}}
* {{Z|ta}}: {{W-|ta|நடுநிலக் கடல்}}
* {{Z|th}}: {{W-|th|ทะเลเมดิเตอร์เรเนียน|tr=tá-lee mee-dì-dtə̂ə-ree-niian}}
* {{Z|te}}: {{W+|te|మధ్యధరా సముద్రం}}
* {{Z|crh}}: {{W-|crh|Aq deñiz}}
* {{Z|tr}}: {{W+|tr|Akdeniz}}
* {{Z|tk}}: {{W-|tk|Ortaýer deňzi}}
* {{Z|ur}}: {{W-|ur|بحیرہ روم|m|tr=bahīrā rum}}
* {{Z|uk}}: {{W-|uk|Середзе́мне мо́ре|nt}}
* {{Z|vi}}: {{W+|vi|Địa Trung Hải}} ({{W-|vi|地中海|sc=Hani}})
* {{Z|vo}}: {{W+|vo|Zänodamel}}
* {{Z|wa}}: {{W+|wa|Mîtrinne Mer}}
* {{Z|cy}}: {{W+|cy|Môr y Canoldir|n}}
* {{Z|km}}: {{W-|km|សមុទ្រ មេឌីទែរ៉ានេ}}
* {{Z|yi}}: {{W-|yi|מיטלענדישער ים|sc=Hebr|tr=mitlendisher yam|n}}
* {{Z|el}}: {{W+|el|Μεσόγειος Θάλασσα|m}}
{{werger-bin}}
4p9jkqo83d3e8otap31l38odwmjwrxi
6342783
6342782
2026-08-26T20:45:17Z
Wikihez
7344
[[Bikarhêner:Wikihez/templateScript2.js|TS]]: sererastkirin
6342783
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Serenav ===
[[Wêne:Mediterranean Sea political map-ku.svg|thumb|Deryaya Navîn]]
{{serenav|ku|z=m}}
# {{e|ku|behr}} [[derya|Derya]]ya [[navber]]a [[Ewropa]] û [[Afrîka]] û [[Rojhilata Navîn]].
#: {{hevmane||ku|Behra Spî|Deryaya Spî}}
#* {{bêmînak|ku}}
==== Formên alternatîv ====
* {{g|ku|Derya Navîn}}
* {{g|ku|Deryaya Naverast}}
* {{g|ku|Derya Naverast}}
* {{g|ku|Behra Navîn}}
* {{g|ku|Behra Naverast}}
==== Bide ber ====
* {{g|ku|Deryaya Atlas}}
* {{g|ku|Deryaya Pasîfîk}}
* {{g|ku|Deryaya Reş}}
* {{g|ku|Deryaya Sor}}
* {{g|ku|Deryaya Mirî}}
==== Etîmolojî ====
Ji {{pêk|ku|derya|navîn}}.
==== Werger ====
{{werger-ser}}
* {{Z|af}}: {{W-|af|Middellandse See}}
* {{Z|sq}}: {{W+|sq|Deti Mesdhe|n}}
* {{Z|goh}}: {{W-|goh|Wentilsēo}}
* {{Z|de}}: {{W+|de|Mittelmeer|nt}}
* {{Z|am}}: {{W-|am|ሜድትራኒያን ባሕር}}
* {{Z|an}}: {{W-|an|Mar Mediterrania}}
* {{Z|aii}}: {{W-|aii|ܝܵܡܵܐ ܚܘܵܪܵܐ ܡܸܨܥܵܝܵܐ|n|tr=yama ḳwara miṣʿaya}}
* {{Z|ast}}: {{W-|ast|Mar Mediterraneu}}
* {{Z|az}}: {{W+|az|Aralıq dənizi}}
* {{Z|eu}}: {{W-|eu|Mediterraneo itsasoa}}
* {{Z|be}}: {{W-|be|Міжзе́мнае мо́ра|nt}}
* {{Z|bn}}: {{W-|bn|ভূমধ্যসাগর}}
* {{Z|br}}: {{W-|br|Mor Kreizdouar}}
* {{Z|bg}}: {{W-|bg|Средизе́мно море́|nt}}
* {{Z|my}}: {{W-|my|မြေထဲပင်လယ်}}
* {{Z|cs}}: {{W+|cs|Středozemní moře|nt}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|地中海|tr=dei6 zung1 hoi2}}
*: {{Z|cmn}}: {{W+|cmn|地中海|tr=Dìzhōnghǎi}}
* {{Z|da}}: {{W+|da|Middelhavet|nt}}
* {{Z|id}}: {{W-|id|Laut Tengah}}
* {{Z|ar}}: {{W+|ar|الْبَحْر الْأَبْيَض الْمُتَوَسِّط|n}}
* {{Z|hy}}: {{W-|hy|Միջերկրական ծով}}
*: {{Z|xcl}}: {{W-|xcl|Յունաց ծով}}
* {{Z|eo}}: {{W-|eo|Mediteraneo}}
* {{Z|et}}: {{W+|et|Vahemeri}}
* {{Z|ext}}: {{W-|ext|Mari Mediterráneu}}
* {{Z|fa}}: {{W+|fa|دریای مدیترانه|tr=daryâ-ye mediterâne}}, {{W-|fa|دریای روم|tr=daryây-e rum}}, {{W-|fa|دریای شام|tr=daryây-e šâm}}, {{W-|fa|دریای میانه|tr=daryây-e miyâne}}
* {{Z|fo}}: {{W-|fo|Miðjarðarhav}}
* {{Z|fi}}: {{W+|fi|Välimeri}}
* {{Z|fr}}: {{W+|fr|mer Méditerranée|m}}, {{W+|fr|Méditerranée|m}}
* {{Z|frr}}: {{W-|frr|Madlunsia}}
* {{Z|fy}}: {{W-|fy|Middellânske See}}
* {{Z|gd}}: {{W-|gd|Muir Mheadhanach|cuda=A' Mhuir Mheadhanach|m}}
* {{Z|gl}}: {{W-|gl|Mar Mediterráneo}}
* {{Z|gu}}: {{W-|gu|ભૂમધ્ય સાગર}}
* {{Z|ka}}: {{W-|ka|ხმელთაშუა ზღვა}}
* {{Z|ha}}: {{W-|ha|Bahar Rum}}
* {{Z|hi}}: {{W+|hi|भूमध्य सागर|n}}
* {{Z|nl}}: {{W+|nl|Middellandse Zee|m}}
* {{Z|he}}: {{W-|he|הַיָּם הַתִּיכוֹן|tr=ha-yam ha-tikhón}}
* {{Z|ang}}: {{W-|ang|Wendelsǣ|m}}
* {{Z|enm}}: {{W-|enm|Grete See}}
* {{Z|en}}: {{W+|en|Mediterranean Sea}}
* {{Z|ga}}: {{W-|ga|Meánmhuir|cuda=an Mheánmhuir|m}}
* {{Z|it}}: {{W+|it|Mar Mediterraneo|n}}, {{W+|it|Mediterraneo|n}}, {{W-|it|Medioceano|n}}
* {{Z|is}}: {{W+|is|Miðjarðarhaf|nt}}
* {{Z|ja}}: {{W+|ja|地中海|tr=ちちゅうかい, Chichūkai}}
* {{Z|kn}}: {{W-|kn|ಮೆಡಿಟರೇನಿಯನ್ ಸಮುದ್ರ}}
* {{Z|csb}}: {{W-|csb|Strzódzemné Mòrze|nt}}
* {{Z|ca}}: {{W-|ca|Mar Mediterrània|m}}, {{W-|ca|Mar Mediterrani|n}}, {{W-|ca|Mediterrània|m}}, {{W-|ca|Mediterrani|n}}
* {{Z|ky}}: {{W-|ky|Жер ортолук деңиз}}
* {{Z|ko}}: {{W-|ko|^지중해}}, {{W+|ko|地中海}}
* {{Z|kw}}: {{W-|kw|an Kresvor|n}}
* {{Z|co}}: {{W-|co|Mar Mediterraniu|n}}, {{W-|co|Mari Mediterraniu|n}}
* {{Z|kum}}: {{W-|kum|Орта денгизи|tr=Orta deñizi}}
* {{Z|la}}: {{W-|la|Mare Mediterraneum|nt}}, {{W-|la|Mare Nostrum|nt}}, {{W-|la|Mare Internum|nt}}
* {{Z|lv}}: {{W+|lv|Vidusjūra|m}}
* {{Z|lo}}: {{W-|lo|ທະເລເມດີແຕກລາເນ}}
* {{Z|lt}}: {{W+|lt|Viduržemio jūra}}
* {{Z|lb}}: {{W-|lb|Mëttelmier}}
* {{Z|mk}}: {{W-|mk|Средозе́мно Море|nt}}
* {{Z|ml}}: {{W+|ml|മധ്യധരണ്യാഴി}}
* {{Z|ms}}: {{W-|ms|Laut Mediterranean}}, {{W-|ms|Laut Tengah}}
* {{Z|mt}}: {{W-|mt|Baħar Mediterran|cuda=il-Baħar Mediterran}}
* {{Z|mi}}: {{W-|mi|Moana o waenga}}
* {{Z|mr}}: {{W-|mr|भूमध्य समुद्र}}
* {{Z|hu}}: {{W+|hu|Földközi-tenger}}
* {{Z|xmf}}: {{W-|xmf|სქირონაშქა ზუღა}}
* {{Z|mn}}:
*: Kirîlî: {{W-|mn|Газрын Дундад тэнгис}}
* {{Z|nv}}: {{W-|nv|Médíwííyin Sii|sc=Latn}}
* {{Z|ne}}: {{W-|ne|मेडिटरिनियन सागर}}
* {{Z|nrf}}: {{W-|nrf|Méditerrannée|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|Middelhavet|nt}}
*: {{Z|nn}}: {{W+|nn|Middelhavet|nt}}
* {{Z|oc}}: {{W-|oc|Mar Mediterranèa|m}}
* {{Z|ota}}: {{W-|ota|بحر روم|tr=Bahr-i Rûm}}, {{W-|ota|بحر سفید|tr=Bahr-i Sefid}}, {{W-|ota|اق دڭز|tr=Ak deñiz}}
* {{Z|ug}}: {{W-|ug|يەر ئوتتۇرا دېڭىزى}}
* {{Z|uz}}: {{W-|uz|Oq dengiz}}
* {{Z|pl}}: {{W+|pl|Morze Śródziemne|nt}}
* {{Z|pt}}: {{W+|pt|Mediterrâneo|n}}, {{W+|pt|Mar Mediterrâneo|n}}
* {{Z|pa}}: {{W-|pa|ਭੂ-ਮੱਧ ਸਮੁੰਦਰ}}
* {{Z|kk}}: {{W-|kk|Жерорта теңізі}}
* {{Z|rm}}: {{W-|rm|Mar Mediterrana}}
* {{Z|ro}}: {{W+|ro|Marea Mediterană|m}}
* {{Z|ru}}: {{W-|ru|Средизе́мное мо́ре|nt}}
* {{Z|ceb}}: {{W-|ceb|Dagat Mediteranyo}}
* {{Z|scn}}: {{W-|scn|Mari Miditirràniu|n}}, {{W-|scn|Miditirràniu|n}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|Средоземно море|nt}}
*: Latînî: {{W-|sh|Sredozemno more|nt}}
* {{Z|sk}}: {{W+|sk|Stredozemné more}}
* {{Z|sl}}: {{W-|sl|Sredozemsko morje|nt}}
* {{Z|so}}: {{W-|so|Bada Dhexe}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|Srjejźne mórjo|nt}}
*: {{Z|hsb}}: {{W-|hsb|Srjedźne morjo|nt}}
* {{Z|es}}: {{W+|es|mar Mediterráneo|n}}, {{W+|es|Mediterráneo|n}}
* {{Z|sw}}: {{W-|sw|Bahari ya Mediteranea}}, {{W-|sw|Bahari ya Kati}}
* {{Z|sv}}: {{W+|sv|Medelhavet|nt}}
* {{Z|tg}}: {{W-|tg|Баҳри Миёназамин}}
* {{Z|tl}}: {{W-|tl|Dagat Mediteraneo}}
* {{Z|ta}}: {{W-|ta|நடுநிலக் கடல்}}
* {{Z|th}}: {{W-|th|ทะเลเมดิเตอร์เรเนียน|tr=tá-lee mee-dì-dtə̂ə-ree-niian}}
* {{Z|te}}: {{W+|te|మధ్యధరా సముద్రం}}
* {{Z|crh}}: {{W-|crh|Aq deñiz}}
* {{Z|tr}}: {{W+|tr|Akdeniz}}
* {{Z|tk}}: {{W-|tk|Ortaýer deňzi}}
* {{Z|ur}}: {{W-|ur|بحیرہ روم|m|tr=bahīrā rum}}
* {{Z|uk}}: {{W-|uk|Середзе́мне мо́ре|nt}}
* {{Z|vi}}: {{W+|vi|Địa Trung Hải}} ({{W-|vi|地中海|sc=Hani}})
* {{Z|vo}}: {{W+|vo|Zänodamel}}
* {{Z|wa}}: {{W+|wa|Mîtrinne Mer}}
* {{Z|cy}}: {{W+|cy|Môr y Canoldir|n}}
* {{Z|km}}: {{W-|km|សមុទ្រ មេឌីទែរ៉ានេ}}
* {{Z|yi}}: {{W-|yi|מיטלענדישער ים|sc=Hebr|tr=mitlendisher yam|n}}
* {{Z|el}}: {{W+|el|Μεσόγειος Θάλασσα|m}}
{{werger-bin}}
e231rk8ja4apzcssyrjaraaur6cljgq
6342784
6342783
2026-08-26T20:45:24Z
Wikihez
7344
/* Serenav */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342784
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Serenav ===
[[Wêne:Mediterranean Sea political map-ku.svg|thumb|Deryaya Navîn]]
{{serenav|ku|z=m}}
# {{e|ku|behr}} [[derya|Derya]]ya [[navber]]a [[Ewropa]] û [[Afrîka]] û [[Rojhilata Navîn]].
#: {{hevmane|ku|Behra Spî|Deryaya Spî}}
#* {{bêmînak|ku}}
==== Formên alternatîv ====
* {{g|ku|Derya Navîn}}
* {{g|ku|Deryaya Naverast}}
* {{g|ku|Derya Naverast}}
* {{g|ku|Behra Navîn}}
* {{g|ku|Behra Naverast}}
==== Bide ber ====
* {{g|ku|Deryaya Atlas}}
* {{g|ku|Deryaya Pasîfîk}}
* {{g|ku|Deryaya Reş}}
* {{g|ku|Deryaya Sor}}
* {{g|ku|Deryaya Mirî}}
==== Etîmolojî ====
Ji {{pêk|ku|derya|navîn}}.
==== Werger ====
{{werger-ser}}
* {{Z|af}}: {{W-|af|Middellandse See}}
* {{Z|sq}}: {{W+|sq|Deti Mesdhe|n}}
* {{Z|goh}}: {{W-|goh|Wentilsēo}}
* {{Z|de}}: {{W+|de|Mittelmeer|nt}}
* {{Z|am}}: {{W-|am|ሜድትራኒያን ባሕር}}
* {{Z|an}}: {{W-|an|Mar Mediterrania}}
* {{Z|aii}}: {{W-|aii|ܝܵܡܵܐ ܚܘܵܪܵܐ ܡܸܨܥܵܝܵܐ|n|tr=yama ḳwara miṣʿaya}}
* {{Z|ast}}: {{W-|ast|Mar Mediterraneu}}
* {{Z|az}}: {{W+|az|Aralıq dənizi}}
* {{Z|eu}}: {{W-|eu|Mediterraneo itsasoa}}
* {{Z|be}}: {{W-|be|Міжзе́мнае мо́ра|nt}}
* {{Z|bn}}: {{W-|bn|ভূমধ্যসাগর}}
* {{Z|br}}: {{W-|br|Mor Kreizdouar}}
* {{Z|bg}}: {{W-|bg|Средизе́мно море́|nt}}
* {{Z|my}}: {{W-|my|မြေထဲပင်လယ်}}
* {{Z|cs}}: {{W+|cs|Středozemní moře|nt}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|地中海|tr=dei6 zung1 hoi2}}
*: {{Z|cmn}}: {{W+|cmn|地中海|tr=Dìzhōnghǎi}}
* {{Z|da}}: {{W+|da|Middelhavet|nt}}
* {{Z|id}}: {{W-|id|Laut Tengah}}
* {{Z|ar}}: {{W+|ar|الْبَحْر الْأَبْيَض الْمُتَوَسِّط|n}}
* {{Z|hy}}: {{W-|hy|Միջերկրական ծով}}
*: {{Z|xcl}}: {{W-|xcl|Յունաց ծով}}
* {{Z|eo}}: {{W-|eo|Mediteraneo}}
* {{Z|et}}: {{W+|et|Vahemeri}}
* {{Z|ext}}: {{W-|ext|Mari Mediterráneu}}
* {{Z|fa}}: {{W+|fa|دریای مدیترانه|tr=daryâ-ye mediterâne}}, {{W-|fa|دریای روم|tr=daryây-e rum}}, {{W-|fa|دریای شام|tr=daryây-e šâm}}, {{W-|fa|دریای میانه|tr=daryây-e miyâne}}
* {{Z|fo}}: {{W-|fo|Miðjarðarhav}}
* {{Z|fi}}: {{W+|fi|Välimeri}}
* {{Z|fr}}: {{W+|fr|mer Méditerranée|m}}, {{W+|fr|Méditerranée|m}}
* {{Z|frr}}: {{W-|frr|Madlunsia}}
* {{Z|fy}}: {{W-|fy|Middellânske See}}
* {{Z|gd}}: {{W-|gd|Muir Mheadhanach|cuda=A' Mhuir Mheadhanach|m}}
* {{Z|gl}}: {{W-|gl|Mar Mediterráneo}}
* {{Z|gu}}: {{W-|gu|ભૂમધ્ય સાગર}}
* {{Z|ka}}: {{W-|ka|ხმელთაშუა ზღვა}}
* {{Z|ha}}: {{W-|ha|Bahar Rum}}
* {{Z|hi}}: {{W+|hi|भूमध्य सागर|n}}
* {{Z|nl}}: {{W+|nl|Middellandse Zee|m}}
* {{Z|he}}: {{W-|he|הַיָּם הַתִּיכוֹן|tr=ha-yam ha-tikhón}}
* {{Z|ang}}: {{W-|ang|Wendelsǣ|m}}
* {{Z|enm}}: {{W-|enm|Grete See}}
* {{Z|en}}: {{W+|en|Mediterranean Sea}}
* {{Z|ga}}: {{W-|ga|Meánmhuir|cuda=an Mheánmhuir|m}}
* {{Z|it}}: {{W+|it|Mar Mediterraneo|n}}, {{W+|it|Mediterraneo|n}}, {{W-|it|Medioceano|n}}
* {{Z|is}}: {{W+|is|Miðjarðarhaf|nt}}
* {{Z|ja}}: {{W+|ja|地中海|tr=ちちゅうかい, Chichūkai}}
* {{Z|kn}}: {{W-|kn|ಮೆಡಿಟರೇನಿಯನ್ ಸಮುದ್ರ}}
* {{Z|csb}}: {{W-|csb|Strzódzemné Mòrze|nt}}
* {{Z|ca}}: {{W-|ca|Mar Mediterrània|m}}, {{W-|ca|Mar Mediterrani|n}}, {{W-|ca|Mediterrània|m}}, {{W-|ca|Mediterrani|n}}
* {{Z|ky}}: {{W-|ky|Жер ортолук деңиз}}
* {{Z|ko}}: {{W-|ko|^지중해}}, {{W+|ko|地中海}}
* {{Z|kw}}: {{W-|kw|an Kresvor|n}}
* {{Z|co}}: {{W-|co|Mar Mediterraniu|n}}, {{W-|co|Mari Mediterraniu|n}}
* {{Z|kum}}: {{W-|kum|Орта денгизи|tr=Orta deñizi}}
* {{Z|la}}: {{W-|la|Mare Mediterraneum|nt}}, {{W-|la|Mare Nostrum|nt}}, {{W-|la|Mare Internum|nt}}
* {{Z|lv}}: {{W+|lv|Vidusjūra|m}}
* {{Z|lo}}: {{W-|lo|ທະເລເມດີແຕກລາເນ}}
* {{Z|lt}}: {{W+|lt|Viduržemio jūra}}
* {{Z|lb}}: {{W-|lb|Mëttelmier}}
* {{Z|mk}}: {{W-|mk|Средозе́мно Море|nt}}
* {{Z|ml}}: {{W+|ml|മധ്യധരണ്യാഴി}}
* {{Z|ms}}: {{W-|ms|Laut Mediterranean}}, {{W-|ms|Laut Tengah}}
* {{Z|mt}}: {{W-|mt|Baħar Mediterran|cuda=il-Baħar Mediterran}}
* {{Z|mi}}: {{W-|mi|Moana o waenga}}
* {{Z|mr}}: {{W-|mr|भूमध्य समुद्र}}
* {{Z|hu}}: {{W+|hu|Földközi-tenger}}
* {{Z|xmf}}: {{W-|xmf|სქირონაშქა ზუღა}}
* {{Z|mn}}:
*: Kirîlî: {{W-|mn|Газрын Дундад тэнгис}}
* {{Z|nv}}: {{W-|nv|Médíwííyin Sii|sc=Latn}}
* {{Z|ne}}: {{W-|ne|मेडिटरिनियन सागर}}
* {{Z|nrf}}: {{W-|nrf|Méditerrannée|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|Middelhavet|nt}}
*: {{Z|nn}}: {{W+|nn|Middelhavet|nt}}
* {{Z|oc}}: {{W-|oc|Mar Mediterranèa|m}}
* {{Z|ota}}: {{W-|ota|بحر روم|tr=Bahr-i Rûm}}, {{W-|ota|بحر سفید|tr=Bahr-i Sefid}}, {{W-|ota|اق دڭز|tr=Ak deñiz}}
* {{Z|ug}}: {{W-|ug|يەر ئوتتۇرا دېڭىزى}}
* {{Z|uz}}: {{W-|uz|Oq dengiz}}
* {{Z|pl}}: {{W+|pl|Morze Śródziemne|nt}}
* {{Z|pt}}: {{W+|pt|Mediterrâneo|n}}, {{W+|pt|Mar Mediterrâneo|n}}
* {{Z|pa}}: {{W-|pa|ਭੂ-ਮੱਧ ਸਮੁੰਦਰ}}
* {{Z|kk}}: {{W-|kk|Жерорта теңізі}}
* {{Z|rm}}: {{W-|rm|Mar Mediterrana}}
* {{Z|ro}}: {{W+|ro|Marea Mediterană|m}}
* {{Z|ru}}: {{W-|ru|Средизе́мное мо́ре|nt}}
* {{Z|ceb}}: {{W-|ceb|Dagat Mediteranyo}}
* {{Z|scn}}: {{W-|scn|Mari Miditirràniu|n}}, {{W-|scn|Miditirràniu|n}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|Средоземно море|nt}}
*: Latînî: {{W-|sh|Sredozemno more|nt}}
* {{Z|sk}}: {{W+|sk|Stredozemné more}}
* {{Z|sl}}: {{W-|sl|Sredozemsko morje|nt}}
* {{Z|so}}: {{W-|so|Bada Dhexe}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|Srjejźne mórjo|nt}}
*: {{Z|hsb}}: {{W-|hsb|Srjedźne morjo|nt}}
* {{Z|es}}: {{W+|es|mar Mediterráneo|n}}, {{W+|es|Mediterráneo|n}}
* {{Z|sw}}: {{W-|sw|Bahari ya Mediteranea}}, {{W-|sw|Bahari ya Kati}}
* {{Z|sv}}: {{W+|sv|Medelhavet|nt}}
* {{Z|tg}}: {{W-|tg|Баҳри Миёназамин}}
* {{Z|tl}}: {{W-|tl|Dagat Mediteraneo}}
* {{Z|ta}}: {{W-|ta|நடுநிலக் கடல்}}
* {{Z|th}}: {{W-|th|ทะเลเมดิเตอร์เรเนียน|tr=tá-lee mee-dì-dtə̂ə-ree-niian}}
* {{Z|te}}: {{W+|te|మధ్యధరా సముద్రం}}
* {{Z|crh}}: {{W-|crh|Aq deñiz}}
* {{Z|tr}}: {{W+|tr|Akdeniz}}
* {{Z|tk}}: {{W-|tk|Ortaýer deňzi}}
* {{Z|ur}}: {{W-|ur|بحیرہ روم|m|tr=bahīrā rum}}
* {{Z|uk}}: {{W-|uk|Середзе́мне мо́ре|nt}}
* {{Z|vi}}: {{W+|vi|Địa Trung Hải}} ({{W-|vi|地中海|sc=Hani}})
* {{Z|vo}}: {{W+|vo|Zänodamel}}
* {{Z|wa}}: {{W+|wa|Mîtrinne Mer}}
* {{Z|cy}}: {{W+|cy|Môr y Canoldir|n}}
* {{Z|km}}: {{W-|km|សមុទ្រ មេឌីទែរ៉ានេ}}
* {{Z|yi}}: {{W-|yi|מיטלענדישער ים|sc=Hebr|tr=mitlendisher yam|n}}
* {{Z|el}}: {{W+|el|Μεσόγειος Θάλασσα|m}}
{{werger-bin}}
2h10r9b1jka5yfz5f2ff4kuncesm87q
6342785
6342784
2026-08-26T20:45:47Z
Wikihez
7344
([[m:Special:MyLanguage/User:Jon Harald Søby/diffedit|diffedit]])
6342785
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Serenav ===
[[Wêne:Mediterranean Sea political map-ku.svg|thumb|Deryaya Navîn]]
{{serenav|ku|[[derya|Deryaya]] [[navîn|Navîn]]|z=m}}
# {{e|ku|behr}} [[derya|Derya]]ya [[navber]]a [[Ewropa]] û [[Afrîka]] û [[Rojhilata Navîn]].
#: {{hevmane|ku|Behra Spî|Deryaya Spî}}
#* {{bêmînak|ku}}
==== Formên alternatîv ====
* {{g|ku|Derya Navîn}}
* {{g|ku|Deryaya Naverast}}
* {{g|ku|Derya Naverast}}
* {{g|ku|Behra Navîn}}
* {{g|ku|Behra Naverast}}
==== Bide ber ====
* {{g|ku|Deryaya Atlas}}
* {{g|ku|Deryaya Pasîfîk}}
* {{g|ku|Deryaya Reş}}
* {{g|ku|Deryaya Sor}}
* {{g|ku|Deryaya Mirî}}
==== Etîmolojî ====
Ji {{pêk|ku|derya|navîn}}.
==== Werger ====
{{werger-ser}}
* {{Z|af}}: {{W-|af|Middellandse See}}
* {{Z|sq}}: {{W+|sq|Deti Mesdhe|n}}
* {{Z|goh}}: {{W-|goh|Wentilsēo}}
* {{Z|de}}: {{W+|de|Mittelmeer|nt}}
* {{Z|am}}: {{W-|am|ሜድትራኒያን ባሕር}}
* {{Z|an}}: {{W-|an|Mar Mediterrania}}
* {{Z|aii}}: {{W-|aii|ܝܵܡܵܐ ܚܘܵܪܵܐ ܡܸܨܥܵܝܵܐ|n|tr=yama ḳwara miṣʿaya}}
* {{Z|ast}}: {{W-|ast|Mar Mediterraneu}}
* {{Z|az}}: {{W+|az|Aralıq dənizi}}
* {{Z|eu}}: {{W-|eu|Mediterraneo itsasoa}}
* {{Z|be}}: {{W-|be|Міжзе́мнае мо́ра|nt}}
* {{Z|bn}}: {{W-|bn|ভূমধ্যসাগর}}
* {{Z|br}}: {{W-|br|Mor Kreizdouar}}
* {{Z|bg}}: {{W-|bg|Средизе́мно море́|nt}}
* {{Z|my}}: {{W-|my|မြေထဲပင်လယ်}}
* {{Z|cs}}: {{W+|cs|Středozemní moře|nt}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|地中海|tr=dei6 zung1 hoi2}}
*: {{Z|cmn}}: {{W+|cmn|地中海|tr=Dìzhōnghǎi}}
* {{Z|da}}: {{W+|da|Middelhavet|nt}}
* {{Z|id}}: {{W-|id|Laut Tengah}}
* {{Z|ar}}: {{W+|ar|الْبَحْر الْأَبْيَض الْمُتَوَسِّط|n}}
* {{Z|hy}}: {{W-|hy|Միջերկրական ծով}}
*: {{Z|xcl}}: {{W-|xcl|Յունաց ծով}}
* {{Z|eo}}: {{W-|eo|Mediteraneo}}
* {{Z|et}}: {{W+|et|Vahemeri}}
* {{Z|ext}}: {{W-|ext|Mari Mediterráneu}}
* {{Z|fa}}: {{W+|fa|دریای مدیترانه|tr=daryâ-ye mediterâne}}, {{W-|fa|دریای روم|tr=daryây-e rum}}, {{W-|fa|دریای شام|tr=daryây-e šâm}}, {{W-|fa|دریای میانه|tr=daryây-e miyâne}}
* {{Z|fo}}: {{W-|fo|Miðjarðarhav}}
* {{Z|fi}}: {{W+|fi|Välimeri}}
* {{Z|fr}}: {{W+|fr|mer Méditerranée|m}}, {{W+|fr|Méditerranée|m}}
* {{Z|frr}}: {{W-|frr|Madlunsia}}
* {{Z|fy}}: {{W-|fy|Middellânske See}}
* {{Z|gd}}: {{W-|gd|Muir Mheadhanach|cuda=A' Mhuir Mheadhanach|m}}
* {{Z|gl}}: {{W-|gl|Mar Mediterráneo}}
* {{Z|gu}}: {{W-|gu|ભૂમધ્ય સાગર}}
* {{Z|ka}}: {{W-|ka|ხმელთაშუა ზღვა}}
* {{Z|ha}}: {{W-|ha|Bahar Rum}}
* {{Z|hi}}: {{W+|hi|भूमध्य सागर|n}}
* {{Z|nl}}: {{W+|nl|Middellandse Zee|m}}
* {{Z|he}}: {{W-|he|הַיָּם הַתִּיכוֹן|tr=ha-yam ha-tikhón}}
* {{Z|ang}}: {{W-|ang|Wendelsǣ|m}}
* {{Z|enm}}: {{W-|enm|Grete See}}
* {{Z|en}}: {{W+|en|Mediterranean Sea}}
* {{Z|ga}}: {{W-|ga|Meánmhuir|cuda=an Mheánmhuir|m}}
* {{Z|it}}: {{W+|it|Mar Mediterraneo|n}}, {{W+|it|Mediterraneo|n}}, {{W-|it|Medioceano|n}}
* {{Z|is}}: {{W+|is|Miðjarðarhaf|nt}}
* {{Z|ja}}: {{W+|ja|地中海|tr=ちちゅうかい, Chichūkai}}
* {{Z|kn}}: {{W-|kn|ಮೆಡಿಟರೇನಿಯನ್ ಸಮುದ್ರ}}
* {{Z|csb}}: {{W-|csb|Strzódzemné Mòrze|nt}}
* {{Z|ca}}: {{W-|ca|Mar Mediterrània|m}}, {{W-|ca|Mar Mediterrani|n}}, {{W-|ca|Mediterrània|m}}, {{W-|ca|Mediterrani|n}}
* {{Z|ky}}: {{W-|ky|Жер ортолук деңиз}}
* {{Z|ko}}: {{W-|ko|^지중해}}, {{W+|ko|地中海}}
* {{Z|kw}}: {{W-|kw|an Kresvor|n}}
* {{Z|co}}: {{W-|co|Mar Mediterraniu|n}}, {{W-|co|Mari Mediterraniu|n}}
* {{Z|kum}}: {{W-|kum|Орта денгизи|tr=Orta deñizi}}
* {{Z|la}}: {{W-|la|Mare Mediterraneum|nt}}, {{W-|la|Mare Nostrum|nt}}, {{W-|la|Mare Internum|nt}}
* {{Z|lv}}: {{W+|lv|Vidusjūra|m}}
* {{Z|lo}}: {{W-|lo|ທະເລເມດີແຕກລາເນ}}
* {{Z|lt}}: {{W+|lt|Viduržemio jūra}}
* {{Z|lb}}: {{W-|lb|Mëttelmier}}
* {{Z|mk}}: {{W-|mk|Средозе́мно Море|nt}}
* {{Z|ml}}: {{W+|ml|മധ്യധരണ്യാഴി}}
* {{Z|ms}}: {{W-|ms|Laut Mediterranean}}, {{W-|ms|Laut Tengah}}
* {{Z|mt}}: {{W-|mt|Baħar Mediterran|cuda=il-Baħar Mediterran}}
* {{Z|mi}}: {{W-|mi|Moana o waenga}}
* {{Z|mr}}: {{W-|mr|भूमध्य समुद्र}}
* {{Z|hu}}: {{W+|hu|Földközi-tenger}}
* {{Z|xmf}}: {{W-|xmf|სქირონაშქა ზუღა}}
* {{Z|mn}}:
*: Kirîlî: {{W-|mn|Газрын Дундад тэнгис}}
* {{Z|nv}}: {{W-|nv|Médíwííyin Sii|sc=Latn}}
* {{Z|ne}}: {{W-|ne|मेडिटरिनियन सागर}}
* {{Z|nrf}}: {{W-|nrf|Méditerrannée|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|Middelhavet|nt}}
*: {{Z|nn}}: {{W+|nn|Middelhavet|nt}}
* {{Z|oc}}: {{W-|oc|Mar Mediterranèa|m}}
* {{Z|ota}}: {{W-|ota|بحر روم|tr=Bahr-i Rûm}}, {{W-|ota|بحر سفید|tr=Bahr-i Sefid}}, {{W-|ota|اق دڭز|tr=Ak deñiz}}
* {{Z|ug}}: {{W-|ug|يەر ئوتتۇرا دېڭىزى}}
* {{Z|uz}}: {{W-|uz|Oq dengiz}}
* {{Z|pl}}: {{W+|pl|Morze Śródziemne|nt}}
* {{Z|pt}}: {{W+|pt|Mediterrâneo|n}}, {{W+|pt|Mar Mediterrâneo|n}}
* {{Z|pa}}: {{W-|pa|ਭੂ-ਮੱਧ ਸਮੁੰਦਰ}}
* {{Z|kk}}: {{W-|kk|Жерорта теңізі}}
* {{Z|rm}}: {{W-|rm|Mar Mediterrana}}
* {{Z|ro}}: {{W+|ro|Marea Mediterană|m}}
* {{Z|ru}}: {{W-|ru|Средизе́мное мо́ре|nt}}
* {{Z|ceb}}: {{W-|ceb|Dagat Mediteranyo}}
* {{Z|scn}}: {{W-|scn|Mari Miditirràniu|n}}, {{W-|scn|Miditirràniu|n}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|Средоземно море|nt}}
*: Latînî: {{W-|sh|Sredozemno more|nt}}
* {{Z|sk}}: {{W+|sk|Stredozemné more}}
* {{Z|sl}}: {{W-|sl|Sredozemsko morje|nt}}
* {{Z|so}}: {{W-|so|Bada Dhexe}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|Srjejźne mórjo|nt}}
*: {{Z|hsb}}: {{W-|hsb|Srjedźne morjo|nt}}
* {{Z|es}}: {{W+|es|mar Mediterráneo|n}}, {{W+|es|Mediterráneo|n}}
* {{Z|sw}}: {{W-|sw|Bahari ya Mediteranea}}, {{W-|sw|Bahari ya Kati}}
* {{Z|sv}}: {{W+|sv|Medelhavet|nt}}
* {{Z|tg}}: {{W-|tg|Баҳри Миёназамин}}
* {{Z|tl}}: {{W-|tl|Dagat Mediteraneo}}
* {{Z|ta}}: {{W-|ta|நடுநிலக் கடல்}}
* {{Z|th}}: {{W-|th|ทะเลเมดิเตอร์เรเนียน|tr=tá-lee mee-dì-dtə̂ə-ree-niian}}
* {{Z|te}}: {{W+|te|మధ్యధరా సముద్రం}}
* {{Z|crh}}: {{W-|crh|Aq deñiz}}
* {{Z|tr}}: {{W+|tr|Akdeniz}}
* {{Z|tk}}: {{W-|tk|Ortaýer deňzi}}
* {{Z|ur}}: {{W-|ur|بحیرہ روم|m|tr=bahīrā rum}}
* {{Z|uk}}: {{W-|uk|Середзе́мне мо́ре|nt}}
* {{Z|vi}}: {{W+|vi|Địa Trung Hải}} ({{W-|vi|地中海|sc=Hani}})
* {{Z|vo}}: {{W+|vo|Zänodamel}}
* {{Z|wa}}: {{W+|wa|Mîtrinne Mer}}
* {{Z|cy}}: {{W+|cy|Môr y Canoldir|n}}
* {{Z|km}}: {{W-|km|សមុទ្រ មេឌីទែរ៉ានេ}}
* {{Z|yi}}: {{W-|yi|מיטלענדישער ים|sc=Hebr|tr=mitlendisher yam|n}}
* {{Z|el}}: {{W+|el|Μεσόγειος Θάλασσα|m}}
{{werger-bin}}
i5806qrmbdtufzfge9gkwdjmzwqqkuu
6342810
6342785
2026-08-26T21:41:10Z
Balyozbot
7867
[[Special:PermanentLink/6298023|Bot]]: rêzkirina beşan
6342810
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Serenav ===
[[Wêne:Mediterranean Sea political map-ku.svg|thumb|Deryaya Navîn]]
{{serenav|ku|[[derya|Deryaya]] [[navîn|Navîn]]|z=m}}
# {{e|ku|behr}} [[derya|Derya]]ya [[navber]]a [[Ewropa]] û [[Afrîka]] û [[Rojhilata Navîn]].
#: {{hevmane|ku|Behra Spî|Deryaya Spî}}
#* {{bêmînak|ku}}
==== Formên alternatîv ====
* {{g|ku|Derya Navîn}}
* {{g|ku|Deryaya Naverast}}
* {{g|ku|Derya Naverast}}
* {{g|ku|Behra Navîn}}
* {{g|ku|Behra Naverast}}
==== Etîmolojî ====
Ji {{pêk|ku|derya|navîn}}.
==== Bide ber ====
* {{g|ku|Deryaya Atlas}}
* {{g|ku|Deryaya Pasîfîk}}
* {{g|ku|Deryaya Reş}}
* {{g|ku|Deryaya Sor}}
* {{g|ku|Deryaya Mirî}}
==== Werger ====
{{werger-ser}}
* {{Z|af}}: {{W-|af|Middellandse See}}
* {{Z|sq}}: {{W+|sq|Deti Mesdhe|n}}
* {{Z|goh}}: {{W-|goh|Wentilsēo}}
* {{Z|de}}: {{W+|de|Mittelmeer|nt}}
* {{Z|am}}: {{W-|am|ሜድትራኒያን ባሕር}}
* {{Z|an}}: {{W-|an|Mar Mediterrania}}
* {{Z|aii}}: {{W-|aii|ܝܵܡܵܐ ܚܘܵܪܵܐ ܡܸܨܥܵܝܵܐ|n|tr=yama ḳwara miṣʿaya}}
* {{Z|ast}}: {{W-|ast|Mar Mediterraneu}}
* {{Z|az}}: {{W+|az|Aralıq dənizi}}
* {{Z|eu}}: {{W-|eu|Mediterraneo itsasoa}}
* {{Z|be}}: {{W-|be|Міжзе́мнае мо́ра|nt}}
* {{Z|bn}}: {{W-|bn|ভূমধ্যসাগর}}
* {{Z|br}}: {{W-|br|Mor Kreizdouar}}
* {{Z|bg}}: {{W-|bg|Средизе́мно море́|nt}}
* {{Z|my}}: {{W-|my|မြေထဲပင်လယ်}}
* {{Z|cs}}: {{W+|cs|Středozemní moře|nt}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|地中海|tr=dei6 zung1 hoi2}}
*: {{Z|cmn}}: {{W+|cmn|地中海|tr=Dìzhōnghǎi}}
* {{Z|da}}: {{W+|da|Middelhavet|nt}}
* {{Z|id}}: {{W-|id|Laut Tengah}}
* {{Z|ar}}: {{W+|ar|الْبَحْر الْأَبْيَض الْمُتَوَسِّط|n}}
* {{Z|hy}}: {{W-|hy|Միջերկրական ծով}}
*: {{Z|xcl}}: {{W-|xcl|Յունաց ծով}}
* {{Z|eo}}: {{W-|eo|Mediteraneo}}
* {{Z|et}}: {{W+|et|Vahemeri}}
* {{Z|ext}}: {{W-|ext|Mari Mediterráneu}}
* {{Z|fa}}: {{W+|fa|دریای مدیترانه|tr=daryâ-ye mediterâne}}, {{W-|fa|دریای روم|tr=daryây-e rum}}, {{W-|fa|دریای شام|tr=daryây-e šâm}}, {{W-|fa|دریای میانه|tr=daryây-e miyâne}}
* {{Z|fo}}: {{W-|fo|Miðjarðarhav}}
* {{Z|fi}}: {{W+|fi|Välimeri}}
* {{Z|fr}}: {{W+|fr|mer Méditerranée|m}}, {{W+|fr|Méditerranée|m}}
* {{Z|frr}}: {{W-|frr|Madlunsia}}
* {{Z|fy}}: {{W-|fy|Middellânske See}}
* {{Z|gd}}: {{W-|gd|Muir Mheadhanach|cuda=A' Mhuir Mheadhanach|m}}
* {{Z|gl}}: {{W-|gl|Mar Mediterráneo}}
* {{Z|gu}}: {{W-|gu|ભૂમધ્ય સાગર}}
* {{Z|ka}}: {{W-|ka|ხმელთაშუა ზღვა}}
* {{Z|ha}}: {{W-|ha|Bahar Rum}}
* {{Z|hi}}: {{W+|hi|भूमध्य सागर|n}}
* {{Z|nl}}: {{W+|nl|Middellandse Zee|m}}
* {{Z|he}}: {{W-|he|הַיָּם הַתִּיכוֹן|tr=ha-yam ha-tikhón}}
* {{Z|ang}}: {{W-|ang|Wendelsǣ|m}}
* {{Z|enm}}: {{W-|enm|Grete See}}
* {{Z|en}}: {{W+|en|Mediterranean Sea}}
* {{Z|ga}}: {{W-|ga|Meánmhuir|cuda=an Mheánmhuir|m}}
* {{Z|it}}: {{W+|it|Mar Mediterraneo|n}}, {{W+|it|Mediterraneo|n}}, {{W-|it|Medioceano|n}}
* {{Z|is}}: {{W+|is|Miðjarðarhaf|nt}}
* {{Z|ja}}: {{W+|ja|地中海|tr=ちちゅうかい, Chichūkai}}
* {{Z|kn}}: {{W-|kn|ಮೆಡಿಟರೇನಿಯನ್ ಸಮುದ್ರ}}
* {{Z|csb}}: {{W-|csb|Strzódzemné Mòrze|nt}}
* {{Z|ca}}: {{W-|ca|Mar Mediterrània|m}}, {{W-|ca|Mar Mediterrani|n}}, {{W-|ca|Mediterrània|m}}, {{W-|ca|Mediterrani|n}}
* {{Z|ky}}: {{W-|ky|Жер ортолук деңиз}}
* {{Z|ko}}: {{W-|ko|^지중해}}, {{W+|ko|地中海}}
* {{Z|kw}}: {{W-|kw|an Kresvor|n}}
* {{Z|co}}: {{W-|co|Mar Mediterraniu|n}}, {{W-|co|Mari Mediterraniu|n}}
* {{Z|kum}}: {{W-|kum|Орта денгизи|tr=Orta deñizi}}
* {{Z|la}}: {{W-|la|Mare Mediterraneum|nt}}, {{W-|la|Mare Nostrum|nt}}, {{W-|la|Mare Internum|nt}}
* {{Z|lv}}: {{W+|lv|Vidusjūra|m}}
* {{Z|lo}}: {{W-|lo|ທະເລເມດີແຕກລາເນ}}
* {{Z|lt}}: {{W+|lt|Viduržemio jūra}}
* {{Z|lb}}: {{W-|lb|Mëttelmier}}
* {{Z|mk}}: {{W-|mk|Средозе́мно Море|nt}}
* {{Z|ml}}: {{W+|ml|മധ്യധരണ്യാഴി}}
* {{Z|ms}}: {{W-|ms|Laut Mediterranean}}, {{W-|ms|Laut Tengah}}
* {{Z|mt}}: {{W-|mt|Baħar Mediterran|cuda=il-Baħar Mediterran}}
* {{Z|mi}}: {{W-|mi|Moana o waenga}}
* {{Z|mr}}: {{W-|mr|भूमध्य समुद्र}}
* {{Z|hu}}: {{W+|hu|Földközi-tenger}}
* {{Z|xmf}}: {{W-|xmf|სქირონაშქა ზუღა}}
* {{Z|mn}}:
*: Kirîlî: {{W-|mn|Газрын Дундад тэнгис}}
* {{Z|nv}}: {{W-|nv|Médíwííyin Sii|sc=Latn}}
* {{Z|ne}}: {{W-|ne|मेडिटरिनियन सागर}}
* {{Z|nrf}}: {{W-|nrf|Méditerrannée|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|Middelhavet|nt}}
*: {{Z|nn}}: {{W+|nn|Middelhavet|nt}}
* {{Z|oc}}: {{W-|oc|Mar Mediterranèa|m}}
* {{Z|ota}}: {{W-|ota|بحر روم|tr=Bahr-i Rûm}}, {{W-|ota|بحر سفید|tr=Bahr-i Sefid}}, {{W-|ota|اق دڭز|tr=Ak deñiz}}
* {{Z|ug}}: {{W-|ug|يەر ئوتتۇرا دېڭىزى}}
* {{Z|uz}}: {{W-|uz|Oq dengiz}}
* {{Z|pl}}: {{W+|pl|Morze Śródziemne|nt}}
* {{Z|pt}}: {{W+|pt|Mediterrâneo|n}}, {{W+|pt|Mar Mediterrâneo|n}}
* {{Z|pa}}: {{W-|pa|ਭੂ-ਮੱਧ ਸਮੁੰਦਰ}}
* {{Z|kk}}: {{W-|kk|Жерорта теңізі}}
* {{Z|rm}}: {{W-|rm|Mar Mediterrana}}
* {{Z|ro}}: {{W+|ro|Marea Mediterană|m}}
* {{Z|ru}}: {{W-|ru|Средизе́мное мо́ре|nt}}
* {{Z|ceb}}: {{W-|ceb|Dagat Mediteranyo}}
* {{Z|scn}}: {{W-|scn|Mari Miditirràniu|n}}, {{W-|scn|Miditirràniu|n}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|Средоземно море|nt}}
*: Latînî: {{W-|sh|Sredozemno more|nt}}
* {{Z|sk}}: {{W+|sk|Stredozemné more}}
* {{Z|sl}}: {{W-|sl|Sredozemsko morje|nt}}
* {{Z|so}}: {{W-|so|Bada Dhexe}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|Srjejźne mórjo|nt}}
*: {{Z|hsb}}: {{W-|hsb|Srjedźne morjo|nt}}
* {{Z|es}}: {{W+|es|mar Mediterráneo|n}}, {{W+|es|Mediterráneo|n}}
* {{Z|sw}}: {{W-|sw|Bahari ya Mediteranea}}, {{W-|sw|Bahari ya Kati}}
* {{Z|sv}}: {{W+|sv|Medelhavet|nt}}
* {{Z|tg}}: {{W-|tg|Баҳри Миёназамин}}
* {{Z|tl}}: {{W-|tl|Dagat Mediteraneo}}
* {{Z|ta}}: {{W-|ta|நடுநிலக் கடல்}}
* {{Z|th}}: {{W-|th|ทะเลเมดิเตอร์เรเนียน|tr=tá-lee mee-dì-dtə̂ə-ree-niian}}
* {{Z|te}}: {{W+|te|మధ్యధరా సముద్రం}}
* {{Z|crh}}: {{W-|crh|Aq deñiz}}
* {{Z|tr}}: {{W+|tr|Akdeniz}}
* {{Z|tk}}: {{W-|tk|Ortaýer deňzi}}
* {{Z|ur}}: {{W-|ur|بحیرہ روم|m|tr=bahīrā rum}}
* {{Z|uk}}: {{W-|uk|Середзе́мне мо́ре|nt}}
* {{Z|vi}}: {{W+|vi|Địa Trung Hải}} ({{W-|vi|地中海|sc=Hani}})
* {{Z|vo}}: {{W+|vo|Zänodamel}}
* {{Z|wa}}: {{W+|wa|Mîtrinne Mer}}
* {{Z|cy}}: {{W+|cy|Môr y Canoldir|n}}
* {{Z|km}}: {{W-|km|សមុទ្រ មេឌីទែរ៉ានេ}}
* {{Z|yi}}: {{W-|yi|מיטלענדישער ים|sc=Hebr|tr=mitlendisher yam|n}}
* {{Z|el}}: {{W+|el|Μεσόγειος Θάλασσα|m}}
{{werger-bin}}
pca35k8bdo5a3wclm5fopbaifu81nbc
6342814
6342810
2026-08-26T21:55:06Z
Wikihez
7344
/* Etîmolojî */
6342814
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Serenav ===
[[Wêne:Mediterranean Sea political map-ku.svg|thumb|Deryaya Navîn]]
{{serenav|ku|[[derya|Deryaya]] [[navîn|Navîn]]|z=m}}
# {{e|ku|behr}} [[derya|Derya]]ya [[navber]]a [[Ewropa]] û [[Afrîka]] û [[Rojhilata Navîn]].
#: {{hevmane|ku|Behra Spî|Deryaya Spî}}
#* {{bêmînak|ku}}
==== Formên alternatîv ====
* {{g|ku|Derya Navîn}}
* {{g|ku|Deryaya Naverast}}
* {{g|ku|Derya Naverast}}
* {{g|ku|Behra Navîn}}
* {{g|ku|Behra Naverast}}
==== Etîmolojî ====
{{yekser|la-lat|ku|Mare Mediterraneum}}.
==== Bide ber ====
* {{g|ku|Deryaya Atlas}}
* {{g|ku|Deryaya Pasîfîk}}
* {{g|ku|Deryaya Reş}}
* {{g|ku|Deryaya Sor}}
* {{g|ku|Deryaya Mirî}}
==== Werger ====
{{werger-ser}}
* {{Z|af}}: {{W-|af|Middellandse See}}
* {{Z|sq}}: {{W+|sq|Deti Mesdhe|n}}
* {{Z|goh}}: {{W-|goh|Wentilsēo}}
* {{Z|de}}: {{W+|de|Mittelmeer|nt}}
* {{Z|am}}: {{W-|am|ሜድትራኒያን ባሕር}}
* {{Z|an}}: {{W-|an|Mar Mediterrania}}
* {{Z|aii}}: {{W-|aii|ܝܵܡܵܐ ܚܘܵܪܵܐ ܡܸܨܥܵܝܵܐ|n|tr=yama ḳwara miṣʿaya}}
* {{Z|ast}}: {{W-|ast|Mar Mediterraneu}}
* {{Z|az}}: {{W+|az|Aralıq dənizi}}
* {{Z|eu}}: {{W-|eu|Mediterraneo itsasoa}}
* {{Z|be}}: {{W-|be|Міжзе́мнае мо́ра|nt}}
* {{Z|bn}}: {{W-|bn|ভূমধ্যসাগর}}
* {{Z|br}}: {{W-|br|Mor Kreizdouar}}
* {{Z|bg}}: {{W-|bg|Средизе́мно море́|nt}}
* {{Z|my}}: {{W-|my|မြေထဲပင်လယ်}}
* {{Z|cs}}: {{W+|cs|Středozemní moře|nt}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|地中海|tr=dei6 zung1 hoi2}}
*: {{Z|cmn}}: {{W+|cmn|地中海|tr=Dìzhōnghǎi}}
* {{Z|da}}: {{W+|da|Middelhavet|nt}}
* {{Z|id}}: {{W-|id|Laut Tengah}}
* {{Z|ar}}: {{W+|ar|الْبَحْر الْأَبْيَض الْمُتَوَسِّط|n}}
* {{Z|hy}}: {{W-|hy|Միջերկրական ծով}}
*: {{Z|xcl}}: {{W-|xcl|Յունաց ծով}}
* {{Z|eo}}: {{W-|eo|Mediteraneo}}
* {{Z|et}}: {{W+|et|Vahemeri}}
* {{Z|ext}}: {{W-|ext|Mari Mediterráneu}}
* {{Z|fa}}: {{W+|fa|دریای مدیترانه|tr=daryâ-ye mediterâne}}, {{W-|fa|دریای روم|tr=daryây-e rum}}, {{W-|fa|دریای شام|tr=daryây-e šâm}}, {{W-|fa|دریای میانه|tr=daryây-e miyâne}}
* {{Z|fo}}: {{W-|fo|Miðjarðarhav}}
* {{Z|fi}}: {{W+|fi|Välimeri}}
* {{Z|fr}}: {{W+|fr|mer Méditerranée|m}}, {{W+|fr|Méditerranée|m}}
* {{Z|frr}}: {{W-|frr|Madlunsia}}
* {{Z|fy}}: {{W-|fy|Middellânske See}}
* {{Z|gd}}: {{W-|gd|Muir Mheadhanach|cuda=A' Mhuir Mheadhanach|m}}
* {{Z|gl}}: {{W-|gl|Mar Mediterráneo}}
* {{Z|gu}}: {{W-|gu|ભૂમધ્ય સાગર}}
* {{Z|ka}}: {{W-|ka|ხმელთაშუა ზღვა}}
* {{Z|ha}}: {{W-|ha|Bahar Rum}}
* {{Z|hi}}: {{W+|hi|भूमध्य सागर|n}}
* {{Z|nl}}: {{W+|nl|Middellandse Zee|m}}
* {{Z|he}}: {{W-|he|הַיָּם הַתִּיכוֹן|tr=ha-yam ha-tikhón}}
* {{Z|ang}}: {{W-|ang|Wendelsǣ|m}}
* {{Z|enm}}: {{W-|enm|Grete See}}
* {{Z|en}}: {{W+|en|Mediterranean Sea}}
* {{Z|ga}}: {{W-|ga|Meánmhuir|cuda=an Mheánmhuir|m}}
* {{Z|it}}: {{W+|it|Mar Mediterraneo|n}}, {{W+|it|Mediterraneo|n}}, {{W-|it|Medioceano|n}}
* {{Z|is}}: {{W+|is|Miðjarðarhaf|nt}}
* {{Z|ja}}: {{W+|ja|地中海|tr=ちちゅうかい, Chichūkai}}
* {{Z|kn}}: {{W-|kn|ಮೆಡಿಟರೇನಿಯನ್ ಸಮುದ್ರ}}
* {{Z|csb}}: {{W-|csb|Strzódzemné Mòrze|nt}}
* {{Z|ca}}: {{W-|ca|Mar Mediterrània|m}}, {{W-|ca|Mar Mediterrani|n}}, {{W-|ca|Mediterrània|m}}, {{W-|ca|Mediterrani|n}}
* {{Z|ky}}: {{W-|ky|Жер ортолук деңиз}}
* {{Z|ko}}: {{W-|ko|^지중해}}, {{W+|ko|地中海}}
* {{Z|kw}}: {{W-|kw|an Kresvor|n}}
* {{Z|co}}: {{W-|co|Mar Mediterraniu|n}}, {{W-|co|Mari Mediterraniu|n}}
* {{Z|kum}}: {{W-|kum|Орта денгизи|tr=Orta deñizi}}
* {{Z|la}}: {{W-|la|Mare Mediterraneum|nt}}, {{W-|la|Mare Nostrum|nt}}, {{W-|la|Mare Internum|nt}}
* {{Z|lv}}: {{W+|lv|Vidusjūra|m}}
* {{Z|lo}}: {{W-|lo|ທະເລເມດີແຕກລາເນ}}
* {{Z|lt}}: {{W+|lt|Viduržemio jūra}}
* {{Z|lb}}: {{W-|lb|Mëttelmier}}
* {{Z|mk}}: {{W-|mk|Средозе́мно Море|nt}}
* {{Z|ml}}: {{W+|ml|മധ്യധരണ്യാഴി}}
* {{Z|ms}}: {{W-|ms|Laut Mediterranean}}, {{W-|ms|Laut Tengah}}
* {{Z|mt}}: {{W-|mt|Baħar Mediterran|cuda=il-Baħar Mediterran}}
* {{Z|mi}}: {{W-|mi|Moana o waenga}}
* {{Z|mr}}: {{W-|mr|भूमध्य समुद्र}}
* {{Z|hu}}: {{W+|hu|Földközi-tenger}}
* {{Z|xmf}}: {{W-|xmf|სქირონაშქა ზუღა}}
* {{Z|mn}}:
*: Kirîlî: {{W-|mn|Газрын Дундад тэнгис}}
* {{Z|nv}}: {{W-|nv|Médíwííyin Sii|sc=Latn}}
* {{Z|ne}}: {{W-|ne|मेडिटरिनियन सागर}}
* {{Z|nrf}}: {{W-|nrf|Méditerrannée|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|Middelhavet|nt}}
*: {{Z|nn}}: {{W+|nn|Middelhavet|nt}}
* {{Z|oc}}: {{W-|oc|Mar Mediterranèa|m}}
* {{Z|ota}}: {{W-|ota|بحر روم|tr=Bahr-i Rûm}}, {{W-|ota|بحر سفید|tr=Bahr-i Sefid}}, {{W-|ota|اق دڭز|tr=Ak deñiz}}
* {{Z|ug}}: {{W-|ug|يەر ئوتتۇرا دېڭىزى}}
* {{Z|uz}}: {{W-|uz|Oq dengiz}}
* {{Z|pl}}: {{W+|pl|Morze Śródziemne|nt}}
* {{Z|pt}}: {{W+|pt|Mediterrâneo|n}}, {{W+|pt|Mar Mediterrâneo|n}}
* {{Z|pa}}: {{W-|pa|ਭੂ-ਮੱਧ ਸਮੁੰਦਰ}}
* {{Z|kk}}: {{W-|kk|Жерорта теңізі}}
* {{Z|rm}}: {{W-|rm|Mar Mediterrana}}
* {{Z|ro}}: {{W+|ro|Marea Mediterană|m}}
* {{Z|ru}}: {{W-|ru|Средизе́мное мо́ре|nt}}
* {{Z|ceb}}: {{W-|ceb|Dagat Mediteranyo}}
* {{Z|scn}}: {{W-|scn|Mari Miditirràniu|n}}, {{W-|scn|Miditirràniu|n}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|Средоземно море|nt}}
*: Latînî: {{W-|sh|Sredozemno more|nt}}
* {{Z|sk}}: {{W+|sk|Stredozemné more}}
* {{Z|sl}}: {{W-|sl|Sredozemsko morje|nt}}
* {{Z|so}}: {{W-|so|Bada Dhexe}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|Srjejźne mórjo|nt}}
*: {{Z|hsb}}: {{W-|hsb|Srjedźne morjo|nt}}
* {{Z|es}}: {{W+|es|mar Mediterráneo|n}}, {{W+|es|Mediterráneo|n}}
* {{Z|sw}}: {{W-|sw|Bahari ya Mediteranea}}, {{W-|sw|Bahari ya Kati}}
* {{Z|sv}}: {{W+|sv|Medelhavet|nt}}
* {{Z|tg}}: {{W-|tg|Баҳри Миёназамин}}
* {{Z|tl}}: {{W-|tl|Dagat Mediteraneo}}
* {{Z|ta}}: {{W-|ta|நடுநிலக் கடல்}}
* {{Z|th}}: {{W-|th|ทะเลเมดิเตอร์เรเนียน|tr=tá-lee mee-dì-dtə̂ə-ree-niian}}
* {{Z|te}}: {{W+|te|మధ్యధరా సముద్రం}}
* {{Z|crh}}: {{W-|crh|Aq deñiz}}
* {{Z|tr}}: {{W+|tr|Akdeniz}}
* {{Z|tk}}: {{W-|tk|Ortaýer deňzi}}
* {{Z|ur}}: {{W-|ur|بحیرہ روم|m|tr=bahīrā rum}}
* {{Z|uk}}: {{W-|uk|Середзе́мне мо́ре|nt}}
* {{Z|vi}}: {{W+|vi|Địa Trung Hải}} ({{W-|vi|地中海|sc=Hani}})
* {{Z|vo}}: {{W+|vo|Zänodamel}}
* {{Z|wa}}: {{W+|wa|Mîtrinne Mer}}
* {{Z|cy}}: {{W+|cy|Môr y Canoldir|n}}
* {{Z|km}}: {{W-|km|សមុទ្រ មេឌីទែរ៉ានេ}}
* {{Z|yi}}: {{W-|yi|מיטלענדישער ים|sc=Hebr|tr=mitlendisher yam|n}}
* {{Z|el}}: {{W+|el|Μεσόγειος Θάλασσα|m}}
{{werger-bin}}
c64pzreje84h9lrg6isu0jro6kagtsn
6342817
6342814
2026-08-26T22:12:08Z
Balyozbot
7867
Bot: Paqijiyên kozmetîk (Lînk paqij kir.)
6342817
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Serenav ===
[[Wêne:Mediterranean Sea political map-ku.svg|thumb|Deryaya Navîn]]
{{serenav|ku|[[derya|Deryaya]] [[navîn|Navîn]]|z=m}}
# {{e|ku|behr}} [[derya|Deryaya]] [[navber]]a [[Ewropa]] û [[Afrîka]] û [[Rojhilata Navîn]].
#: {{hevmane|ku|Behra Spî|Deryaya Spî}}
#* {{bêmînak|ku}}
==== Formên alternatîv ====
* {{g|ku|Derya Navîn}}
* {{g|ku|Deryaya Naverast}}
* {{g|ku|Derya Naverast}}
* {{g|ku|Behra Navîn}}
* {{g|ku|Behra Naverast}}
==== Etîmolojî ====
{{yekser|la-lat|ku|Mare Mediterraneum}}.
==== Bide ber ====
* {{g|ku|Deryaya Atlas}}
* {{g|ku|Deryaya Pasîfîk}}
* {{g|ku|Deryaya Reş}}
* {{g|ku|Deryaya Sor}}
* {{g|ku|Deryaya Mirî}}
==== Werger ====
{{werger-ser}}
* {{Z|af}}: {{W-|af|Middellandse See}}
* {{Z|sq}}: {{W+|sq|Deti Mesdhe|n}}
* {{Z|goh}}: {{W-|goh|Wentilsēo}}
* {{Z|de}}: {{W+|de|Mittelmeer|nt}}
* {{Z|am}}: {{W-|am|ሜድትራኒያን ባሕር}}
* {{Z|an}}: {{W-|an|Mar Mediterrania}}
* {{Z|aii}}: {{W-|aii|ܝܵܡܵܐ ܚܘܵܪܵܐ ܡܸܨܥܵܝܵܐ|n|tr=yama ḳwara miṣʿaya}}
* {{Z|ast}}: {{W-|ast|Mar Mediterraneu}}
* {{Z|az}}: {{W+|az|Aralıq dənizi}}
* {{Z|eu}}: {{W-|eu|Mediterraneo itsasoa}}
* {{Z|be}}: {{W-|be|Міжзе́мнае мо́ра|nt}}
* {{Z|bn}}: {{W-|bn|ভূমধ্যসাগর}}
* {{Z|br}}: {{W-|br|Mor Kreizdouar}}
* {{Z|bg}}: {{W-|bg|Средизе́мно море́|nt}}
* {{Z|my}}: {{W-|my|မြေထဲပင်လယ်}}
* {{Z|cs}}: {{W+|cs|Středozemní moře|nt}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|地中海|tr=dei6 zung1 hoi2}}
*: {{Z|cmn}}: {{W+|cmn|地中海|tr=Dìzhōnghǎi}}
* {{Z|da}}: {{W+|da|Middelhavet|nt}}
* {{Z|id}}: {{W-|id|Laut Tengah}}
* {{Z|ar}}: {{W+|ar|الْبَحْر الْأَبْيَض الْمُتَوَسِّط|n}}
* {{Z|hy}}: {{W-|hy|Միջերկրական ծով}}
*: {{Z|xcl}}: {{W-|xcl|Յունաց ծով}}
* {{Z|eo}}: {{W-|eo|Mediteraneo}}
* {{Z|et}}: {{W+|et|Vahemeri}}
* {{Z|ext}}: {{W-|ext|Mari Mediterráneu}}
* {{Z|fa}}: {{W+|fa|دریای مدیترانه|tr=daryâ-ye mediterâne}}, {{W-|fa|دریای روم|tr=daryây-e rum}}, {{W-|fa|دریای شام|tr=daryây-e šâm}}, {{W-|fa|دریای میانه|tr=daryây-e miyâne}}
* {{Z|fo}}: {{W-|fo|Miðjarðarhav}}
* {{Z|fi}}: {{W+|fi|Välimeri}}
* {{Z|fr}}: {{W+|fr|mer Méditerranée|m}}, {{W+|fr|Méditerranée|m}}
* {{Z|frr}}: {{W-|frr|Madlunsia}}
* {{Z|fy}}: {{W-|fy|Middellânske See}}
* {{Z|gd}}: {{W-|gd|Muir Mheadhanach|cuda=A' Mhuir Mheadhanach|m}}
* {{Z|gl}}: {{W-|gl|Mar Mediterráneo}}
* {{Z|gu}}: {{W-|gu|ભૂમધ્ય સાગર}}
* {{Z|ka}}: {{W-|ka|ხმელთაშუა ზღვა}}
* {{Z|ha}}: {{W-|ha|Bahar Rum}}
* {{Z|hi}}: {{W+|hi|भूमध्य सागर|n}}
* {{Z|nl}}: {{W+|nl|Middellandse Zee|m}}
* {{Z|he}}: {{W-|he|הַיָּם הַתִּיכוֹן|tr=ha-yam ha-tikhón}}
* {{Z|ang}}: {{W-|ang|Wendelsǣ|m}}
* {{Z|enm}}: {{W-|enm|Grete See}}
* {{Z|en}}: {{W+|en|Mediterranean Sea}}
* {{Z|ga}}: {{W-|ga|Meánmhuir|cuda=an Mheánmhuir|m}}
* {{Z|it}}: {{W+|it|Mar Mediterraneo|n}}, {{W+|it|Mediterraneo|n}}, {{W-|it|Medioceano|n}}
* {{Z|is}}: {{W+|is|Miðjarðarhaf|nt}}
* {{Z|ja}}: {{W+|ja|地中海|tr=ちちゅうかい, Chichūkai}}
* {{Z|kn}}: {{W-|kn|ಮೆಡಿಟರೇನಿಯನ್ ಸಮುದ್ರ}}
* {{Z|csb}}: {{W-|csb|Strzódzemné Mòrze|nt}}
* {{Z|ca}}: {{W-|ca|Mar Mediterrània|m}}, {{W-|ca|Mar Mediterrani|n}}, {{W-|ca|Mediterrània|m}}, {{W-|ca|Mediterrani|n}}
* {{Z|ky}}: {{W-|ky|Жер ортолук деңиз}}
* {{Z|ko}}: {{W-|ko|^지중해}}, {{W+|ko|地中海}}
* {{Z|kw}}: {{W-|kw|an Kresvor|n}}
* {{Z|co}}: {{W-|co|Mar Mediterraniu|n}}, {{W-|co|Mari Mediterraniu|n}}
* {{Z|kum}}: {{W-|kum|Орта денгизи|tr=Orta deñizi}}
* {{Z|la}}: {{W-|la|Mare Mediterraneum|nt}}, {{W-|la|Mare Nostrum|nt}}, {{W-|la|Mare Internum|nt}}
* {{Z|lv}}: {{W+|lv|Vidusjūra|m}}
* {{Z|lo}}: {{W-|lo|ທະເລເມດີແຕກລາເນ}}
* {{Z|lt}}: {{W+|lt|Viduržemio jūra}}
* {{Z|lb}}: {{W-|lb|Mëttelmier}}
* {{Z|mk}}: {{W-|mk|Средозе́мно Море|nt}}
* {{Z|ml}}: {{W+|ml|മധ്യധരണ്യാഴി}}
* {{Z|ms}}: {{W-|ms|Laut Mediterranean}}, {{W-|ms|Laut Tengah}}
* {{Z|mt}}: {{W-|mt|Baħar Mediterran|cuda=il-Baħar Mediterran}}
* {{Z|mi}}: {{W-|mi|Moana o waenga}}
* {{Z|mr}}: {{W-|mr|भूमध्य समुद्र}}
* {{Z|hu}}: {{W+|hu|Földközi-tenger}}
* {{Z|xmf}}: {{W-|xmf|სქირონაშქა ზუღა}}
* {{Z|mn}}:
*: Kirîlî: {{W-|mn|Газрын Дундад тэнгис}}
* {{Z|nv}}: {{W-|nv|Médíwííyin Sii|sc=Latn}}
* {{Z|ne}}: {{W-|ne|मेडिटरिनियन सागर}}
* {{Z|nrf}}: {{W-|nrf|Méditerrannée|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|Middelhavet|nt}}
*: {{Z|nn}}: {{W+|nn|Middelhavet|nt}}
* {{Z|oc}}: {{W-|oc|Mar Mediterranèa|m}}
* {{Z|ota}}: {{W-|ota|بحر روم|tr=Bahr-i Rûm}}, {{W-|ota|بحر سفید|tr=Bahr-i Sefid}}, {{W-|ota|اق دڭز|tr=Ak deñiz}}
* {{Z|ug}}: {{W-|ug|يەر ئوتتۇرا دېڭىزى}}
* {{Z|uz}}: {{W-|uz|Oq dengiz}}
* {{Z|pl}}: {{W+|pl|Morze Śródziemne|nt}}
* {{Z|pt}}: {{W+|pt|Mediterrâneo|n}}, {{W+|pt|Mar Mediterrâneo|n}}
* {{Z|pa}}: {{W-|pa|ਭੂ-ਮੱਧ ਸਮੁੰਦਰ}}
* {{Z|kk}}: {{W-|kk|Жерорта теңізі}}
* {{Z|rm}}: {{W-|rm|Mar Mediterrana}}
* {{Z|ro}}: {{W+|ro|Marea Mediterană|m}}
* {{Z|ru}}: {{W-|ru|Средизе́мное мо́ре|nt}}
* {{Z|ceb}}: {{W-|ceb|Dagat Mediteranyo}}
* {{Z|scn}}: {{W-|scn|Mari Miditirràniu|n}}, {{W-|scn|Miditirràniu|n}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|Средоземно море|nt}}
*: Latînî: {{W-|sh|Sredozemno more|nt}}
* {{Z|sk}}: {{W+|sk|Stredozemné more}}
* {{Z|sl}}: {{W-|sl|Sredozemsko morje|nt}}
* {{Z|so}}: {{W-|so|Bada Dhexe}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|Srjejźne mórjo|nt}}
*: {{Z|hsb}}: {{W-|hsb|Srjedźne morjo|nt}}
* {{Z|es}}: {{W+|es|mar Mediterráneo|n}}, {{W+|es|Mediterráneo|n}}
* {{Z|sw}}: {{W-|sw|Bahari ya Mediteranea}}, {{W-|sw|Bahari ya Kati}}
* {{Z|sv}}: {{W+|sv|Medelhavet|nt}}
* {{Z|tg}}: {{W-|tg|Баҳри Миёназамин}}
* {{Z|tl}}: {{W-|tl|Dagat Mediteraneo}}
* {{Z|ta}}: {{W-|ta|நடுநிலக் கடல்}}
* {{Z|th}}: {{W-|th|ทะเลเมดิเตอร์เรเนียน|tr=tá-lee mee-dì-dtə̂ə-ree-niian}}
* {{Z|te}}: {{W+|te|మధ్యధరా సముద్రం}}
* {{Z|crh}}: {{W-|crh|Aq deñiz}}
* {{Z|tr}}: {{W+|tr|Akdeniz}}
* {{Z|tk}}: {{W-|tk|Ortaýer deňzi}}
* {{Z|ur}}: {{W-|ur|بحیرہ روم|m|tr=bahīrā rum}}
* {{Z|uk}}: {{W-|uk|Середзе́мне мо́ре|nt}}
* {{Z|vi}}: {{W+|vi|Địa Trung Hải}} ({{W-|vi|地中海|sc=Hani}})
* {{Z|vo}}: {{W+|vo|Zänodamel}}
* {{Z|wa}}: {{W+|wa|Mîtrinne Mer}}
* {{Z|cy}}: {{W+|cy|Môr y Canoldir|n}}
* {{Z|km}}: {{W-|km|សមុទ្រ មេឌីទែរ៉ានេ}}
* {{Z|yi}}: {{W-|yi|מיטלענדישער ים|sc=Hebr|tr=mitlendisher yam|n}}
* {{Z|el}}: {{W+|el|Μεσόγειος Θάλασσα|m}}
{{werger-bin}}
qy66ikmu7jfdtcirtloa50zlhgfu1bb
Behra Spî
0
12733
6342780
5712529
2026-08-26T20:41:06Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342780
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=-}}
# {{guharto|ku|Deryaya Navîn}}
#* {{J:Hawar:2:1998|ku|sernav=Şerê Efrîqayê|nivîskar=Xeberguhêz|hejmar=32|r=800|jêgirtin=Çend caran ingilîzan di '''Behra Spî''' de drêjî vaporên talyanî kirine{{...}}}}
pa3lzm76kahrkltfpy9b0zprv1qtm8m
6342781
6342780
2026-08-26T20:41:15Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342781
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=-}}
# {{guharto|ku|Deryaya Navîn}}
#* {{J:Hawar:2:1998|sernav=Şerê Efrîqayê|nivîskar=Xeberguhêz|hejmar=32|r=800|jêgirtin=Çend caran ingilîzan di '''Behra Spî''' de drêjî vaporên talyanî kirine{{...}}}}
m4yn4ip5w4qhnt8153d7mtfjmt5wh63
6342786
6342781
2026-08-26T20:46:20Z
Wikihez
7344
6342786
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=-}}
# {{g|ku|Deryaya Navîn}}
#* {{J:Hawar:2:1998|sernav=Şerê Efrîqayê|nivîskar=Xeberguhêz|hejmar=32|r=800|jêgirtin=Çend caran ingilîzan di '''Behra Spî''' de drêjî vaporên talyanî kirine{{...}}}}
gnaxz4dzvb4nckger6t379ivyzrnsnr
6342788
6342786
2026-08-26T20:48:57Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342788
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=-}}
# {{g|ku|Deryaya Navîn}}
#* {{J:Hawar:2:1998|sernav=Şerê Efrîqayê|nivîskar=Xeberguhêz|hejmar=32|r=800|jêgirtin=Çend caran ingilîzan di '''Behra Spî''' de drêjî vaporên talyanî{{sic}} kirine{{...}}}}
k230jlsbezgyy5g4e6v5uhthszzusp7
Efrîqa
0
14870
6342787
6334805
2026-08-26T20:47:15Z
Wikihez
7344
/* Serenav */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342787
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Serenav ===
{{serenav|ku|z=m}}
# {{guherto|Afrîka}}
#* {{J:Hawar:1998:2|hj=32|sernav=Şerê Efrîqayê|nivîskar=Xeberguhêz|r=800|jêgirtin=(...) li '''Efrîqayê''' bi sarbûna hewayê şer wê germ bibe.}}
#* {{J:Mustafa Aydogan:Berê gotin hebû:2002|r=14|jêgirtin=(...) çavên wan berê li Rojhilata Navîn diçirisin û dû re jî dadigerin ser gerdena '''Efrîqayê'''.}}
luw1b676hwky89dthlrl7w4ib7accfn
embaz
0
17551
6342737
6306025
2026-08-26T18:44:31Z
Şêr
1103
/* {{ziman|zza}} */
6342737
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-embaz.wav|Deng|dever=Bidlîs}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# {{mane?|ku}}
#: {{hevmane|ku|nimûne|mînak|mîsal|manend|model|mesele}}
#* {{bênimûne|ku}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Formên alternatîv ====
* [[ambaz]]
==== Jê ====
{{kol3|ku
| bêembaz
| bêembazî
| bêembazîtî
| bêembaztî
| biembaz
| biembazî
| biembazîtî
| biembaztî
| embazî
}}
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Bide ber ====
* [[amraz]]
* [[hembaz]]
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|Beispiel|n}}, {{W|de|Exempel|n}}, [[beispiel|Beispiel]] (''[[nt]]''; die ~e), [[beleg|Beleg]] (''[[nêr]]''; die ~e), [[probe|Probe]] (; die ~n)
* {{Z|fa}}: {{W+|fa|مثال}}, {{W+|fa|نمونه}}
* {{Z|fi}}: {{W+|fi|esimerkki}}, {{W+|fi|malli}}, {{W+|fi|todiste}}, {{W+|fi|osoitus}}
* {{Z|fr}}: {{W|fr|exemple|m}}, {{W|fr|modèle|m}}
* {{Z|en}}: {{W+|en|example}}, {{W+|en|instance}}, {{W+|en|sample}}, {{W+|en|model}}, {{W+|en|pattern}}, {{W+|en|illustration}}
* {{Z|it}}: {{W|it|esempio|m}}
* {{Z|ru}}: {{W+|ru|пример}}, {{W+|ru|образец}}, {{W+|ru|иллюстрация}}
* {{Z|es}}: {{W|es|ejemplo|m}}, {{W|es|muestra|f}}, {{W|es|paradigma|m}}
* {{Z|sv}}: {{W+|sv|exempel|nt}}
* {{Z|tr}}: {{W+|tr|misal}}, {{W+|tr|örnek}}, {{W+|tr|paradigma}}, {{W+|tr|mostra}}
{{werger-bin}}
== {{ziman|zza}} ==
=== Navdêr ===
{{navdêr|zza|z=n}}
# [[heval]], [[dost]], [[hogir]] (kesê ku pêwendiyeke nêzîk û dilsozane pê re heye)
#: {{mînak|zza|O embazê mi yo tewr rind o.|werger=Ew hevalê min ê herî baş e.}}
#: {{mînak|zza|Ma zaf serran ra ravêr embaz ê.|werger=Em ji gelek salan ve hevalên hev in.}}
tngyavz8mfa1duxkk6snjrbzftuvxfa
reh
0
18500
6342696
6342661
2026-08-26T13:51:10Z
Wikihez
7344
6342696
wikitext
text/x-wiki
{{bnr-h|Reh}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr 1 ===
[[Wêne:Primary and secondary cotton roots.jpg|thumb|'''Rehên''' darekê.]]
{{navdêr|ku|c1=m|c1etîk=devokên navendî|c2=n|c2etîk=devokên rojhilatî}}
# {{f|ku|riweknasî}} [[parçe|Parçeyên]] [[jêrîn]] yên [[riwek]]an (bi taybetî yên di [[bin]] [[ax]]ê ve).
#: {{hevmane|ku|kok|rewa|rîş|ripî|riç|cille}}
# [[binyat|Binyat]], [[bingeh]], [[serekanî]], [[esil]], [[esas]].
#* {{J:Albert Camus:Biyanî|jêgirtin=Min got ku kûçikê wî ji tuxmekî baş, ji '''reheke''' kûçikên xweşik bû.}}
# {{f|ku|zimannasî}} [[parçe|Parçeya]] [[peyv]]an ya herî [[biçûk]]
#* {{jêder-malper|ku|jêgirtin=Pêşpirtik pirtikên wisan in ku tên berî peyva xwerû yan '''rehê''' peyvê yan jî peyva ku ji xwe hin pirtikên din pê ve hene|nivîskar={{w|Husein Muhammed}}|sernav=Pirtikrêzî anku morfotaksî|url=https://zimannas.wordpress.com/2015/12/12/pirtikrezi-anku-morfotaksi/|malper=zimannas.wordpress.com|dîrok=12.12.2015}}
#* {{jêder-malper|ku|jêgirtin=Da-hat-û (da: paşdaçek, hat: '''rehê''' dema borî ya lêkera hatinê, û: gîhanek) Çi têkilîya vê bi dema bê ra heye? De were îca safî bike!|nivîskar=Ewdil Ararat|sernav=Ji bo weqfa Mezopotamyayê II|url=http://www.rojnameyakurdistan.com/ku/makale/Ji_bo_weqfa_Mezopotamyay%C3%AA_II|malper=Rojnameya Kurdistan|dîrok=21.05.2017}}
#* {{jêder-malper|ku|jêgirtin=Dema kirde diyar be jî, veşartî be jî bi paşgira kesane ya tê pey '''rehê''' lêkerê, xwe diyar dike û têgihîştinê dide çêkirin.|nivîskar=Hesen Huseyin Deniz|sernav=Di Zimanê Kurdî de Hevok û Erka Hevokan di Vegotinê de|url=http://www.pen-kurd.org/kurdi/hesen-deniz/di-zimane-kurdi-de-hevok-u-erka-hevokan.html|malper=pen-kurd.org}}
# {{f|ku|nivîsbarî}} [[birêveber]]a [[pergala xebatê|pergalên xebatê]] (bi gelemperî ya [[Linux]]ê)
#* {{bêmînak|ku}}
==== Ji wêjeya klasîk ====
* {{J:Melayê Cizîrî:Dîwana Melayê Cizîrî|jêgirtin=Dê du siyeh sirmeyê çehvên xwe kit<br />Xakê '''rehê''' yarê seba her sebah<br />Toz û xubara seherê ber çimen}}
==== Jê ====
{{kol3|ku
|jirehkirî<crz:rengdêr>
|jirehkirin<crz:navdêr>
|ji reh kirin<crz:lêker><t:ji koka wê / wî [[birîn]] yan [[piçandin]]>
| bêreh
| bêrehî
| bêrehîtî
| bêrehtî
| bireh
| birehî
| birehîtî
| birehtî
| rehandin
| rehandî
| rehdar
| rehdarî
| rehdarîtî
| rehdartî
| rehder
| rehderî
| rehderîtî
| rehdertî
| rehdêr
| rehdêrî
| rehdêrîtî
| rehdêrtî
| rehik
| rehiyayî
| rehî
| rehîn
| rehîner
| rehk
| rewik
}}
==== Etîmolojî ====
Ji {{ji|ine-pro|ku|-}} {{recons|ine-pro|wréh₂ds}} (reh), [[hevreh]]a soranî {{g|ckb|ڕهگ|tr=reg}}, farisî {{g|fa|ریشه|tr=rîşe}}, yûnaniya kevn [[ῥίζα]] (rihîza), latînî [[radix]], fransî [[racine]], îngilîzî [[root]] û [[wort]], swêdî [[rot]] û [[ört]], albanî [[rrënjë]]. Ji heman rehî: [[rih]] / [[rî]], [[rêv]].
==== Bi zaravayên din ====
* {{Z|ckb}}: [[reg]], [[rêşe]]
* Feylî/Kelhurî: rîşe, reg
* Zazakî: kok, ristim, rîşe, reya
==== Werger ====
{{werger-ser}}
* {{Z|ace}}: {{W-|ace|ukheue}}
* {{Z|aa}}: {{W-|aa|rimid}}
* {{Z|af}}: {{W+|af|wortel}}
* {{Z|akl}}: {{W-|akl|gamot}}
* {{Z|sq}}: {{W+|sq|rrënjë|m}}
* {{Z|de}}: {{W+|de|Wurzel|m}}, {{W+|de|Wurzeln|p}}
* {{Z|alt}}: {{W-|alt|тамыр}}, {{W-|alt|јылтыс}}
* {{Z|an}}: {{W+|an|radiz}}
* {{Z|rup}}: {{W-|rup|arãdãtsinã|m}}, {{W-|rup|zãrãtsinã|m}}, {{W-|rup|rãdãtsinã|m}}
* {{Z|aer}}: {{W-|aer|artekerre}}
* {{Z|as}}: {{W-|as|শিয়া}}, {{W-|as|শিপা}}
* {{Z|bno}}: {{W-|bno|gamot}}
* {{Z|ast}}: {{W+|ast|raíz|m}}
* {{Z|az}}: {{W+|az|kök}}
* {{Z|xkl}}: {{W-|xkl|lakat}}
* {{Z|ban}}: {{W-|ban|akah}}
* {{Z|eu}}: {{W-|eu|sustrai}}, {{W-|eu|zuztar}}, {{W-|eu|erro}}
* {{Z|ba}}: {{W-|ba|тамыр}}
* {{Z|be}}: {{W+|be|ко́рань|n}}
* {{Z|bn}}: {{W+|bn|মূল}}
* Berberî:
*: {{Z|shi}}: {{W-|shi|azɣwr|n}}
* {{Z|bpz}}: {{W-|bpz|oka}}
* {{Z|bny}}: {{W-|bny|waka}}
* {{Z|bg}}: {{W+|bg|ко́рен|n}}
* {{Z|my}}: {{W+|my|အမြစ်}}
* {{Z|ccc}}: {{W-|ccc|ijtishi}}
* {{Z|cjm}}: {{W-|cjm|ꨀꨉꨩ|tr=agha'}}, {{W-|cjm|ꨉꨩ|tr=gha'}}, {{W-|cjm|ꨂꨉꨩ|tr=ưgha'}}
* {{Z|ce}}: {{W-|ce|орам}}
* {{Z|cs}}: {{W+|cs|kořen|n}}
* {{Z|chr}}: {{W-|chr|ᎤᎿᏍᏕᏜ}}
* {{Z|ny}}: {{W-|ny|muzu}}
* {{Z|zh}}:
*: {{Z|cmn}}: {{W+|cmn|根|tr=gēn}}
* {{Z|cho}}: {{W-|cho|akshish}}
* {{Z|dlm}}: {{W-|dlm|radaica|m}}
* {{Z|da}}: {{W+|da|rod|g}}
* {{Z|duu}}: {{W-|duu|vng'reu}}, {{W-|duu|shing'reu}}
* {{Z|ovd}}: {{W-|ovd|ruota|m}}
* {{Z|id}}: {{W+|id|akar}}
* {{Z|ar}}: {{W+|ar|جَذْر|n}}
*: {{Z|arz}}: {{W-|arz|جدر|n|tr=gedr}}
*: {{Z|apc}}: {{W-|apc|شرش|n|tr=šereš}}
*: {{Z|acm}}: {{W-|acm|عرگ|n|tr=ʕereg}}
*: {{Z|ary}}: {{W-|ary|جدر|n|tr=ždər}}
*: {{Z|ajp}}: {{W-|ajp|شرش|n|tr=šorš}}
* {{Z|hy}}: {{W+|hy|արմատ}}
* {{Z|eo}}: {{W+|eo|radiko}}
* {{Z|et}}: {{W+|et|juur}}
* {{Z|gez}}: {{W-|gez|ሥርው}}
* {{Z|evn}}: {{W-|evn|ңиңтэ}}
* {{Z|fa}}: {{W+|fa|ریشه|tr=riše}}
* {{Z|fo}}: {{W+|fo|rót|m}}
* {{Z|fi}}: {{W+|fi|juuri}}, {{W-|fi|puunjuuri}}
* {{Z|fr}}: {{W+|fr|racine|m}}
* {{Z|fur}}: {{W-|fur|lidrîs}}
* {{Z|fy}}: {{W+|fy|woartel}}
* {{Z|gd}}: {{W-|gd|freumh|n}}
* {{Z|gl}}: {{W+|gl|raíz|m}}
* {{Z|got}}: {{W-|got|𐍅𐌰𐌿𐍂𐍄𐍃|m}}
* {{Z|ka}}: {{W-|ka|ფესვი}}, {{W-|ka|ძირი}}
* {{Z|gn}}: {{W-|gn|[[tapo]]}}
* {{Z|ht}}: {{W-|ht|rasin}}
* {{Z|haw}}: {{W-|haw|aʻa}}
* {{Z|mba}}: {{W-|mba|gamot}}
* {{Z|hi}}: {{W+|hi|जड़}}
* {{Z|mww}}: {{W-|mww|cag}}
* {{Z|nl}}: {{W+|nl|wortel|n}}
* {{Z|he}}: {{W+|he|שורש|n|tr=shóresh}}
* {{Z|ang}}: {{W-|ang|wyrttruma|n}}
* {{Z|enm}}: {{W-|enm|rote}}, {{W-|enm|more}}
* {{Z|en}}: {{W+|en|root}}
* {{Z|izh}}: {{W-|izh|juuri}}
* {{Z|ill}}: {{W-|ill|waged}}
* {{Z|ga}}: {{W-|ga|fréamh|m}}
* {{Z|isd}}: {{W-|isd|xamut}}
* {{Z|it}}: {{W+|it|radice|m}}
* {{Z|ium}}: {{W-|ium|nzungh}}
* {{Z|is}}: {{W+|is|rót|m}}
* {{Z|ja}}: {{W+|ja|根|tr=ね, ne}}
* {{Z|jv}}: {{W-|jv|oyot}}
* {{Z|kl}}: {{W-|kl|sorlak}}
* {{Z|kzx}}: {{W-|kzx|waar}}
* {{Z|xbr}}: {{W-|xbr|amu}}
* {{Z|kmc}}: {{W-|kmc|sangp}}
* {{Z|kn}}: {{W+|kn|ಬೇರು}}
* {{Z|csb}}: {{W-|csb|kòrzéń}}
* {{Z|ca}}: {{W+|ca|arrel|m}}
* {{Z|qu}}: {{W+|qu|machu}}, {{W-|qu|saphi}}, {{W+|qu|sapi}}
* {{Z|ky}}: {{W+|ky|тамыр}}
* {{Z|kg}}: {{W-|kg|mwanzi}}
* {{Z|kij}}: {{W-|kij|uula}}
* {{Z|kpv}}: {{W-|kpv|вуж}}
* {{Z|ko}}: {{W+|ko|뿌리}}
* {{Z|lbe}}: {{W-|lbe|бакӏ}}, {{W-|lbe|бакӏру}}
* {{Z|ltg}}: {{W-|ltg|sakne|m}}, {{W-|ltg|saknis|m-p}}
* {{Z|la}}: {{W-|la|rādīx|m}}
* {{Z|lv}}: {{W+|lv|sakne|m}}, {{W-|lv|saknes|m-p}}
* {{Z|lo}}: {{W-|lo|ຮາກ}}
* {{Z|lez}}: {{W-|lez|пун}}
* {{Z|lij}}: {{W-|lij|radiccia|m}}, {{W-|lij|reixe|m}}
* {{Z|lt}}: {{W+|lt|šaknis}}
* {{Z|liv}}: {{W-|liv|jūŗ}}
* {{Z|lmo}}: {{W-|lmo|radis|m}}
* {{Z|khb}}: {{W-|khb|ᦣᦱᧅ}}
* {{Z|luy}}: {{W-|luy|kumuzizi}}
* {{Z|lb}}: {{W-|lb|Wuerzel|m}}
* {{Z|mdh}}: {{W-|mdh|dalig}}, {{W-|mdh|bekaw}}
* Malay:
*: {{Z|ms}}: {{W-|ms|اکر}}
*: Rûmî: {{W+|ms|akar}}
* {{Z|mk}}: {{W-|mk|корен|n}}
* {{Z|ml}}: {{W+|ml|വേര്}}
* {{Z|mt}}: {{W-|mt|għerq|n}}
* {{Z|mnc}}: {{W-|mnc|ᡩᠠ}}
* {{Z|mns-nor}}: {{W-|mns-nor|та̄р}}
* {{Z|mi}}: {{W-|mi|aka}}, {{W-|mi|akaaka}}
* {{Z|mrw}}: {{W-|mrw|bekaw}}
* Marî:
*: {{Z|mhr}}: {{W-|mhr|вож}}
* {{Z|hu}}: {{W+|hu|gyökér}}
* {{Z|mel}}: {{W-|mel|akah}}
* {{Z|egy}}: {{W-egy|wꜣb|h=wA-A-b-Hn|n}}
* {{Z|min}}: {{W-|min|ure'}}
* {{Z|mn}}: {{W+|mn|үндэс}}
* {{Z|mnw}}: {{W-|mnw|ရိုဟ်}}
* {{Z|nci}}: {{W-|nci|nelhuatl}}
* {{Z|nah}}: {{W-|nah|nelhuatl}}
* {{Z|gld}}: {{W-|gld|дачан}}
* {{Z|nap}}: {{W-|nap|ràdeca|m}}
* {{Z|nv}}: {{W-|nv|akétłʼóól}}
* {{Z|nds}}: {{W-|nds|Wortel|m}}
* {{Z|ne}}: {{W+|ne|जरा}}
* {{Z|nia}}: {{W-|nia|wa'a}}
* {{Z|nrf}}: {{W-|nrf|raichinne}}, {{W-|nrf|réchinne}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|rot|n|m}}
*: {{Z|nn}}: {{W+|nn|rot|m}}
* {{Z|oj}}: {{W-|oj|ojiibik}}
* {{Z|ryu}}: {{W-|ryu|根|tr=にー, nī}}
* {{Z|oc}}: {{W+|oc|raiç|m}}, {{W+|oc|rasic|m}}
* {{Z|or}}: {{W-|or|ଜଡି}}
* {{Z|om}}: {{W-|om|hidda}}, {{W-|om|hundee}}
* {{Z|ug}}: {{W-|ug|يىلتىز}}
* {{Z|uz}}: {{W+|uz|ildiz}}
* {{Z|pac}}: {{W-|pac|reaih}}, {{W-|pac|riêih}}
* {{Z|ple}}: {{W-|ple|waka}}
* {{Z|pap}}: {{W-|pap|rais}}
* {{Z|ps}}: {{W+|ps|جذر|n|tr=ǰazr}}, {{W+|ps|جرړه|m|tr=ǰárṛa}}
* {{Z|pms}}: {{W-|pms|rèis|m}}, {{W-|pms|radis|m}}
* {{Z|ppl}}: {{W-|ppl|nelwat}}
* {{Z|pl}}: {{W+|pl|korzeń|n}}
* {{Z|pt}}: {{W+|pt|raiz|m}}
* {{Z|kk}}: {{W-|kk|тамыр}}, {{W-|kk|түбір}}
* {{Z|rap}}: {{W-|rap|aka}}
* {{Z|rhg}}: {{W-|rhg|cém}}
* {{Z|rgn}}: {{W-|rgn|radìșa|m}}, {{W-|rgn|ràdga|m}}
* {{Z|rm}}: {{W-|rm|ragisch|m}}, {{W-|rm|risch|m}}, {{W-|rm|rieisch|m}}
* {{Z|ro}}: {{W+|ro|rădăcină|m}}
* {{Z|ru}}: {{W+|ru|ко́рень|n}}, {{W+|ru|ко́рни|n-p}}, {{W+|ru|коре́нья|p}}
* {{Z|ksw}}: {{W-|ksw|အဂံၢ်}}
* {{Z|skb}}: {{W-|skb|ร̄าก}}
* {{Z|se}}: {{W-|se|ruohtas}}
* {{Z|sc}}: {{W-|sc|radichina|m}}, {{W-|sc|arraighina}}, {{W-|sc|raichina}}
* {{Z|sas}}: {{W-|sas|akah}}
* {{Z|ceb}}: {{W-|ceb|gamot}}
* {{Z|scn}}: {{W+|scn|ràdica|m}}, {{W+|scn|ràdiga|m}}, {{W+|scn|ràrica|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|ко̏ре̄н|n}}, {{W-|sh|ко̏рије̄н|n}}
*: Latînî: {{W+|sh|kȍrēn|n}}, {{W+|sh|kȍrijēn|n}}
* {{Z|cu}}:
*: Kirîlî: {{W-|cu|корєнь|n}}
* {{Z|sk}}: {{W-|sk|koreň|n}}
* {{Z|sl}}: {{W+|sl|korenina|m}}
* {{Z|so}}: {{W+|so|xiddid}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|kórjeń|n}}
*: {{Z|hsb}}: {{W-|hsb|korjeń|n}}
* {{Z|es}}: {{W+|es|raíz|m}}
* {{Z|sw}}: {{W+|sw|mzizi}}
* {{Z|sv}}: {{W+|sv|rot|g}}
* {{Z|shn}}: {{W-|shn|ႁၢၵ်ႈ}}
* {{Z|tg}}: {{W+|tg|реша}}
* {{Z|mvv}}: {{W-|mvv|bakat}}
* {{Z|tl}}: {{W-|tl|urat}}, {{W+|tl|ugat}}
* {{Z|ty}}: {{W-|ty|aʻa}}
* {{Z|ta}}: {{W+|ta|வேர்}}
* {{Z|rif}}: {{W-|rif|aẓwar|n}}
* {{Z|tsg}}: {{W-|tsg|gamut}}
* {{Z|nod}}: {{W-|nod|ᩁᩣ᩠ᨠ}}
* {{Z|th}}: {{W+|th|ราก}}
* {{Z|te}}: {{W+|te|వేరు}}
* {{Z|tft}}: {{W-|tft|utu}}
* {{Z|tt}}: {{W+|tt|тамыр}}
* {{Z|tet}}: {{W-|tet|abut}}
* {{Z|tr}}: {{W+|tr|kök}}
* {{Z|tk}}: {{W-|tk|kök}}
* {{Z|bo}}: {{W-|bo|རྩ་བ}}
* {{Z|tkl}}: {{W-|tkl|aka}}
* {{Z|to}}: {{W-|to|aka}}
* {{Z|txb}}: {{W-|txb|witsako}}
* {{Z|udi}}: {{W-|udi|тум}}
* {{Z|udm}}: {{W-|udm|выжы}}
* {{Z|uga}}: {{W-|uga|𐎌𐎗𐎌}}
* {{Z|ur}}: {{W-|ur|جڑ|tr=jaṛ}}
* {{Z|uk}}: {{W+|uk|ко́рінь|n}}, {{W-|uk|корі́ння|nt}}
* {{Z|vec}}: {{W+|vec|raixa|m}}, {{W-|vec|rais}}
* {{Z|vi}}: {{W+|vi|rễ}}
* {{Z|vo}}: {{W+|vo|vul}}
* {{Z|wa}}: {{W+|wa|raecene|m}}
* {{Z|cy}}: {{W+|cy|gwraidd|n}}
* {{Z|km}}: {{W+|km|ឫស|tr=rɨh}}
* {{Z|yai}}: {{W-|yai|риша}}
* {{Z|yka}}: {{W-|yka|gamut}}
* {{Z|sah}}: {{W-|sah|силис}}
* {{Z|jmd}}: {{W-|jmd|wakar}}
* {{Z|yi}}: {{W-|yi|וואָרצל|n}}
* {{Z|ii}}: {{W-|ii|ꐴ}}
* {{Z|grk-mar}}: {{W-|grk-mar|ри́за|m}}
* {{Z|el}}: {{W+|el|ρίζα|m}}
*: Kevn: {{W-|grc|ῥίζα|m}}
* {{Z|zea}}: {{W-|zea|wortel|n}}
* {{Z|za}}: {{W-|za|rag}}
* {{Z|zu}}: {{W-|zu|impande|c9|c10}}
* {{Z|khi-kun}}: {{W-|khi-kun|daŋ}}
* {{Z|nmn}}: {{W-|nmn|ǃkʻqái}}
{{werger-bin}}
:{{werger çavkanî|en|root|beş=Ev qismê Wergerê|oldid=75944632}}
=== Navdêr 2 ===
[[Wêne:Vein art rotating.gif|thumb|Reh]]
{{navdêr|ku|z=n}}
# [[reh]]ên [[xwîn]]ê, [[pişk]]ên [[dirêj]] yên [[leş]]î yên ku [[xwîn]] tê re [[meşîn|dimeşe]].
#* {{jêder-pirtûk|ku|sal=2004|jêgirtin=Lenfên hêla zik madeyên weki rûn û protein, yên ku paşi xwarinê ji rûvî digêhêjîn nav '''reh'''ê lenf, dibin ber bi jor ti di sîng da diherikînin hindûrê şîn'''reh'''ê xwînê.|nivîskar=[[w:Huseyin Bektaş|Huseyin Bektaş]]|sernav={{w|Anatomiya Bedena Mirovan}}|weşanxane=Weşanên Deng}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|Ader}}
* {{Z|en}}: {{W+|en|vein}}
* {{Z|tr}}: {{W+|tr|damar}}
{{werger-bin}}
k6c6bcgc4v5vjemf4ge2r9hduk7gax2
fir
0
18853
6342844
6326233
2026-08-27T07:12:37Z
Wikihez
7344
6342844
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr 1 ===
{{navdêr|ku|z=m}}, {{r-ya req}}
# [[meşîn]]a li [[hewa]], [[livîn]]a li hewa, [[hatin]] û [[çûn]]a li hewa, ji derekê [[gihiştin]]a derek din li hewa
#:''Çivîkê da '''firê''' û çû?!''
# [[hatin]] û [[çûn]]a bi [[firoke]]yê
#:'''''Fira''' me ji Swêdê ta Kurdistanê demek dirêj vekişand.''
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Formên alternatîv ====
* [[firr]] (1)
==== Jê ====
{{stûn|
* [[bi firê ketin]]
* [[firandin]]
* [[fir-fir]]
* [[firinde]]
* [[firîn]]
* [[firok]]
* [[firoke]]
* [[firokegeh]]
* [[firokexane]]
}}
==== Etîmolojî ====
Ji {{onom|ku|hûr=1}} "fir-fir" yan "pir-pir" ya ji [[per]] û [[bask]]ên [[firinde]]yan tê dema difirin.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|Flug}} {{n}}, {{W|de|Abflug}} {{n}}
* {{Z|fa}}: {{W|fa|پرواز}}
* {{Z|fi}}: {{W|fi|lento}}
* {{Z|fr}}: {{W|fr|vol}} {{n}}
* {{Z|nl}}: {{W|nl|vlucht}} {{mê}}, {{W|nl|vliegen}} {{nt}}
* {{Z|en}}: {{W|en|flight}}, {{W|en|flying}}, {{W|en|gulp|guman=erê}}
* {{Z|ia}}: {{W|ia|volo}}
* {{Z|pt}}: {{W|pt|vôo}} {{n}}
* {{Z|ro}}: {{W|ro|zbor}} {{nt}}
* {{Z|sv}}: {{W+|sv|flygning}}, {{W+|sv|flyg}}
* {{Z|tr}}: {{W|tr|uçma}}, {{W|tr|uçum}}, {{W|tr|uçuş}}
* {{Z|tpn}}: {{W|tpn|bebé}}
{{werger-bin}}
=== Navdêr 2 ===
{{navdêr|ku|z=m}}, {{r-ya req}}
# [[qiyas]]a [[av]]ê yan [[şile]]yek dî ku mirov bi [[car]]ekê [[vexwarin|vedixwe]]
#* {{bênimûne|ku}}
# [[qurt]]
#* '''Fira''' avê li malê ne maye.
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Formên alternatîv ====
* [[firr]] (2)
==== Hevmane ====
* [[qurt]]
* [[qurç]]
* [[nîç]]
==== Jê ====
{{stûn|
* {{mj|Lêker}} [[fir kirin]]
* {{mj|Navdêr}} [[firkirin]]
* {{mj|Rengdêr}} [[firkirî]]
* [[firbar]]
}}
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|fa}}: {{W|fa|جرعه}}
* {{Z|fr}}: {{W|fr|gorgée}} {{mê}}
* {{Z|tr}}: {{W|tr|fırt}}, {{W|tr|yudum}}
{{werger-bin}}
== {{ziman|en}} ==
=== Bilêvkirin ===
* {{deng|en|en-uk-fir.ogg|dever=QY}}
* {{deng|en|en-us-fir.ogg|dever=DYA}}
=== Navdêr ===
{{navdêr|en}}
# [[kaj]], [[pelk]] <ref>Ferhenga Kurdî-Îngîlîzî ya Salah Sadallah</ref>
#* {{bênimûne|en}}
==== Çavkanî ====
{{çavkanî}}
== {{ziman|ro}} ==
=== Navdêr ===
{{navdêr|ro|z=m}}
# {{g|ku|dezî}}, {{g|ku|ta}}, {{g|ku|dav}}
#* {{bênimûne|ro}}
=== Çavkanî ===
{{rûpela wergerê|ro|dezî}}
== {{ziman|wa}} ==
=== Rengdêr ===
{{rengdêr|wa}}
# {{g|ku|serbilind}}, {{g|ku|serfiraz}}, {{g|ku|şanaz}}, {{g|ku|serberz}}
#* {{bênimûne|wa}}
=== Çavkanî ===
{{rûpela wergerê|wa|serbilind}}
fgbp2s0qr92ovkrv82ynzsvjtbyuqnz
emeliyat
0
19420
6342813
6306032
2026-08-26T21:48:29Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342813
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[birîn|Birîn]]a [[parçe]]yek [[leş]]î û [[dîsan]] [[dirûn]]a wî bo [[sax]]kirina wî. Karê neştergerîkirinê anku çalakiya neştergerî ya ku neştergerek li ser laşê mirovekî anku zindiyekî nexweş dike.
#: {{hevmaneyên peyvê|ku|niştergerî|nişdarî|operasyon}}
#* {{J:Hawar:2:1998|sernav=Şeytanqûnî -2-|nivîskar=w:Herekol Azîzan|hejmar=56|r=1133|jêgirtin=Ji zindiyan bêtir diman miriyan. An ewê vegeriyana jînê û însaniyet ji êşa '''emeliyatê''' dê xelas biwa an her sê jî di xizmeta însaniyetê de dê qurban biçiwana.}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Formên alternatîv ====
{{kol3|ku|cure=Herwiha
|ameliyat
|amelîyat
|amelyat
|emelîyat
|emelyat
|'ameliyat
|'amelîyat
|'amelyat
|'emelîyat
|'emelyat
}}
==== Jê ====
{{kol3|ku|cure=Jê
|emeliyat bûn<pos:lêker>
|emeliyat kirin<pos:lêker>
|emeliyatkirin<pos:navdêr>
|emeliyatbûyî<pos:rengdêr>
|emeliyatkirî<pos:rengdêr>
|emeliyatî
|emeliyatkar
|emeliyatkarî
|emeliyatker
|emeliyatkerî
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|عَمَلِيَّات}}, pirjimara {{qal|ar|عَمَلِيَّة}}.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|Chirurgie|m}}, {{W+|de|Operation|m}}
* {{Z|ast}}: {{W-|ast|operación|m}}
* {{Z|be}}: {{W-|be|апера́цыя|m}}
* {{Z|bn}}: {{W+|bn|অস্ত্রোপচার}}
* {{Z|bg}}: {{W-|bg|опера́ция|m}}
* {{Z|cs}}: {{W+|cs|operace|m}}, {{W-|cs|[[lékařský]] [[zákrok]]|n}}, {{W-|cs|[[chirurgický]] [[zákrok]]|n}}
* {{Z|zh}}:
*: {{Z|cmn}}: {{W+|cmn|手術|tr=shǒushù}}
* {{Z|da}}: {{W+|da|operation|g}}
* {{Z|id}}: {{W+|id|operasi}}, {{W+|id|pembedahan}}
* {{Z|ar}}: {{W-|ar|عَمَلِيَّة جِرَاحِيَّة|m|tr=ʕamaliyya jirāḥiyya}}, {{W-|ar|جِرَاحَة|m}}
*: {{Z|ajp}}: {{W-|ajp|جِرَاحَة|m|tr=jirāḥa}}, {{W-|ajp|عَمَلِيَّة|m|tr=ʕamaliyya}}
* {{Z|hy}}: {{W+|hy|վիրահատություն}}, {{W+|hy|օպերացիա}}
* {{Z|eo}}: {{W+|eo|operacio}}
* {{Z|fa}}: {{W+|fa|جراحی|tr=jarrâhi}}
* {{Z|fi}}: {{W+|fi|leikkaus}}, {{W+|fi|leikkaushoito}}
* {{Z|fr}}: {{W+|fr|chirurgie|m}}, {{W+|fr|opération|m}}
* {{Z|gl}}: {{W+|gl|operación|m}}
* {{Z|ka}}: {{W+|ka|ოპერაცია}}
* {{Z|hi}}: {{W+|hi|शल्यचिकित्सा|m}}
* {{Z|nl}}: {{W+|nl|operatie|m}}
* {{Z|he}}: {{W+|he|ניתוח|n|tr=nitúakh|cuda=ניתוח / נִתּוּחַ}}
* {{Z|io}}: {{W+|io|kirurgio}}
* {{Z|en}}: {{W+|en|surgery}}
* {{Z|ga}}: {{W-|ga|cur faoi scian|n}}, {{W-|ga|gnáthamh máinliachta|n}}, {{W-|ga|obráid|m}}
* {{Z|it}}: {{W+|it|chirurgia|m}}, {{W-|it|operazione chirurgica|m}}, {{W+|it|intervento chirurgico|n}}, {{W+|it|operazione|m}}
* {{Z|is}}: {{W-|is|uppskurður|n}}
* {{Z|ja}}: {{W+|ja|手術|tr=しゅじゅつ, shujutsu}}
* {{Z|ca}}: {{W+|ca|cirurgia|m}}, {{W+|ca|operació|m}}
* {{Z|ko}}: {{W-|ko|수술(手術)}}
* {{Z|la}}: {{W-|la|chīrurgia|m}}
* {{Z|lo}}: {{W+|lo|ສັນຍະກຳ}}, {{W-|lo|ສັນລະຍະກຳ}}
* {{Z|mk}}: {{W-|mk|операција|m}}
* {{Z|ms}}: {{W+|ms|pembedahan}}
* {{Z|hu}}: {{W+|hu|operáció}}, {{W+|hu|műtét}}
* {{Z|nv}}: {{W-|nv|naʼagizh}}
* {{Z|no}}:
*: {{Z|nb}}: {{W-|nb|operasjon|n}}
* {{Z|oc}}: {{W+|oc|cirurgia|m}}
* {{Z|uz}}: {{W+|uz|operatsiya}}
* {{Z|pl}}: {{W+|pl|operacja|m}}
* {{Z|pt}}: {{W+|pt|operação|m}}, {{W+|pt|cirurgia}}
* {{Z|ro}}: {{W+|ro|operație|m}}
* {{Z|ru}}: {{W-|ru|опера́ция|m}}
* {{Z|sc}}: {{W-|sc|chirurgia|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|опера́ција|m}}
*: Latînî: {{W+|sh|operácija|m}}
* {{Z|sk}}: {{W-|sk|operácia|m}}
* {{Z|sl}}: {{W+|sl|operacija|m}}
* {{Z|es}}: {{W+|es|operación|m}}, {{W+|es|cirugía}}
* {{Z|sv}}: {{W+|sv|operation|g}}
* {{Z|tg}}: {{W-|tg|ҷарроҳи}}
* {{Z|tl}}: {{W-|tl|palatistisan}}
* {{Z|th}}: {{W+|th|ศัลยกรรม}}
* {{Z|te}}: {{W+|te|శస్త్రచికిత్స}}
* {{Z|tr}}: {{W+|tr|ameliyat}}
* {{Z|uk}}: {{W-|uk|опера́ція|m}}
* {{Z|cy}}: {{W+|cy|llawdriniaeth|m}}, {{W-|cy|llawfeddygwaith|n}}
* {{Z|km}}: {{W-|km|ការវះកាត់}}, {{W-|km|សល្យកម្ម}}
* {{Z|yi}}: {{W-|yi|אָפּעראַציע|m}}
* {{Z|el}}: {{W+|el|χειρουργείο|nt}}
*: Kevn: {{W-|grc|χειρουργία|m}}
{{werger-bin}}
:{{werger çavkanî|en|surgery|oldid=75488486|beş=Ev qismê Wergerê}}
s1j2bwd82d0rer8m8nxd2aoqyimlhjz
6342823
6342813
2026-08-26T23:12:09Z
Balyozbot
7867
Bot: Paqijiyên kozmetîk (Lînk paqij kir.)
6342823
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[birîn|Birîna]] [[parçe]]yek [[leş]]î û [[dîsan]] [[dirûn]]a wî bo [[sax]]kirina wî. Karê neştergerîkirinê anku çalakiya neştergerî ya ku neştergerek li ser laşê mirovekî anku zindiyekî nexweş dike.
#: {{hevmaneyên peyvê|ku|niştergerî|nişdarî|operasyon}}
#* {{J:Hawar:2:1998|sernav=Şeytanqûnî -2-|nivîskar=w:Herekol Azîzan|hejmar=56|r=1133|jêgirtin=Ji zindiyan bêtir diman miriyan. An ewê vegeriyana jînê û însaniyet ji êşa '''emeliyatê''' dê xelas biwa an her sê jî di xizmeta însaniyetê de dê qurban biçiwana.}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Formên alternatîv ====
{{kol3|ku|cure=Herwiha
|ameliyat
|amelîyat
|amelyat
|emelîyat
|emelyat
|'ameliyat
|'amelîyat
|'amelyat
|'emelîyat
|'emelyat
}}
==== Jê ====
{{kol3|ku|cure=Jê
|emeliyat bûn<pos:lêker>
|emeliyat kirin<pos:lêker>
|emeliyatkirin<pos:navdêr>
|emeliyatbûyî<pos:rengdêr>
|emeliyatkirî<pos:rengdêr>
|emeliyatî
|emeliyatkar
|emeliyatkarî
|emeliyatker
|emeliyatkerî
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|عَمَلِيَّات}}, pirjimara {{qal|ar|عَمَلِيَّة}}.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|Chirurgie|m}}, {{W+|de|Operation|m}}
* {{Z|ast}}: {{W-|ast|operación|m}}
* {{Z|be}}: {{W-|be|апера́цыя|m}}
* {{Z|bn}}: {{W+|bn|অস্ত্রোপচার}}
* {{Z|bg}}: {{W-|bg|опера́ция|m}}
* {{Z|cs}}: {{W+|cs|operace|m}}, {{W-|cs|[[lékařský]] [[zákrok]]|n}}, {{W-|cs|[[chirurgický]] [[zákrok]]|n}}
* {{Z|zh}}:
*: {{Z|cmn}}: {{W+|cmn|手術|tr=shǒushù}}
* {{Z|da}}: {{W+|da|operation|g}}
* {{Z|id}}: {{W+|id|operasi}}, {{W+|id|pembedahan}}
* {{Z|ar}}: {{W-|ar|عَمَلِيَّة جِرَاحِيَّة|m|tr=ʕamaliyya jirāḥiyya}}, {{W-|ar|جِرَاحَة|m}}
*: {{Z|ajp}}: {{W-|ajp|جِرَاحَة|m|tr=jirāḥa}}, {{W-|ajp|عَمَلِيَّة|m|tr=ʕamaliyya}}
* {{Z|hy}}: {{W+|hy|վիրահատություն}}, {{W+|hy|օպերացիա}}
* {{Z|eo}}: {{W+|eo|operacio}}
* {{Z|fa}}: {{W+|fa|جراحی|tr=jarrâhi}}
* {{Z|fi}}: {{W+|fi|leikkaus}}, {{W+|fi|leikkaushoito}}
* {{Z|fr}}: {{W+|fr|chirurgie|m}}, {{W+|fr|opération|m}}
* {{Z|gl}}: {{W+|gl|operación|m}}
* {{Z|ka}}: {{W+|ka|ოპერაცია}}
* {{Z|hi}}: {{W+|hi|शल्यचिकित्सा|m}}
* {{Z|nl}}: {{W+|nl|operatie|m}}
* {{Z|he}}: {{W+|he|ניתוח|n|tr=nitúakh|cuda=ניתוח / נִתּוּחַ}}
* {{Z|io}}: {{W+|io|kirurgio}}
* {{Z|en}}: {{W+|en|surgery}}
* {{Z|ga}}: {{W-|ga|cur faoi scian|n}}, {{W-|ga|gnáthamh máinliachta|n}}, {{W-|ga|obráid|m}}
* {{Z|it}}: {{W+|it|chirurgia|m}}, {{W-|it|operazione chirurgica|m}}, {{W+|it|intervento chirurgico|n}}, {{W+|it|operazione|m}}
* {{Z|is}}: {{W-|is|uppskurður|n}}
* {{Z|ja}}: {{W+|ja|手術|tr=しゅじゅつ, shujutsu}}
* {{Z|ca}}: {{W+|ca|cirurgia|m}}, {{W+|ca|operació|m}}
* {{Z|ko}}: {{W-|ko|수술(手術)}}
* {{Z|la}}: {{W-|la|chīrurgia|m}}
* {{Z|lo}}: {{W+|lo|ສັນຍະກຳ}}, {{W-|lo|ສັນລະຍະກຳ}}
* {{Z|mk}}: {{W-|mk|операција|m}}
* {{Z|ms}}: {{W+|ms|pembedahan}}
* {{Z|hu}}: {{W+|hu|operáció}}, {{W+|hu|műtét}}
* {{Z|nv}}: {{W-|nv|naʼagizh}}
* {{Z|no}}:
*: {{Z|nb}}: {{W-|nb|operasjon|n}}
* {{Z|oc}}: {{W+|oc|cirurgia|m}}
* {{Z|uz}}: {{W+|uz|operatsiya}}
* {{Z|pl}}: {{W+|pl|operacja|m}}
* {{Z|pt}}: {{W+|pt|operação|m}}, {{W+|pt|cirurgia}}
* {{Z|ro}}: {{W+|ro|operație|m}}
* {{Z|ru}}: {{W-|ru|опера́ция|m}}
* {{Z|sc}}: {{W-|sc|chirurgia|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|опера́ција|m}}
*: Latînî: {{W+|sh|operácija|m}}
* {{Z|sk}}: {{W-|sk|operácia|m}}
* {{Z|sl}}: {{W+|sl|operacija|m}}
* {{Z|es}}: {{W+|es|operación|m}}, {{W+|es|cirugía}}
* {{Z|sv}}: {{W+|sv|operation|g}}
* {{Z|tg}}: {{W-|tg|ҷарроҳи}}
* {{Z|tl}}: {{W-|tl|palatistisan}}
* {{Z|th}}: {{W+|th|ศัลยกรรม}}
* {{Z|te}}: {{W+|te|శస్త్రచికిత్స}}
* {{Z|tr}}: {{W+|tr|ameliyat}}
* {{Z|uk}}: {{W-|uk|опера́ція|m}}
* {{Z|cy}}: {{W+|cy|llawdriniaeth|m}}, {{W-|cy|llawfeddygwaith|n}}
* {{Z|km}}: {{W-|km|ការវះកាត់}}, {{W-|km|សល្យកម្ម}}
* {{Z|yi}}: {{W-|yi|אָפּעראַציע|m}}
* {{Z|el}}: {{W+|el|χειρουργείο|nt}}
*: Kevn: {{W-|grc|χειρουργία|m}}
{{werger-bin}}
:{{werger çavkanî|en|surgery|oldid=75488486|beş=Ev qismê Wergerê}}
l74s7w8sir8gduwhhz7is0unxisx4cu
bac
0
21252
6342789
6338643
2026-08-26T20:52:47Z
Wikihez
7344
6342789
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{deng|ku|LL-Q36163 (kmr)-Ebulfîda-bac.wav|dever=Bidlîs}}
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# {{mijar|ku|bac}} [[pare|Pareyên]] ku her kes li gor [[rêje]]ya [[muçe]]ya xwe dide [[dewlet]]ê da ku [[dewlet]] pê [[xizmet]]ên [[giştî]] [[bi cih anîn|bi cih bîne]].
#: {{hevmane|ku|bêş|tar|bide|zerîbe|xerac|vêrgî|olam|maliyat}}
# [[qehr|Qehr]]; [[behecîn]].
#* {{J:Hawar:1998:2|sernav=Şivan û Beran|nivîskar=Çiyayê Agirî|hj=28|r=711|jêgirtin=Wadê li min nêrî û dît ko ez jî dixwazim bibim tiştekî, qehr û '''baca''' wî ji min hat û li windakirina min digeriya...}}
==== Ji wêjeya klasîk ====
* {{J:Melayê Cizîrî:Dîwana Melayê Cizîrî|jêgirtin=Cohtê hebeşan bi-terfeti l-'eyn<br>Anî qederek ji Espehan '''bac'''<br>Sîma ko numa nema li hiş sîm}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|باج}}
* {{ku-kr|бащ}}
==== Formên alternatîv ====
* {{g|ku|baj}}
==== Jê ====
{{kol3|ku|cure=Jê
|bac dan<q:lêker>
|bac kirin<q:lêker>
|bac standin<q:lêker>
|bac danîn
|bacdan<q:navdêr>
|bacwergirtin<q:navdêr>
|backirin<q:navdêr>
|bacstandin
|bacdanîn
|backirî<q:rengdêr>
|bêbac
|bêbacî
|bibac
|bibacî
|bacder
|bacderî
|bacgir
|bacgirî
|backer
|backerî
|bacstîn
|bacstînî
|bacwergir
|bacwergirî
}}
==== Etîmolojî ====
Ji {{mîr|ine-pro|ku|*bʰeh₂g-|w=belav kirin, parve kirin}}, [[hevreh]]a [[beg]], [[beş]], [[bexş]], [[pexş]], [[pexşan]] û belkî [[pişk]] yên kurdî, ''baj'' ya pehlewî, {{g|fa|باژ|tr=baj}} / {{g|fa|باج|tr=bac}} / {{g|fa|باج|tr=bac}} / {{g|fa|پاژ|tr=paj}}, farisiya kevn {{g|peo|𐎲𐎠𐎪𐎶|tr=baci-}}, avestayî ''bejet'' ([[belav]] kirin), sanskrîtî {{g|sa|भजति|w=[[belav kirin]]}}...
==== Werger ====
{{werger-ser}}
* {{Z|af}}: {{W+|af|belasting}}
* {{Z|xag}}: {{W-|xag|𐕆𐔰𐕙𐔼𐕄}}
* {{Z|sq}}: {{W+|sq|taksë|m}}, {{W+|sq|tatim|n}}
* {{Z|de}}: {{W+|de|Steuer|m}}
* {{Z|am}}: {{W-|am|ግብር}}
* {{Z|as}}: {{W-|as|কৰ}}
* {{Z|ast}}: {{W-|ast|impuestu|n}}
* {{Z|av}}: {{W-|av|налог}}, {{W-|av|закат}}
* {{Z|az}}: {{W+|az|vergi}}
* {{Z|eu}}: {{W-|eu|zerga}}
* {{Z|ba}}: {{W-|ba|һалым}}
* {{Z|be}}: {{W-|be|пада́так|n}}
* {{Z|bn}}: {{W+|bn|কর}}
* {{Z|bcl}}: {{W-|bcl|buwis}}
* {{Z|bg}}: {{W+|bg|нало́г|n}}, {{W+|bg|да́нък|n}}
* {{Z|my}}: {{W+|my|အကောက်}}, {{W+|my|အခွန်}}
* {{Z|ce}}: {{W-|ce|налог}}
* {{Z|cs}}: {{W+|cs|daň|m}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|稅|tr=seoi3}}
*: {{Z|dng}}: {{W-|dng|фи}}
*: {{Z|hak}}: {{W-|hak|稅|tr=soi}}
*: {{Z|cmn}}: {{W+|cmn|稅|tr=shuì}}
*: {{Z|mnp}}: {{W-|mnp|稅|tr=sṳe̿}}
*: {{Z|cdo}}: {{W-|cdo|稅|tr=suói}}
*: {{Z|nan}}: {{W-|nan|稅|tr=sè / sèr / sòe}}
*: {{Z|wuu}}: {{W-|wuu|稅}}
* {{Z|da}}: {{W+|da|skat|g}}
* {{Z|id}}: {{W+|id|pajak}}, {{W+|id|cukai}}
* {{Z|ar}}: {{W-|ar|ضَرِيبَة|m}}
*: {{Z|arz}}: {{W-|arz|رسم|n|tr=rasm}}
* {{Z|hy}}: {{W+|hy|հարկ}}
*: {{Z|xcl}}: {{W-|xcl|հարկ}}, {{W-|xcl|տուրք}}, {{W-|xcl|բաժ}}
* {{Z|eo}}: {{W+|eo|imposto}}
* {{Z|et}}: {{W+|et|maks}}
* {{Z|fa}}: {{W+|fa|مالیات|tr=mâliyât}}, {{W+|fa|تاکس|tr=tâks}}, {{W+|fa|مالیه|tr=mâliye}}, {{W+|fa|باج|tr=bâj}}, {{W+|fa|خراج|tr=xarâj}}
* {{Z|fi}}: {{W+|fi|vero}}
* {{Z|fr}}: {{W+|fr|impôt|n}}
* {{Z|gd}}: {{W-|gd|càin|m}}, {{W-|gd|cìs|m}}
* {{Z|gl}}: {{W-|gl|imposto|n}}
* {{Z|got}}: {{W-|got|𐌼𐍉𐍄𐌰|m}}, {{W-|got|𐌲𐌹𐌻𐌳|nt}}
* {{Z|ka}}: {{W-|ka|გადასახადი}}, {{W-|ka|ბეგარა}}, {{W-|ka|ბაჟი}}
* {{Z|mba}}: {{W-|mba|buhis}}
* {{Z|hi}}: {{W+|hi|कर|n}}, {{W+|hi|टैक्स|n}}
* {{Z|hil}}: {{W-|hil|buhis}}
* {{Z|nl}}: {{W+|nl|belasting|m}}, {{W+|nl|taks|n|m}}
* {{Z|he}}: {{W+|he|מַס|n|tr=mas}}
* {{Z|ilo}}: {{W-|ilo|buis}}
* {{Z|ang}}: {{W-|ang|gafol|nt}}
* {{Z|enm}}: {{W-|enm|taxe}}, {{W-|enm|taske}}
* {{Z|en}}: {{W+|en|tax}}
* {{Z|ga}}: {{W+|ga|cáin|m}}, {{W-|ga|cíos|n}}
* {{Z|it}}: {{W+|it|tassa|m}}, {{W+|it|imposta|m}}, {{W+|it|accisa|m}}
* {{Z|is}}: {{W+|is|skattur|n}}
* {{Z|ja}}: {{W+|ja|税|tr=ぜい, zei}}, {{W+|ja|税金|tr=ぜいきん, zeikin}}, {{W+|ja|租税|tr=そぜい, sozei}}
* {{Z|jv}}: {{W+|jv|pajeg}}, {{W+|jv|paos}}
* {{Z|pam}}: {{W-|pam|buis}}
* {{Z|csb}}: {{W-|csb|pòdatk|n}}
* {{Z|ca}}: {{W+|ca|impost|n}}, {{W+|ca|taxa|m}}
* {{Z|kyu}}: {{W-|kyu|ꤢ꤬ꤗꤥ꤬ꤢ꤬ꤚꤢ}}
* {{Z|ky}}: {{W+|ky|салык}}, {{W-|ky|налог}}
* {{Z|si}}: {{W-|si|බදු}}
* {{Z|ko}}: {{W+|ko|세금}}, {{W+|ko|세}}, {{W+|ko|조세}}
* {{Z|lad}}: {{W-|lad|taksa}}, {{W-|lad|חראגֿ}}
* {{Z|la}}: {{W-|la|vectīgal|nt}}, {{W-|la|geldum}}, {{W-|la|gabella}}
* {{Z|lv}}: {{W-|lv|nodoklis|n}}
* {{Z|lo}}: {{W+|lo|ພາສີ}}
* {{Z|lt}}: {{W-|lt|mokestis|n}}
* {{Z|mdh}}: {{W-|mdh|buis}}
* {{Z|mk}}: {{W-|mk|данок|n}}
* {{Z|ml}}: {{W+|ml|കരം}}, {{W+|ml|നികുതി}}
* {{Z|ms}}: {{W+|ms|cukai}}
* {{Z|gv}}: {{W-|gv|keesh|m}}
* {{Z|mi}}: {{W-|mi|tāke}}
* {{Z|mrw}}: {{W-|mrw|bois}}
* {{Z|hu}}: {{W+|hu|adó}}
* {{Z|mn}}:
*: Kirîlî: {{W+|mn|татвар}}
* {{Z|nv}}: {{W-|nv|ínáóltąʼí}}
* {{Z|ne}}: {{W+|ne|कर|tr=kar}}
* {{Z|nrf}}: {{W-|nrf|taxe|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|skatt|n}}, {{W-|nb|avgift|n}}
* {{Z|nup}}: {{W-|nup|èdú}}
* {{Z|oc}}: {{W+|oc|impòst|n}}, {{W+|oc|taxa|m}}
* {{Z|os}}: {{W-|os|хъалон}}, {{W-|os|налог}}
* {{Z|ug}}: {{W-|ug|ئېلىق}}, {{W-|ug|باج}}, {{W-|ug|يۈك}}, {{W-|ug|بېسىم}}
* {{Z|uz}}: {{W+|uz|soliq}}, {{W+|uz|toʻlov}}, {{W+|uz|oʻlpon}}
* {{Z|ps}}: {{W-|ps|مالیه|m|tr=mālya}}, {{W+|ps|باج|n|tr=bāj}}, {{W-|ps|ماليات|n-p|tr=mālyāt}}
* {{Z|pdt}}: {{W-|pdt|Taks|n}}
* {{Z|pl}}: {{W+|pl|podatek|m-in}}
* {{Z|pt}}: {{W+|pt|imposto|n}}, {{W+|pt|tributo|n}}
* {{Z|kk}}: {{W-|kk|салық}}, {{W-|kk|долық}}, {{W+|kk|баж}}
* {{Z|ro}}: {{W+|ro|taxă|m}}, {{W+|ro|impozit|nt}}, {{W+|ro|dare|m}}
* {{Z|ru}}: {{W+|ru|нало́г|n}}, {{W+|ru|сбор|n}}, {{W+|ru|по́шлина|m}}, {{W+|ru|дань|m}}
* {{Z|rue}}: {{W-|rue|дань|m}}
* {{Z|sa}}: {{W+|sa|कर|n}}
* {{Z|ceb}}: {{W-|ceb|buhis}}
* {{Z|scn}}: {{W-|scn|tascia|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|по̀рез|n}}, {{W-|sh|да̏нак|n}}
*: Latînî: {{W+|sh|pòrez|n}}, {{W+|sh|dȁnak|n}}
* {{Z|sk}}: {{W+|sk|daň|m}}
* {{Z|sl}}: {{W+|sl|davek|n}}, {{W-|sl|davščina|m}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|dank|n}}
*: {{Z|hsb}}: {{W-|hsb|dań|m}}
* {{Z|es}}: {{W+|es|impuesto|n}}, {{W+|es|tasa|m}}, {{W-|es|gabela}}
* {{Z|sw}}: {{W+|sw|ushuru}}, {{W+|sw|kodi}}
* {{Z|sv}}: {{W+|sv|skatt|g}}
* {{Z|shn}}: {{W-|shn|ၶွၼ်ႇ}}
* {{Z|tg}}: {{W-|tg|молиёт}}, {{W-|tg|андоз}}, {{W-|tg|налог}}, {{W-|tg|боҷ}}, {{W-|tg|хироҷ}}
* {{Z|tl}}: {{W+|tl|buwis}}
* {{Z|ta}}: {{W+|ta|வரி}}
* {{Z|th}}: {{W+|th|ภาษี}}
* {{Z|te}}: {{W+|te|పన్ను}}
* {{Z|crh}}: {{W-|crh|bergi}}
* {{Z|tt}}: {{W+|tt|салым}}
* {{Z|tr}}: {{W+|tr|vergi}}, {{W+|tr|salma}}
* {{Z|tk}}: {{W-|tk|salmak}}, {{W-|tk|salgyt}}
* {{Z|bo}}: {{W-|bo|ཁྲལ}}
* {{Z|txb}}: {{W-|txb|eñcil}}
* {{Z|ur}}: {{W-|ur|مالیات|m|tr=māliyāt}}, {{W-|ur|ٹیکس|n|tr=ṭaiks}}, {{W-|ur|محصول|tr=maihsūl}}, {{W-|ur|باج|tr=bāj}}
* {{Z|uk}}: {{W-|uk|пода́ток|n}}
* {{Z|vi}}: {{W+|vi|thuế}}
* {{Z|war}}: {{W-|war|buhis}}
* {{Z|cy}}: {{W+|cy|treth|m}}
* {{Z|km}}: {{W+|km|ពន្ធ}}, {{W-|km|តាក់}}, {{W+|km|ភាស៊ី}}
* {{Z|yi}}: {{W-|yi|שטײַער}}
* {{Z|yo}}: {{W-|yo|owó orí}}
* {{Z|el}}: {{W+|el|φόρος|n}}
*: Kevn: {{W-|grc|τέλος|nt}}
{{werger-bin}}
:{{werger çavkanî|en|tax|beş=Ev qismê Wergerê|oldid=75872533}}
== {{ziman|zza}} ==
=== Navdêr ===
{{navdêr|zza}}
# [[xeraç]], [[bêj]], [[beş]], [[wac]], [[qehir]]<ref>http://www.kovarabir.com/wp-content/uploads/Ferheng%C3%AA-Dimil%C3%AE-%C3%BB-Kurmanc%C3%AE-B-b.pdf</ref>
#* {{bêmînak|zza}}
=== Çavkanî ===
{{çavkanî}}
kt5ucqnx7hmexh88iko7vprzl6wpr72
leheng
0
22083
6342738
6336173
2026-08-26T19:06:32Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342738
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=mn}}
# [[mirov|Mirovê]] [[egîd]], [[xweşmêr]], [[camêr]].
#: {{hevmane|ku|qehreman}}
#* {{J:Hawar:1998:1|hj=21|r=586|sal=1933|nivîskar=Osman Sebrî|sernav=Li Goristanek Amedê|jêgirtin=Ey qencê Xwedê! Qesda min dîtina welêt û vî erdê ko ji jêr û '''lehengan''' tijî ziyaret kirin; û ji vê jana di dilê xwe re jî dermanek ji cenabê we xwastin bû.}}
# Kesê ku [[rol]]a [[serekî]] di [[dest]]î de ye; kesê ku di [[kitêb]]ekê yan [[film]]ekê de herî zêde [[bas]]a wî tê kirin.
#: {{hevmane|ku|qehreman}}
#: {{nm|ku|Mem '''lehengê''' serekî yê dîwana "Mem û Zîn" ya Ehmedê Xanî ye.}}
#: {{nm|ku|James Bond '''lehengekî''' xeyalî ye.}}
#* {{jêder|ku|jêgirtin=Li gorî mijarê cureyên çîrokê cuda cuda ne. Her çîrokek ji sê beşan pêk tê (çîvanok, beşa hîmî û encam). Divê di her çîrokê de bûyer, '''leheng''', cih û dem hebe.|''[[w:Beşek Ji Folklora Kurdî: Çîrok|Beşek Ji Folklora Kurdî: Çîrok]]'', [[w:Mehmet Bozkoyun|Mehmet Bozkoyun]], Bingöl Üniversitesi Yaşayan Diller Enstitüsü Dergisi}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê û nêr}}
==== Jê ====
{{kol3|ku|cure=Jê
|leheng bûn<pos:lêker>
|leheng kirin<pos:lêker>
|lehengbûn<pos:navdêr>
|lehengkirin<pos:navdêr>
|lehengbûyî<pos:rengdêr>
|lehengkirî<pos:rengdêr>
|lehengî
|lehengîtî
|lehengtî
}}
==== Têkildar ====
* {{g|ku|gernas}}
==== Etîmolojî ====
{{ji?|ku}}
==== Bide ber ====
* {{g|ku|neheng}}
==== Herwiha binêre ====
* {{g|ku|çeleng}}
==== Werger ====
{{werger-bnr|mirovê egîd|id=mirovê_egîd|qehreman}}
{{werger-bnr|kesê serekî di çîrok an kitêbekê de|id=kesê serekî|qehreman}}
=== Rengdêr ===
{{rengdêr|ku}}
# [[xurt]], [[bihêz]], [[qewî]], [[biqewet]], [[bizever]], [[bitaqet]], [[bişiyan]]
#* {{bêmînak|ku}}
==== Werger ====
{{werger-ser}}
{{werger-bin}}
020ms3sg31k1vdl8nf43o7lyht10qe4
6342748
6342738
2026-08-26T19:40:08Z
Wikihez
7344
--|sal=1933 ne hewce ye
6342748
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=mn}}
# [[mirov|Mirovê]] [[egîd]], [[xweşmêr]], [[camêr]].
#: {{hevmane|ku|qehreman}}
#* {{J:Hawar:1998:1|hj=21|r=586|nivîskar=Osman Sebrî|sernav=Li Goristanek Amedê|jêgirtin=Ey qencê Xwedê! Qesda min dîtina welêt û vî erdê ko ji jêr û '''lehengan''' tijî ziyaret kirin; û ji vê jana di dilê xwe re jî dermanek ji cenabê we xwastin bû.}}
# Kesê ku [[rol]]a [[serekî]] di [[dest]]î de ye; kesê ku di [[kitêb]]ekê yan [[film]]ekê de herî zêde [[bas]]a wî tê kirin.
#: {{hevmane|ku|qehreman}}
#: {{nm|ku|Mem '''lehengê''' serekî yê dîwana "Mem û Zîn" ya Ehmedê Xanî ye.}}
#: {{nm|ku|James Bond '''lehengekî''' xeyalî ye.}}
#* {{jêder|ku|jêgirtin=Li gorî mijarê cureyên çîrokê cuda cuda ne. Her çîrokek ji sê beşan pêk tê (çîvanok, beşa hîmî û encam). Divê di her çîrokê de bûyer, '''leheng''', cih û dem hebe.|''[[w:Beşek Ji Folklora Kurdî: Çîrok|Beşek Ji Folklora Kurdî: Çîrok]]'', [[w:Mehmet Bozkoyun|Mehmet Bozkoyun]], Bingöl Üniversitesi Yaşayan Diller Enstitüsü Dergisi}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê û nêr}}
==== Jê ====
{{kol3|ku|cure=Jê
|leheng bûn<pos:lêker>
|leheng kirin<pos:lêker>
|lehengbûn<pos:navdêr>
|lehengkirin<pos:navdêr>
|lehengbûyî<pos:rengdêr>
|lehengkirî<pos:rengdêr>
|lehengî
|lehengîtî
|lehengtî
}}
==== Têkildar ====
* {{g|ku|gernas}}
==== Etîmolojî ====
{{ji?|ku}}
==== Bide ber ====
* {{g|ku|neheng}}
==== Herwiha binêre ====
* {{g|ku|çeleng}}
==== Werger ====
{{werger-bnr|mirovê egîd|id=mirovê_egîd|qehreman}}
{{werger-bnr|kesê serekî di çîrok an kitêbekê de|id=kesê serekî|qehreman}}
=== Rengdêr ===
{{rengdêr|ku}}
# [[xurt]], [[bihêz]], [[qewî]], [[biqewet]], [[bizever]], [[bitaqet]], [[bişiyan]]
#* {{bêmînak|ku}}
==== Werger ====
{{werger-ser}}
{{werger-bin}}
gn9rrgjhala4ib7r120eowjbc94xbr1
tarîx
0
23283
6342760
6336684
2026-08-26T20:21:28Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342760
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[hedîse|Hedîseyên]] [[dem]]ên [[berê]].
#: {{hevmane|ku|dîrok|mêjû}}
#: {{mk|ku|'''Tarîx''' xwe dubare dike.|Tiştên ku berê qewimîne dîsan diqewimin.|birêz=1}}
#* {{jêder-kovar|ku|nivîskar=Hayreddin Kızıl|sernav=Bawerîyên Gelêrî di Adat û Rusûmatnameê Tewayifê Ekradiye ya Mela Mehmûdê Bazîdî da|kovar=Kurdiyat|hejmar=13|sal=2026|rûpel=37|url=https://dergipark.org.tr/tr/pub/kurdiyat/article/1849076|jêgirtin=Mela Mehmûdê Bazîdî li ser ziman, '''tarîx''' û civaka Kurdan, folklor û edebiyata wan berhem nivîsîne yan jî wergerandine.}}
# [[ilm|Ilmê]] li ser [[dem]]ên [[berê]].
#: {{hevmane|ku|dîrok|mêjû}}
#: {{mk|ku|Şerefxanê Bedlîsî wek bavê '''tarîxa''' kurdan tê nasîn.}}
#* {{nimûne?|ku}}
# Dema ku tiştek [[qewimîn|qewimiye]] yan hatiye kirin.
#: {{mk|ku|Ev name di '''tarîxa''' 1.8.2006 de hatiye nivîsîn.}}
#: {{mk|ku|'''Tarîxa''' derketina vê kitêbê ne diyar e.|Li ser vê kitêbê nehatiye nivîsîn ka kengî hatiye çapkirin.|birêz=1}}
#* {{J:Mem û Zîn:1692|jêgirtin=Lewra ko dema ji xeybê fek bû</br>'''Tarîx''' hezar û şêst û yek bû</br>Îsal gihişte çill û çaran}}
#* {{J:Hawar:1998:2|ku|sernav=Sê Tarîxên Hawarê|nivîskar={{w|Celadet Alî Bedirxan|Xwediyê Hawarê}}|hejmar=27|r=689|jêgirtin='''Tarîxa''' sisiyan panzdehê Nîsana sala hezar û neh sed û çel û yekê ye, yanî îro ye.}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Formên alternatîv ====
* {{g|ku|terîx}}
* {{g|ku|teirîx}}
==== Jê ====
{{kol3|ku|cure=Jê
|tarîxî
|tarîxçe
|tarîxnas
|tarîxnasî
|tarîxnivîs
|tarîxnivîsî
|tarîxvan
|tarîxvanî
|tarîxzan
|tarîxzanî
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|تَارِيخ}}.
==== Bide ber ====
* {{g|ku|wext}}
* {{g|ku|dem}}
* {{g|ku|kêlîk}}
==== Werger ====
{{werger-ser|hedîseyên berê û ilmê li ser wan|id=ilmê hedîseyên berê}}
* {{Z|af}}: {{W+|af|geskiedenis}}
* {{Z|sq}}: {{W+|sq|histori|m}}
* {{Z|de}}: {{W+|de|Geschichte|m}}, {{W+|de|Historie|m}}
* {{Z|alt}}: {{W-|alt|тӱӱки}}, {{W-|alt|тарых}}
* {{Z|am}}: {{W-|am|ታሪክ}}
* {{Z|an}}: {{W-|an|istoria|m}}
* {{Z|arc}}:
*: {{Z|syc}}: {{W-|syc|ܬܫܥܝܬܐ|m|tr=tašʿīṯā}}
* {{Z|as}}: {{W-|as|ইতিহাস}}
* {{Z|ast}}: {{W+|ast|historia|m}}, {{W+|ast|hestoria|m}}
* {{Z|aot}}: {{W-|aot|itihas}}
* {{Z|av}}: {{W-|av|тарих}}
* {{Z|az}}:
*: Latînî: {{W+|az|tarix}}
*: {{Z|az}}: {{W-|az|تاریخ|tr=tārikh}}
* {{Z|eu}}: {{W+|eu|historia}}
* {{Z|ba}}: {{W-|ba|тарих}}
* {{Z|be}}: {{W-|be|гісто́рыя|m}}
* {{Z|bn}}: {{W+|bn|ইতিহাস}}
* {{Z|bcl}}: {{W-|bcl|uusipon}}
* {{Z|br}}: {{W+|br|istor|m}}
* {{Z|bg}}: {{W-|bg|исто́рия|m}}
* {{Z|my}}: {{W+|my|သမိုင်း}}
* {{Z|bua}}: {{W-|bua|түүхэ}}
* {{Z|cs}}: {{W+|cs|dějiny|m-p}}, {{W+|cs|historie|m}}
* {{Z|chr}}: {{W-|chr|ᎧᏃᎮᏍᎩ}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|歷史|tr=lik6 si2}}
*: {{Z|dng}}: {{W-|dng|лисы}}
*: {{Z|gan}}: {{W-|gan|歷史|tr=lit6 'si3}}
*: {{Z|hak}}: {{W-|hak|歷史|tr=li̍t-sṳ́}}
*: {{Z|cmn}}: {{W+|cmn|歷史|tr=lìshǐ}}
*: {{Z|cdo}}: {{W-|cdo|歷史|tr=lĭk-sṳ̄}}
*: {{Z|nan}}: {{W+|nan|歷史|tr=le̍k-sú}}
*: {{Z|wuu}}: {{W-|wuu|歷史|tr=liq sr}}
* {{Z|cv}}: {{W-|cv|истори}}
* {{Z|da}}: {{W+|da|historie|g}}
* {{Z|id}}: {{W+|id|sejarah}}, {{W+|id|histori}}
* {{Z|ar}}: {{W+|ar|تَارِيخ|n}}
*: {{Z|arz}}: {{W-|arz|تاريخ|n|tr=tarīḵ}}
* {{Z|hy}}: {{W+|hy|պատմություն}}
* {{Z|eo}}: {{W+|eo|historio}}
* {{Z|et}}: {{W+|et|ajalugu}}
* {{Z|fa}}: {{W+|fa|تاریخ|tr=târix}}
* {{Z|fo}}: {{W-|fo|søga|m}}
* {{Z|fi}}: {{W+|fi|historia}}
* {{Z|fr}}: {{W+|fr|histoire|m}}
* {{Z|fur}}: {{W-|fur|istorie|m}}, {{W-|fur|storie|m}}
* {{Z|fy}}: {{W+|fy|skiednis|g}}
* {{Z|gd}}: {{W-|gd|eachdraidh|m}}
* {{Z|gag}}: {{W-|gag|istoriya}}
* {{Z|gl}}: {{W+|gl|historia|m}}
* {{Z|gu}}: {{W+|gu|ઇતિહાસ|n}}
* {{Z|ka}}: {{W-|ka|ისტორია}}
* {{Z|ht}}: {{W-|ht|istwa}}
* {{Z|mba}}: {{W-|mba|lasaysayan}}
* {{Z|hi}}: {{W+|hi|इतिहास|n}}, {{W-|hi|तारीख़|m}}
* {{Z|hil}}: {{W-|hil|kasaysayan}}, {{W-|hil|historya}}
* {{Z|nl}}: {{W+|nl|geschiedenis|m}}, {{W+|nl|historie|m}}
* {{Z|he}}: {{W+|he|היסטוריה|m|tr=história|cuda=הִסְטוֹרְיָה / היסטוריה}}
* {{Z|io}}: {{W+|io|historio}}
* {{Z|ilo}}: {{W-|ilo|pakasaritaan}}
* {{Z|ang}}: {{W-|ang|stǣr|nt}}
* {{Z|en}}: {{W+|en|history}}
* {{Z|ia}}: {{W-|ia|historia}}
* {{Z|ga}}: {{W+|ga|stair|m}}
* {{Z|ist}}: {{W-|ist|stuoria|m}}
* {{Z|it}}: {{W+|it|storia|m}}
* {{Z|is}}: {{W+|is|saga|m}}
* {{Z|ja}}: {{W+|ja|歴史|tr=れきし, rekishi}}, {{W+|ja|沿革|tr=えんかく, enkaku}}
* {{Z|xal}}: {{W-|xal|тууҗ}}
* {{Z|kn}}: {{W+|kn|ಇತಿಹಾಸ}}
* {{Z|pam}}: {{W-|pam|amlat}}
* {{Z|ca}}: {{W+|ca|història|m}}
* {{Z|ky}}: {{W+|ky|тарых}}
* {{Z|si}}: {{W+|si|ඉතිහාසය}}, {{W-|si|පුරාවෘත්තය}}
* {{Z|ko}}: {{W+|ko|역사}}, {{W+|ko|력사}}
* {{Z|co}}: {{W+|co|storia}}
* {{Z|kum}}: {{W-|kum|тарих|tr=tarix}}
* {{Z|la}}: {{W+|la|historia|m}}
* {{Z|lv}}: {{W-|lv|vēsture|m}}
* {{Z|lo}}: {{W+|lo|ປະຫວັດສາດ}}, {{W-|lo|ປະຫວັດ}}
* {{Z|lez}}: {{W-|lez|тарих}}
* {{Z|lij}}: {{W-|lij|stöia}}
* {{Z|lt}}: {{W+|lt|istorija|m}}
* {{Z|lg}}: {{W-|lg|ebyafaayo}}
* {{Z|mk}}: {{W-|mk|историја|m}}
* {{Z|ml}}: {{W+|ml|ചരിത്രം}}
* {{Z|ms}}: {{W+|ms|sejarah}}
* {{Z|mt}}: {{W-|mt|storja|m}}
* {{Z|mnc}}: {{W-|mnc|ᠰᡠᡩᡠᡵᡳ}}
* {{Z|mr}}: {{W+|mr|इतिहास}}
* {{Z|hu}}: {{W+|hu|történelem}}, {{W+|hu|múlt}}
* {{Z|mn}}:
*: Kirîlî: {{W+|mn|түүх}}
*: Mongolî: {{W-|mn|ᠲᠡᠦᠬᠡ}}
* {{Z|na}}: {{W+|na|ekadaedaenigawae}}
* {{Z|ne}}: {{W+|ne|इतिहास}}
* {{Z|no}}: {{W+|no|historie|m}}
* {{Z|oc}}: {{W+|oc|istòria|m}}
* {{Z|or}}: {{W-|or|ଇତିହାସ}}
* {{Z|om}}: {{W-|om|seenaa}}
* {{Z|os}}: {{W-|os|истори}}
* {{Z|ota}}: {{W-|ota|تاریخ|tr=tarih}}
* {{Z|ug}}: {{W-|ug|تارىخ}}
* {{Z|uz}}: {{W+|uz|tarix}}
* {{Z|pwn}}: {{W-|pwn|likisi}}
* {{Z|ps}}: {{W+|ps|تاريخ|n|tr=tāríx}}
* {{Z|pih}}: {{W-|pih|histrei}}
* {{Z|pl}}: {{W+|pl|historia|m}}, {{W+|pl|dzieje}}
* {{Z|pt}}: {{W+|pt|histórico|n}}
* {{Z|prg}}: {{W-|prg|istōrija}}
* {{Z|pa}}: {{W+|pa|ਇਤਿਹਾਸ}}
* {{Z|kk}}: {{W+|kk|тарих}}
* {{Z|rm}}: {{W-|rm|istorgia|m}}
* {{Z|ro}}: {{W+|ro|istorie}}
* {{Z|ru}}: {{W-|ru|исто́рия|m}}
* {{Z|rue}}: {{W-|rue|істо́рія|m}}
* {{Z|sgs}}: {{W-|sgs|istuorėjė|m}}
* {{Z|sa}}: {{W+|sa|इतिहास|n}}
* {{Z|ceb}}: {{W-|ceb|kasaysayan}}
* {{Z|scn}}: {{W+|scn|storia|m}}
* {{Z|szl}}: {{W-|szl|gyszichta|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|хѝсто̄рија|m}}, {{W-|sh|ѝсто̄рија|m}}, {{W-|sh|по̏вије̄ст|m}}, {{W-|sh|по̏ве̄ст|m}}
*: Latînî: {{W+|sh|hìstōrija|m}}, {{W+|sh|ìstōrija|m}}, {{W+|sh|pȍvijēst|m}}, {{W+|sh|pȍvēst|m}}
* {{Z|sk}}: {{W-|sk|dejiny|m-p}}, {{W-|sk|história|m}}
* {{Z|sl}}: {{W+|sl|zgodovina|m}}, {{W+|sl|preteklost|m}}
* {{Z|so}}: {{W-|so|taariikh}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|stawizny|p}}
* {{Z|es}}: {{W+|es|historia|m}}
* {{Z|sw}}: {{W+|sw|historia}}
* {{Z|sv}}: {{W+|sv|historia|g}}
* {{Z|shn}}: {{W-|shn|ပိုၼ်း}}
* {{Z|tab}}: {{W-|tab|тарих}}
* {{Z|tg}}: {{W+|tg|таърих}}
* {{Z|tl}}: {{W+|tl|kasaysayan}}
* {{Z|ta}}: {{W+|ta|வரலாறு}}, {{W+|ta|சரித்திரம்}}
* {{Z|th}}: {{W+|th|ประวัติศาสตร์}}, {{W+|th|ประวัติ}}
* {{Z|te}}: {{W+|te|చరిత్ర}}, {{W-|te|చరితం}}, {{W+|te|చరిత}}
* {{Z|crh}}: {{W-|crh|tarih}}
* {{Z|tt}}: {{W+|tt|тарих}}
* {{Z|ti}}: {{W+|ti|ታሪኽ}}
* {{Z|tr}}: {{W+|tr|tarih}}, {{W+|tr|ötük}}
* {{Z|tk}}: {{W-|tk|taryh}}
* {{Z|bo}}: {{W-|bo|ལོ་རྒྱུས}}
* {{Z|tpi}}: {{W-|tpi|histori}}
* {{Z|tyv}}: {{W-|tyv|төөгү}}
* {{Z|ur}}: {{W+|ur|اتہاس|n|tr=itihās}}, {{W+|ur|تاریخ|m|tr=tārīx}}
* {{Z|uk}}: {{W-|uk|істо́рія|m}}
* {{Z|vec}}: {{W-|vec|istoria|m}}, {{W+|vec|storia|m}}
* {{Z|vi}}: {{W+|vi|lịch sử}}
* {{Z|war}}: {{W-|war|kasaysayan}}
* {{Z|cy}}: {{W+|cy|hanes}}
* {{Z|wym}}: {{W-|wym|gyśicht|m}}
* {{Z|wo}}: {{W+|wo|taariix}}
* {{Z|km}}: {{W-|km|ប្រវត្តិសាស្ត្រ}}, {{W+|km|ប្រវត្តិ}}
* {{Z|sah}}: {{W-|sah|история}}, {{W-|sah|остуоруйа}}
* {{Z|yi}}: {{W+|yi|געשיכטע|m}}
* {{Z|el}}: {{W+|el|ιστορία|m}}
*: Kevn: {{W-|grc|ἱστορία|m}}
{{werger-bin}}
:{{werger çavkanî|en|history|beş=Ev qismê Wergerê|oldid=75799073}}
{{werger-ser|dema ku tiştek [[qewimîn|qewimiye]] yan hatiye kirin}}
* {{Z|de}}: {{W+|de|Datum|n}}, {{W+|de|Zeitpunkt|m}}
* {{Z|br}}: {{W+|br|deiziad|m}}, deiziadoù {{p}}
* {{Z|id}}: {{W+|id|tanggal}}
* {{Z|fi}}: {{W+|fi|päiväys}}, {{W+|fi|päivämäärä}}
* {{Z|fr}}: {{W+|fr|date|f}}
* {{Z|nl}}: {{W+|nl|datum|m}}
* {{Z|en}}: {{W-|en|date|tr=time}}
* {{Z|ja}}: {{W+|ja|日付|tr=ひづけ, hitzuke}}
* {{Z|pl}}: {{W+|pl|data|f}}
* {{Z|ro}}: {{W+|ro|dată|f}}
* {{Z|sh}}: {{W+|sh|datum|m}}
* {{Z|sh}}:
*: Kirîlî: [[датум]] {{mê}}
*: Latînî: {{W+|la|datum|m}}
* {{Z|sv}}: {{W+|sv|datum|m}}
* {{Z|te}}: {{W-|te|తేది|tr=taedi}}
* {{Z|tr}}: {{W+|tr|tarih}}, {{W+|tr|gün}}
{{werger-bin}}
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb|sc=Latn}}
# {{ckb-Arab|تاریخ}}
ebdxw3my2barzylmtcd8rpmpbfjwauc
6342761
6342760
2026-08-26T20:22:28Z
Wikihez
7344
6342761
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[hedîse|Hedîseyên]] [[dem]]ên [[berê]].
#: {{hevmane|ku|dîrok|mêjû}}
#: {{mk|ku|'''Tarîx''' xwe dubare dike.|Tiştên ku berê qewimîne dîsan diqewimin.|birêz=1}}
#* {{jêder-kovar|ku|nivîskar=Hayreddin Kızıl|sernav=Bawerîyên Gelêrî di Adat û Rusûmatnameê Tewayifê Ekradiye ya Mela Mehmûdê Bazîdî da|kovar=Kurdiyat|hejmar=13|sal=2026|rûpel=37|url=https://dergipark.org.tr/tr/pub/kurdiyat/article/1849076|jêgirtin=Mela Mehmûdê Bazîdî li ser ziman, '''tarîx''' û civaka Kurdan, folklor û edebiyata wan berhem nivîsîne yan jî wergerandine.}}
# [[ilm|Ilmê]] li ser [[dem]]ên [[berê]].
#: {{hevmane|ku|dîrok|mêjû}}
#: {{mk|ku|Şerefxanê Bedlîsî wek bavê '''tarîxa''' kurdan tê nasîn.}}
#* {{nimûne?|ku}}
# Dema ku tiştek [[qewimîn|qewimiye]] yan hatiye kirin.
#: {{mk|ku|Ev name di '''tarîxa''' 1.8.2006 de hatiye nivîsîn.}}
#: {{mk|ku|'''Tarîxa''' derketina vê kitêbê ne diyar e.|Li ser vê kitêbê nehatiye nivîsîn ka kengî hatiye çapkirin.|birêz=1}}
#* {{J:Mem û Zîn:1692|jêgirtin=Lewra ko dema ji xeybê fek bû</br>'''Tarîx''' hezar û şêst û yek bû</br>Îsal gihişte çill û çaran}}
#* {{J:Hawar:1998:2|sernav=Sê Tarîxên Hawarê|nivîskar={{w|Celadet Alî Bedirxan|Xwediyê Hawarê}}|hejmar=27|r=689|jêgirtin='''Tarîxa''' sisiyan panzdehê Nîsana sala hezar û neh sed û çel û yekê ye, yanî îro ye.}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Formên alternatîv ====
* {{g|ku|terîx}}
* {{g|ku|teirîx}}
==== Jê ====
{{kol3|ku|cure=Jê
|tarîxî
|tarîxçe
|tarîxnas
|tarîxnasî
|tarîxnivîs
|tarîxnivîsî
|tarîxvan
|tarîxvanî
|tarîxzan
|tarîxzanî
}}
==== Etîmolojî ====
Ji {{deyn|ar|ku|تَارِيخ}}.
==== Bide ber ====
* {{g|ku|wext}}
* {{g|ku|dem}}
* {{g|ku|kêlîk}}
==== Werger ====
{{werger-ser|hedîseyên berê û ilmê li ser wan|id=ilmê hedîseyên berê}}
* {{Z|af}}: {{W+|af|geskiedenis}}
* {{Z|sq}}: {{W+|sq|histori|m}}
* {{Z|de}}: {{W+|de|Geschichte|m}}, {{W+|de|Historie|m}}
* {{Z|alt}}: {{W-|alt|тӱӱки}}, {{W-|alt|тарых}}
* {{Z|am}}: {{W-|am|ታሪክ}}
* {{Z|an}}: {{W-|an|istoria|m}}
* {{Z|arc}}:
*: {{Z|syc}}: {{W-|syc|ܬܫܥܝܬܐ|m|tr=tašʿīṯā}}
* {{Z|as}}: {{W-|as|ইতিহাস}}
* {{Z|ast}}: {{W+|ast|historia|m}}, {{W+|ast|hestoria|m}}
* {{Z|aot}}: {{W-|aot|itihas}}
* {{Z|av}}: {{W-|av|тарих}}
* {{Z|az}}:
*: Latînî: {{W+|az|tarix}}
*: {{Z|az}}: {{W-|az|تاریخ|tr=tārikh}}
* {{Z|eu}}: {{W+|eu|historia}}
* {{Z|ba}}: {{W-|ba|тарих}}
* {{Z|be}}: {{W-|be|гісто́рыя|m}}
* {{Z|bn}}: {{W+|bn|ইতিহাস}}
* {{Z|bcl}}: {{W-|bcl|uusipon}}
* {{Z|br}}: {{W+|br|istor|m}}
* {{Z|bg}}: {{W-|bg|исто́рия|m}}
* {{Z|my}}: {{W+|my|သမိုင်း}}
* {{Z|bua}}: {{W-|bua|түүхэ}}
* {{Z|cs}}: {{W+|cs|dějiny|m-p}}, {{W+|cs|historie|m}}
* {{Z|chr}}: {{W-|chr|ᎧᏃᎮᏍᎩ}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|歷史|tr=lik6 si2}}
*: {{Z|dng}}: {{W-|dng|лисы}}
*: {{Z|gan}}: {{W-|gan|歷史|tr=lit6 'si3}}
*: {{Z|hak}}: {{W-|hak|歷史|tr=li̍t-sṳ́}}
*: {{Z|cmn}}: {{W+|cmn|歷史|tr=lìshǐ}}
*: {{Z|cdo}}: {{W-|cdo|歷史|tr=lĭk-sṳ̄}}
*: {{Z|nan}}: {{W+|nan|歷史|tr=le̍k-sú}}
*: {{Z|wuu}}: {{W-|wuu|歷史|tr=liq sr}}
* {{Z|cv}}: {{W-|cv|истори}}
* {{Z|da}}: {{W+|da|historie|g}}
* {{Z|id}}: {{W+|id|sejarah}}, {{W+|id|histori}}
* {{Z|ar}}: {{W+|ar|تَارِيخ|n}}
*: {{Z|arz}}: {{W-|arz|تاريخ|n|tr=tarīḵ}}
* {{Z|hy}}: {{W+|hy|պատմություն}}
* {{Z|eo}}: {{W+|eo|historio}}
* {{Z|et}}: {{W+|et|ajalugu}}
* {{Z|fa}}: {{W+|fa|تاریخ|tr=târix}}
* {{Z|fo}}: {{W-|fo|søga|m}}
* {{Z|fi}}: {{W+|fi|historia}}
* {{Z|fr}}: {{W+|fr|histoire|m}}
* {{Z|fur}}: {{W-|fur|istorie|m}}, {{W-|fur|storie|m}}
* {{Z|fy}}: {{W+|fy|skiednis|g}}
* {{Z|gd}}: {{W-|gd|eachdraidh|m}}
* {{Z|gag}}: {{W-|gag|istoriya}}
* {{Z|gl}}: {{W+|gl|historia|m}}
* {{Z|gu}}: {{W+|gu|ઇતિહાસ|n}}
* {{Z|ka}}: {{W-|ka|ისტორია}}
* {{Z|ht}}: {{W-|ht|istwa}}
* {{Z|mba}}: {{W-|mba|lasaysayan}}
* {{Z|hi}}: {{W+|hi|इतिहास|n}}, {{W-|hi|तारीख़|m}}
* {{Z|hil}}: {{W-|hil|kasaysayan}}, {{W-|hil|historya}}
* {{Z|nl}}: {{W+|nl|geschiedenis|m}}, {{W+|nl|historie|m}}
* {{Z|he}}: {{W+|he|היסטוריה|m|tr=história|cuda=הִסְטוֹרְיָה / היסטוריה}}
* {{Z|io}}: {{W+|io|historio}}
* {{Z|ilo}}: {{W-|ilo|pakasaritaan}}
* {{Z|ang}}: {{W-|ang|stǣr|nt}}
* {{Z|en}}: {{W+|en|history}}
* {{Z|ia}}: {{W-|ia|historia}}
* {{Z|ga}}: {{W+|ga|stair|m}}
* {{Z|ist}}: {{W-|ist|stuoria|m}}
* {{Z|it}}: {{W+|it|storia|m}}
* {{Z|is}}: {{W+|is|saga|m}}
* {{Z|ja}}: {{W+|ja|歴史|tr=れきし, rekishi}}, {{W+|ja|沿革|tr=えんかく, enkaku}}
* {{Z|xal}}: {{W-|xal|тууҗ}}
* {{Z|kn}}: {{W+|kn|ಇತಿಹಾಸ}}
* {{Z|pam}}: {{W-|pam|amlat}}
* {{Z|ca}}: {{W+|ca|història|m}}
* {{Z|ky}}: {{W+|ky|тарых}}
* {{Z|si}}: {{W+|si|ඉතිහාසය}}, {{W-|si|පුරාවෘත්තය}}
* {{Z|ko}}: {{W+|ko|역사}}, {{W+|ko|력사}}
* {{Z|co}}: {{W+|co|storia}}
* {{Z|kum}}: {{W-|kum|тарих|tr=tarix}}
* {{Z|la}}: {{W+|la|historia|m}}
* {{Z|lv}}: {{W-|lv|vēsture|m}}
* {{Z|lo}}: {{W+|lo|ປະຫວັດສາດ}}, {{W-|lo|ປະຫວັດ}}
* {{Z|lez}}: {{W-|lez|тарих}}
* {{Z|lij}}: {{W-|lij|stöia}}
* {{Z|lt}}: {{W+|lt|istorija|m}}
* {{Z|lg}}: {{W-|lg|ebyafaayo}}
* {{Z|mk}}: {{W-|mk|историја|m}}
* {{Z|ml}}: {{W+|ml|ചരിത്രം}}
* {{Z|ms}}: {{W+|ms|sejarah}}
* {{Z|mt}}: {{W-|mt|storja|m}}
* {{Z|mnc}}: {{W-|mnc|ᠰᡠᡩᡠᡵᡳ}}
* {{Z|mr}}: {{W+|mr|इतिहास}}
* {{Z|hu}}: {{W+|hu|történelem}}, {{W+|hu|múlt}}
* {{Z|mn}}:
*: Kirîlî: {{W+|mn|түүх}}
*: Mongolî: {{W-|mn|ᠲᠡᠦᠬᠡ}}
* {{Z|na}}: {{W+|na|ekadaedaenigawae}}
* {{Z|ne}}: {{W+|ne|इतिहास}}
* {{Z|no}}: {{W+|no|historie|m}}
* {{Z|oc}}: {{W+|oc|istòria|m}}
* {{Z|or}}: {{W-|or|ଇତିହାସ}}
* {{Z|om}}: {{W-|om|seenaa}}
* {{Z|os}}: {{W-|os|истори}}
* {{Z|ota}}: {{W-|ota|تاریخ|tr=tarih}}
* {{Z|ug}}: {{W-|ug|تارىخ}}
* {{Z|uz}}: {{W+|uz|tarix}}
* {{Z|pwn}}: {{W-|pwn|likisi}}
* {{Z|ps}}: {{W+|ps|تاريخ|n|tr=tāríx}}
* {{Z|pih}}: {{W-|pih|histrei}}
* {{Z|pl}}: {{W+|pl|historia|m}}, {{W+|pl|dzieje}}
* {{Z|pt}}: {{W+|pt|histórico|n}}
* {{Z|prg}}: {{W-|prg|istōrija}}
* {{Z|pa}}: {{W+|pa|ਇਤਿਹਾਸ}}
* {{Z|kk}}: {{W+|kk|тарих}}
* {{Z|rm}}: {{W-|rm|istorgia|m}}
* {{Z|ro}}: {{W+|ro|istorie}}
* {{Z|ru}}: {{W-|ru|исто́рия|m}}
* {{Z|rue}}: {{W-|rue|істо́рія|m}}
* {{Z|sgs}}: {{W-|sgs|istuorėjė|m}}
* {{Z|sa}}: {{W+|sa|इतिहास|n}}
* {{Z|ceb}}: {{W-|ceb|kasaysayan}}
* {{Z|scn}}: {{W+|scn|storia|m}}
* {{Z|szl}}: {{W-|szl|gyszichta|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|хѝсто̄рија|m}}, {{W-|sh|ѝсто̄рија|m}}, {{W-|sh|по̏вије̄ст|m}}, {{W-|sh|по̏ве̄ст|m}}
*: Latînî: {{W+|sh|hìstōrija|m}}, {{W+|sh|ìstōrija|m}}, {{W+|sh|pȍvijēst|m}}, {{W+|sh|pȍvēst|m}}
* {{Z|sk}}: {{W-|sk|dejiny|m-p}}, {{W-|sk|história|m}}
* {{Z|sl}}: {{W+|sl|zgodovina|m}}, {{W+|sl|preteklost|m}}
* {{Z|so}}: {{W-|so|taariikh}}
* Sorbî:
*: {{Z|dsb}}: {{W-|dsb|stawizny|p}}
* {{Z|es}}: {{W+|es|historia|m}}
* {{Z|sw}}: {{W+|sw|historia}}
* {{Z|sv}}: {{W+|sv|historia|g}}
* {{Z|shn}}: {{W-|shn|ပိုၼ်း}}
* {{Z|tab}}: {{W-|tab|тарих}}
* {{Z|tg}}: {{W+|tg|таърих}}
* {{Z|tl}}: {{W+|tl|kasaysayan}}
* {{Z|ta}}: {{W+|ta|வரலாறு}}, {{W+|ta|சரித்திரம்}}
* {{Z|th}}: {{W+|th|ประวัติศาสตร์}}, {{W+|th|ประวัติ}}
* {{Z|te}}: {{W+|te|చరిత్ర}}, {{W-|te|చరితం}}, {{W+|te|చరిత}}
* {{Z|crh}}: {{W-|crh|tarih}}
* {{Z|tt}}: {{W+|tt|тарих}}
* {{Z|ti}}: {{W+|ti|ታሪኽ}}
* {{Z|tr}}: {{W+|tr|tarih}}, {{W+|tr|ötük}}
* {{Z|tk}}: {{W-|tk|taryh}}
* {{Z|bo}}: {{W-|bo|ལོ་རྒྱུས}}
* {{Z|tpi}}: {{W-|tpi|histori}}
* {{Z|tyv}}: {{W-|tyv|төөгү}}
* {{Z|ur}}: {{W+|ur|اتہاس|n|tr=itihās}}, {{W+|ur|تاریخ|m|tr=tārīx}}
* {{Z|uk}}: {{W-|uk|істо́рія|m}}
* {{Z|vec}}: {{W-|vec|istoria|m}}, {{W+|vec|storia|m}}
* {{Z|vi}}: {{W+|vi|lịch sử}}
* {{Z|war}}: {{W-|war|kasaysayan}}
* {{Z|cy}}: {{W+|cy|hanes}}
* {{Z|wym}}: {{W-|wym|gyśicht|m}}
* {{Z|wo}}: {{W+|wo|taariix}}
* {{Z|km}}: {{W-|km|ប្រវត្តិសាស្ត្រ}}, {{W+|km|ប្រវត្តិ}}
* {{Z|sah}}: {{W-|sah|история}}, {{W-|sah|остуоруйа}}
* {{Z|yi}}: {{W+|yi|געשיכטע|m}}
* {{Z|el}}: {{W+|el|ιστορία|m}}
*: Kevn: {{W-|grc|ἱστορία|m}}
{{werger-bin}}
:{{werger çavkanî|en|history|beş=Ev qismê Wergerê|oldid=75799073}}
{{werger-ser|dema ku tiştek [[qewimîn|qewimiye]] yan hatiye kirin}}
* {{Z|de}}: {{W+|de|Datum|n}}, {{W+|de|Zeitpunkt|m}}
* {{Z|br}}: {{W+|br|deiziad|m}}, deiziadoù {{p}}
* {{Z|id}}: {{W+|id|tanggal}}
* {{Z|fi}}: {{W+|fi|päiväys}}, {{W+|fi|päivämäärä}}
* {{Z|fr}}: {{W+|fr|date|f}}
* {{Z|nl}}: {{W+|nl|datum|m}}
* {{Z|en}}: {{W-|en|date|tr=time}}
* {{Z|ja}}: {{W+|ja|日付|tr=ひづけ, hitzuke}}
* {{Z|pl}}: {{W+|pl|data|f}}
* {{Z|ro}}: {{W+|ro|dată|f}}
* {{Z|sh}}: {{W+|sh|datum|m}}
* {{Z|sh}}:
*: Kirîlî: [[датум]] {{mê}}
*: Latînî: {{W+|la|datum|m}}
* {{Z|sv}}: {{W+|sv|datum|m}}
* {{Z|te}}: {{W-|te|తేది|tr=taedi}}
* {{Z|tr}}: {{W+|tr|tarih}}, {{W+|tr|gün}}
{{werger-bin}}
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb|sc=Latn}}
# {{ckb-Arab|تاریخ}}
6udhtxzo5w9z5r2zreg61t0cypdgjgw
gwîz
0
28322
6342790
6335491
2026-08-26T20:54:39Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342790
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{IPA|ku|/ɡyːz/}}
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# {{f|ku|Badînî|Dêrsim|Reşwî}} {{guharto|gûz}}
#* {{J:Hawar:1998:2|r=629|hj=24|sernav=Kurd û Kurdistan Bi Çavê Biyaniyan -3-|nivîskar=w:Herekol Azîzan|jêgirtin=Gava mirov nîzingî wan dibe tof tof darên '''gwîz''' xwe şanî wan didin.}}
#* {{J:Mehmed Uzun:Hawara Dîcleyê 1:2003|r=138|jêgirtin=(...) kakilekî '''gwîzê''' ji siniya şêrînahiyan girt, xiste nav tasa hingiv û ew bir devê xwe.}}
#* {{J:Sidqî Hirorî:Kurê Zinarê Serbilind:1996|r=25|jêgirtin=Xurtan, li jêriya gundî, li ber rûbarî '''gwîz''' diweşandin.}}
{{mijar|ku|riwek}}
96qr714c39k2woae1wwj4ootwppx3m3
balefirvan
0
32434
6342845
5676100
2026-08-27T07:12:50Z
Wikihez
7344
6342845
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=-}}
# {{guharto|ku|balafirvan}}
ewwhy63g4xs81pa8ovj13c9jzwacwiq
gez kirin
0
34799
6342791
6335421
2026-08-26T20:58:07Z
Wikihez
7344
/* Lêker */
6342791
wikitext
text/x-wiki
{{bnr-n|gezkirin}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Lêker ===
{{ku-tewîn-lk|gez kirin|form=gerguhêz|niha=k|borî=kir|pêşgir=gez|valahî=erê}}
{{lêker|ku|c=h-gh}}
# {{mane?|ku}}
#* {{bêmînak|ku}}
#* {{J:Hawar:1998:2|r=733|nivîskar=Nûredîn Ûsif|sernav=Gulê|hj=29|jêgirtin=Qoço kulmikên xwe '''gez kirin''' û wî pilingê ko çiya dihejandin ji bo cara pêşîn girt (...)}}
#* {{J:Xelîl Duhokî:Antolojiya Çîroka Nû ya Kurmancên Başûr|r=27|jêgirtin=Çi kesê ku wî didît, jê re lêva xwe '''gez dikir'''.}}
==== Hevmane ====
* [[dev lê kirin]]
==== Etîmolojî ====
Ji {{heve|ku|gez|kirin}}.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|beißen}}, {{W|de|abbeißen}}, {{W|de|beissen}}
* {{Z|fa}}: {{W+|fa|اندازه گرفتن}}, {{W+|fa|گاز زدن}}, {{W+|fa|متر کردن}}
* {{Z|fr}}: {{W+|fr|mordre}}
* {{Z|tr}}: {{W+|tr|dalamak}}, {{W+|tr|dişlemek}}, {{W+|tr|ısırmak}}, {{W|tr|yemek|guman=erê}}
{{werger-bin}}
kolt3gibs0tcpjss5wvxz4elwii1om9
pîlot
0
37151
6342846
6328188
2026-08-27T07:13:08Z
Wikihez
7344
6342846
wikitext
text/x-wiki
{{bnr-h|pilot}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr ===
[[Wêne:US Navy 050811-N-0226M-025 A student pilot signals his plane captain that he is starting his number one engine on his F-A-18 Hornet on the flight deck aboard the Nimitz-class aircraft carrier USS Ronald Reagan (CVN 76).jpg|thumb|Pîlotek]]
{{navdêr|ku|z=mn}}
# {{e|ku|meslek|hewavanî}} Kesê ku [[firoke]]yan [[firandin|difirîne]] yan [[zanîn|dizane]] [[firandin|bifirîne]].
#: {{hevmane|ku|balafirvan|firokevan}}
#* {{bêmînak|ku}}
==== Tewandin ====
{{ku-tewîn-nav|mê û nêr}}
==== Jê ====
* {{g|ku|pîlotî}}
==== Etîmolojî ====
Bi riya {{deyn|en|ku|pilot}} ji {{ji|frm|ku|pilot}}, {{g|frm|pillot}}, ji {{ji|it|en|pilota}}, {{g|it|piloto}}, herwiha kevntir {{g|it|pedotta}}, {{g|it|pedot(t)o}}.
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W+|de|Pilot|m}}, {{W-|de|Flugzeugführer|m}}
* {{Z|br}}: {{W-|br|loman|m}}
* {{Z|bg}}: [[летец]] (letec)
* {{Z|ar}}: {{W-|ar|طيار|guman=erê}}
* {{Z|fa}}: {{W+|fa|خلبان}}
* {{Z|fi}}: {{W+|fi|lentäjä}}, {{W+|fi|pilotti}}
* {{Z|fr}}: {{W+|fr|pilote|m}}
* {{Z|nl}}: {{W+|nl|piloot|m}}
* {{Z|en}}: [[pilot]] (a person controlling an aircraft), {{W+|en|aviator}}
* {{Z|mk}}: [[пилот]] (pilot)
* {{Z|no}}: {{W-|no|pilot|m}}
* {{Z|pl}}: {{W+|pl|pilot|m}}
* {{Z|ru}}: [[летчик|лётчик]] (lǒtčik), [[пилот]] (pilot)
* {{Z|es}}: {{W+|es|piloto|m}}
* {{Z|tr}}: {{W+|tr|tayyareci}}, {{W+|tr|uçucu}}
* {{Z|el}}: {{W+|el|πιλότος|m}}
{{werger-bin}}
p3kcj32wbd46uwdvskevx5jzeeakn2t
firrokevan
0
37152
6342847
5683089
2026-08-27T07:13:16Z
Wikihez
7344
6342847
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=-}}
# {{guharto|ku|firokevan}}
e4qe035ejle7lupzlrnmc6wl7a4pchx
çand
0
39197
6342766
6337040
2026-08-26T20:26:12Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342766
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{deng|ku|LL-Q36368 (kur)-Dildadil-çand.wav|dever=Amed}}
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[kultûr]], [[tore]], [[kelepûr]], [[edet]]
#* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=Celadet Alî Bedirxan|hejmar=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|چاند}}
==== Jê ====
* [[çandî]]
* [[çandîtî]]
==== Etîmolojî ====
{{paşvesazî|ku|çandin}}. {{coinage|ku|Celadet Alî Bedirxan|in=1933}} bi riya {{yekser|fr|ku|culture<t:kultûr>|hûr=1}}. Binere {{q|ku|kultûr}}.
==== Werger ====
{{werger-ser}}
* {{Z|af}}: {{W+|af|kultuur}}
* {{Z|sq}}: {{W+|sq|rrethanë|m}}, {{W+|sq|doke}}, {{W+|sq|kulturë|m}},
* {{Z|de}}: {{W+|de|Kultur|m}}
* {{Z|am}}: {{W-|am|ባህል|n}}
* {{Z|aii}}: {{W-|aii|ܡܲܪܕܘܼܬܵܐ|m}}
* {{Z|as}}: {{W-|as|সংস্কৃতি}}
* {{Z|ast}}: {{W+|ast|cultura}}
* {{Z|az}}: {{W+|az|mədəniyyət}}
* {{Z|ba}}: {{W-|ba|мәҙәниәт}}
* {{Z|bar}}: {{W-|bar|Kuitua}}
* {{Z|be}}: {{W+|be|культу́ра|m}}
* {{Z|bn}}: {{W+|bn|সংস্কৃতি}}, {{W+|bn|রসম}}, {{W+|bn|রেওয়াজ}}, {{W+|bn|তমদ্দুন}}
* {{Z|br}}: {{W+|br|sevenadur|n}}
* {{Z|bg}}: {{W+|bg|култу́ра|m}}
* {{Z|my}}: {{W+|my|ယဉ်ကျေးမှု}}
* {{Z|bua}}: {{W-|bua|соёл}}
* {{Z|ce}}: {{W-|ce|оьздангалла}}
* {{Z|cs}}: {{W+|cs|kultura|m}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|文化}}
*: {{Z|dng}}: {{W-|dng|вынхуа}}
*: {{Z|cdo}}: {{W-|cdo|文化}}
*: {{Z|hak}}: {{W-|hak|文化|tr=vùn-fa}}
*: {{Z|nan-hbl}}: {{W-|nan-hbl|文化|tr=bûn-hoà}}
*: {{Z|cmn}}: {{W+|cmn|文化}}
*: {{Z|wuu}}: {{W-|wuu|文化}}
* {{Z|cv}}: {{W-|cv|культура}}
* {{Z|da}}: {{W+|da|kultur}}
* {{Z|dv}}: {{W-|dv|ސަގާފަތު}}
* {{Z|id}}: {{W+|id|budaya}}
* {{Z|ar}}: {{W+|ar|ثَقَافَة|m}}
*: {{Z|arz}}: {{W-|arz|ثقافة|m|tr=saqāfa, ṯaqāfa}}
*: {{Z|acw}}: {{W-|acw|ثقافة|m|tr=ṯaqāfa}}
*: {{Z|ary}}: {{W-|ary|ثقافة|m|tr=taqāfa}}
* {{Z|hy}}: {{W+|hy|մշակույթ}}
* {{Z|eo}}: {{W-|eo|kulturo}}
* {{Z|et}}: {{W-|et|kultuur}}
* {{Z|ext}}: {{W-|ext|coltura|m}}
* {{Z|fo}}: {{W-|fo|mentan|m}}, {{W-|fo|mentir|m-p}}, {{W-|fo|mentun|m}}
* {{Z|fi}}: {{W+|fi|kulttuuri}}
* {{Z|fr}}: {{W+|fr|culture|m}}
* {{Z|fy}}: {{W+|fy|kultuer}}
* {{Z|gd}}: {{W-|gd|dualchas|n}}, {{W-|gd|cultar|n}}
* {{Z|gl}}: {{W+|gl|cultura|m}}
* {{Z|gu}}: {{W-|gu|સંસ્કૃતિ|m}}
* {{Z|ka}}: {{W+|ka|კულტურა}}
* {{Z|gn}}: {{W+|gn|teko}}
* {{Z|ht}}: {{W-|ht|kilti}}
* {{Z|haw}}: {{W-|haw|nā ʻike a me nā hana}}
* {{Z|hi}}: {{W+|hi|संस्कृति|m}}
* {{Z|nl}}: {{W+|nl|cultuur|m}}
* {{Z|he}}: {{W+|he|תַּרְבּוּת|m|tr=tarbút}}
* {{Z|io}}: {{W+|io|kulturo}}
* {{Z|en}}: {{W+|en|culture}}
* {{Z|izh}}: {{W-|izh|kulttuura}}
* {{Z|ia}}: {{W-|ia|cultura|m}}
* {{Z|ga}}: {{W-|ga|cultúr|n}}
* {{Z|it}}: {{W+|it|cultura|m}}
* {{Z|is}}: {{W+|is|menning|m}}
* {{Z|ja}}: {{W+|ja|文化|tr=ぶんか, bunka}}, {{W+|ja|カルチャー|tr=karuchā}}
* {{Z|xal}}: {{W-|xal|сойл}}
* {{Z|kn}}: {{W+|kn|ಸಂಸ್ಕೃತಿ}}
* {{Z|ca}}: {{W+|ca|cultura|m}}
* {{Z|ky}}: {{W+|ky|маданият}}
* {{Z|si}}: {{W+|si|සංස්කෘතිය}}
* {{Z|ko}}: {{W+|ko|문화}}
* {{Z|la}}: {{W-|la|cultūra|m}}
* {{Z|lv}}: {{W-|lv|kultūra|m}}
* {{Z|lo}}: {{W+|lo|ວັດທະນະທຳ}}
* {{Z|lij}}: {{W-|lij|coltûa}}
* {{Z|lt}}: {{W+|lt|kultūra|m}}
* {{Z|khb}}: {{W-|khb|ᦞᧆᦒᦓᦱᦒᧄ}}
* {{Z|mk}}: {{W-|mk|култу́ра|m}}
* {{Z|mg}}: {{W+|mg|kolontsaina}}, {{W+|mg|fomba}}
* {{Z|ml}}: {{W+|ml|സംസ്ക്കാരം}}
* {{Z|ms}}: {{W+|ms|budaya}}
* {{Z|mt}}: {{W-|mt|kultura|m}}
* {{Z|mi}}: {{W-|mi|ahurea}}, {{W-|mi|tikanga}}
* {{Z|mr}}: {{W-|mr|संस्कृती}}
* {{Z|hu}}: {{W+|hu|kultúra}}
* {{Z|mn}}:
*: Kirîlî: {{W+|mn|соёл}}
*: Mongolî: {{W-|mn|ᠰᠣᠶᠤᠯ}}
* {{Z|nah}}: {{W-|nah|cultura|m}}
* {{Z|nv}}: {{W-|nv|éʼélʼį́}}
* {{Z|nds}}: {{W-|nds|kultur}}
* {{Z|ne}}: {{W+|ne|संस्कृति}}
* {{Z|nrf}}: {{W-|nrf|tchulteure|m}}, {{W-|nrf|tchututhe|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|kultur|n}}
*: {{Z|nn}}: {{W-|nn|kultur|n}}
* {{Z|oc}}: {{W+|oc|cultura|m}}
* {{Z|or}}: {{W+|or|ସଂସ୍କୃତି}}
* {{Z|ota}}: {{W-|ota|مدنیت|tr=medeniyyet}}
* {{Z|ug}}: {{W-|ug|مەدەنىيەت}}
* {{Z|uz}}: {{W+|uz|madaniyat}}
*: Kirîlî: {{W-|uz|маданият}}
* {{Z|ps}}: {{W-|ps|کلتور|n|tr=kultur}}, {{W+|ps|ثقافت|n|tr=saqāfat}}, {{W-|ps|فرهنګ|n|tr=farhang}}, {{W-|ps|کلچر|n|tr=kalčar}}
* Persian:
*: {{Z|prs}}: {{W-|prs|فَرْهَنْگ}}, {{W-|prs|کُولْتُور}}
*: {{Z|fa-ira}}: {{W-|fa-ira|فَرْهَنْگ}}
* {{Z|pl}}: {{W+|pl|kultura|m}}, {{W-|pl|obyczajowość}}
* {{Z|pt}}: {{W+|pt|cultura|m}}
* Punjabi:
*: Gurmuxî: {{W+|pa|ਸੰਸਕ੍ਰਿਤੀ|m}}
* {{Z|kk}}: {{W+|kk|мәдениет}}
* {{Z|cop}}: {{W-|cop|ⲓⲉⲃⲟⲩⲱⲓ|n}}
* {{Z|ro}}: {{W+|ro|cultură|m}}
* {{Z|ru}}: {{W+|ru|культу́ра|m}}
* {{Z|rue}}: {{W-|rue|култу́ра|m}}
* {{Z|sa}}: {{W+|sa|संस्कृति|m}}
* {{Z|scn}}: {{W-|scn|curtura|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|култу́ра|m}}
*: Latînî: {{W+|sh|kultúra|m}}
* {{Z|sco}}: {{W-|sco|cultur}}
* {{Z|sk}}: {{W-|sk|kultúra|m}}
* {{Z|sl}}: {{W+|sl|kultura|m}}
* {{Z|so}}: {{W-|so|dhaqan}}
* {{Z|es}}: {{W+|es|cultura|m}}
* {{Z|sw}}: {{W+|sw|utamaduni}}
* {{Z|sv}}: {{W+|sv|kultur|g}}
* {{Z|tg}}: {{W+|tg|фарҳанг}}, {{W-|tg|маданият}}, {{W-|tg|култура}}
* {{Z|tl}}: {{W-|tl|kultura}}, {{W+|tl|kalinangan}}
* {{Z|ta}}: {{W+|ta|பண்பாடு}}, {{W+|ta|கலாச்சாரம்}}
* {{Z|th}}: {{W+|th|วัฒนธรรม}}
* {{Z|te}}: {{W+|te|సంస్కృతి}}
* {{Z|tt}}: {{W+|tt|мәдәният}}
* {{Z|ti}}: {{W-|ti|ባህሊ}}
* {{Z|tr}}: {{W+|tr|kültür}}, {{W+|tr|hars}}
* {{Z|tk}}: {{W-|tk|medeniýet}}
* {{Z|bo}}: {{W-|bo|རིག་གནས}}
* {{Z|udm}}: {{W-|udm|лулчеберет}}
* {{Z|ur}}: {{W-|ur|ثَقافَت|m}}, {{W-|ur|فَرْہَن٘گ|m}}, {{W+|ur|تَہْذِیب|m}}
* {{Z|uk}}: {{W+|uk|культу́ра|m}}
* {{Z|vi}}: {{W+|vi|văn hoá}}
* {{Z|cy}}: {{W+|cy|diwylliant|n}}
* {{Z|wym}}: {{W-|wym|kultür}}
* {{Z|km}}: {{W+|km|វប្បធម៌}}
* {{Z|yi}}: {{W-|yi|קולטור|m}}
* {{Z|el}}: {{W+|el|πολιτισμός|n}}
* {{Z|za}}: {{W-|za|vwnzva}}
{{werger-bin}}
:{{werger çavkanî|en|culture|beş=Ev qismê Wergerê|oldid=84897044}}
=== Formekê lêkerê ===
{{lêker|ku|form=erê}}
# ''[[dema borî]] ji [[lêker]]a'' '''[[çandin]]'''
azgotbaw1vprbybou6iu2p5kd2z1dmo
6342767
6342766
2026-08-26T20:26:20Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342767
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{deng|ku|LL-Q36368 (kur)-Dildadil-çand.wav|dever=Amed}}
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[kultûr]], [[tore]], [[kelepûr]], [[edet]]
#* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=w:Celadet Alî Bedirxan|hejmar=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Bi alfabeyên din ====
* {{ku-ar|چاند}}
==== Jê ====
* [[çandî]]
* [[çandîtî]]
==== Etîmolojî ====
{{paşvesazî|ku|çandin}}. {{coinage|ku|Celadet Alî Bedirxan|in=1933}} bi riya {{yekser|fr|ku|culture<t:kultûr>|hûr=1}}. Binere {{q|ku|kultûr}}.
==== Werger ====
{{werger-ser}}
* {{Z|af}}: {{W+|af|kultuur}}
* {{Z|sq}}: {{W+|sq|rrethanë|m}}, {{W+|sq|doke}}, {{W+|sq|kulturë|m}},
* {{Z|de}}: {{W+|de|Kultur|m}}
* {{Z|am}}: {{W-|am|ባህል|n}}
* {{Z|aii}}: {{W-|aii|ܡܲܪܕܘܼܬܵܐ|m}}
* {{Z|as}}: {{W-|as|সংস্কৃতি}}
* {{Z|ast}}: {{W+|ast|cultura}}
* {{Z|az}}: {{W+|az|mədəniyyət}}
* {{Z|ba}}: {{W-|ba|мәҙәниәт}}
* {{Z|bar}}: {{W-|bar|Kuitua}}
* {{Z|be}}: {{W+|be|культу́ра|m}}
* {{Z|bn}}: {{W+|bn|সংস্কৃতি}}, {{W+|bn|রসম}}, {{W+|bn|রেওয়াজ}}, {{W+|bn|তমদ্দুন}}
* {{Z|br}}: {{W+|br|sevenadur|n}}
* {{Z|bg}}: {{W+|bg|култу́ра|m}}
* {{Z|my}}: {{W+|my|ယဉ်ကျေးမှု}}
* {{Z|bua}}: {{W-|bua|соёл}}
* {{Z|ce}}: {{W-|ce|оьздангалла}}
* {{Z|cs}}: {{W+|cs|kultura|m}}
* {{Z|zh}}:
*: {{Z|yue}}: {{W-|yue|文化}}
*: {{Z|dng}}: {{W-|dng|вынхуа}}
*: {{Z|cdo}}: {{W-|cdo|文化}}
*: {{Z|hak}}: {{W-|hak|文化|tr=vùn-fa}}
*: {{Z|nan-hbl}}: {{W-|nan-hbl|文化|tr=bûn-hoà}}
*: {{Z|cmn}}: {{W+|cmn|文化}}
*: {{Z|wuu}}: {{W-|wuu|文化}}
* {{Z|cv}}: {{W-|cv|культура}}
* {{Z|da}}: {{W+|da|kultur}}
* {{Z|dv}}: {{W-|dv|ސަގާފަތު}}
* {{Z|id}}: {{W+|id|budaya}}
* {{Z|ar}}: {{W+|ar|ثَقَافَة|m}}
*: {{Z|arz}}: {{W-|arz|ثقافة|m|tr=saqāfa, ṯaqāfa}}
*: {{Z|acw}}: {{W-|acw|ثقافة|m|tr=ṯaqāfa}}
*: {{Z|ary}}: {{W-|ary|ثقافة|m|tr=taqāfa}}
* {{Z|hy}}: {{W+|hy|մշակույթ}}
* {{Z|eo}}: {{W-|eo|kulturo}}
* {{Z|et}}: {{W-|et|kultuur}}
* {{Z|ext}}: {{W-|ext|coltura|m}}
* {{Z|fo}}: {{W-|fo|mentan|m}}, {{W-|fo|mentir|m-p}}, {{W-|fo|mentun|m}}
* {{Z|fi}}: {{W+|fi|kulttuuri}}
* {{Z|fr}}: {{W+|fr|culture|m}}
* {{Z|fy}}: {{W+|fy|kultuer}}
* {{Z|gd}}: {{W-|gd|dualchas|n}}, {{W-|gd|cultar|n}}
* {{Z|gl}}: {{W+|gl|cultura|m}}
* {{Z|gu}}: {{W-|gu|સંસ્કૃતિ|m}}
* {{Z|ka}}: {{W+|ka|კულტურა}}
* {{Z|gn}}: {{W+|gn|teko}}
* {{Z|ht}}: {{W-|ht|kilti}}
* {{Z|haw}}: {{W-|haw|nā ʻike a me nā hana}}
* {{Z|hi}}: {{W+|hi|संस्कृति|m}}
* {{Z|nl}}: {{W+|nl|cultuur|m}}
* {{Z|he}}: {{W+|he|תַּרְבּוּת|m|tr=tarbút}}
* {{Z|io}}: {{W+|io|kulturo}}
* {{Z|en}}: {{W+|en|culture}}
* {{Z|izh}}: {{W-|izh|kulttuura}}
* {{Z|ia}}: {{W-|ia|cultura|m}}
* {{Z|ga}}: {{W-|ga|cultúr|n}}
* {{Z|it}}: {{W+|it|cultura|m}}
* {{Z|is}}: {{W+|is|menning|m}}
* {{Z|ja}}: {{W+|ja|文化|tr=ぶんか, bunka}}, {{W+|ja|カルチャー|tr=karuchā}}
* {{Z|xal}}: {{W-|xal|сойл}}
* {{Z|kn}}: {{W+|kn|ಸಂಸ್ಕೃತಿ}}
* {{Z|ca}}: {{W+|ca|cultura|m}}
* {{Z|ky}}: {{W+|ky|маданият}}
* {{Z|si}}: {{W+|si|සංස්කෘතිය}}
* {{Z|ko}}: {{W+|ko|문화}}
* {{Z|la}}: {{W-|la|cultūra|m}}
* {{Z|lv}}: {{W-|lv|kultūra|m}}
* {{Z|lo}}: {{W+|lo|ວັດທະນະທຳ}}
* {{Z|lij}}: {{W-|lij|coltûa}}
* {{Z|lt}}: {{W+|lt|kultūra|m}}
* {{Z|khb}}: {{W-|khb|ᦞᧆᦒᦓᦱᦒᧄ}}
* {{Z|mk}}: {{W-|mk|култу́ра|m}}
* {{Z|mg}}: {{W+|mg|kolontsaina}}, {{W+|mg|fomba}}
* {{Z|ml}}: {{W+|ml|സംസ്ക്കാരം}}
* {{Z|ms}}: {{W+|ms|budaya}}
* {{Z|mt}}: {{W-|mt|kultura|m}}
* {{Z|mi}}: {{W-|mi|ahurea}}, {{W-|mi|tikanga}}
* {{Z|mr}}: {{W-|mr|संस्कृती}}
* {{Z|hu}}: {{W+|hu|kultúra}}
* {{Z|mn}}:
*: Kirîlî: {{W+|mn|соёл}}
*: Mongolî: {{W-|mn|ᠰᠣᠶᠤᠯ}}
* {{Z|nah}}: {{W-|nah|cultura|m}}
* {{Z|nv}}: {{W-|nv|éʼélʼį́}}
* {{Z|nds}}: {{W-|nds|kultur}}
* {{Z|ne}}: {{W+|ne|संस्कृति}}
* {{Z|nrf}}: {{W-|nrf|tchulteure|m}}, {{W-|nrf|tchututhe|m}}
* {{Z|no}}:
*: {{Z|nb}}: {{W+|nb|kultur|n}}
*: {{Z|nn}}: {{W-|nn|kultur|n}}
* {{Z|oc}}: {{W+|oc|cultura|m}}
* {{Z|or}}: {{W+|or|ସଂସ୍କୃତି}}
* {{Z|ota}}: {{W-|ota|مدنیت|tr=medeniyyet}}
* {{Z|ug}}: {{W-|ug|مەدەنىيەت}}
* {{Z|uz}}: {{W+|uz|madaniyat}}
*: Kirîlî: {{W-|uz|маданият}}
* {{Z|ps}}: {{W-|ps|کلتور|n|tr=kultur}}, {{W+|ps|ثقافت|n|tr=saqāfat}}, {{W-|ps|فرهنګ|n|tr=farhang}}, {{W-|ps|کلچر|n|tr=kalčar}}
* Persian:
*: {{Z|prs}}: {{W-|prs|فَرْهَنْگ}}, {{W-|prs|کُولْتُور}}
*: {{Z|fa-ira}}: {{W-|fa-ira|فَرْهَنْگ}}
* {{Z|pl}}: {{W+|pl|kultura|m}}, {{W-|pl|obyczajowość}}
* {{Z|pt}}: {{W+|pt|cultura|m}}
* Punjabi:
*: Gurmuxî: {{W+|pa|ਸੰਸਕ੍ਰਿਤੀ|m}}
* {{Z|kk}}: {{W+|kk|мәдениет}}
* {{Z|cop}}: {{W-|cop|ⲓⲉⲃⲟⲩⲱⲓ|n}}
* {{Z|ro}}: {{W+|ro|cultură|m}}
* {{Z|ru}}: {{W+|ru|культу́ра|m}}
* {{Z|rue}}: {{W-|rue|култу́ра|m}}
* {{Z|sa}}: {{W+|sa|संस्कृति|m}}
* {{Z|scn}}: {{W-|scn|curtura|m}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|култу́ра|m}}
*: Latînî: {{W+|sh|kultúra|m}}
* {{Z|sco}}: {{W-|sco|cultur}}
* {{Z|sk}}: {{W-|sk|kultúra|m}}
* {{Z|sl}}: {{W+|sl|kultura|m}}
* {{Z|so}}: {{W-|so|dhaqan}}
* {{Z|es}}: {{W+|es|cultura|m}}
* {{Z|sw}}: {{W+|sw|utamaduni}}
* {{Z|sv}}: {{W+|sv|kultur|g}}
* {{Z|tg}}: {{W+|tg|фарҳанг}}, {{W-|tg|маданият}}, {{W-|tg|култура}}
* {{Z|tl}}: {{W-|tl|kultura}}, {{W+|tl|kalinangan}}
* {{Z|ta}}: {{W+|ta|பண்பாடு}}, {{W+|ta|கலாச்சாரம்}}
* {{Z|th}}: {{W+|th|วัฒนธรรม}}
* {{Z|te}}: {{W+|te|సంస్కృతి}}
* {{Z|tt}}: {{W+|tt|мәдәният}}
* {{Z|ti}}: {{W-|ti|ባህሊ}}
* {{Z|tr}}: {{W+|tr|kültür}}, {{W+|tr|hars}}
* {{Z|tk}}: {{W-|tk|medeniýet}}
* {{Z|bo}}: {{W-|bo|རིག་གནས}}
* {{Z|udm}}: {{W-|udm|лулчеберет}}
* {{Z|ur}}: {{W-|ur|ثَقافَت|m}}, {{W-|ur|فَرْہَن٘گ|m}}, {{W+|ur|تَہْذِیب|m}}
* {{Z|uk}}: {{W+|uk|культу́ра|m}}
* {{Z|vi}}: {{W+|vi|văn hoá}}
* {{Z|cy}}: {{W+|cy|diwylliant|n}}
* {{Z|wym}}: {{W-|wym|kultür}}
* {{Z|km}}: {{W+|km|វប្បធម៌}}
* {{Z|yi}}: {{W-|yi|קולטור|m}}
* {{Z|el}}: {{W+|el|πολιτισμός|n}}
* {{Z|za}}: {{W-|za|vwnzva}}
{{werger-bin}}
:{{werger çavkanî|en|culture|beş=Ev qismê Wergerê|oldid=84897044}}
=== Formekê lêkerê ===
{{lêker|ku|form=erê}}
# ''[[dema borî]] ji [[lêker]]a'' '''[[çandin]]'''
bcbcntx88ar9lybv8tzr59d2wnppuz0
milyaket
0
43083
6342792
6335950
2026-08-26T21:00:12Z
Wikihez
7344
6342792
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=n}}
# {{rastnivîs|melek}}
#* {{J:Hawar:1998:2|sernav=Lavij|r=655|nivîskar={{w|Celadet Alî Bedirxan|C[eladet] A[lî] Bedir-Xan|jêgirtin=(...) lo merovo birev û tobe bike, lê '''milyaketê''' bixezeb li pey we dikudînê (...)}}
#* {{J:Zeynelabidîn Zinar:Xwençe 1:1989|jêgirtin=(...) çi gava ku li dinê ew meriv xêrek bike, '''milyaket''' gopalê xwe li defê dixe!}}
#* {{J:Mehmed Uzun:Hawara Dîcleyê 1:2003|jêgirtin=Xwedavendê me pêşî '''milyaket''' afirandin ko melekê tawis mezinê wan e (...)}}
#* {{J:Firat Cewerî:Girtî:1986|jêgirtin=Ma çi jin birazî, çi jin!... Weleh '''milyaket''' e, '''milyaket'''...}}
==== Tewandin ====
{{ku-tewîn-nav/nû|nêr}}
9hkla554exx6yhq5fyfy7wag18r10fz
6342793
6342792
2026-08-26T21:00:21Z
Wikihez
7344
/* Navdêr */
6342793
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=n}}
# {{rastnivîs|melek}}
#* {{J:Hawar:1998:2|sernav=Lavij|r=655|nivîskar={{w|Celadet Alî Bedirxan|C[eladet] A[lî] Bedir-Xan}}|jêgirtin=(...) lo merovo birev û tobe bike, lê '''milyaketê''' bixezeb li pey we dikudînê (...)}}
#* {{J:Zeynelabidîn Zinar:Xwençe 1:1989|jêgirtin=(...) çi gava ku li dinê ew meriv xêrek bike, '''milyaket''' gopalê xwe li defê dixe!}}
#* {{J:Mehmed Uzun:Hawara Dîcleyê 1:2003|jêgirtin=Xwedavendê me pêşî '''milyaket''' afirandin ko melekê tawis mezinê wan e (...)}}
#* {{J:Firat Cewerî:Girtî:1986|jêgirtin=Ma çi jin birazî, çi jin!... Weleh '''milyaket''' e, '''milyaket'''...}}
==== Tewandin ====
{{ku-tewîn-nav/nû|nêr}}
9rtfzswzgs3q8hapltx3a9phlapv7zw
6342794
6342793
2026-08-26T21:01:11Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342794
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=n}}
# {{rastnivîs|melek}}
#* {{J:Hawar:1998:2|sernav=Lavij|hj=25|r=655|nivîskar={{w|Celadet Alî Bedirxan|C[eladet] A[lî] Bedir-Xan}}|jêgirtin=(...) lo merovo birev û tobe bike, lê '''milyaketê''' bixezeb li pey we dikudînê (...)}}
#* {{J:Zeynelabidîn Zinar:Xwençe 1:1989|jêgirtin=(...) çi gava ku li dinê ew meriv xêrek bike, '''milyaket''' gopalê xwe li defê dixe!}}
#* {{J:Mehmed Uzun:Hawara Dîcleyê 1:2003|jêgirtin=Xwedavendê me pêşî '''milyaket''' afirandin ko melekê tawis mezinê wan e (...)}}
#* {{J:Firat Cewerî:Girtî:1986|jêgirtin=Ma çi jin birazî, çi jin!... Weleh '''milyaket''' e, '''milyaket'''...}}
==== Tewandin ====
{{ku-tewîn-nav/nû|nêr}}
c5enkai1wedggtlafhiae8xqvsgzpgl
felat
0
44860
6342818
6306494
2026-08-26T22:51:01Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342818
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[rizgarî]], [[xilasî]], [[azadî]], [[azad]]bûna ji [[bindestî|bindestiyê]]
#* {{bênimûne|ku}}
#* {{J:Hawar:1:1998|sernav=Armanc, Awayê Xebat û Nivîsandina Hawarê|hejmar=1|r=23|jêgirtin=Hawar dengê zanînê ye. Zanîn xwe nasîn e, xwe nasîn ji me re rêya '''felat''' û xweşiyê vediqe.{{sic}}}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Jê ====
* [[filitandin]]
* [[filitîn]]
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Bide ber ====
* [[Ferat]]
==== Werger ====
{{werger-ser}}
* {{Z|de}}: {{W|de|Befreiung|f}}
* {{Z|fa}}: {{W+|fa|چاره}}, {{W+|fa|گزیر}}
* {{Z|tr}}: {{W+|tr|halâs}}, {{W+|tr|kurtuluş}}, {{W+|tr|reha}}
{{werger-bin}}
m5ybdotm0bn6857tvupx0z67zvj1gda
rêhesin
0
46844
6342795
6339373
2026-08-26T21:02:57Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342795
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=m}}
# {{rastnivîs|rêasin}}
#* {{J:Hawar:1998:2|r=799|sernav=Rewşa Dinyayê|hj=32|nivîskar=Xeberguhêz|jêgirtin=Di navbera Mosko û Lenîngradê de du xetên '''rêhesin''' hene.}}
10sxrksqk8ndfqkikxoy5mpnvso7bxx
qirmiz
0
47194
6342798
6339388
2026-08-26T21:19:17Z
Wikihez
7344
/* Rengdêr */
6342798
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr 1 ===
{{navdêr|ku|z=m}}
# {{f|ku|buxik}} [[kirm|Kirmikeke]] ku jê rengê [[sor]] tê [[çêkirin]].
#* {{bêmînak|ku}}
==== Bi alfabeyên din ====
* {{ku-ar|قرمز}}
==== Formên alternatîv ====
* [[qurmiz]]
==== Etîmolojî 1 ====
Ji {{deyn|ar||قرمز|cuda=قِرْمِز}}, ji {{ji|fa|ku|کرمست|tr=kermest}}, hemû ji {{ji|ine-pro|ku|*kŕ̥miš|w=[[kirm]]}}. Bide ber ermenî {{q|xcl|կարմիր|tr=karmir}}, îbranî {{q|he|כַּרְמִיל|tr=karmīl}} û tirkî {{q|tr|kırmızı}} hemû wergirtinên ji zimanên îranî ne.
==== Werger ====
{{werger-ser|buxik|1}}
* {{Z|en}}: {{W+|en|kermes}} (insect)
* {{Z|tr}}: {{W+|tr|kırmız}}, {{W+|tr|kırmız böceği}}, {{W+|tr|çiçek boyası}}
{{werger-bin}}
=== Rengdêr ===
{{rengdêr|ku}}
# [[sor]].
#* {{J:Hawar:1998:2|hj=34|sernav=GUNDÊN LODÊ|nivîskar=w:Herekol Azîzan|r=833|jêgirtin=Di vî gundî de berê gelek roris «giyayê rengên sor û '''qirmiz'''» şîn dibû. }}
#* {{jêder-pirtûk|ku|jêgirtin=Lakîn ew merovêd ko hiznîne /huzin,keder / ew libasên sor û qirmiz û cilêd faxre ber nakin û destêd xwe hune nakin û çavêd xwe kil nadin û naçine dawatan û kêfxwaşan.|nivîskar=M. MAHMUT BEYAZÎDÎ|amadekar=Qanadê Kurdo|sernav=ADETÊN KURDÎSTAN|weşanxane=Moskowa|sal=1963|rûpel=36}}
==== Jê ====
* [[qirmizî]]
==== Etîmolojî 2 ====
Binêre '''[[qirmiz#Etîmolojî 1|beşa Etîmolojî 1]]'''.
==== Werger ====
{{werger-ser}}
* {{Z|en}}: {{W+|en|crimson}}, {{W+|en|scarlet}}
* {{Z|tr}}: {{W+|tr|kırmızı}}
{{werger-bin}}
=== Navdêr 2 ===
{{navdêr|ku|z=?}}
# Vexwarineke alkolî ya tirkan e ku jieyandina şîrêehînêtê çêkirin
#* {{jêder-pirtûk|ku|jêgirtin=...Axayê Bexdayî lêdan û talan kirîn. Barêd wan hemû çox û qûmaş û atles û [[canefîs]] û '''qirmiz''' bûyî|nivîskar=Mele Mehmûdê Bazîdî|sernav=Cami’eya Riseleyan û Hikayetan Bi Zimanê Kurmancî|cîh=Stembol|weşanxane={{w|Weşanên Lîs|Lîs}}|sal=2010|çap=1|rûpel=87|isbn=978-605-5683-27-6}}
==== Etîmolojî 3 ====
Deynkirî {{deyn|tr|ku|kımız}} ji {{ji|otk|ku|kımız}}, ji {{ji|trk-pro|ku|*Kumɨŕ}}.
==== Werger ====
{{werger-ser}}
* {{Z|tr}}: {{W+|tr|kımız}}
{{werger-bin}}
k0jrcqwews9q28zeeqmhxxj3olixfox
Şablon:Ç:Demîrhan:Ferhenga Destî
10
51578
6342699
3950373
2026-08-26T14:04:55Z
Wikihez
7344
6342699
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|last=Demîrhan
|first=Umîd
|authorlink=Umîd Demîrhan
|title={{w|Ferhenga Destî: kurdî bi kurdî (Demîrhan, 2007)|Ferhenga Destî, Kurdî - Kurdî}}
|entry={{{1|{{pagename}}}}}
|url=https://archive.org/details/ferhenga-desti-kurdi-kurdi-umid-demirhan
|location=w:Bazîd
|publisher=w:Weşanên Sewadê
|year=2007
|çap=2
|pageparam=r,rûpel
|pageurl=https://archive.org/details/ferhenga-desti-kurdi-kurdi-umid-demirhan/page/{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}/mode/2up
|allowparams=1,r,rûpel
}}<noinclude>{{refcat|ku|tr}}</noinclude>
fqu1l0mnfc6625kjlm6dr0rcwkregx9
6342700
6342699
2026-08-26T14:11:59Z
Wikihez
7344
6342700
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|last=Demîrhan
|first=Umîd
|authorlink=Umîd Demîrhan
|title={{w|Ferhenga Destî: kurdî bi kurdî (Demîrhan, 2007)|Ferhenga Destî, Kurdî - Kurdî}}
|entry={{{1|{{pagename}}}}}
|url=https://archive.org/details/ferhenga-desti-kurdi-kurdi-umid-demirhan
|location=w:Bazîd
|publisher=w:Weşanên Sewadê
|year=2007
|çap=2
|pageparam=r,rûpel
|pageurl=https://archive.org/details/ferhenga-desti-kurdi-kurdi-umid-demirhan/page/{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}/mode/2up
|allowparams=1,r,rûpel
}}<noinclude>{{refcat|ku}}</noinclude>
nfmj9aj853uls386vfx8oxp8b75cxq6
6342701
6342700
2026-08-26T14:12:12Z
Wikihez
7344
Wikihezî/ê navê [[Şablon:Ferhenga Destî]] weke [[Şablon:Ç:Demîrhan:Ferhenga Destî]] guhart
6342700
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|last=Demîrhan
|first=Umîd
|authorlink=Umîd Demîrhan
|title={{w|Ferhenga Destî: kurdî bi kurdî (Demîrhan, 2007)|Ferhenga Destî, Kurdî - Kurdî}}
|entry={{{1|{{pagename}}}}}
|url=https://archive.org/details/ferhenga-desti-kurdi-kurdi-umid-demirhan
|location=w:Bazîd
|publisher=w:Weşanên Sewadê
|year=2007
|çap=2
|pageparam=r,rûpel
|pageurl=https://archive.org/details/ferhenga-desti-kurdi-kurdi-umid-demirhan/page/{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}/mode/2up
|allowparams=1,r,rûpel
}}<noinclude>{{refcat|ku}}</noinclude>
nfmj9aj853uls386vfx8oxp8b75cxq6
Şablon:Ç:ira:EDIV
10
53583
6342714
6329516
2026-08-26T16:55:38Z
Wikihez
7344
6342714
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|en
|last=en:Cheung
|first=en:Johnny
|entry={{{head|{{{1|}}}}}}
|title=en:Etymological Dictionary of the Iranian Verb<t:Ferhenga Etîmolojiyê ya Fiîlên Îranî>
|entryurl=https://archive.org/details/etymological-dictionary-of-the-iranian-verb/page/{{{page|{{{2|{{{rûpel|{{{r|}}}}}}}}}}}}/mode/1up?view=theater
|year=2007
|location=en:Leiden, Boston
|publisher=en:Brill
|textparam=jêgirtin,jg
|pageparam=2,r,rûpel
|series=en:Leiden Indo-European Etymological Dictionary Series<t:Leiden Seriya Ferhengên Etîmolojiya Hindûewropî>
|seriesvolume=2
|isbn=978-90-04-15496-4
|allowparams=head,1,r,rûpel
}}<noinclude>{{refcat|ine-pro|ira-pro|ku|xbc}}</noinclude>
8uox5lqihszwumr88yz8helcb67gh10
6342715
6342714
2026-08-26T16:56:02Z
Wikihez
7344
6342715
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|en
|last={{zim|en|Cheung}}
|first={{zim|en|Johnny}}
|entry={{{head|{{{1|}}}}}}
|title=en:Etymological Dictionary of the Iranian Verb<t:Ferhenga Etîmolojiyê ya Fiîlên Îranî>
|entryurl=https://archive.org/details/etymological-dictionary-of-the-iranian-verb/page/{{{page|{{{2|{{{rûpel|{{{r|}}}}}}}}}}}}/mode/1up?view=theater
|year=2007
|location=en:Leiden, Boston
|publisher=en:Brill
|textparam=jêgirtin,jg
|pageparam=2,r,rûpel
|series=en:Leiden Indo-European Etymological Dictionary Series<t:Leiden Seriya Ferhengên Etîmolojiya Hindûewropî>
|seriesvolume=2
|isbn=978-90-04-15496-4
|allowparams=head,1,r,rûpel
}}<noinclude>{{refcat|ine-pro|ira-pro|ku|xbc}}</noinclude>
4maoue120o93rpl2mvdm3dodc3k4mjw
Gotûbêja bikarhêner:Şêr
3
118568
6342716
6340797
2026-08-26T17:13:25Z
Wikihez
7344
/* Merheba */ Bersiv
6342716
wikitext
text/x-wiki
== Merheba ==
Merheba Şêro, tu çawa yî? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:19, 22 tebax 2026 (UTC)
:Wey merheba ji te re ji brakê min, welleh rewşa min baş e (lê hinekî bi stres e) :)) Hema tu baş be. Ji ber xwendinê wextê min hinekî kêm bûye (ev yek teqrîben wê heta 2028an wisa be; wê gavê hêvî dikim ku xwendina uniyê xelas bibe).
:Lê ez hewl didim van deran jî ji bîr nekim. Gava ez hatim tu ne li vir bûyî, û gava tu hatî ez ji vir kêm bûm :D. Lê ez ê hewl bidim zêdetir li vir bim. Silav --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:25, 22 tebax 2026 (UTC)
::Tu bi xêr û selamet hatî :) --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:35, 22 tebax 2026 (UTC)
:::Wey tu di nava silametiyê de bî :) --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:36, 22 tebax 2026 (UTC)
:::PS- Divê ez peyamên vê derê arşîv bikim. Ev pel zêde dirêj bûye. :( --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:37, 22 tebax 2026 (UTC)
::::Erê butona bersiv bide jî naxebite, arşîv bikî baştir be :) --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:39, 22 tebax 2026 (UTC)
:::::Ew tu yî kelîmeyên soranî çêdike? Bila haya te hebe, tu hesabê xwe têneketiyî... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:13, 26 tebax 2026 (UTC)
qhdv2i1ade9gqf804556ioi6y2jj7n6
6342729
6342716
2026-08-26T17:59:45Z
Şêr
1103
/* Merheba */ Bersiv
6342729
wikitext
text/x-wiki
== Merheba ==
Merheba Şêro, tu çawa yî? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:19, 22 tebax 2026 (UTC)
:Wey merheba ji te re ji brakê min, welleh rewşa min baş e (lê hinekî bi stres e) :)) Hema tu baş be. Ji ber xwendinê wextê min hinekî kêm bûye (ev yek teqrîben wê heta 2028an wisa be; wê gavê hêvî dikim ku xwendina uniyê xelas bibe).
:Lê ez hewl didim van deran jî ji bîr nekim. Gava ez hatim tu ne li vir bûyî, û gava tu hatî ez ji vir kêm bûm :D. Lê ez ê hewl bidim zêdetir li vir bim. Silav --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:25, 22 tebax 2026 (UTC)
::Tu bi xêr û selamet hatî :) --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:35, 22 tebax 2026 (UTC)
:::Wey tu di nava silametiyê de bî :) --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:36, 22 tebax 2026 (UTC)
:::PS- Divê ez peyamên vê derê arşîv bikim. Ev pel zêde dirêj bûye. :( --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:37, 22 tebax 2026 (UTC)
::::Erê butona bersiv bide jî naxebite, arşîv bikî baştir be :) --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:39, 22 tebax 2026 (UTC)
:::::Ew tu yî kelîmeyên soranî çêdike? Bila haya te hebe, tu hesabê xwe têneketiyî... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:13, 26 tebax 2026 (UTC)
::::::Erê ez im, nizanim çima ji hesab derketime. Spas ji bo agahdarkirinê --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 17:59, 26 tebax 2026 (UTC)
g6nfylj6njgkf67nftyedyrd7uh6q4i
6342730
6342729
2026-08-26T18:02:21Z
Şêr
1103
/* Merheba */ Bersiv
6342730
wikitext
text/x-wiki
== Merheba ==
Merheba Şêro, tu çawa yî? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:19, 22 tebax 2026 (UTC)
:Wey merheba ji te re ji brakê min, welleh rewşa min baş e (lê hinekî bi stres e) :)) Hema tu baş be. Ji ber xwendinê wextê min hinekî kêm bûye (ev yek teqrîben wê heta 2028an wisa be; wê gavê hêvî dikim ku xwendina uniyê xelas bibe).
:Lê ez hewl didim van deran jî ji bîr nekim. Gava ez hatim tu ne li vir bûyî, û gava tu hatî ez ji vir kêm bûm :D. Lê ez ê hewl bidim zêdetir li vir bim. Silav --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:25, 22 tebax 2026 (UTC)
::Tu bi xêr û selamet hatî :) --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:35, 22 tebax 2026 (UTC)
:::Wey tu di nava silametiyê de bî :) --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:36, 22 tebax 2026 (UTC)
:::PS- Divê ez peyamên vê derê arşîv bikim. Ev pel zêde dirêj bûye. :( --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:37, 22 tebax 2026 (UTC)
::::Erê butona bersiv bide jî naxebite, arşîv bikî baştir be :) --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:39, 22 tebax 2026 (UTC)
:::::Ew tu yî kelîmeyên soranî çêdike? Bila haya te hebe, tu hesabê xwe têneketiyî... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:13, 26 tebax 2026 (UTC)
::::::Erê ez im, nizanim çima ji hesab derketime. Spas ji bo agahdarkirinê --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 17:59, 26 tebax 2026 (UTC)
:::::::Gelek spas ji bo veşartinê. :) --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:02, 26 tebax 2026 (UTC)
1dup4tukdgqtg0czn3ogbkgijnvebuj
6342731
6342730
2026-08-26T18:04:05Z
Wikihez
7344
/* Merheba */ Bersiv
6342731
wikitext
text/x-wiki
== Merheba ==
Merheba Şêro, tu çawa yî? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:19, 22 tebax 2026 (UTC)
:Wey merheba ji te re ji brakê min, welleh rewşa min baş e (lê hinekî bi stres e) :)) Hema tu baş be. Ji ber xwendinê wextê min hinekî kêm bûye (ev yek teqrîben wê heta 2028an wisa be; wê gavê hêvî dikim ku xwendina uniyê xelas bibe).
:Lê ez hewl didim van deran jî ji bîr nekim. Gava ez hatim tu ne li vir bûyî, û gava tu hatî ez ji vir kêm bûm :D. Lê ez ê hewl bidim zêdetir li vir bim. Silav --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:25, 22 tebax 2026 (UTC)
::Tu bi xêr û selamet hatî :) --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:35, 22 tebax 2026 (UTC)
:::Wey tu di nava silametiyê de bî :) --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:36, 22 tebax 2026 (UTC)
:::PS- Divê ez peyamên vê derê arşîv bikim. Ev pel zêde dirêj bûye. :( --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:37, 22 tebax 2026 (UTC)
::::Erê butona bersiv bide jî naxebite, arşîv bikî baştir be :) --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:39, 22 tebax 2026 (UTC)
:::::Ew tu yî kelîmeyên soranî çêdike? Bila haya te hebe, tu hesabê xwe têneketiyî... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:13, 26 tebax 2026 (UTC)
::::::Erê ez im, nizanim çima ji hesab derketime. Spas ji bo agahdarkirinê --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 17:59, 26 tebax 2026 (UTC)
:::::::Gelek spas ji bo veşartinê. :) --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:02, 26 tebax 2026 (UTC)
::::::::Spastir :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:04, 26 tebax 2026 (UTC)
nfx030llzqswv6pmzkr9d6zfioldhik
6342756
6342731
2026-08-26T19:45:06Z
Şêr
1103
hinekî rengîn kir :)))
6342756
wikitext
text/x-wiki
<div style="background-color: #ffffff; border: 3px solid #FE8000; border-top: 10px solid #ED1C24; border-bottom: 10px solid #278E43; border-radius: 12px; padding: 20px; text-align: center; margin-bottom: 20px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);">
[[Wêne:Flag of Kurdistan.svg|180px|center]]
<h1 style="color: #ED1C24; font-size: 24px; margin-top: 10px; border: none;">Tu bi xêr hatî rûpela min a gotûbêjê!</h1>
<p style="font-size: 16px; color: #278E43; font-weight: bold;">Ev rûpela gotûbêjê ya bikarhêner Şêr e.</p>
</div>
== Merheba ==
Merheba Şêro, tu çawa yî? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:19, 22 tebax 2026 (UTC)
:Wey merheba ji te re ji brakê min, welleh rewşa min baş e (lê hinekî bi stres e) :)) Hema tu baş be. Ji ber xwendinê wextê min hinekî kêm bûye (ev yek teqrîben wê heta 2028an wisa be; wê gavê hêvî dikim ku xwendina uniyê xelas bibe).
:Lê ez hewl didim van deran jî ji bîr nekim. Gava ez hatim tu ne li vir bûyî, û gava tu hatî ez ji vir kêm bûm :D. Lê ez ê hewl bidim zêdetir li vir bim. Silav --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:25, 22 tebax 2026 (UTC)
::Tu bi xêr û selamet hatî :) --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:35, 22 tebax 2026 (UTC)
:::Wey tu di nava silametiyê de bî :) --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:36, 22 tebax 2026 (UTC)
:::PS- Divê ez peyamên vê derê arşîv bikim. Ev pel zêde dirêj bûye. :( --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:37, 22 tebax 2026 (UTC)
::::Erê butona bersiv bide jî naxebite, arşîv bikî baştir be :) --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:39, 22 tebax 2026 (UTC)
:::::Ew tu yî kelîmeyên soranî çêdike? Bila haya te hebe, tu hesabê xwe têneketiyî... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:13, 26 tebax 2026 (UTC)
::::::Erê ez im, nizanim çima ji hesab derketime. Spas ji bo agahdarkirinê --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 17:59, 26 tebax 2026 (UTC)
:::::::Gelek spas ji bo veşartinê. :) --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr#top|gotûbêj]]) 18:02, 26 tebax 2026 (UTC)
::::::::Spastir :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:04, 26 tebax 2026 (UTC)
lgyglry3dx5nhh6klqleqdiqt82ll5v
Bikarhêner:Şêr
2
118572
6342751
6074016
2026-08-26T19:41:21Z
Şêr
1103
6342751
wikitext
text/x-wiki
:'"Li pêşiya min meçe... dibe ku ez li dû te neyêm
::Li pişta min meçe... dibe ku ez rêberiyê nekim
:::Li kêleka min bimeşe... tenê bibe hevalê min"''
::::-albert camus
{|style="float:right"
|{{Bikarhêner kurd}}
|-
|{{Bikarhêner ku}}
|-
|{{Bikarhêner ckb-1}}
|-
|{{Bikarhêner de}}
|-
|{{Bikarhêner tr}}
|-
|{{Bikarhêner en-4}}
|-
|{{Bikarhêner fr-1}}
|-
|{{Bikarhêner la-2}}
|}
n26rlpw9b6iahqgjd6g0cjujjc9l5ou
6342752
6342751
2026-08-26T19:41:50Z
Şêr
1103
- şablon tune ne
6342752
wikitext
text/x-wiki
:'"Li pêşiya min meçe... dibe ku ez li dû te neyêm
::Li pişta min meçe... dibe ku ez rêberiyê nekim
:::Li kêleka min bimeşe... tenê bibe hevalê min"''
::::-albert camus
{|style="float:right"
|{{Bikarhêner kurd}}
|-
|{{Bikarhêner ku}}
|-
|{{Bikarhêner de}}
|-
|{{Bikarhêner tr}}
|-
|{{Bikarhêner en-4}}
|-
|{{Bikarhêner fr-1}}
|}
jgkpcxw3e07o6q8mh1lbhj5tsf8o356
6342758
6342752
2026-08-26T19:50:36Z
Şêr
1103
6342758
wikitext
text/x-wiki
:'"Li pêşiya min meçe... dibe ku ez li dû te neyêm
::Li pişta min meçe... dibe ku ez rêberiyê nekim
:::Li kêleka min bimeşe... tenê bibe hevalê min"''
::::-albert camus
{|style="float:right"
|{{Bikarhêner kurd}}
|-
|{{Bikarhêner rêveber}}
|-
|{{Bikarhêner ku}}
|-
|{{Bikarhêner de}}
|-
|{{Bikarhêner tr}}
|-
|{{Bikarhêner en-4}}
|-
|{{Bikarhêner fr-1}}
|}
rft9g5i845gx8fu81pzivgqbkt5t95a
MediaWiki:Deletereason-dropdown
8
118584
6342694
6277176
2026-08-26T13:27:38Z
Wikihez
7344
6342694
wikitext
text/x-wiki
*Sedemên jêbirinê
** bêçavkanî
** Xeletiya botê
** vala
** xelet
** nayê bikaranîn
** kategoriya vala
** vandalîzm
** ne ferhengî ye
** bê naverok / zav kêm
** [[:Kategorî:Şablon:binêre beralî dike rûpeleke vala|Şablon:binêre beralî dike rûpeleke vala]]
*Sedemên din:
** ji ber heqên telîfê
8fwuljtfbqbwcsnp6poowv3nxo61fo6
nüfus bilimsel
0
156962
6342870
4633813
2026-08-27T08:58:09Z
Wikihez
7344
/* Rengdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342870
wikitext
text/x-wiki
== {{ziman|tr}} ==
=== Rengdêr ===
{{rengdêr|tr}}
# [[demografîk]]
l5uyyo64kq37ahw0c82s8mbau0ug7cp
firokevanî
0
263424
6342850
6306737
2026-08-27T07:15:50Z
Wikihez
7344
[[Bikarhêner:Wikihez/templateScript2.js|TS]]: sererastkirin
6342850
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}, {{r-ya req}}
# [[kar|karê]] [[ajotin|ajotina]] [[firoke|firokeyan]]<ref>{{Ferhenga Kamêran}}</ref>
#: {{hevmane|ku|pîlotî}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Etîmolojî ====
Ji {{paş|ku|firokevan|-î}}
==== Werger ====
{{werger-ser}}
* {{Z|ar}}: {{W|ar|قيادة الطائرة الطيران}}
{{werger-bin}}
=== Çavkanî ===
{{çavkanî}}
er9v2o9m1zwh4qzllwajrexl5p4v516
6342874
6342850
2026-08-27T09:12:23Z
Balyozbot
7867
Bot: Paqijiyên kozmetîk (Lînk paqij kir.)
6342874
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}, {{r-ya req}}
# [[kar]]ê [[ajotin]]a [[firoke]]yan<ref>{{Ferhenga Kamêran}}</ref>
#: {{hevmane|ku|pîlotî}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Etîmolojî ====
Ji {{paş|ku|firokevan|-î}}
==== Werger ====
{{werger-ser}}
* {{Z|ar}}: {{W|ar|قيادة الطائرة الطيران}}
{{werger-bin}}
=== Çavkanî ===
{{çavkanî}}
7byc06aupmjj6s2utpfrjmoj1gjhour
فڕۆکەوان
0
269020
6342848
5872353
2026-08-27T07:13:34Z
Wikihez
7344
6342848
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Bilêvkirin ===
:firrokewan
=== Mane ===
{{bêcure|ckb}}
# [[firokevan]], [[pîlot]], kesa/ê firokeyan difirîne
10t8kprcy9xoqh4d3jjli2ytwknfii9
تاریخ
0
294836
6342854
6114171
2026-08-27T07:36:04Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342854
wikitext
text/x-wiki
{{bnr-h|تاريخ|تأريخ}}
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb}}
# [[dîrok]], [[mêjû]], [[tarîx]]<ref>{{kitêb|ckb|sal=1990|sernav=Henbane borîne|nivîskar=Hejar|url=https://lex.vejin.net/en/def/henbaneborine/%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE}}</ref> {{şerh|zanista yan serpêhatiyên li ser demên berê yan bûyerên qewimî}}
#: {{hevmane|ckb|دیرۆک|مێژوو}}
=== Çavkanî ===
{{çavkanî}}
== {{ziman|fa}} ==
=== Bilêvkirin ===
: {{ku-tîp|tarîx}}
=== Navdêr ===
{{navdêr|fa|tr=târix}}
# [[dîrok]], [[tarîx]], [[mêjû]]
==== Jê ====
* {{g|fa|تاریخی|tr=târixi}}
* {{g|fa|تاریخچه|tr=târixče}}
==== Têkildar ====
* {{g|fa|درس|tr=ders}}
==== Etîmolojî ====
Deyn ji {{deyn|ar|fa|تَارِيخ}}.
==== Dûnde ====
* {{dû|as|তাৰিখ|deyn=1}}
* {{dû|bn|তারিখ|deyn=1}}
* {{dû|gu|તારીખ|deyn=1}}
* {{dû|inc-hnd|-|deyn=1}}
*: {{dû|hi|तारीख़}}
*: {{dardû|ur|تارِیخ}}
* {{dû|ky|тарых|deyn=1}}
* {{dû|mr|तारीख|deyn=1}}
* {{dû|nog|тарых|deyn=1}}
* {{dû|alt|тарых|deyn=1}}
* {{dû|pa|-|deyn=1}}
*: {{dû|pa|sclb=1|ਤਾਰੀਖ਼}}
*: {{dû|pa|sclb=1|تارِیخ}}
* {{dû|te|తారీఖు|deyn=1}}
mhmp9jvakzeztdtpqhgrwmkap6o8cxk
Flugzeugführer
0
309756
6342849
6292117
2026-08-27T07:13:41Z
Wikihez
7344
6342849
wikitext
text/x-wiki
== {{ziman|de}} ==
=== Navdêr ===
{{navdêr|de}}
# [[pîlot]]
hm9rsmaury60fc6gmf9vw0d1bqrt8w1
pîlotî
0
333474
6342851
6157288
2026-08-27T07:16:38Z
Wikihez
7344
[[Bikarhêner:Wikihez/templateScript2.js|TS]]: sererastkirin
6342851
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# Rewşa [[pîlot]]bûnê.
#: {{hevmane|ku|firokevanî}}
==== Etîmolojî ====
Ji {{paş|ku|pîlot|-î}}
==== Werger ====
{{werger-ser}}
* {{Z|en}}: {{W+|en|avigation}}
* {{Z|tr}}: {{W+|tr|pilotluk}}, {{W+|tr|tayyarecilik}}
{{werger-bin}}
7rnwb0ilgy7fndb78jubr2aso8xm6k8
bêkarîgerî
0
375622
6342712
6303304
2026-08-26T16:12:11Z
/* Etîmolojî */ne bêkar ;)
6342712
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[bêbandorî]], [[bêhîkarîtî]], [[bêraydatî]], [[bêkelijî]], [[bêkêncî]], [[bêtesîrî]]
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Etîmolojî ====
Ji {{qertaf|ku|bê-|karîgerî}}.
==== Werger ====
{{werger-ser}}
* {{Z|tr}}: {{W+|tr|etkisizlik}}
{{werger-bin}}
03xwrtmksn5ick5rru3q6klalsj9rtr
cîtî
0
376790
6342710
6342660
2026-08-26T14:46:09Z
Balyozbot
7867
Bot: Sererastkirina şablonan û koda zimên
6342710
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[tike]], [[cî]], [[çênî]], [[penêr]]
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|en}}: {{W+|en|masticated|guman=erê}}
* {{Z|tr}}: {{W+|tr|tike}}
{{werger-bin}}
h7y7u1nprkyswddfpnfw3v1te4lzbn2
پێشکەوتن
0
431273
6342732
5864971
2026-08-26T18:07:19Z
Şêr
1103
berfirehtirkirin
6342732
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb}}
# [[pêşketin]], [[geşedan]] (derbasbûn ber bi qonax an asteke bilindtir û baştir a zanist, aborî, çand an civakê)
#: {{mînak|ckb|پێشکەوتنی تەکنەلۆژیا شێوازی ژیانی مرۆڤی بە تەواوی گۆڕیوە.|tr=Pêşkewtinî teknolociya şêwazî jiyanî mirovî be tewawî gorriywe.|werger=Pêşketina teknolojiyê şêwaza jiyana mirovan bi temamî guhartiye.}}
# [[pêşveçûn]], [[serkeftin]] (bidestxistina encameke serkeftî di perwerde, xebat an jiyana kesekî de)
#: {{mînak|ckb|ئەو قوتابییە پێشکەوتنێکی بەرچاوی لە فێربوونی زماندا بەدەستهێنا.|tr=Ew qutabîye pêşkewtinêkî berçawî le fêrbûnî zimanda bedesthêna.|werger=Wî xwendekarî pêşketineke berbiçav di fêrbûna ziman de bi dest xist.}}
==== Formên alternatîv ====
* {{g|ckb|پێشڤەچوون}}
==== Dijmane ====
* {{g|ckb|پاشکەوتن}}
* {{g|ckb|پاشەکشێ}}
* {{g|ckb|دواکەوتوویی}}
==== Hevmane ====
* {{g|ckb|پێشڤەچوون}}
* {{g|ckb|گەشەکردن}}
* {{g|ckb|بەرەوپێشچوون}}
* {{g|ckb|تەرەقی}}
==== Têkildar ====
* {{g|ckb|پێشکەوتوو}}
* {{g|ckb|پێشکەوتنخواز}}
* {{g|ckb|پێشخستن}}
* {{g|ckb|پێشەنگ}}
jh3xahw3qu0gltjtusdlurxbp91888e
6342733
6342732
2026-08-26T18:08:22Z
Şêr
1103
6342733
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb}}
# [[pêşketin]], [[geşedan]] (derbasbûna ber bi qonax an merheleyeke bilindtir û baştir a zanist, aborî, çand an civakê)
#: {{mînak|ckb|پێشکەوتنی تەکنەلۆژیا شێوازی ژیانی مرۆڤی بە تەواوی گۆڕیوە.|tr=Pêşkewtinî teknolociya şêwazî jiyanî mirovî be tewawî gorriywe.|werger=Pêşketina teknolojiyê şêwaza jiyana mirovan bi temamî guhartiye.}}
# [[pêşveçûn]], [[serkeftin]] (bidestxistina encameke serkeftî di perwerde, xebat an jiyana kesekî de)
#: {{mînak|ckb|ئەو قوتابییە پێشکەوتنێکی بەرچاوی لە فێربوونی زماندا بەدەستهێنا.|tr=Ew qutabîye pêşkewtinêkî berçawî le fêrbûnî zimanda bedesthêna.|werger=Wî xwendekarî pêşketineke berbiçav di fêrbûna ziman de bi dest xist.}}
==== Formên alternatîv ====
* {{g|ckb|پێشڤەچوون}}
==== Dijmane ====
* {{g|ckb|پاشکەوتن}}
* {{g|ckb|پاشەکشێ}}
* {{g|ckb|دواکەوتوویی}}
==== Hevmane ====
* {{g|ckb|پێشڤەچوون}}
* {{g|ckb|گەشەکردن}}
* {{g|ckb|بەرەوپێشچوون}}
* {{g|ckb|تەرەقی}}
==== Têkildar ====
* {{g|ckb|پێشکەوتوو}}
* {{g|ckb|پێشکەوتنخواز}}
* {{g|ckb|پێشخستن}}
* {{g|ckb|پێشەنگ}}
86h4zx8hyo67v1nljbxj48smsgbvzxy
6342734
6342733
2026-08-26T18:08:42Z
Şêr
1103
6342734
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb}}
# [[pêşketin]], [[geşedan]] (derbasbûna ber bi qonax an merheleyeke bilindtir û baştir a zanist, aborî, çand an civakê)
#: {{mînak|ckb|پێشکەوتنی تەکنەلۆژیا شێوازی ژیانی مرۆڤی بە تەواوی گۆڕیوە.|tr=Pêşkewtinî teknolociya şêwazî jiyanî mirovî be tewawî gorriywe.|werger=Pêşketina teknolojiyê şêwaza jiyana mirovan bi temamî guhartiye.}}
# [[pêşveçûn]], [[serkeftin]] (bidestxistina encameke serkeftî di perwerde, xebat an jiyana kesekî de)
#: {{mînak|ckb|ئەو قوتابییە پێشکەوتنێکی بەرچاوی لە فێربوونی زماندا بەدەستهێنا.|tr=Ew qutabîye pêşkewtinêkî berçawî le fêrbûnî zimanda bedesthêna.|werger=Wî xwendekarî pêşketineke berbiçav di fêrbûna ziman de bi dest xist.}}
==== Dijmane ====
* {{g|ckb|پاشکەوتن}}
* {{g|ckb|پاشەکشێ}}
* {{g|ckb|دواکەوتوویی}}
==== Hevmane ====
* {{g|ckb|پێشڤەچوون}}
* {{g|ckb|گەشەکردن}}
* {{g|ckb|بەرەوپێشچوون}}
* {{g|ckb|تەرەقی}}
==== Têkildar ====
* {{g|ckb|پێشکەوتوو}}
* {{g|ckb|پێشکەوتنخواز}}
* {{g|ckb|پێشخستن}}
* {{g|ckb|پێشەنگ}}
7k7k19arf0gxe3qpx0a1fqeaxw010pc
6342735
6342734
2026-08-26T18:09:14Z
Şêr
1103
6342735
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb}}
# [[pêşketin]], [[geşedan]] (derbasbûna ber bi qonax an merheleyeke bilindtir û baştir a zanist, aborî, kultûr an civakê)
#: {{mînak|ckb|پێشکەوتنی تەکنەلۆژیا شێوازی ژیانی مرۆڤی بە تەواوی گۆڕیوە.|tr=Pêşkewtinî teknolociya şêwazî jiyanî mirovî be tewawî gorriywe.|werger=Pêşketina teknolojiyê şêwaza jiyana mirovan bi temamî guhartiye.}}
# [[pêşveçûn]], [[serkeftin]] (bidestxistina encameke serkeftî di perwerde, xebat an jiyana kesekî de)
#: {{mînak|ckb|ئەو قوتابییە پێشکەوتنێکی بەرچاوی لە فێربوونی زماندا بەدەستهێنا.|tr=Ew qutabîye pêşkewtinêkî berçawî le fêrbûnî zimanda bedesthêna.|werger=Wî xwendekarî pêşketineke berbiçav di fêrbûna ziman de bi dest xist.}}
==== Dijmane ====
* {{g|ckb|پاشکەوتن}}
* {{g|ckb|پاشەکشێ}}
* {{g|ckb|دواکەوتوویی}}
==== Hevmane ====
* {{g|ckb|پێشڤەچوون}}
* {{g|ckb|گەشەکردن}}
* {{g|ckb|بەرەوپێشچوون}}
* {{g|ckb|تەرەقی}}
==== Têkildar ====
* {{g|ckb|پێشکەوتوو}}
* {{g|ckb|پێشکەوتنخواز}}
* {{g|ckb|پێشخستن}}
* {{g|ckb|پێشەنگ}}
kp2aotu8dgnqpdso5vf3dcq8bghw5gz
6342736
6342735
2026-08-26T18:41:15Z
Balyozbot
7867
[[Special:PermanentLink/6298023|Bot]]: rêzkirina beşan
6342736
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb}}
# [[pêşketin]], [[geşedan]] (derbasbûna ber bi qonax an merheleyeke bilindtir û baştir a zanist, aborî, kultûr an civakê)
#: {{mînak|ckb|پێشکەوتنی تەکنەلۆژیا شێوازی ژیانی مرۆڤی بە تەواوی گۆڕیوە.|tr=Pêşkewtinî teknolociya şêwazî jiyanî mirovî be tewawî gorriywe.|werger=Pêşketina teknolojiyê şêwaza jiyana mirovan bi temamî guhartiye.}}
# [[pêşveçûn]], [[serkeftin]] (bidestxistina encameke serkeftî di perwerde, xebat an jiyana kesekî de)
#: {{mînak|ckb|ئەو قوتابییە پێشکەوتنێکی بەرچاوی لە فێربوونی زماندا بەدەستهێنا.|tr=Ew qutabîye pêşkewtinêkî berçawî le fêrbûnî zimanda bedesthêna.|werger=Wî xwendekarî pêşketineke berbiçav di fêrbûna ziman de bi dest xist.}}
==== Hevmane ====
* {{g|ckb|پێشڤەچوون}}
* {{g|ckb|گەشەکردن}}
* {{g|ckb|بەرەوپێشچوون}}
* {{g|ckb|تەرەقی}}
==== Dijmane ====
* {{g|ckb|پاشکەوتن}}
* {{g|ckb|پاشەکشێ}}
* {{g|ckb|دواکەوتوویی}}
==== Têkildar ====
* {{g|ckb|پێشکەوتوو}}
* {{g|ckb|پێشکەوتنخواز}}
* {{g|ckb|پێشخستن}}
* {{g|ckb|پێشەنگ}}
mwx9nebw2kdjs7dqsdlgfxuzxtvm4ai
însaniyet
0
446726
6342812
6252253
2026-08-26T21:46:51Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342812
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# Civata [[însan]]an, [[hemû]] [[mirov]].
#: {{hevmane|ku|însanetî|mirovatî|beşeriyet|xelk|alem}}
#* {{bêmînak|ku}}
#* {{J:Hawar:2:1998|sernav=Şeytanqûnî -2-|nivîskar=w:Herekol Azîzan|hejmar=56|r=1133|jêgirtin=Ji zindiyan bêtir diman miriyan. An ewê vegeriyana jînê û '''însaniyet''' ji êşa emeliyatê dê xelas biwa an her sê jî di xizmeta '''însaniyetê''' de dê qurban biçiwana.}}
==== Formên alternatîv ====
{{kol3|ku|cure=Herwiha
|insaniyet
}}
==== Etîmolojî ====
Ji {{qertaf|ku|însan|-iyet}}.
==== Werger ====
{{werger-ser|hemû mirov bi hev re}}
* {{Z|af}}: {{W-|af|mensdom}}
* {{Z|xag}}: {{W-|xag|𐕘𐕒𐕡𐕐𐕒𐕡𐔺𐕘𐔰𐕙}}
* {{Z|sq}}: {{W+|sq|njerëzim|n}}
* {{Z|de}}: {{W+|de|Menschheit|m}}, {{W+|de|Menschengeschlecht|nt}}
* {{Z|az}}: {{W+|az|bəşər}}, {{W+|az|bəşəriyyət}}, {{W-|az|insaniyyət}}, {{W-|az|insanlıq}}
* {{Z|ba}}: {{W-|ba|кешелек}}, {{W-|ba|әҙәм заты}}
* {{Z|be}}: {{W-|be|чалаве́цтва|nt}}
* {{Z|bn}}: {{W-|bn|মানবজাতি|tr=manôbjati}}
* {{Z|bg}}: {{W-|bg|чове́чество|nt}}
* {{Z|my}}: {{W-|my|လူသားတို့အမျိုး}}, {{W+|my|လူသား}}
* {{Z|cs}}: {{W+|cs|lidstvo|nt}}
* {{Z|zh}}:
*: {{Z|cmn}}: {{W+|cmn|人類|tr=rénlèi}}, {{W+|cmn|芸芸眾生|tr=yúnyúnzhòngshēng}}
* {{Z|da}}: {{W-|da|menneskehed|g}}
* {{Z|ar}}: {{W-|ar|بَشَرِيَّة|m}}, {{W-|ar|الْجِنْس الْبَشَرِيّ|n}}, {{W-|ar|إِنْس|p}}, {{W-|ar|إِنْسَانِيَّة|m}}
* {{Z|hy}}: {{W+|hy|մարդկություն}}
* {{Z|eo}}: {{W+|eo|homaro}}
* {{Z|et}}: {{W-|et|inimkond}}
* {{Z|fa}}: {{W+|fa|بشر|tr=bašar}}, {{W+|fa|بشریت|tr=bašariyat}}, {{W+|fa|انسانیت|tr=ensâniyat}}
* {{Z|fi}}: {{W+|fi|ihmiskunta}}
* {{Z|fr}}: {{W+|fr|humanité|m}}, {{W+|fr|genre humain}}
* {{Z|gd}}: {{W-|gd|mac an duine|n}}
* {{Z|gl}}: {{W+|gl|humanidade|m}}, {{W-|gl|xénero humano|n}}
* {{Z|got}}: {{W-|got|𐌼𐌰𐌽𐌰𐍃𐌴𐌸𐍃|m}}
* {{Z|ka}}: {{W-|ka|კაცობრიობა}}, {{W-|ka|ადამიანთა მოდგმა}}
* {{Z|hi}}: {{W+|hi|मानवता|m}}, {{W-|hi|आदमज़ाद|n}}, {{W+|hi|मानवजाति|m}}
* {{Z|nl}}: {{W+|nl|mensheid|m}}, {{W+|nl|mensdom|nt}}
* {{Z|he}}: {{W+|he|אֱנוֹשׁוּת|m|tr=enoshút}}
* {{Z|ang}}: {{W-|ang|mancynn|nt}}
* {{Z|en}}: {{W+|en|humanity}}, {{W+|en|mankind}}
* {{Z|ga}}: {{W-|ga|cine daonna|n}}
* {{Z|it}}: {{W+|it|umanità|m}}, {{W-|it|genere umano}}
* {{Z|is}}: {{W+|is|mannkyn|nt}}
* {{Z|ja}}: {{W+|ja|人類|tr=じんるい, jinrui}}, {{W+|ja|人間|tr=にんげん, ningen}}, {{W+|ja|人|tr=ひと, hito}}
* {{Z|ky}}: {{W-|ky|адам баласы}}, {{W+|ky|адамзат}}
* {{Z|ko}}: {{W+|ko|인류}}
* {{Z|la}}: {{W-|la|hūmānitās|m}}
* {{Z|lv}}: {{W+|lv|cilvēce|m}}
* {{Z|lo}}: {{W-|lo|ມະນຸດຊາດ}}
* {{Z|lt}}: {{W-|lt|žmonija|m}}
* {{Z|mk}}: {{W-|mk|човештво|nt}}
* {{Z|ms}}: {{W+|ms|manusia}}, {{W+|ms|insan}}, {{W-|ms|bashar}}, {{W-|ms|umat}}, {{W-|ms|khalayak}}, {{W+|ms|makhluk}}
* {{Z|mi}}: {{W-|mi|hunga tāngata}}
* {{Z|hu}}: {{W+|hu|emberiség}}
* {{Z|mn}}:
*: Kirîlî: {{W-|mn|хүн төрөлхтөн}}
* {{Z|nv}}: {{W-|nv|diné}}
* {{Z|no}}:
*: {{Z|nb}}: {{W-|nb|menneskehet|n|m}}, {{W-|nb|menneskeslekt|n|m}}
*: {{Z|nn}}: {{W-|nn|menneskje|m}}, {{W-|nn|manneætt|m}}
* {{Z|ug}}: {{W-|ug|ئىنسانىيەت}}, {{W-|ug|ئادەمزات}}
* {{Z|uz}}: {{W+|uz|insoniyat}}, {{W+|uz|odamzod}}
* {{Z|ps}}: {{W+|ps|بشريت|n|tr=bašaryát}}, {{W+|ps|انسانيت|n|tr=ensānyát}}
* {{Z|pl}}: {{W+|pl|ludzkość|m}}, {{W-|pl|rodzaj ludzki|n}}, {{W-|pl|gatunek ludzki|n}}
* {{Z|pt}}: {{W+|pt|humanidade|m}}
* {{Z|kk}}: {{W-|kk|адамзат}}
* {{Z|rgn}}: {{W-|rgn|umanitê|m}}
* {{Z|ro}}: {{W+|ro|omenire|m}}, {{W+|ro|umanitate|m}}, {{W+|ro|neamul omenesc|nt}}
* {{Z|ru}}: {{W+|ru|челове́чество|nt}}, {{W-|ru|род людско́й|n}}
* {{Z|sa}}: {{W+|sa|मानुष्यक|n}}
* {{Z|sh}}:
*: Kirîlî: {{W-|sh|човеча̀нство|nt}}, {{W-|sh|човјеча̀нство|nt}}, {{W-|sh|љу̀дство|nt}}
*: Latînî: {{W-|sh|čovečànstvo|nt}}, {{W+|sh|čovječànstvo|nt}}, {{W+|sh|ljùdstvo|nt}}
* {{Z|sk}}: {{W-|sk|ľudstvo|nt}}
* {{Z|sl}}: {{W+|sl|človeštvo|nt}}
* Sorbî:
*: {{Z|hsb}}: {{W-|hsb|čłowječnosć|m}}
* {{Z|es}}: {{W+|es|humanidad|m}}, {{W-|es|género humano|m}}, {{W-|es|raza humana|m}}
* {{Z|sv}}: {{W-|sv|människosläkt|g}}, {{W+|sv|mänsklighet|g}}
* {{Z|tg}}: {{W-|tg|банибашар}}, {{W-|tg|башарият}}, {{W+|tg|инсоният}}
* {{Z|tl}}: {{W-|tl|sangkatauhan}}
* {{Z|th}}: {{W-|th|มนุษยชาติ}}
* {{Z|te}}: {{W+|te|నరులు}}
* {{Z|tt}}: {{W+|tt|кешелек}}
* {{Z|tr}}: {{W+|tr|insanoğlu}}, {{W+|tr|âdemoğlu}}, {{W+|tr|insanlık}}, {{W+|tr|kişioğlu}}
* {{Z|tk}}: {{W+|tk|adamzat}}, {{W-|tk|ynsanyýet}}
* {{Z|ur}}: {{W-|ur|آدمزاد|n|tr=ādamzād}}
* {{Z|uk}}: {{W-|uk|лю́дство|nt}}
* {{Z|vi}}: {{W+|vi|loài người}}, {{W+|vi|nhân loại}}
* {{Z|km}}: {{W-|km|មនុស្សជាតិ}}
* {{Z|yi}}: {{W-|yi|מענטשהייט|m}}
* {{Z|el}}: {{W+|el|ανθρωπότητα|m}}
*: Kevn: {{W-|grc|[[ἀνθρώπινος|ἀνθρώπινον]] [[γένος]]|nt}}
* {{Z|zu}}: {{W+|zu|isintu|c7|c8}}
{{werger-bin}}
:{{werger çavkanî|en|mankind|beş=Ev qismê Wergerê|oldid=75882492}}
p3nurvt696l1po4ccp6ty0x6lco2loy
xincik
0
447609
6342802
6340119
2026-08-26T21:28:29Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342802
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{kîte|ku|xin|cik}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[xanî|xaniyê]] li ser axa kolandî bi daran hatiye çêkirin û ser wê bi kewş hatiye nuxmandin ku demên berê gelek malên gundên deştê ji van malan pêk dihat.Û ji gundên wuha re [[xincika]] dihat gotin.
#* {{jêder-malper|ku|jêgirtin=Dû sê salan carek ez diçim Wêranşar. Kolan kolan digerim. Ne Wêranşar dibînim, ne zoroktîya xwe. Her tişt koç kirîye; ebre, tilhawa, circip, mehla '''xincik''', dîkme...ez dimlnim porpoşmam, dest vala ...|nivîskar=Ramazan Tepeli|sernav=Bîranînên zaroktiyê qet nayên jibîrkirin|url=http://zinarexamo.blogspot.com/2018/09/biraninen-zaroktiye-qet-nayen-jibirkirin.html|malper=zinarexamo.blogspot.com|sal=2018}}
#* {{J:Hawar:1998:2|hj=28|sernav=Jin û Bextewariya Malê|nivîskar=Rewşen Bedirxan|r=716|jêgirtin='''Xincikên''' belengazan hene ko seadet û bextiyarî, ji qesra dewlemenda çêtir û bêtir, tê de qerar digirin û bi rehetî cih dibin.}}
# [[kincir]], [[cil]]ên [[kevn]] û [[peritî]]<ref name="kurmancî">{{kovar|nivîskar=Mehmûd Qerejdaxî|sernav=Devoka Qerejdaxê|kovar=Kurmancî|hejmar=28|sal=2001}}</ref>
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Bide ber ====
* [[mehşer]]
==== Werger ====
{{werger-ser|[[xanî|xaniyê]] li ser axa kolandî bi daran hatiye çêkirin|1}}
* {{Z|en}}: {{W-|en|one room hut, near wine press}}
* {{Z|tr}}: {{W-|tr|bağ evi}} <ref>{{Zana Farqînî}}</ref>
{{werger-bin}}
{{werger-ser|[[cil]]ên [[kevn]] û [[peritî]]|2}}
* {{Z|en}}: {{W+|en|rag}}<ref name="kurmancî" />([[old]] [[clothes]])
* {{Z|tr}}: [[yırtık]] [[pırtık]] [[eskimiş]] [[giysi]]<ref>{{mustafa gazî|r=151}}</ref>
{{werger-bin}}
=== Çavkanî ===
{{çavkanî}}
sanai6ds09zu2cp5yq34o7lde02j2zv
6342803
6342802
2026-08-26T21:28:59Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342803
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{kîte|ku|xin|cik}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[xanî|xaniyê]] li ser axa kolandî bi daran hatiye çêkirin û ser wê bi kewş hatiye nuxmandin ku demên berê gelek malên gundên deştê ji van malan pêk dihat.Û ji gundên wuha re [[xincika]] dihat gotin.
#* {{jêder-malper|ku|jêgirtin=Dû sê salan carek ez diçim Wêranşar. Kolan kolan digerim. Ne Wêranşar dibînim, ne zoroktîya xwe. Her tişt koç kirîye; ebre, tilhawa, circip, mehla '''xincik''', dîkme...ez dimlnim porpoşmam, dest vala ...|nivîskar=Ramazan Tepeli|sernav=Bîranînên zaroktiyê qet nayên jibîrkirin|url=http://zinarexamo.blogspot.com/2018/09/biraninen-zaroktiye-qet-nayen-jibirkirin.html|malper=zinarexamo.blogspot.com|sal=2018}}
#* {{J:Hawar:1998:2|hj=28|sernav=Jin û Bextewariya Malê|nivîskar=w:Rewşen Bedirxan|r=716|jêgirtin='''Xincikên''' belengazan hene ko seadet û bextiyarî, ji qesra dewlemenda çêtir û bêtir, tê de qerar digirin û bi rehetî cih dibin.}}
# [[kincir]], [[cil]]ên [[kevn]] û [[peritî]]<ref name="kurmancî">{{kovar|nivîskar=Mehmûd Qerejdaxî|sernav=Devoka Qerejdaxê|kovar=Kurmancî|hejmar=28|sal=2001}}</ref>
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Bide ber ====
* [[mehşer]]
==== Werger ====
{{werger-ser|[[xanî|xaniyê]] li ser axa kolandî bi daran hatiye çêkirin|1}}
* {{Z|en}}: {{W-|en|one room hut, near wine press}}
* {{Z|tr}}: {{W-|tr|bağ evi}} <ref>{{Zana Farqînî}}</ref>
{{werger-bin}}
{{werger-ser|[[cil]]ên [[kevn]] û [[peritî]]|2}}
* {{Z|en}}: {{W+|en|rag}}<ref name="kurmancî" />([[old]] [[clothes]])
* {{Z|tr}}: [[yırtık]] [[pırtık]] [[eskimiş]] [[giysi]]<ref>{{mustafa gazî|r=151}}</ref>
{{werger-bin}}
=== Çavkanî ===
{{çavkanî}}
0kkzsxi6y67bbe1yd7xkr67hm1505pe
6342804
6342803
2026-08-26T21:30:07Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342804
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{kîte|ku|xin|cik}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[xanî|xaniyê]] li ser axa kolandî bi daran hatiye çêkirin û ser wê bi kewş hatiye nuxmandin ku demên berê gelek malên gundên deştê ji van malan pêk dihat.Û ji gundên wuha re [[xincika]] dihat gotin.
#* {{jêder-malper|ku|jêgirtin=Dû sê salan carek ez diçim Wêranşar. Kolan kolan digerim. Ne Wêranşar dibînim, ne zoroktîya xwe. Her tişt koç kirîye; ebre, tilhawa, circip, mehla '''xincik''', dîkme...ez dimlnim porpoşmam, dest vala ...|nivîskar=Ramazan Tepeli|sernav=Bîranînên zaroktiyê qet nayên jibîrkirin|url=http://zinarexamo.blogspot.com/2018/09/biraninen-zaroktiye-qet-nayen-jibirkirin.html|malper=zinarexamo.blogspot.com|sal=2018}}
#* {{J:Hawar:1998:2|hj=28|sernav=Jin û Bextewariya Malê|nivîskar=w:Rewşen Bedirxan|r=716|jêgirtin='''Xincikên''' belengazan hene ko seadet û bextiyarî, ji qesra dewlemenda çêtir û bêtir, tê de qerar digirin û bi rehetî cih dibin.}}
# [[kincir]], [[cil]]ên [[kevn]] û [[peritî]]<ref name="kurmancî">{{kovara kurmancî|nivîskar=Mehmûd Qerejdaxî|sernav=Devoka Qerejdaxê|hejmar=28}}</ref>
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Bide ber ====
* [[mehşer]]
==== Werger ====
{{werger-ser|[[xanî|xaniyê]] li ser axa kolandî bi daran hatiye çêkirin|1}}
* {{Z|en}}: {{W-|en|one room hut, near wine press}}
* {{Z|tr}}: {{W-|tr|bağ evi}} <ref>{{Zana Farqînî}}</ref>
{{werger-bin}}
{{werger-ser|[[cil]]ên [[kevn]] û [[peritî]]|2}}
* {{Z|en}}: {{W+|en|rag}}<ref name="kurmancî" />([[old]] [[clothes]])
* {{Z|tr}}: [[yırtık]] [[pırtık]] [[eskimiş]] [[giysi]]<ref>{{mustafa gazî|r=151}}</ref>
{{werger-bin}}
=== Çavkanî ===
{{çavkanî}}
h6ah0vjkdid3x8huxzw86feji5qlvyo
palmisandin
0
456611
6342805
6340153
2026-08-26T21:32:48Z
Wikihez
7344
6342805
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Lêker ===
{{lêker|ku|c=gh}}
# [[pelan]], [[sehan]], [[palmisan]]
#* {{J:Hawar:1998:2|r=1054|sernav=Nêçîra Hirçan|hj=48|jêgirtin=Vê carê wek bijîşkê ko dixwaze nexweşiya nexweşê xwe fêr bibe dûr û dirêj cendekê min '''palmisand''' û guhê xwe da ser difna min}}
# [[sihêtî]]
# [[sehî]], [[kontrol]]
# [[venêrîn]] (ku li distan û cihê wisa tê kirin)
# [[ezmûn]]
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|tr}}: {{W+|tr|dokunma|guman=erê}}, {{W+|tr|yoklamak|guman=erê}}
{{werger-bin}}
2gi2vahsk8s5zr4bjlznjfzbodzavde
ڕێز
0
578683
6342705
5792328
2026-08-26T14:13:48Z
soranî
6342705
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=-|sc=Arab}}
# {{ku-Latn|rrêz}}
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb}}
# [[rêz]], [[hurmet]], [[qedir]] (reftar û hesta qedirgirtin û bilind nirxandina kesekî an tiştekî)
#: {{mînak|ckb|پێویستە هەمیشە ڕێز لە بۆچوونی بەرامبەر بگرین.|tr=Pêwîste hemîşe rêz le boçûnî beramber bigirîn.|werger=Pêdivî ye ku em timî rêzê li nêrîna kesê hember bigirin.}}
#: {{mînak|ckb|ڕێزگرتن لە گەورەکان بەشێکی گرنگە لە کولتووری ئێمە.|tr=Rêzgirtin le gewrekan beşêkî giringe le kultûrî ême.|werger=Rêzgirtina li mezinan beşeke girîng a kultûra me ye.}}
==== Dijmane ====
* {{g|ckb|بێڕێزی}}
* {{g|ckb|سووکایەتی}}
==== Hevmane ====
* {{g|ckb|حورمەت}}
* {{g|ckb|قەدر}}
* {{g|ckb|شکۆ}}
==== Têkildar ====
* {{g|ckb|بەڕێز}}
* {{g|ckb|بێڕێز}}
* {{g|ckb|ڕێزدار}}
6crzorq4av08v1uiwyw5dtnej4eeyg8
6342709
6342705
2026-08-26T14:41:12Z
Balyozbot
7867
[[Special:PermanentLink/6298023|Bot]]: rêzkirina beşan
6342709
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=-|sc=Arab}}
# {{ku-Latn|rrêz}}
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb}}
# [[rêz]], [[hurmet]], [[qedir]] (reftar û hesta qedirgirtin û bilind nirxandina kesekî an tiştekî)
#: {{mînak|ckb|پێویستە هەمیشە ڕێز لە بۆچوونی بەرامبەر بگرین.|tr=Pêwîste hemîşe rêz le boçûnî beramber bigirîn.|werger=Pêdivî ye ku em timî rêzê li nêrîna kesê hember bigirin.}}
#: {{mînak|ckb|ڕێزگرتن لە گەورەکان بەشێکی گرنگە لە کولتووری ئێمە.|tr=Rêzgirtin le gewrekan beşêkî giringe le kultûrî ême.|werger=Rêzgirtina li mezinan beşeke girîng a kultûra me ye.}}
==== Hevmane ====
* {{g|ckb|حورمەت}}
* {{g|ckb|قەدر}}
* {{g|ckb|شکۆ}}
==== Dijmane ====
* {{g|ckb|بێڕێزی}}
* {{g|ckb|سووکایەتی}}
==== Têkildar ====
* {{g|ckb|بەڕێز}}
* {{g|ckb|بێڕێز}}
* {{g|ckb|ڕێزدار}}
oqox5wq0sog9wii9pr4g8qhxd4c7sl7
دیاری
0
580356
6342706
5655070
2026-08-26T14:15:56Z
6342706
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Navdêr ===
{{navdêr|ku|z=-|sc=Arab}}
# {{ku-Latn|diyarî}}
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb}}
# [[diyarî]], [[xelat]], [[pêşkêşî]] (tiştê ku ji bo hezkirin, pîrozkirin an rêzgirtinê bê berdêl ji kesekî re tê dayîn)
#: {{mînak|ckb|ئەو دیارییەکی زۆر جوانی بۆ ڕۆژی لەدایکبوونم هێنا.|tr=Ew diyaryekî zor ciwanî bo rojî ledaykbûnim hêna.|werger=Wî ji bo rojbûna min diyariyeke pir xweşik anî.}}
#: {{mînak|ckb|باشترین دیاری بۆ من هاوڕێیەتیی تۆیە.|tr=Baştrîn dyarî bo min hawrêyetîy toye.|werger=Diyariya herî baş ji bo min hevaltiya te ye.}}
==== Hevmane ====
* {{g|ckb|پێشکەش}}
* {{g|ckb|بەخشیش}}
* {{g|ckb|پێشکێش}}
==== Têkildar ====
* {{g|ckb|خەڵات}}
* {{g|ckb|جەژن}}
* {{g|ckb|پیرۆزبایی}}
lv3z74dys0u5y5l1l5ycupb2n9vvpiu
Şablon:J:Hawar:2:1998
10
836588
6342759
6334721
2026-08-26T20:18:27Z
Wikihez
7344
6342759
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi
|cild2=2
|sernav2=Hawar Hejmar 24-57
|sal={{#if:{{{sal|}}}|{{{sal|}}}|{{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25 = 1934
| 26 = 1935
| 27|28|29|30|31|32|33|34|35|36|37 = 1941
| 38|39|40|41|42|43|44|45|46|47|48|49|50|51 = 1942
| 52|53|54|55|56|57 = 1943
| #default = 1934-1943
}}}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal,sal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/page/n{{#expr:{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[0-9]+|}}-609}}/mode/2up
}}</includeonly><noinclude>
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar2}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 2an"
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar1}}
{{jgcat|ku}}
}}
</noinclude>
g8drowexv2k9xhz6ggf9ca5spvxd8yv
6342762
6342759
2026-08-26T20:23:13Z
Wikihez
7344
6342762
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi
|cild2=2
|sernav2=Hawar Hejmar 24-57
|sal={{#if:{{{sal|}}}|{{{sal|}}}|{{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25 = 1934
| 26 = 1935
| 27|28|29|30|31|32|33|34|35|36|37 = 1941
| 38|39|40|41|42|43|44|45|46|47|48|49|50|51 = 1942
| 52|53|54|55|56|57 = 1943
| #default = 1934-1943
}}}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal,sal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/page/n{{#expr:{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[0-9]+|}}-609}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:2|sernav=Sê Tarîxên Hawarê|nivîskar={{w|Celadet Alî Bedirxan|Xwediyê Hawarê}}|hejmar=27|r=689|jêgirtin='''Tarîxa''' sisiyan panzdehê Nîsana sala hezar û neh sed û çel û yekê ye, yanî îro ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar2}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 2an"
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar1}}
{{jgcat|ku}}
}}
</noinclude>
kgx79ogt0f8ovfe3c6n9m0thoy64map
6342763
6342762
2026-08-26T20:23:54Z
Wikihez
7344
6342763
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi
|cild2=2
|sernav2=Hawar Hejmar 24-57
|sal={{#if:{{{sal|}}}|{{{sal|}}}|{{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25 = 1934
| 26 = 1935
| 27|28|29|30|31|32|33|34|35|36|37 = 1941
| 38|39|40|41|42|43|44|45|46|47|48|49|50|51 = 1942
| 52|53|54|55|56|57 = 1943
| #default = 1934-1943
}}}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal,sal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/page/n{{#expr:{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[0-9]+|}}-609}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:2|sernav=Sê Tarîxên Hawarê|nivîskar={{w|Celadet Alî Bedirxan|Xwediyê Hawarê}}|hejmar=27|r=689|jêgirtin='''Tarîxa''' sisiyan panzdehê Nîsana sala hezar û neh sed û çel û yekê ye, yanî îro ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar2}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 2an. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar1}}
{{jgcat|ku}}
}}
</noinclude>
f9lbb9j3xhppg2aew7x5cgmmvaxp0y5
6342768
6342763
2026-08-26T20:28:16Z
Wikihez
7344
Wikihezî/ê navê [[Şablon:J:Hawar:1998:2]] weke [[Şablon:J:Hawar:2:1998]] guhart
6342763
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi
|cild2=2
|sernav2=Hawar Hejmar 24-57
|sal={{#if:{{{sal|}}}|{{{sal|}}}|{{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25 = 1934
| 26 = 1935
| 27|28|29|30|31|32|33|34|35|36|37 = 1941
| 38|39|40|41|42|43|44|45|46|47|48|49|50|51 = 1942
| 52|53|54|55|56|57 = 1943
| #default = 1934-1943
}}}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal,sal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/page/n{{#expr:{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[0-9]+|}}-609}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:2|sernav=Sê Tarîxên Hawarê|nivîskar={{w|Celadet Alî Bedirxan|Xwediyê Hawarê}}|hejmar=27|r=689|jêgirtin='''Tarîxa''' sisiyan panzdehê Nîsana sala hezar û neh sed û çel û yekê ye, yanî îro ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar2}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 2an. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar1}}
{{jgcat|ku}}
}}
</noinclude>
f9lbb9j3xhppg2aew7x5cgmmvaxp0y5
6342797
6342768
2026-08-26T21:18:15Z
Wikihez
7344
6342797
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane={{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25|26 = Çapxana Tereqî
| 27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52 = Çapxana Sebatê
| 53|54|55|56|57 = Çapxana Tereqiyê
| #default =
}}
|cih=Şam
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi
|cild2=2
|sernav2=Hawar Hejmar 24-57
|sal={{#if:{{{sal|}}}|{{{sal|}}}|{{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25 = 1934
| 26 = 1935
| 27|28|29|30|31|32|33|34|35|36|37 = 1941
| 38|39|40|41|42|43|44|45|46|47|48|49|50|51 = 1942
| 52|53|54|55|56|57 = 1943
| #default = 1934-1943
}}}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal,sal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/page/n{{#expr:{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[0-9]+|}}-609}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:2|sernav=Sê Tarîxên Hawarê|nivîskar={{w|Celadet Alî Bedirxan|Xwediyê Hawarê}}|hejmar=27|r=689|jêgirtin='''Tarîxa''' sisiyan panzdehê Nîsana sala hezar û neh sed û çel û yekê ye, yanî îro ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar2}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 2an. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar1}}
{{jgcat|ku}}
}}
</noinclude>
11eeh5ml9ac6jvw2oqavln0x4pdcqc7
6342799
6342797
2026-08-26T21:21:07Z
Wikihez
7344
6342799
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane={{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25|26 = Çapxana Tereqî
| 27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52 = Çapxana Sebatê
| 53|54|55|56|57 = Çapxana Tereqiyê
| #default =
}}
|cih=w:Şam
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi
|cild2=2
|sernav2=Hawar Hejmar 24-57
|sal={{#if:{{{sal|}}}|{{{sal|}}}|{{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25 = 1934
| 26 = 1935
| 27|28|29|30|31|32|33|34|35|36|37 = 1941
| 38|39|40|41|42|43|44|45|46|47|48|49|50|51 = 1942
| 52|53|54|55|56|57 = 1943
| #default = 1934-1943
}}}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal,sal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/page/n{{#expr:{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[0-9]+|}}-609}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:2|sernav=Sê Tarîxên Hawarê|nivîskar={{w|Celadet Alî Bedirxan|Xwediyê Hawarê}}|hejmar=27|r=689|jêgirtin='''Tarîxa''' sisiyan panzdehê Nîsana sala hezar û neh sed û çel û yekê ye, yanî îro ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar2}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 2an. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar1}}
{{jgcat|ku}}
}}
</noinclude>
3zqcmg28tdr00i6pkjex6uvgg2xhrec
6342801
6342799
2026-08-26T21:27:21Z
Wikihez
7344
6342801
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane={{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25|26 = Çapxana Tereqî
| 27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52 = Çapxana Sebatê
| 53|54|55|56|57 = Çapxana Tereqiyê
| #default =
}}
|cih=w:Şam
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/
|kovar=w:Hawar
|versiyona-nû=ji nû ve hate weşandin bi
|cild2=2
|sernav2=Hawar Hejmar 24-57
|sal={{#if:{{{sal|}}}|{{{sal|}}}|{{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25 = 1934
| 26 = 1935
| 27|28|29|30|31|32|33|34|35|36|37 = 1941
| 38|39|40|41|42|43|44|45|46|47|48|49|50|51 = 1942
| 52|53|54|55|56|57 = 1943
| #default = 1934-1943
}}}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal,sal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/page/n{{#expr:{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[0-9]+|}}-609}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:2|sernav=Sê Tarîxên Hawarê|nivîskar={{w|Celadet Alî Bedirxan|Xwediyê Hawarê}}|hejmar=27|r=689|jêgirtin='''Tarîxa''' sisiyan panzdehê Nîsana sala hezar û neh sed û çel û yekê ye, yanî îro ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar2}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 2an. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar1}}
{{jgcat|ku}}
}}
</noinclude>
t43sywokl57tph7ohoc65efx4emfoc0
6342834
6342801
2026-08-27T07:00:13Z
Wikihez
7344
6342834
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|nivîskar ={{#if:{{{nivîskar|}}}|{{Hawar/nivîskar-switch|{{{nivîskar|}}}}}}}
|weşanxane={{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25|26 = Çapxana Tereqî
| 27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52 = Çapxana Sebatê
| 53|54|55|56|57 = Çapxana Tereqiyê
| #default =
}}
|cih=w:Şam
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/
|kovar=w:Hawar
|versiyona-nû=ji nû ve hate weşandin bi
|cild2=2
|sernav2=Hawar Hejmar 24-57
|sal={{#if:{{{sal|}}}|{{{sal|}}}|{{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25 = 1934
| 26 = 1935
| 27|28|29|30|31|32|33|34|35|36|37 = 1941
| 38|39|40|41|42|43|44|45|46|47|48|49|50|51 = 1942
| 52|53|54|55|56|57 = 1943
| #default = 1934-1943
}}}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal,sal, nivîskar
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/page/n{{#expr:{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[0-9]+|}}-609}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:2|sernav=Sê Tarîxên Hawarê|nivîskar={{w|Celadet Alî Bedirxan|Xwediyê Hawarê}}|hejmar=27|r=689|jêgirtin='''Tarîxa''' sisiyan panzdehê Nîsana sala hezar û neh sed û çel û yekê ye, yanî îro ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar2}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 2an. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar1}}
{{jgcat|ku}}
}}
</noinclude>
0auqyo5ya4rtz3honui3xi5dxiww9sv
6342835
6342834
2026-08-27T07:00:39Z
Wikihez
7344
6342835
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|nivîskar ={{#if:{{{nivîskar|}}}|{{Hawar/nivîskar-switch|{{{nivîskar|}}}}}}}
|weşanxane={{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25|26 = Çapxana Tereqî
| 27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52 = Çapxana Sebatê
| 53|54|55|56|57 = Çapxana Tereqiyê
| #default =
}}
|cih=w:Şam
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/
|kovar=w:Hawar
|versiyona-nû=ji nû ve hate weşandin bi
|cild2=2
|sernav2=Hawar Hejmar 24-57
|sal={{#if:{{{sal|}}}|{{{sal|}}}|{{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25 = 1934
| 26 = 1935
| 27|28|29|30|31|32|33|34|35|36|37 = 1941
| 38|39|40|41|42|43|44|45|46|47|48|49|50|51 = 1942
| 52|53|54|55|56|57 = 1943
| #default = 1934-1943
}}}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal,sal, nivîskar
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/page/n{{#expr:{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[0-9]+|}}-609}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:2|sernav=Sê Tarîxên Hawarê|nivîskar=Xwediyê Hawarê|hejmar=27|r=689|jêgirtin='''Tarîxa''' sisiyan panzdehê Nîsana sala hezar û neh sed û çel û yekê ye, yanî îro ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar2}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 2an. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar1}}
* {{ş|Hawar/nivîskar-switch}}
{{jgcat|ku}}
}}
</noinclude>
l64h8ebs8e3t1fnb4c4vs1dlvvq914m
6342837
6342835
2026-08-27T07:01:46Z
Wikihez
7344
6342837
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|nivîskar ={{#if:{{{nivîskar|}}}|{{Hawar/nivîskar-switch|{{{nivîskar|}}}}}}}
|weşanxane={{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25|26 = Çapxana Tereqî
| 27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52 = Çapxana Sebatê
| 53|54|55|56|57 = Çapxana Tereqiyê
| #default =
}}
|cih=w:Şam
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/
|kovar=w:Hawar
|versiyona-nû=ji nû ve hate weşandin bi
|cild2=2
|sernav2=Hawar Hejmar 24-57
|sal={{#if:{{{sal|}}}|{{{sal|}}}|{{#switch: {{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}
| 24|25 = 1934
| 26 = 1935
| 27|28|29|30|31|32|33|34|35|36|37 = 1941
| 38|39|40|41|42|43|44|45|46|47|48|49|50|51 = 1942
| 52|53|54|55|56|57 = 1943
| #default = 1934-1943
}}}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal,sal,nivîskar
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%202/page/n{{#expr:{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[0-9]+|}}-609}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:2|sernav=Sê Tarîxên Hawarê|nivîskar=Xwediyê Hawarê|hejmar=27|r=689|jêgirtin='''Tarîxa''' sisiyan panzdehê Nîsana sala hezar û neh sed û çel û yekê ye, yanî îro ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar2}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 2an. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar1}}
* {{ş|Hawar/nivîskar-switch}}
{{jgcat|ku}}
}}
</noinclude>
san6o53ggwuo4xu1xaf6x0fmzuaytwa
Şablon:Ç:Farqînî:2005
10
837058
6342693
6342689
2026-08-26T13:21:02Z
Wikihez
7344
6342693
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|last=Farqînî
|first=Zana
|authorlink=Zana Farqînî
|title={{w|Ferhenga kurdî-tirkî (Farqînî, 2004)|Ferhenga Kurdî - Tirkî}}
|entry={{{1|{{pagename}}}}}
|url=https://archive.org/details/ferhenga-mezin-ya-kurdi-tirki-ya-zana-farqini/mode/2up
|location=w:Stenbol
|publisher=w:Enstîtuya Kurdî ya Stenbolê
|serî=Rêzeya Ferhengsaziyê 2
|year=2005
|çap=2
|pageparam=r,rûpel
|pageurl=https://archive.org/details/ferhenga-mezin-ya-kurdi-tirki-ya-zana-farqini/page/{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}/mode/2up
|allowparams=1,r,rûpel
}}<noinclude>{{refcat|ku|tr}}</noinclude>
orjhe6uuhlnul78x7nhxm7ojtffu6l3
Gotûbêja şablonê:Ç:Demîrhan:Ferhenga Destî
11
838471
6342703
3950387
2026-08-26T14:12:12Z
Wikihez
7344
Wikihezî/ê navê [[Gotûbêja şablonê:Ferhenga Destî]] weke [[Gotûbêja şablonê:Ç:Demîrhan:Ferhenga Destî]] guhart
3950387
wikitext
text/x-wiki
Silav {{ragihandin|Ghybu}}, Min navê vê guherand lê di lêgerînê de hê jî demirhan xuya dike, ferhenga destî xuya nake. Çima?--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 23:12, 19 adar 2020 (UTC)
:'''Çêbû''' Temam! :) --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 23:49, 19 adar 2020 (UTC)
mf1g8qs30l0zkj20hjrona9jm56cdep
Wîkîferheng:Daxwazên peyitandinê
4
843283
6342852
6340785
2026-08-27T07:19:37Z
Wikihez
7344
[[MediaWiki:Gadget-aWa.js/belgekirin|aWa]]: Arşîvkirina 1 madeyê li [[Gotûbêj:firvan]]
6342852
wikitext
text/x-wiki
{{/destpêk}}
= Hezîran 2020 =
== [[romî#Navdêr|romî]] ==
Li Şingalê maneya polîs? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 08:00, 15 hezîran 2020 (UTC)
= Tîrmeh 2020 =
== [[kêlb#p-mane|kêlb]] ==
--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:24, 22 tîrmeh 2020 (UTC)
== [[ejî#p-mane|ejî]] ==
--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:24, 22 tîrmeh 2020 (UTC)
== [[tutirk#peyitandin|tutirk]] ==
--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:02, 22 tîrmeh 2020 (UTC)
:{{r|Guherto}} Niha çawa ye? Bi ya min çavkaniyên ku min dane têrê me dike. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:43, 22 tîrmeh 2020 (UTC)
::{{r|Balyozxane}} Nizanim.. li hin deveran wek tutirk hatîye nivîsandin û li hin jî wek tûtirk. Li hin deveran bi wateya tûşêmî (Rubus) ye, hin deveran jî bi wateya tûerd (Fragaria × ananassa) e û carna jî bi wateya tû (ê spî û reş go li ser daran çê dibin) ye. -- [[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 08:16, 23 tîrmeh 2020 (UTC)
== [[erbane#p-mane|erbane]] ==
Ji bo ''Amûreke tenê tekerekî wê heye ji bo veguhestina tiştan wek: axê, kevir, hwd'' ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]]''--[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:42, 31 tîrmeh 2020 (UTC)
= Tebax 2020 =
== [[cifta berazan]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]]'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:57, 9 tebax 2020 (UTC)
== [[tê gerîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]]'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:26, 10 tebax 2020 (UTC)
== [[tapor]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]]'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:30, 22 tebax 2020 (UTC)
:{{r|Mihemed Qers}} -- [[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 22:16, 22 tebax 2020 (UTC)
== [[şimzare]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]]'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:01, 26 tebax 2020 (UTC)
== [[bîrkok]] ==
Tenê Mehmed Uzun bi kar tîne. Ji bilî kitêbên wî çavkaniyeke din tune. —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:38, 28 tebax 2020 (UTC)
== [[hunera axaftinê]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]]'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:46, 30 tebax 2020 (UTC)
== [[derrijîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]]'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 07:38, 31 tebax 2020 (UTC)
== [[yekal]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]]'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 09:19, 31 tebax 2020 (UTC)
== [[av û agir]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]]'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 12:50, 31 tebax 2020 (UTC)
: Di çavkaniyeke de wek av û agir kirin derbas dibe û ji wergerandinên inglîzî cuda ye lê nêzîk e.<br> {{jêder-pirtûk|ku|jêgirtin=weke gelek hunermendên ko dû re agir bera berhêm xwe didin Xwedê jî ji bilî maltaba Nûh tevayiyê vê berhema xwe '''av û agir dike''', van melekên xwe yên doxînsist dikişîne asîmanan, li wir wan tawanbar dike, mîna ko bibêje: de biçin û weke xwe bikin, bi derew û tevgerên xwe yên qirêj dijminiya min bikin, Xwedê wan ji asimanan de serjêr davêje xwarê.|nivîskar=Hesenê Metê|sernav=Labîrenta cinan|weşanxane=Nefel|sal=2002|rûpel=132}} --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 13:37, 31 tebax 2020 (UTC)
== [[elm#p-mane-notice|elm]] ==
Wateya: ''[[ewlebûn]], sihê pê zanîn, baş pê zanîn''. ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:31, 31 tebax 2020 (UTC)
:{{r|Hakîmo}} Ku çavkanî tunebûn em ê jê bibin. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:47, 19 îlon 2020 (UTC)
::{{r|Balyozxane}} Mala te neketê... Hingê bixwe here lê bigere. Jixwe ez reşwî me. Ma eve ne çavkanî ye? -- [[Bikarhêner:Hakîmo|Hakîmo]] ([[Gotûbêja bikarhêner:Hakîmo|gotûbêj]]) 14:48, 19 îlon 2020 (UTC)
:::{{r|Hakîmo}} Hinek bixwîne [[Wîkîferheng:Pîvekên tevlîkirinê]]. Jixwe dema ti kesan din çavkanî lê zêde nakin, ez lê digerim û zêde dikim. Na tu ne ti çavkanî yî. Çavkaniyên nivîskî hewce ne. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:51, 19 îlon 2020 (UTC)
::::{{r|Balyozxane}} Erê, lê ku tine bin em çawa bikinî? Em hema jê bibinî? -- [[Bikarhêner:Hakîmo|Hakîmo]] ([[Gotûbêja bikarhêner:Hakîmo|gotûbêj]]) 14:52, 19 îlon 2020 (UTC)
:::::{{r|Hakîmo}} Erê em jê dibin. Lê peyvên jê hatine birin em li rûpela [[Pêvek:Bêçavkanî]] zêde dikin. bnr. [[:Kategorî:Pêvek bêçavkanî]]. Dîsa jî ez jî ji vê rewşa me aciz im û bi ya min peyvên devokî divê nayên jêbirin. Lê ji ber ku [[Wîkîferheng:Rêbazname]] dibêje divê werin jêbirin, ez jê dibim. Hevalên {{r|Jiju|Guherto|Ghybu}} [https://ku.wiktionary.org/wiki/Got%C3%BBb%C3%AAj:kejm%C3%BBn], [https://ku.wiktionary.org/wiki/Got%C3%BBb%C3%AAja_p%C3%AAvek%C3%AA:B%C3%AA%C3%A7avkan%C3%AE] jî ji vê rewşê aciz in. Lê ti kes gotûbêj nadin destpêkirin. Ku tu li vir [[Gotûbêja Wîkîferhengê:Pîvekên tevlîkirinê]] gotûbêjek bidî destpêkirin, ez ê piştgirî bidime te. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:58, 19 îlon 2020 (UTC)
::::::Ji kerema xwe min şaş fêm mekin feqet hemû bikarhêner ku tên vira dilpak nînin. Em çito ew peyvan kotrol bikinê? Mixabin, ji bo konrolkirina peyvan di destên me de tenê xwastina çavkaniyan hene amûrek din tine ye... PS: Herwiha me li ser wîkîferhengê Namespace'yên Nimînok ([[Nimînok:Kurdî/serhedî]]?, [[Nimînok:Kurdî/badînî]]?, ..) û Portal ([[Portal:Kurdî]], [[Portal:Frensî]] (mk. [[:fr:Portail:Français]]), ...) jî çêkiriye...--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:32, 19 îlon 2020 (UTC)
:::::::Nizanim we nivîsa vira xwand, [[Wîkîferheng:Dîwan#Skotî]]. Piraniya peyvên wîkiya skotî çêkirî ne...--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:47, 19 îlon 2020 (UTC)
::::::::@Ghybu erê min ew xwendibû. Ku em peyvan nepeyitînin, rewşa me jî wek mg.wikt û wikiya skotiyan be. Temam em peyvên devokî jê nebin lê em wan jî nexin werger û rûpelên din heta ku werin peyitandin. Herwiha tu dibêjî amûrek tune ye lê tenê ji bo peyvên devokî û navên heywan/riwekan wisa ye. Gelek caran peyitandin pir hêsan e. Mînak @Hakîmo yan jî hevalên din dikarin blogan binivîsin daku em karibin peyvên wan yên devokî (nepeyitandî) têxin rûpela [[Wîkîferheng:Tomarkirina peyvên ji wêjeya kurdî|Jêgirtinekê tomar bike]] û kengî ew peyv ji hêla nivîskar û blogvanên kurd yên din ve hatine bikaranîn hingê em dikarin li wîkîferhengê jî zêde bikin. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:05, 19 îlon 2020 (UTC)
{{outdent|::::::::}}{{r|Hakîmo|Ghybu}} Xêra dê û bavên we '''[[Gotûbêja_Wîkîferhengê:Pîvekên_tevlîkirinê#Li_ser_peyvên_devokî|li vir]]''' fikrên xwe binivîsin daku kesên din bizanin kesên din jî hene vê fikrê min dipejirînin. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 06:48, 3 çiriya pêşîn 2020 (UTC)
== [[nîşanbar]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 23:51, 31 tebax 2020 (UTC)
= Îlon 2020 =
== [[besme]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:26, 1 îlon 2020 (UTC)
== [[ferengi]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:12, 1 îlon 2020 (UTC)
== [[çelape]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:22, 1 îlon 2020 (UTC)
== [[cesasandin]] ==
Çavkaniyek klasîk heye, yên din heye gelo? —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 09:02, 2 îlon 2020 (UTC)
== [[depan]] ==
Depan guhertoyeke textan an textîn e. Lê li vir çi mane heye min fêm nekir. —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 10:33, 2 îlon 2020 (UTC)
== [[li rûyê dinê xweş mayîn]] ==
Çavkaniyeke klasîk heye —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:38, 2 îlon 2020 (UTC)
== [[bêsewî]] ==
klasîk —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 06:34, 4 îlon 2020 (UTC)
== [[merkemoş]] ==
Klasîk —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 06:34, 4 îlon 2020 (UTC)
== [[firfiroka bayî]] ==
{{r|Mamoste Dilovan}} ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 12:57, 6 îlon 2020 (UTC)
== [[guhê fîlî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:56, 7 îlon 2020 (UTC)
: {{r|Bikarhêner}} Min guh li evê peyvê bû ji kesekî ku xudan xwaringehek û baxçeyekî mezin e.
: Gelek tişt di berbelav in û xelk dizanin, lê di pertûkan de naye dîtin. {{bêîmze|IbrahimKocher Duhok}}
== [[gurovî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:41, 14 îlon 2020 (UTC)
:{{r|Bikarhêner}} Çavkanîyên peyvên ku min nivîsandin mixabin ne nivîskî ne. Ev peyv min ji hin mezinên malbatê bihîstine û min jî gelek caran dîtîne ku hatine bikaranîn. Ji bo ku ev peyv wûnda nebin min hem li ba xwe û hem jî li wîkîferhengê nivîsand. Ji bo peyvên ku çavkanîyên nivîskî tunin, mixabin gotinên devkî tene weke çavkanî dimînin. Pêşnîyara te ji bo pevên bi vî awayî çi ye gelo? Spas{{bêîmze|Xwende}}
::{{r|Xwende}} Pêşî li ser malpera [https://tirsik.net/xerhati.php] dûre jî li ser arsiv.org qeyd bike ku nikarî çavkanî peyda bikî. Herwiha bnr [[Alîkarî:Îmze]] --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:00, 15 îlon 2020 (UTC)
== [[şîloyî]] ==
{{r|Xwende}} ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:44, 14 îlon 2020 (UTC)
== [[dever]] ==
Ji bo wateya ''derence, sêlim û merdîwen'' [[Wîkîferheng:Pîvekên tevlîkirinê|çavkanî hewce ye]]. —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:53, 14 îlon 2020 (UTC)
== [[kerrnizî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 15:56, 15 îlon 2020 (UTC)
== [[li dora (yekê) gerîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:46, 15 îlon 2020 (UTC)
== [[glas]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]]. --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr|gotûbêj]]) 12:45, 16 îlon 2020 (UTC)
== [[kejmûn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:42, 17 îlon 2020 (UTC)
== [[lirêgerîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:20, 18 îlon 2020 (UTC)
== [[çavpeqî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:23, 23 îlon 2020 (UTC)
:http://www.geocities.ws/mehname2004a/63/pexsan5.html -- [[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 16:58, 23 îlon 2020 (UTC)
== [[çavpeqiyayî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:14, 23 îlon 2020 (UTC)
:{{r|Balyozxane}} Çavpeqî û -iyayî eynî peyv in, heke bo nimûne 2 çavkanî ji bo çavpeqî û 1 ji bo -iyayî werin dîtin ew weke 3 ji bo yek peyv tên jimartin? -- [[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 17:16, 23 îlon 2020 (UTC)
::{{r|Guherto}}. Na, divê yek ji wan peyitandî be daku em karibin yek ji wan wek guherto nîşan bidin. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:45, 23 îlon 2020 (UTC)
:::Temam naxwe. {{=(}} -- [[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 17:48, 23 îlon 2020 (UTC)
::::Ecêb e peyva çavpeqîn jî tune ye. Divê çavpeqî/çavpeqiyayî jê hatibe lê qet tune. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:56, 23 îlon 2020 (UTC)
:::::Em çavpeqî ne weke kesekî ku çavê wan peqî ye dibêjin. Siqêfek e. ''Wilo neke, çavpeqî!'' -- [[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 18:10, 23 îlon 2020 (UTC)
== [[olfatûn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:58, 24 îlon 2020 (UTC)
:Du çavkanî hatiye dîtin li hêviya ya sisêyan e. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:46, 23 sibat 2025 (UTC)
== [[hekûke]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:00, 28 îlon 2020 (UTC)
:Tenê çavkaniyek ji Kovara Kurmancî heye ew jî ji kitêba Gundê Mêrxasan a Eliyê Evdilrehman hatiye girtin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:49, 23 sibat 2025 (UTC)
== [[dê bêjî kaya di serî de]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 12:58, 29 îlon 2020 (UTC)
== [[heçî ne li malekê, nizanit halekê]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 12:58, 29 îlon 2020 (UTC)
== [[heta nîva destî reş nebit, tama devî xoş nabit]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 12:58, 29 îlon 2020 (UTC)
== [[kirtop]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Herwiha [[kirtope]]—[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 12:59, 29 îlon 2020 (UTC)
:
== [[pişkûmişk]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:25, 29 îlon 2020 (UTC)
= Çiriya pêşîn 2020 =
== [[ma te şulê pê ye?]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 13:19, 1 çiriya pêşîn 2020 (UTC)
== [[zelam yêt heyn û zelamoşk jî yêt heyn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 13:28, 1 çiriya pêşîn 2020 (UTC)
== [[ezîz î; ji pêrve ne mîzî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:15, 1 çiriya pêşîn 2020 (UTC)
== [[qelpez]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 08:19, 6 çiriya pêşîn 2020 (UTC)
== [[firêzer]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 15:27, 6 çiriya pêşîn 2020 (UTC)
== [[kirmişk]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 09:03, 7 çiriya pêşîn 2020 (UTC)
== [[orijîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 19:03, 7 çiriya pêşîn 2020 (UTC)
== [[şequdeq]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 08:50, 9 çiriya pêşîn 2020 (UTC)
== [[helizandin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:23, 9 çiriya pêşîn 2020 (UTC)
== [[rewastin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:48, 9 çiriya pêşîn 2020 (UTC)
== [[xunaftin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 12:31, 9 çiriya pêşîn 2020 (UTC)
== [[itîmad li ser kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 16:32, 15 çiriya pêşîn 2020 (UTC)
== [[sengesor]] ==
{{r|Saberabdollahizad}} ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:00, 16 çiriya pêşîn 2020 (UTC)
:Navçeya Mirgewerê, Ûrmîye. {{bêîmze|Saberabdollahizad}}
== [[zenek]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:03, 16 çiriya pêşîn 2020 (UTC)
:{{r|Saberabdollahizad}} [[zenek]] jî li Ûrmiyê tê bikaranîn? --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:53, 18 çiriya pêşîn 2020 (UTC)
== [[pind#p-mane|pind]] ==
Min tenê çavkaniyek dît ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:48, 17 çiriya pêşîn 2020 (UTC)
:Navçeya Mirgewerê, Ûrmîye. {{bêîmze|Saberabdollahizad}}
== [[maqezer]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:53, 18 çiriya pêşîn 2020 (UTC)
:Navçeya Mirgewerê, Ûrmîye. {{bêîmze|Saberabdollahizad}}
== [[pezpezok]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:55, 18 çiriya pêşîn 2020 (UTC)
:Navçeya Mirgewerê, Ûrmîye. {{bêîmze|Saberabdollahizad}}
== [[parapet#p-mane|parapet]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 13:53, 31 çiriya pêşîn 2020 (UTC)
= Çiriya paşîn 2020 =
== [[quloç#p-mane|quloç]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:43, 19 çiriya paşîn 2020 (UTC)
== [[di ber (yekî) de avêtin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:57, 20 çiriya paşîn 2020 (UTC)
:https://tirsik.net/index.php?mijarid=18749&iro=on&rupel=1 —[[Bikarhêner:Mamoste Dilovan|Mamoste Dilovan]] ([[Gotûbêja bikarhêner:Mamoste Dilovan|gotûbêj]]) 17:37, 20 çiriya paşîn 2020 (UTC)
:: {{r|Mamoste Dilovan}} [[di ber re avêtin]] heye. lê te wek di ber '''de''' lê zêde kir. Em biguherînin? Gelek çavkanî ji bo di ber re avêtin heye. --[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:41, 20 çiriya paşîn 2020 (UTC)
== [[hêvastin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 10:49, 21 çiriya paşîn 2020 (UTC)
== [[lamçîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:28, 22 çiriya paşîn 2020 (UTC)
== [[poz#p-mane|poz]] ==
Ji bo maneya "[[quz]], [[vajîna]]" ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:28, 22 çiriya paşîn 2020 (UTC)
== [[sihetbexş]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:35, 24 çiriya paşîn 2020 (UTC)
== [[hevjêhatin ji jêhatîbûnê çêtir e]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 12:14, 25 çiriya paşîn 2020 (UTC)
== [[gerriyan#p-mane|gerriyan]] ==
''Ji bo wateya cereyan (tevger)''. Qasî ku dibînim tenê Cewerî bi kar aniye —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:24, 25 çiriya paşîn 2020 (UTC)
== [[derbend]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 12:08, 30 çiriya paşîn 2020 (UTC)
= Kanûna paşîn 2021 =
== [[desthelgirtin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:48, 6 kanûna paşîn 2021 (UTC)
== [[êşewî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 12:52, 7 kanûna paşîn 2021 (UTC)
== [[sexorr]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:22, 7 kanûna paşîn 2021 (UTC)
== [[sapût]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:06, 12 kanûna paşîn 2021 (UTC)
= Çiriya pêşîn 2022 =
== [[paşbingeh]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 07:40, 12 çiriya pêşîn 2022 (UTC)
= Kanûna paşîn 2023 =
== [[berê beringa]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:35, 1 kanûna paşîn 2023 (UTC)
== [[mûlûleya xwînê]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:36, 6 kanûna paşîn 2023 (UTC)
== [[mirovdostî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 05:38, 12 kanûna paşîn 2023 (UTC)
== [[derîner]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 23:02, 15 kanûna paşîn 2023 (UTC)
== [[neteba]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 00:01, 16 kanûna paşîn 2023 (UTC)
:Maneya "uyruksuz" ji ferhenga Farqînî hatiye kopîkirin wekî din bi giştî bi maneya "nakokî" tê bikaranîn. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:33, 26 hezîran 2026 (UTC)
== [[narkotîkfiroş]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 10:59, 16 kanûna paşîn 2023 (UTC)
== [[pirik#p-mane|pirik]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:15, 16 kanûna paşîn 2023 (UTC)
== [[ramyarî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Ez dibêjim ev peyv tenê bi maneya "fikrî", wek rengdêr heye. Lê belê di soranî de bi şaşemilandineke wekî "siyasî" bi kar anîne, kurmancên me jî rasterast maneya soranî tevlî çend ferhengên hev-kopîkirî kirine û bi vî awayî belkî hin çavkanî hebin. Lê ez dibêjim divê ew çavkanî jî neyên hesibandin. Hin kes zen dikin ku her tiştê di soranî de ripîrast e. Mesele heqeten eletewş e.
Agahiyeke li ser peyvê: "[https://www.welateme.info/kurdi/modules.php?name=News&file=print&sid=686 Welateme.info]"
Li vir peyv bi maneya "fikrî" hatiye bikaranîn: "[https://xwebun1.org/ziman-sirhelal-e/ Xwebûn]". Qewet be. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:36, 19 kanûna paşîn 2023 (UTC)
== [[dolîwgeh]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:08, 22 kanûna paşîn 2023 (UTC)
= Sibat 2023 =
== [[herebaş]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:13, 11 sibat 2023 (UTC)
== [[balindeyê korare]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].''
Tenê çavkaniyekê tê xuyan, ew jî kitêba "Balindeyên Kurdistanê" yê Îsmaîl Taha Şahîn e (Îsmaîl Taha Şahîn (2006). Balindeyên Kurdistanê, 1-4. Spîrêz, Duhok). Ev kitêb ji ser înternetê wek word jî peyda dibe. Xuya ye ku ji Weşanên Spîrez fîzîken jî çap bûye. Lê wekî çavkanî tenê ev tê xuyan.
—[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:10, 14 sibat 2023 (UTC)
== [[dîbeyt]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 10:13, 18 sibat 2023 (UTC)
== [[çend pat]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:35, 24 sibat 2023 (UTC)
== [[rabînîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Ji bo kurmancî bêçavkanî ye. Ger ji bo soranî çavkanî hebin jî divê ji bo soranî bi herfên aramî were nivîsîn.
An ger halê latînîkirî ya peyveke soranî be, dîsa divê ev hal were eşkerekirin. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:36, 26 sibat 2023 (UTC)
= Adar 2023 =
== [[qirar#p-mane|qirar]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:23, 2 adar 2023 (UTC)
== [[pîşpêkirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Tenê di nivîseke online ya Cemal Nebez de derbas dibe. Dibe ku peyveke başûriyan be. Û di wê nivîsa Cemal Nebezê bi forma "pîş bi ... bikin" jî derbas dibe. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:29, 3 adar 2023 (UTC)
== [[kûcag]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 01:27, 27 adar 2023 (UTC)
== [[destbizavî kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].''
Xuya ye ku ev peyv tenê di kitêba “''Nameyek Şernexê''” yê Evdirehman Gundikî de derbas bûye. Û ji wir jî Mistefa Aydoganî maneya peyvê di hejmara 61em ya Kovara ''Kurmancî'' de belav kiriye (rûpela 2yem). Lê belê tenê yek çavkaniyekê ne bes e ji bo ku em vê peyvê di vê ferhengê de wekî peyveke çavkanî-temam belav bikin. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:40, 28 adar 2023 (UTC)
== [[germav baş]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:23, 31 adar 2023 (UTC)
== [[germavxweş]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:27, 31 adar 2023 (UTC)
= Gulan 2023 =
== [[kirbend]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 08:34, 5 gulan 2023 (UTC)
: Çêkerê rûpelê wek not nivîsiye ku peyv ji herêma Çewlikê ye. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 06:24, 6 gulan 2023 (UTC)
== [[We are off now]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:13, 22 gulan 2023 (UTC)
== [[baran ji erd û esmana lê diket]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:46, 26 gulan 2023 (UTC)
== [[sîba]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:44, 30 gulan 2023 (UTC)
== [[bîrîner]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:20, 30 gulan 2023 (UTC)
= Hezîran 2023 =
== [[bidestmiz]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:49, 10 hezîran 2023 (UTC)
= Tîrmeh 2023 =
== [[parzeng]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:01, 15 tîrmeh 2023 (UTC)
== [[zerpedest]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:05, 15 tîrmeh 2023 (UTC)
== [[heta destên mirov nebine gû, devê mirov nabite tû]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:27, 19 tîrmeh 2023 (UTC)
== [[çemê mezin tê dibore diçe]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:38, 19 tîrmeh 2023 (UTC)
== [[kevanê nebî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:45, 19 tîrmeh 2023 (UTC)
== [[teybûr]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Tenê li malpera yuksekovahaber.com-ê derbas dibe, li wir jî bi maneya "çare, çareserî"yê hatiye emilandin, ne bi vê maneyê. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:00, 19 tîrmeh 2023 (UTC)
== [[nikêtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:22, 19 tîrmeh 2023 (UTC)
= Tebax 2023 =
== [[prêze]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 21:19, 15 tebax 2023 (UTC)
== [[qelye]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 15:59, 25 tebax 2023 (UTC)
= Îlon 2023 =
== [[hetwan]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 20:21, 14 îlon 2023 (UTC)
== [[milyonmasî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:06, 21 îlon 2023 (UTC)
== [[tofana mêjî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:20, 21 îlon 2023 (UTC)
== [[îshaf]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 10:57, 23 îlon 2023 (UTC)
== [[odeya karkirinê]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 10:57, 26 îlon 2023 (UTC)
== [[odeya şixulînê]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 11:42, 26 îlon 2023 (UTC)
== [[hîter]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 12:08, 26 îlon 2023 (UTC)
= Çiriya pêşîn 2023 =
== [[vîtamîn waw]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 20:20, 1 çiriya pêşîn 2023 (UTC)
== [[berhan]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:21, 3 çiriya pêşîn 2023 (UTC)
== [[sêlikdêr]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:16, 10 çiriya pêşîn 2023 (UTC)
== [[qewandêr]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:20, 10 çiriya pêşîn 2023 (UTC)
== [[darav]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:04, 11 çiriya pêşîn 2023 (UTC)
= Çiriya paşîn 2023 =
== [[kansernasî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:54, 14 çiriya paşîn 2023 (UTC)
== [[golgir]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 16:06, 15 çiriya paşîn 2023 (UTC)
== [[ahardar]] ==
Tenê Zana Farqînî —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 10:34, 26 çiriya paşîn 2023 (UTC)
= Kanûna pêşîn 2023 =
== [[Kî mal ezîz bike, can rezîl dike; kî mal rezîl bike, can ezîz dike.]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:55, 2 kanûna pêşîn 2023 (UTC)
== [[porsing]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:22, 2 kanûna pêşîn 2023 (UTC)
== [[newelatî kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:57, 2 kanûna pêşîn 2023 (UTC)
== [[newelatîkirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:58, 2 kanûna pêşîn 2023 (UTC)
== [[alîkar kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr|gotûbêj]]) 18:42, 3 kanûna pêşîn 2023 (UTC)
== [[aramoş kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]]'' -- [[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr|gotûbêj]]) 18:48, 3 kanûna pêşîn 2023 (UTC)
== [[bêvil kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr|gotûbêj]]) 18:56, 4 kanûna pêşîn 2023 (UTC)
== [[dijberiya naverokî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr|gotûbêj]]) 22:43, 8 kanûna pêşîn 2023 (UTC)
== [[bersivîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]]'', û her wiha ne li gorî qayideyên kurdî (kurmancî) ye. —[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr|gotûbêj]]) 22:08, 11 kanûna pêşîn 2023 (UTC)
== [[hevalzewac]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:25, 18 kanûna pêşîn 2023 (UTC)
= Kanûna paşîn 2024 =
== [[raperk]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 13:40, 15 kanûna paşîn 2024 (UTC)
:Bi wê manê nîne. Bi maneke dî heye. [[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 19:26, 6 tebax 2024 (UTC)
= Sibat 2024 =
== [[bi navê lîstin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:02, 3 sibat 2024 (UTC)
: Li ser agahdarkirina çêkerê rûpelê me şablona "dever"ê tevlî kir. Peyv ji herêma Qoser, Mêrdînê ye. Me li qismê "Bikaranîn"ê jî vê yekê dîyar kir. Ji xeynî vê me wê peyvê ji rûpelên din jî bir. Bi vî awayî ev made kare were girtin. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:28, 10 nîsan 2024 (UTC)
== [[preskirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 00:43, 11 sibat 2024 (UTC)
== [[pres kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 00:43, 11 sibat 2024 (UTC)
== [[Xwedê te têr bike]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:41, 13 sibat 2024 (UTC)
== [[isad]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:09, 22 sibat 2024 (UTC)
== [[razemendîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:44, 27 sibat 2024 (UTC)
= Adar 2024 =
== [[zilhêzî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 23:19, 5 adar 2024 (UTC)
== [[hingihîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:32, 13 adar 2024 (UTC)
== [[xore]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:30, 15 adar 2024 (UTC)
== [[melef]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:55, 19 adar 2024 (UTC)
== [[uğursuz ayak]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 10:11, 23 adar 2024 (UTC)
== [[şepûk]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 10:22, 23 adar 2024 (UTC)
== [[agirberdêrî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 00:04, 26 adar 2024 (UTC)
== [[kîrquz]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 10:00, 26 adar 2024 (UTC)
== [[kîrquzdê]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 10:01, 26 adar 2024 (UTC)
== [[quzgêj]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 10:03, 26 adar 2024 (UTC)
= Nîsan 2024 =
== [[hîkarîkerî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:53, 1 nîsan 2024 (UTC)
== [[hîkarîker]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:54, 1 nîsan 2024 (UTC)
== [[hîkarîdarî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:55, 1 nîsan 2024 (UTC)
== [[hîkarîdar]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:56, 1 nîsan 2024 (UTC)
== [[bihîkarîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:57, 1 nîsan 2024 (UTC)
== [[bihîkarî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:58, 1 nîsan 2024 (UTC)
== [[bêhîkarîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:58, 1 nîsan 2024 (UTC)
== [[bêhîkarî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:59, 1 nîsan 2024 (UTC)
== [[bêhîkarî bûn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:00, 1 nîsan 2024 (UTC)
== [[bêhîkarî kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:00, 1 nîsan 2024 (UTC)
== [[bêhîkarîbûn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:01, 1 nîsan 2024 (UTC)
== [[bêhîkarîkirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:01, 1 nîsan 2024 (UTC)
== [[hîkarîkirî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:02, 1 nîsan 2024 (UTC)
== [[hîkarîkirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:03, 1 nîsan 2024 (UTC)
== [[hîkarî kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:07, 1 nîsan 2024 (UTC)
== [[rayda]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:40, 1 nîsan 2024 (UTC)
== [[bêrayda]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:42, 1 nîsan 2024 (UTC)
== [[bêraydayî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:43, 1 nîsan 2024 (UTC)
== [[bêraydatî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:43, 1 nîsan 2024 (UTC)
== [[bêrayda bûn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:43, 1 nîsan 2024 (UTC)
== [[bêrayda kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:43, 1 nîsan 2024 (UTC)
== [[bêraydabûn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:44, 1 nîsan 2024 (UTC)
== [[bêraydakirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:44, 1 nîsan 2024 (UTC)
== [[birayda]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:44, 1 nîsan 2024 (UTC)
== [[biwerêç]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:46, 1 nîsan 2024 (UTC)
== [[biwerêçî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:46, 1 nîsan 2024 (UTC)
== [[biwerêçîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:47, 1 nîsan 2024 (UTC)
== [[biwerêçtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:47, 1 nîsan 2024 (UTC)
== [[werêç]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:49, 1 nîsan 2024 (UTC)
== [[werêç kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:50, 1 nîsan 2024 (UTC)
== [[werêçkirî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:50, 1 nîsan 2024 (UTC)
== [[werêçkirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:51, 1 nîsan 2024 (UTC)
== [[wişto]] ==
@[[Bikarhêner:Zerwanda]] Çavkanî ji bo kurmancî tine ye. Zazakî ye? —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 20:19, 1 nîsan 2024 (UTC)
:ji devera mûşê, aliyê diya min "wişto/wiştik" digotin. [[Bikarhêner:Zerwanda|Zerwanda]] ([[Gotûbêja bikarhêner:Zerwanda|gotûbêj]]) 20:44, 1 nîsan 2024 (UTC)
== [[xewgerî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 10:19, 2 nîsan 2024 (UTC)
== [[xewgerokî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 10:28, 2 nîsan 2024 (UTC)
== [[nimêh]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:51, 2 nîsan 2024 (UTC)
== [[فعال]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' [[Bikarhêner:Ghybu|Gyhbu]] di 2021an de li ser rûpela wî tevlî kirîye. Lê ji ber nebûna vê sîstema me tevlî vir nebûye. Lewma min anî ser vir jî. Wê gavê tenê ji bo maneya "kar" ev şablon hatîye tevlîkirin. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 07:27, 3 nîsan 2024 (UTC)
== [[pêjor]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:46, 6 nîsan 2024 (UTC)
== [[hafil]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:48, 6 nîsan 2024 (UTC)
== [[micemi]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Muhtemelem şiklê rast wek "micemî" ye, lê ew jî bêçavkanî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:52, 9 nîsan 2024 (UTC)
== [[hesaba xwe]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Ji xeynî van ev forma wê jî bêçavkanî ne: "[[hisaba xwe]] / [[hesaba xo]] / [[hisaba xo]]". — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:25, 9 nîsan 2024 (UTC)
== [[leşkerma]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:53, 24 nîsan 2024 (UTC)
= Gulan 2024 =
== [[serîi]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Wek "serî" belkî li kar be, lê wekî "serîi" çavkanî peyda nabe. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:20, 2 gulan 2024 (UTC)
== [[virgu]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Bêçavkanî tê xuyan. Peyv bi tirkî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:49, 2 gulan 2024 (UTC)
== [[xwerre]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:57, 20 gulan 2024 (UTC)
= Hezîran 2024 =
== [[di nav deryaya peyvan de avjenî dikir]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:34, 4 hezîran 2024 (UTC)
== [[berbixwe]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:03, 10 hezîran 2024 (UTC)
== [[şipyakî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:08, 10 hezîran 2024 (UTC)
:"şipêkî" heye [[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 20:20, 27 tîrmeh 2024 (UTC)
== [[wetalane]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:18, 10 hezîran 2024 (UTC)
== [[wetalî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:19, 10 hezîran 2024 (UTC)
== [[wetalîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:20, 10 hezîran 2024 (UTC)
== [[wetaltî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:20, 10 hezîran 2024 (UTC)
== [[se direye karwan dibuhire]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:49, 16 hezîran 2024 (UTC)
== [[se direwît, karwan bi rêka xo diçît]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Formeke bêçavkanî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:53, 16 hezîran 2024 (UTC)
== [[se direwît, karwan diburît]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Formeke bêçavkanî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:54, 16 hezîran 2024 (UTC)
== [[se direyê karwan dibûrê]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Formeke bêçavkanî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:55, 16 hezîran 2024 (UTC)
== [[se direye karvan li riya xwe diçe]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Formeke bêçavkanî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:56, 16 hezîran 2024 (UTC)
== [[se direye û kerwan dibihure]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Formeke bêçavkanî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:00, 16 hezîran 2024 (UTC)
== [[hingê dinya]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:07, 18 hezîran 2024 (UTC)
== [[berdanberdan]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:22, 24 hezîran 2024 (UTC)
== [[nîska mala Barzan]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:05, 25 hezîran 2024 (UTC)
= Tîrmeh 2024 =
== [[avmêwe]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:41, 16 tîrmeh 2024 (UTC)
== [[nihalok]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:53, 24 tîrmeh 2024 (UTC)
== [[nihalk]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:54, 24 tîrmeh 2024 (UTC)
== [[niwalok]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:54, 24 tîrmeh 2024 (UTC)
== [[niwalk]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:55, 24 tîrmeh 2024 (UTC)
== [[niwalik]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:55, 24 tîrmeh 2024 (UTC)
== [[nehalok]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:56, 24 tîrmeh 2024 (UTC)
== [[nehalk]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:56, 24 tîrmeh 2024 (UTC)
== [[nehalik]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:57, 24 tîrmeh 2024 (UTC)
== [[alîkarxwazî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:16, 24 tîrmeh 2024 (UTC)
== [[nihalik]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:19, 24 tîrmeh 2024 (UTC)
== [[zêrîb]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Bi dîtina min, ev form bêçavkanî ye. Dibe ku ji bo forma "zerîb" çavkanî hebe, lê ew form li ser Wîkîferhengê wek made nehatîye çêkirin. Pir kêm be jî ev peyv wek "zerîp" jî li cihekî derbas bûye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:31, 24 tîrmeh 2024 (UTC)
== [[qanat]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Ev peyv bi maneya "kanal"ê nîne, xelet e. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 06:59, 25 tîrmeh 2024 (UTC)
== [[qenat]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Ev peyv bi maneya "kanal"ê nîne, xelet e. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 06:59, 25 tîrmeh 2024 (UTC)
:Min 1 çavkanî dît, "Ev kes rojê 6-7 qenatên TV ya diğere û diaxive" https://darkamazi.info/archives/1019704 (bi lêgerana "qenatên", ji ber ko lêgeranên dî tijî tiştên dî derdixin)
:Lê mimkun e xelet nivîsîbe. [[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 20:31, 27 tîrmeh 2024 (UTC)
== [[şkaftmend]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 07:08, 25 tîrmeh 2024 (UTC)
:3 çavkanî hene. Lê xuya dike jêdera wan hemû ferhenga tirsik.netê e.
:* Çavkanî 1: https://tirsik.net/ferheng?query=şkaftmend (berî 2014, lê tarîx nîne)
:* Çavkanî 2: https://ku.wikipedia.org/wiki/Deranderî (2011)
:* Çavkanî 3: https://x.com/zerdeceno/status/1155331427510247425 (2019)
:[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 20:28, 27 tîrmeh 2024 (UTC)
== [[dan hev#p-mane|dan hev]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Ev mane li ser çavkanîyan peyda nabe. Tenê çêkerê rûpelê vê maneyê nivîsîye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:08, 25 tîrmeh 2024 (UTC)
== [[baristdar]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:47, 25 tîrmeh 2024 (UTC)
== [[baristdarî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:48, 25 tîrmeh 2024 (UTC)
== [[baristdarîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:49, 25 tîrmeh 2024 (UTC)
== [[baristdartî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:50, 25 tîrmeh 2024 (UTC)
== [[bibaristî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:51, 25 tîrmeh 2024 (UTC)
== [[bibarist]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:52, 25 tîrmeh 2024 (UTC)
== [[bibaristîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:53, 25 tîrmeh 2024 (UTC)
== [[bêbaristî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:54, 25 tîrmeh 2024 (UTC)
== [[bêbarist]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:55, 25 tîrmeh 2024 (UTC)
== [[peydabûnîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 20:52, 27 tîrmeh 2024 (UTC)
== [[nexşvan]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 21:05, 27 tîrmeh 2024 (UTC)
== [[nexşvanî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 21:05, 27 tîrmeh 2024 (UTC)
== [[lêvikî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 21:47, 27 tîrmeh 2024 (UTC)
== [[lêvik]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Min zêde nemeyzand. —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 21:48, 27 tîrmeh 2024 (UTC)
== [[şerenîx kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 21:51, 27 tîrmeh 2024 (UTC)
== [[sala çîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:09, 29 tîrmeh 2024 (UTC)
== [[berê pêşîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:57, 30 tîrmeh 2024 (UTC)
== [[berê ewilî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:57, 30 tîrmeh 2024 (UTC)
= Tebax 2024 =
== [[xwîndijmin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:02, 4 tebax 2024 (UTC)
== [[reîsîtî]]/[[reysîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 18:17, 6 tebax 2024 (UTC)
== [[soranîaxivî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 18:43, 6 tebax 2024 (UTC)
== [[helîna bildo]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Ji 2020a ve şablon li wir e min tenê li vir zêde kir. —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 19:56, 6 tebax 2024 (UTC)
== [[hilbijêrînerî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' "Hilbij" rihê peyvê ye, "-er" jî maneya "kesê dike" dide, qertafa "-îner / -înerî" ya li dawîyê bi eşkereyî xelet e. Û ev peyv bêçavkanî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:45, 7 tebax 2024 (UTC)
== [[îqlîmtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:43, 10 tebax 2024 (UTC)
== [[jîrbêjî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Ev peyv ger di soranî de ji bo wê çavkanîyên têr hebe, tenê wek "Nivîsîna bi herfên latînî ya peyva ..." kare were qeydkirin. Lê nabe ku wek kurmancî be, were qeydkirin. Ji bo kurmancî tenê di meqaleyekê de derbas dibe, ew jî ji alî başûrîyekî ve hatîye nivîsîn. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:55, 10 tebax 2024 (UTC)
== [[hîgyen]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Tenê ev form bêçavkanî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 07:40, 12 tebax 2024 (UTC)
== [[kolîner]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:45, 12 tebax 2024 (UTC)
== [[poşmanî kişîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Tenê di çavkanîyekê de peyda dibe. Ew çavkanîya dayî jî ihtîmal e ku bi tesîra zimanê tirkî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:44, 13 tebax 2024 (UTC)
== [[para hevpar a herî mezin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:09, 14 tebax 2024 (UTC)
== [[cara hevpar a herî biçûk]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:10, 14 tebax 2024 (UTC)
== [[regjimar]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:16, 14 tebax 2024 (UTC)
== [[nîvrengî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 17:33, 18 tebax 2024 (UTC)
== [[nîvdûrgeh]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Wek "guharto" hatiye qeydkirin, lê yek nikare wilo bêje. Ne "guharto" ye, ji ber wê çavkanî hewce ne. —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 17:39, 18 tebax 2024 (UTC)
== [[nîvtewlîsî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 17:44, 18 tebax 2024 (UTC)
== [[nîvrewa]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 17:44, 18 tebax 2024 (UTC)
== [[nîvşehtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 17:46, 18 tebax 2024 (UTC)
== [[nîvfalincî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 17:46, 18 tebax 2024 (UTC)
== [[nîvgilkarî]] ==
Ferhenga Sa.Sa.
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 17:48, 18 tebax 2024 (UTC)
== [[kesîkirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 20:16, 18 tebax 2024 (UTC)
== [[biryarbirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:38, 24 tebax 2024 (UTC)
= Îlon 2024 =
== [[qîblename]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 15:15, 1 îlon 2024 (UTC)
== [[cihetnima]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].''
Ji [https://bianet.org/yazi/ferhenga-ser-u-amrazen-ser-ji-kovara-ronahiye-2-196299 vir] hatiye —[[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 15:27, 1 îlon 2024 (UTC)
== [[qûnderîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:36, 7 îlon 2024 (UTC)
== [[hevpîşehî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:48, 14 îlon 2024 (UTC)
== [[hevpîşeyî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Wek ''navdêr'' bêçavkanî ye. Wek ''rengdêr'' hebe jî, kêmçavkanî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:50, 14 îlon 2024 (UTC)
== [[hempay]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:04, 14 îlon 2024 (UTC)
== [[nîs]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:43, 14 îlon 2024 (UTC)
== [[êxbarçî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Ji bo ''îxbarçî'' çavkanîyekê peyda dibe, lê kêm e. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 23:06, 14 îlon 2024 (UTC)
== [[muxbîrîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 23:38, 14 îlon 2024 (UTC)
== [[ixbarçî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 23:43, 14 îlon 2024 (UTC)
== [[westgeha pasê]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:33, 19 îlon 2024 (UTC)
== [[avikmadk]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:24, 19 îlon 2024 (UTC)
== [[ferwerîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:18, 20 îlon 2024 (UTC)
== [[bipayderî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:12, 20 îlon 2024 (UTC)
== [[bipayderîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:13, 20 îlon 2024 (UTC)
== [[bipaydertî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:13, 20 îlon 2024 (UTC)
== [[bipedalî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:14, 20 îlon 2024 (UTC)
== [[bipedalîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:14, 20 îlon 2024 (UTC)
== [[bipedaltî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:14, 20 îlon 2024 (UTC)
== [[pedaldarî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:15, 20 îlon 2024 (UTC)
== [[pedaldarîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:15, 20 îlon 2024 (UTC)
== [[pedaldartî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:16, 20 îlon 2024 (UTC)
== [[ciwên]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:11, 22 îlon 2024 (UTC)
== [[belgebirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:31, 23 îlon 2024 (UTC)
== [[avsîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Dibe ku ev kelîme biçavkanî be, lê pir bêagahî hatîye qeydkirin. Biçavkanî be jî, ji ber qeydkirina bêagahî (li ser madeyê agahî kêm hatine pêşkêşkirin) em rûpelê jê bibin. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:53, 23 îlon 2024 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]] Ma ne çêtir e li "Daxwazên zelalkirinê" be naxwe? [[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 13:40, 10 çiriya paşîn 2024 (UTC)
:: {{r|Guherto}} Bi min em karin vê madeyê ji ber bêagahîbûna wî, îlaweyî "Daxwazên jêbirinê" bikin, lê "Daxwazên zelalkirinê" nabe. Wekî din ji ber ku dikeve çarçoveya her du rûpelan jî kîjan be jî dibe, lê madem me li vir da destpêkirin, bila ji vir dewam bike dengdana li ser vê kelîmeyê. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:22, 10 çiriya paşîn 2024 (UTC)
== [[kûvank]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Herçiqas tenê formekê be jî, bêçavkanî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:14, 27 îlon 2024 (UTC)
== [[kikark]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Herçiqas formekê be jî, bêçavkanî dixuye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:40, 27 îlon 2024 (UTC)
== [[kîfkarik]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Herçiqas tenê formekê be jî, bêçavkanî dixuye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:45, 27 îlon 2024 (UTC)
== [[kuvank]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Herçiqas formekê be jî, bêçavkanî dixuye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:53, 27 îlon 2024 (UTC)
== [[kûvarik]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Herçiqas tenê formekê be jî, bêçavkanî dixuye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:01, 27 îlon 2024 (UTC)
= Çiriya pêşîn 2024 =
== [[muhil]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Tenê qismê kurdî bêçavkanî ye, ne ya tirkî. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:00, 9 çiriya pêşîn 2024 (UTC)
== [[muhilk]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:00, 9 çiriya pêşîn 2024 (UTC)
== [[jêrmal]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:59, 15 çiriya pêşîn 2024 (UTC)
= Çiriya paşîn 2024 =
== [[bîrxistiner]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 19:38, 14 çiriya paşîn 2024 (UTC)
== [[wisa gotin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Ne ferhengî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 20:13, 15 çiriya paşîn 2024 (UTC)
== [[tenzîlatî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:12, 16 çiriya paşîn 2024 (UTC)
== [[armancparêz]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 13:03, 19 çiriya paşîn 2024 (UTC)
== [[şikaftmend]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 13:06, 19 çiriya paşîn 2024 (UTC)
== [[derander]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 13:08, 19 çiriya paşîn 2024 (UTC)
== [[deranderî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 13:09, 19 çiriya paşîn 2024 (UTC)
== [[derxwenîn]] ==
@[[User:Keyomerd]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 22:38, 19 çiriya paşîn 2024 (UTC)
== [[kiyû]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 23:53, 22 çiriya paşîn 2024 (UTC)
== [[goçavik]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 00:03, 23 çiriya paşîn 2024 (UTC)
== [[hûrhesibaner]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 00:19, 23 çiriya paşîn 2024 (UTC)
== [[heybera zindî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:01, 23 çiriya paşîn 2024 (UTC)
== [[misadereker]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 12:51, 24 çiriya paşîn 2024 (UTC)
== [[kêmtirkar]] ==
@[[Bikarhêner:Cyrus the virus|Cyrus the virus]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:11, 24 çiriya paşîn 2024 (UTC)
== [[cudagir]] ==
@[[Bikarhêner:Cyrus the virus|Cyrus the virus]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:15, 24 çiriya paşîn 2024 (UTC)
== [[qerwaşgir]] ==
@[[Bikarhêner:Cyrus the virus|Cyrus the virus]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:42, 24 çiriya paşîn 2024 (UTC)
== [[mişkilûr]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:45, 24 çiriya paşîn 2024 (UTC)
== [[agirbiran]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:54, 24 çiriya paşîn 2024 (UTC)
== [[alan]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:55, 24 çiriya paşîn 2024 (UTC)
== [[alêdû]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 18:56, 24 çiriya paşîn 2024 (UTC)
== [[henaseker]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 17:37, 25 çiriya paşîn 2024 (UTC)
== [[nial]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Ji xeynî vê, maneya 2yem ya di madeya "nihal" de (navdêr 2) jî bêçavkanî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 23:46, 27 çiriya paşîn 2024 (UTC)
== [[gilçim]] ==
@[[Bikarhêner:Roj Rewandiz|Roj Rewandiz]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:28, 29 çiriya paşîn 2024 (UTC)
:Ez ji bajarê Kobaniyê me. Min ev peyv ji ser zimanê dê û dapîra xwe girt. Ez gelekî ji vê peyvê bawer im ji ber ku devoka min e. [[Bikarhêner:Roj Rewandiz|Roj Rewandiz]] ([[Gotûbêja bikarhêner:Roj Rewandiz|gotûbêj]]) 19:14, 23 kanûna pêşîn 2024 (UTC)
::@[[Bikarhêner:Roj Rewandiz|Roj Rewandiz]] Mala te ava. Ji ber ku çavkaniyên nivîskî tine ne em ê vê kelîmeyê wek [[Wîkîferheng:Pîvekên_tevlîkirinê#Peyvên_herêmî|herêmî]] nîşan bidin. [[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 12:22, 25 kanûna pêşîn 2024 (UTC)
== [[reşeme kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Li gorî çêkera sayfeyê li Kobaniyê li kar e. Loma dikare wekî herêmî nîşankirin —[[Bikarhêner:Balyozxane|Balyozxane]] ([[Gotûbêja bikarhêner:Balyozxane|gotûbêj]]) 14:35, 29 çiriya paşîn 2024 (UTC)
:Li Kobaniyê dibêjin: ‘Tizbiyê min li xwe reş û reşeme kir’ Anko Tizbî bir û venegerand Înkar kir. [[Bikarhêner:Roj Rewandiz|Roj Rewandiz]] ([[Gotûbêja bikarhêner:Roj Rewandiz|gotûbêj]]) 23:48, 7 kanûna paşîn 2025 (UTC)
= Kanûna pêşîn 2024 =
== [[çarkunc]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 00:21, 27 kanûna pêşîn 2024 (UTC)
= Kanûna paşîn 2025 =
== [[pevnatî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Ev kelîme wek kurtkirina ji "bi hev nehatî" hatîye fikirîn, ihtimal e ku wek sunî hatîye çêkirin û bêçavkanî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:43, 6 kanûna paşîn 2025 (UTC)
== [[lihevnatîbûn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Wek formeke "lihevnehatîbûn"ê hatîye fikirîn, lê bêçavkanî ye. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:49, 6 kanûna paşîn 2025 (UTC)
== [[Binxetê]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Em zanin ku ji ber sînora Tirkîyeyê ku Cizîrê dike du perçe û ji parçeya binî re Binxet tê gotin ku kurd lê dijîn. Feqet min herêma Binxetê seh nekirîye, û bi tedqîqeke neberfireh jî çavkanî peyda nekir ji bo vê peyvê. Lewma bi min mahîyeta vê madeyê û qeydkirina wek "Binxetê" xelet e. Ger ji bo herêma tarîfkirî çavkanî nîn be, em vê madeyê bikin "'''Binxet'''" û tarîfa wê jî bikin "''Navê Rojavayê Kurdistanê ku li binê xeta Tirkîye - Sûrîyeyê dimîne.''" — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 00:22, 24 kanûna paşîn 2025 (UTC)
== [[xirecir çêkirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' "''Çê''" bi maneya "''baş''" e, û "''çêkirin''" ji bo tiştên pozîtîv likar e, li nav milet jî ev wisa ye. Lewma ev xelet e. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 20:00, 24 kanûna paşîn 2025 (UTC)
== [[sîrkxane]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:30, 26 kanûna paşîn 2025 (UTC)
== [[anînder]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Di hin çavkanîyan de wek formeke "''der'''''anîn'''"ê hatîye qeydkirin. Lê belê çavkanîyeke eslî (ne ji kitêbên gramerê) peyda nabe ji bo vê kelîmeyê. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 00:24, 27 kanûna paşîn 2025 (UTC)
== [[rastî nîşandan]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:14, 30 kanûna paşîn 2025 (UTC)
= Sibat 2025 =
== [[pir hindik#p-mane|pir hindik]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:31, 3 sibat 2025 (UTC)
== [[anteroz]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 01:19, 15 sibat 2025 (UTC)
== [[veşidandin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:43, 15 sibat 2025 (UTC)
== [[karîwer kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 02:01, 16 sibat 2025 (UTC)
== [[hil girtin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:06, 17 sibat 2025 (UTC)
== [[wer girtin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:07, 17 sibat 2025 (UTC)
== [[avkûre]] ==
@[[Bikarhêner:Mohajeer|Mohajeer]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:36, 18 sibat 2025 (UTC)
== [[derdek girtin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 23:42, 18 sibat 2025 (UTC)
== [[vekitandin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:12, 21 sibat 2025 (UTC)
== [[dînperist]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 01:32, 22 sibat 2025 (UTC)
== [[ayînperist]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 01:33, 22 sibat 2025 (UTC)
== [[ayînperistî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 01:33, 22 sibat 2025 (UTC)
== [[ayînperistane]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 01:33, 22 sibat 2025 (UTC)
== [[piştrastkirinbar]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 01:45, 23 sibat 2025 (UTC)
== [[diyarkirinbar]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 02:08, 23 sibat 2025 (UTC)
== [[hevhatî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 03:52, 1 adar 2025 (UTC)
== [[kerexne]] ==
@[[Bikarhêner:Rojhilat|Rojhilat]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:05, 1 adar 2025 (UTC)
== [[pawan#p-mane|pawan]] ==
Ferhenga Hejar soranî ye, ji bo maneya "cihê qedexekirî, cihê inhisarî" ji xeynî wê çavkanî heye gelo —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:17, 3 adar 2025 (UTC)
== [[taqane]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 02:11, 6 adar 2025 (UTC)
== [[gosirmetî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 23:07, 6 adar 2025 (UTC)
== [[matîjêker]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:08, 14 adar 2025 (UTC)
== [[hilewesan]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:14, 16 adar 2025 (UTC)
== [[peydandin#p-mane|peydandin]] ==
Ji bo maneya [[dûre]], [[paşî]], [[piştî]] wê / wî ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:26, 19 adar 2025 (UTC)
== [[peşar]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:36, 19 adar 2025 (UTC)
== [[nûzaf]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:30, 20 adar 2025 (UTC)
== [[deynname]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 20 adar 2025 (UTC)
== [[girtek]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:29, 20 adar 2025 (UTC)
== [[bêşxane]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:25, 23 adar 2025 (UTC)
== [[superleheng]] ==
@[[Bikarhêner:Avestaboy|Avestaboy]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:34, 23 adar 2025 (UTC)
== [[goranparêz]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:54, 27 adar 2025 (UTC)
== [[raber#p-mane|raber]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:09, 1 nîsan 2025 (UTC)
== [[morîvanî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 20:06, 1 nîsan 2025 (UTC)
== [[wevde]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 12:17, 3 nîsan 2025 (UTC)
== [[şandêr]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:31, 3 nîsan 2025 (UTC)
== [[giloverî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Tenê li ser Ferhenga Zaravên Teknîkî û hejmara yekem ya kovara Bernamegehê derbas dibe. —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:10, 4 nîsan 2025 (UTC)
== [[xêvjimêr]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 00:00, 12 nîsan 2025 (UTC)
== [[paşekeft]] ==
@[[Bikarhêner:Jiyar Hesen|Jiyar Hesen]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:11, 13 nîsan 2025 (UTC)
== [[paşekeft kirin]] ==
@[[Bikarhêner:Jiyar Hesen|Jiyar Hesen]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 11:12, 13 nîsan 2025 (UTC)
== [[hawirkanî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:36, 20 nîsan 2025 (UTC)
== [[hawirkan]] ==
@[[Bikarhêner:Ferhengvan|Ferhengvan]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:18, 21 nîsan 2025 (UTC)
: Di çavkanîyeke de "''hawrikan''" (ku wek forma vê kelîmeyê hatîye nîşandayîn û wek "hevrêyan" a kurmancî ye) bi maneya "''friends''"a îngilîzî hatîye emilandin. Wekî din ti çavkanî nîne ji bo vê peyvê. Ger ev "hevrik"a kurmancî be, li vir dîsa xelet e. Bi her awayî divê were jêbirin. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:28, 21 nîsan 2025 (UTC)
== [[hawirkanî]] ==
@[[Bikarhêner:Cyrus the virus|Cyrus the virus]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:18, 21 nîsan 2025 (UTC)
== [[hawirkanvanî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:18, 21 nîsan 2025 (UTC)
== [[riberiz]] ==
@[[Bikarhêner:Ferhengvan|Ferhengvan]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:39, 21 nîsan 2025 (UTC)
:Ez bawer im ku ev hat peyitandin. Min çavkanî di beşa gotûbêjê de dan û şablona bêçavkanîtiyê rakir. [[Bikarhêner:Ferhengvan|Ferhengvan]] ([[Gotûbêja bikarhêner:Ferhengvan|gotûbêj]]) 06:11, 25 nîsan 2025 (UTC)
== [[awam]] ==
@[[User:Ferhengvan|Ferhengvan]] Min ev kelîme di ferhengên din de nedît. Gelo di kurmancî de tê bikaranîn? —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:09, 23 nîsan 2025 (UTC)
:@[[Bikarhêner:Zerwanda|Zerwanda]] tu jî forma [[vam]] ya vê kelîmeyê diemilînî, gelo çavkanî ji bo wê jî heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:11, 23 nîsan 2025 (UTC)
::Min jî li vir peyda kir û dest kar anîn kir, hemin ev li guherrên dengî ên Kurmancî dihat (*ebam > *ewam > *wam > vam; wek *ebaj- > {{q|ku|vajî}}). Min gotibû qey di zarawayê kesekî da hebûye û wî bi ser va kiriye û jixwe nepêkan nîn e ku di zimên da hebe îcar rind e, nê min jî serkanî tine ji bonê. [[Bikarhêner:Zerwanda|Zerwanda]] ([[Gotûbêja bikarhêner:Zerwanda|gotûbêj]]) 21:37, 23 nîsan 2025 (UTC)
:::https://bnk.institutkurde.org/images/pdf/4UVB2YMZG3.pdf
:::Di vê kitêbê de bi forma wam derbas dibe 1 Wam : qerz, dên. " dîsa jî gereg 3 çavkanî hebe.
:::Lê di beşa etîmolojiyê de eger em karibin zimanekî yekgirtî biemilînin, dê baştir be. Wekî din "bi vê enflasyona kelîmeyan" em nikarin ti tiştî bidin fêmkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:54, 23 nîsan 2025 (UTC)
== [[arvanê hûr]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:48, 27 nîsan 2025 (UTC)
== [[damezrak]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:47, 27 nîsan 2025 (UTC)
== [[mezrak]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:49, 27 nîsan 2025 (UTC)
== [[hevhemetî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:25, 6 gulan 2025 (UTC)
== [[navhemetî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:25, 6 gulan 2025 (UTC)
== [[entîte]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:08, 17 gulan 2025 (UTC)
== [[agirvekujêner]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:35, 21 gulan 2025 (UTC)
== [[progres]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 23 gulan 2025 (UTC)
== [[bûncî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:29, 28 gulan 2025 (UTC)
== [[tasît]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:36, 31 gulan 2025 (UTC)
== [[implîcît]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:37, 31 gulan 2025 (UTC)
== [[hewedar]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 19:14, 31 gulan 2025 (UTC)
== [[destajo]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:38, 31 gulan 2025 (UTC)
== [[binhimbank]] ==
@[[Bikarhêner:Ferhengvan|Ferhengvan]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:23, 1 hezîran 2025 (UTC)
== [[şîmane]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 23:31, 2 hezîran 2025 (UTC)
== [[materya]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:12, 5 hezîran 2025 (UTC)
== [[bêtî]] ==
@[[Bikarhêner:Ferhengvan|Ferhengvan]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:03, 7 hezîran 2025 (UTC)
== [[rîbat]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:21, 9 hezîran 2025 (UTC)
== [[hevtawan]] ==
@[[Bikarhêner:Ferhengvan|Ferhengvan]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:26, 12 hezîran 2025 (UTC)
:Pirsek: "Hevwate" kelîmeyên ku maneyan wan hev in. "hevtawan" çawa dibe "şirîkên sûcekê"? Gereg sûcên ku tiştê wan hev bin? Ew tişt çi ye? Çima dibe şirîk? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:32, 12 hezîran 2025 (UTC)
::Merheba!
::"Hevtawan" anku "şirîkên heman tawanê, kesên ku heman tawan kiriye/dikin", wek "hevkar = şirîkên heman karî, kesên ku heman karî dikin", "hevjîn = şirîkên heman jiyanê, kesên ku bi hev re dijîn"... [[Bikarhêner:Ferhengvan|Ferhengvan]] ([[Gotûbêja bikarhêner:Ferhengvan|gotûbêj]]) 06:11, 30 hezîran 2025 (UTC)
== [[zanîş]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 12:07, 14 hezîran 2025 (UTC)
== [[zanîşwer]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 12:07, 14 hezîran 2025 (UTC)
== [[zanmend]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 12:09, 14 hezîran 2025 (UTC)
== [[zandar]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:08, 14 hezîran 2025 (UTC)
== [[zayîndar]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:12, 14 hezîran 2025 (UTC)
== [[zayindar]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 21:12, 14 hezîran 2025 (UTC)
== [[akund]] ==
@[[Bikarhêner:Ferhengvan|Ferhengvan]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:16, 16 hezîran 2025 (UTC)
== [[destbikar]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 07:41, 22 hezîran 2025 (UTC)
== [[vekitandin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:DarkAngel2100|DarkAngel2100]] ([[Gotûbêja bikarhêner:DarkAngel2100|gotûbêj]]) 10:45, 2 tîrmeh 2025 (UTC)
Çavkanî: Kurdish-English Dictionary by Baran Rizgar
== [[peşarmend]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:54, 5 tîrmeh 2025 (UTC)
== [[zaîd]] ==
@[[Bikarhêner:Ferhengvan|Ferhengvan]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 06:59, 6 tîrmeh 2025 (UTC)
== [[Xrîst]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 07:13, 10 tîrmeh 2025 (UTC)
== [[hesibanî kirin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:48, 13 tîrmeh 2025 (UTC)
== [[top danîn]] ==
@[[Bikarhêner:Ferhengvan|Ferhengvan]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 10:08, 13 tîrmeh 2025 (UTC)
== [[çûkger]] ==
@[[Bikarhêner:Dûrzan|Dûrzan]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:49, 18 tîrmeh 2025 (UTC)
== [[dûneçkar]] ==
@[[Bikarhêner:212.175.166.246|212.175.166.246]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:38, 10 tebax 2025 (UTC)
== [[sermirov]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 15:22, 13 tebax 2025 (UTC)
== [[nifira Esed]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 16:00, 19 tebax 2025 (UTC)
== [[dilkrîz]] ==
@[[Bikarhêner:Kurd87612|Kurd87612]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 10:44, 23 tebax 2025 (UTC)
== [[berxa Xwedê]] ==
@[[Bikarhêner:Kurd87612|Kurd87612]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:28, 31 tebax 2025 (UTC)
== [[destmatî]] ==
@[[Bikarhêner:Ferhengvan|Ferhengvan]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 17:47, 21 îlon 2025 (UTC)
== [[sîbaq]] ==
@[[Bikarhêner:Ferhengvan|Ferhengvan]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 20:33, 27 îlon 2025 (UTC)
== [[mirovê daristanê]] ==
@[[Bikarhêner:Hewarwîkîferheng|Hewarwîkîferheng]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 08:09, 18 çiriya pêşîn 2025 (UTC)
== [[çavbijîşk]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 18:30, 24 çiriya pêşîn 2025 (UTC)
== [[makeşar]] ==
@[[Bikarhêner:Avestaboy|Avestaboy]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 06:46, 14 kanûna pêşîn 2025 (UTC)
:Silav @[[Bikarhêner:Bikarhêner|Bikarhêner]] min bi derew peyv çê nekir. Peyva makeşar di sepana O-ferheng û her wiha di ferhenga online ferhengkurdi.org ya '''Enstîtuya Kurdî ya Stenbolê''' tê xwendin.
:https://ferhengkurdi.org/tr/kelime/make%C5%9Far-n [[Bikarhêner:Avestaboy|Avestaboy]] ([[Gotûbêja bikarhêner:Avestaboy|gotûbêj]]) 11:07, 18 kanûna pêşîn 2025 (UTC)
::Krîterên me yên tevlîkirina kelîmeyan heye. Ev made rîayeta wan krîteran nake. Lewma min vê kelîmeyê li vir bicih kir. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 23:28, 18 kanûna pêşîn 2025 (UTC)
== [[bihîstinzanî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:30, 23 hezîran 2026 (UTC)
== [[hevdilî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:28, 24 hezîran 2026 (UTC)
== [[kemisandin]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:45, 24 hezîran 2026 (UTC)
== [[kexme]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:53, 24 hezîran 2026 (UTC)
== [[lêpirsyarker]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:32, 24 hezîran 2026 (UTC)
== [[raypirs]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:34, 24 hezîran 2026 (UTC)
== [[helwestpirs]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:34, 24 hezîran 2026 (UTC)
== [[kopirî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' xuyaye maneyeke wekî pir jî heye dikare were zêdekirin —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:33, 25 hezîran 2026 (UTC)
== [[merxeme]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:55, 25 hezîran 2026 (UTC)
== [[mohl]] ==
@[[Bikarhêner:Far ati|Far ati]] ''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:14, 25 hezîran 2026 (UTC)
== [[irfandarî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:30, 26 hezîran 2026 (UTC)
== [[axulme]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:20, 30 hezîran 2026 (UTC)
== [[şewane]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:26, 1 tîrmeh 2026 (UTC)
== [[poezî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:27, 1 tîrmeh 2026 (UTC)
== [[sebaxker]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:20, 1 tîrmeh 2026 (UTC)
== [[sebaxfiroş]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:21, 1 tîrmeh 2026 (UTC)
== [[siboxfiroş]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:21, 1 tîrmeh 2026 (UTC)
== [[diyardenasîtî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:26, 1 tîrmeh 2026 (UTC)
== [[dawxane]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:41, 3 tîrmeh 2026 (UTC)
== [[pêşajotî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:15, 3 tîrmeh 2026 (UTC)
== [[kontînentaltirîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:35, 3 tîrmeh 2026 (UTC)
== [[azmayîşker]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:16, 3 tîrmeh 2026 (UTC)
== [[ateşparêz]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 05:19, 4 tîrmeh 2026 (UTC)
== [[kurtetarîx]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:52, 4 tîrmeh 2026 (UTC)
== [[besayetî]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:57, 4 tîrmeh 2026 (UTC)
== [[tawbijêr]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:45, 4 tîrmeh 2026 (UTC)
== [[destbir]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:30, 5 tîrmeh 2026 (UTC)
== [[nekider]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:56, 5 tîrmeh 2026 (UTC)
== [[niqar]] ==
—[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:39, 5 tîrmeh 2026 (UTC)
== [[parêzîn]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' Ev form li ti derê peyda nabe. Berî çendîn salan hatîye çêkirin. Bi qenaeta min şaş e, lewma em jê bibin. — [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 10:29, 6 tîrmeh 2026 (UTC)
== [[stêrfizîk]] ==
. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:33, 6 tîrmeh 2026 (UTC)
== [[pêçavik]] ==
. Eger ev kelîmeyeke mehelî be, Jkx şablona {{şx|dever|cihê ku lê tê bikaranîn}} li madeyê zêde bike. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:59, 7 tîrmeh 2026 (UTC)
== [[qerqef]] ==
. Eger ev kelîmeyeke mehelî be, Jkx şablona {{şx|dever|cihê ku lê tê bikaranîn}} li madeyê zêde bike. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:17, 7 tîrmeh 2026 (UTC)
== [[rakar]] ==
. Eger ev kelîmeyeke mehelî be, Jkx şablona {{şx|dever|cihê ku lê tê bikaranîn}} li madeyê zêde bike. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:30, 7 tîrmeh 2026 (UTC)
== [[remilîn]] ==
. Eger ev kelîmeyeke mehelî be, Jkx şablona {{şx|dever|cihê ku lê tê bikaranîn}} li madeyê zêde bike. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:36, 7 tîrmeh 2026 (UTC)
== [[segurî]] ==
. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:51, 7 tîrmeh 2026 (UTC)
== [[serdev]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:10, 7 tîrmeh 2026 (UTC)
== [[serziman]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:01, 7 tîrmeh 2026 (UTC)
== [[tenîsk]] ==
di Înternetê de gelek netîce derdikevin lê ji bo ku dûre ez kontrol bikim û çavkaniyên sehîh binivîsim li vir îlawe dikim. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:53, 7 tîrmeh 2026 (UTC)
== [[tertî]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:58, 7 tîrmeh 2026 (UTC)
== [[tirut]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:25, 7 tîrmeh 2026 (UTC)
== [[tizqa]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:28, 7 tîrmeh 2026 (UTC)
== [[têkilîdêr]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:31, 7 tîrmeh 2026 (UTC)
== [[tîtalk]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:33, 7 tîrmeh 2026 (UTC)
== [[vircoq]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:45, 7 tîrmeh 2026 (UTC)
== [[xilêbat]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]]. Li gorî kurteya çêkirina sayfeyê li Qamişlo û Amûdê tê bikaranîn. —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:14, 7 tîrmeh 2026 (UTC)
== [[xin_û_cûc]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:27, 7 tîrmeh 2026 (UTC)
== [[çiteba]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:38, 7 tîrmeh 2026 (UTC)
== [[desttêl]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 08:45, 8 tîrmeh 2026 (UTC)
== [[Mîmedol]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 08:51, 8 tîrmeh 2026 (UTC)
== [[alaf]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:01, 8 tîrmeh 2026 (UTC)
== [[aşirme]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:13, 10 tîrmeh 2026 (UTC)
== [[geledîmentî]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:54, 13 tîrmeh 2026 (UTC)
== [[çendîmentî]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:54, 13 tîrmeh 2026 (UTC)
== [[rojeng]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:41, 18 tîrmeh 2026 (UTC)
== [[bereyîşk]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:47, 19 tîrmeh 2026 (UTC)
== [[wesekname]] ==
''[[Wîkîferheng:Pîvekên tevlîkirinê|Çavkanî hewce ye]].'' —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:08, 22 tîrmeh 2026 (UTC)
== [[cemaetgeh]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:17, 24 tîrmeh 2026 (UTC)
== [[iblîskanî]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:27, 30 tîrmeh 2026 (UTC)
== [[pehnik]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:51, 4 tebax 2026 (UTC)
:# Kamiran bedirxan û H. Muhammed bi maneya guwerte bi kar tînin.
:# Navê Çiyayek e li Hawarê derbas dibe
:# Farqînî tenê dibêje "yassı"
:#* [https://usercontent.one/wp/portal.arsivakurd.org/wp-content/uploads/2021/08/Azadiya-welat_67.pdf?media=1709107483 Azadiya welat hj 67] Roşan Lezgîn kevirên pehnik
:# Ferhenga destî pahnik pehnik dibêje
:# Rojen barnas li vir bi çi mana bi kar tîne?
:#* {{jêder-kitêb|ku|jêgirtin=... '''pehnika''' dirandar tê kişandin û ji nû ve bi mîxên têlkî ve tê girêdan ku firk û sistî nekevê. Piştî ku dirûtina rû bi binpiyê hundirîn ve xelas bû vêca dora binpiyê derva (binî) tê. Binpiyê binî li ser yê hun- dirîn an bitenê bi...|sal=2013|nivîskar=Rojen Barnas, Nûbihar|url=http://books.google.com.tr/books?id=pVDKEAAAQBAJ&pg=PA67&dq=%22wan+pehnikan%22+OR+%22pehnik%C3%AA%22+OR+%22pehnikin%22+OR+%22pehnikek%C3%AA%22+OR+%22pehnika%22+OR+%22w%C3%AA+pehnik%C3%AA%22+OR+%22pehnikino%22+OR+%22pehnikine%22&hl=&cd=4&source=gbs_api|sernav=Sîlvan/ Silîvan / Farqîn|weşanxane=PAK AJANS YAYINCILIK TURİZM VE DIŞ TİCARET LİMİTED ŞİRKETİ|ISBN=9786055402884|rûpel=67}}
:[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:40, 6 tebax 2026 (UTC)
== [[temirîndox]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:56, 6 tebax 2026 (UTC)
== [[kansêrolojî]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:17, 6 tebax 2026 (UTC)
== [[navçeparêzî]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:09, 6 tebax 2026 (UTC)
== [[goganîbûnî]] ==
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:23, 15 tebax 2026 (UTC)
== [[zewijandin]] ==
Bêyî çavkaniyan e. --[[Bikarhêner:Şêr|Şêr]] ([[Gotûbêja bikarhêner:Şêr|gotûbêj]]) 18:34, 22 tebax 2026 (UTC)
fclu7hcbbwsnlhgo3e9is6t4h4tyh51
qirereşk
0
874014
6342806
6340334
2026-08-26T21:34:29Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342806
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[qir]], [[qijik]], [[qel]], [[qişqelank]], [[qeşqelank]], [[zax]]
#* {{jêder-pirtûk|ku|sal=2015|jêgirtin=em rê nadin<br>hûn goştê me bixwin<br>wek '''qirereşk''' û qertal!|nivîskar=Ebdulla Peşêw|wergêr=Husein Muhammed|sernav=Xewa min nayê|url=https://zimannas.files.wordpress.com/2015/07/peshew.pdf|rûpel=44}}
#* {{jêder-malper|ku|jêgirtin=Lê rastiyek heye ku di cîhana me de çi hirç û çi jî '''qirereşk''' bi bandorin. Her wiha hinek hêzên din jî yê bi bandor henin. Bi wan re ji bo berjewendiyên netewî peywendî danîn, çalakiya herî xwezayiye. Lê tişta ne xwezayî ew e ku, were bîra kirin ku her hezek hegemonîk beriya her tiştî berjewendiyên xwe hene û kar û qezencên xwe difikrin.|nivîskar=QASİM ENGÎN|sernav=BERJEWENDİYÊN NAVDEWLETÎ ŞİMATOKİN|url=https://ronahi.net/ku/index.php/2019/11/25/berjewendiyen-navdewleti-simatokin/|malper=ronahi.net|sal=2019}}
#* {{J:Hawar:1998:2|hj=34|sernav=DÊRÛYA KÛRÊŞAN|nivîskar=Herekol Azîzan|r=835|jêgirtin=Teyr - Qertel, şahîn, wilih,dubrak, laçin, kurt, şisyarik, bazih, başok, bûm, pepok, kund, leyleg, qir, '''qirereşk'''...}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
{{werger-bin}}
oh3oeet08bpta9h5upea7yz8vbyk50r
6342807
6342806
2026-08-26T21:35:09Z
Wikihez
7344
6342807
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[qir]], [[qijik]], [[qel]], [[qişqelank]], [[qeşqelank]], [[zax]]
#* {{jêder-pirtûk|ku|sal=2015|jêgirtin=em rê nadin<br>hûn goştê me bixwin<br>wek '''qirereşk''' û qertal!|nivîskar=Ebdulla Peşêw|wergêr=Husein Muhammed|sernav=Xewa min nayê|url=https://zimannas.files.wordpress.com/2015/07/peshew.pdf|rûpel=44}}
#* {{jêder-malper|ku|jêgirtin=Lê rastiyek heye ku di cîhana me de çi hirç û çi jî '''qirereşk''' bi bandorin. Her wiha hinek hêzên din jî yê bi bandor henin. Bi wan re ji bo berjewendiyên netewî peywendî danîn, çalakiya herî xwezayiye. Lê tişta ne xwezayî ew e ku, were bîra kirin ku her hezek hegemonîk beriya her tiştî berjewendiyên xwe hene û kar û qezencên xwe difikrin.|nivîskar=Qasi̇m Engîn|sernav=Berjewendi̇yên Navdewletî Şi̇matoki̇n|url=https://ronahi.net/ku/index.php/2019/11/25/berjewendiyen-navdewleti-simatokin/|malper=ronahi.net|sal=2019}}
#* {{J:Hawar:1998:2|hj=34|sernav=Dêrûya Kûrêşan|nivîskar=Herekol Azîzan|r=835|jêgirtin=Teyr - Qertel, şahîn, wilih,dubrak, laçin, kurt, şisyarik, bazih, başok, bûm, pepok, kund, leyleg, qir, '''qirereşk'''...}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
{{werger-bin}}
nzqp8bb3o59j2eqmfhw54s8297p5l8v
6342808
6342807
2026-08-26T21:35:27Z
Wikihez
7344
/* Navdêr */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342808
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Navdêr ===
{{navdêr|ku|z=m}}
# [[qir]], [[qijik]], [[qel]], [[qişqelank]], [[qeşqelank]], [[zax]]
#* {{jêder-pirtûk|ku|sal=2015|jêgirtin=em rê nadin<br>hûn goştê me bixwin<br>wek '''qirereşk''' û qertal!|nivîskar=w:Ebdulla Peşêw|wergêr=w:Husein Muhammed|sernav=Xewa min nayê|url=https://zimannas.files.wordpress.com/2015/07/peshew.pdf|rûpel=44}}
#* {{jêder-malper|ku|jêgirtin=Lê rastiyek heye ku di cîhana me de çi hirç û çi jî '''qirereşk''' bi bandorin. Her wiha hinek hêzên din jî yê bi bandor henin. Bi wan re ji bo berjewendiyên netewî peywendî danîn, çalakiya herî xwezayiye. Lê tişta ne xwezayî ew e ku, were bîra kirin ku her hezek hegemonîk beriya her tiştî berjewendiyên xwe hene û kar û qezencên xwe difikrin.|nivîskar=Qasi̇m Engîn|sernav=Berjewendi̇yên Navdewletî Şi̇matoki̇n|url=https://ronahi.net/ku/index.php/2019/11/25/berjewendiyen-navdewleti-simatokin/|malper=ronahi.net|sal=2019}}
#* {{J:Hawar:1998:2|hj=34|sernav=Dêrûya Kûrêşan|nivîskar=w:Herekol Azîzan|r=835|jêgirtin=Teyr - Qertel, şahîn, wilih,dubrak, laçin, kurt, şisyarik, bazih, başok, bûm, pepok, kund, leyleg, qir, '''qirereşk'''...}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê}}
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
{{werger-bin}}
cotceix1ub1e2n8us5dkt28gpd34nzf
Sirûc
0
933636
6342815
6295824
2026-08-26T22:04:00Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342815
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Serenav ===
{{wp}}
{{serenav|ku|z=m}}
# {{f|ku|bajar}} Bajarekî girêdayî [[Riha]]yê.
# {{f|ku|navçe}} Navçeyeke girêdayî [[Riha]]yê.
#* {{J:Hawar:2:1998|sernav=Tarîxa Kurd û Kurdistanê 2|nivîskar=w:Osman Sebrî|hejmar=29|r=731|jêgirtin=Ordû ('''Sirûc'''): ev qeza, bê du sê eşîrên wek Mersawî û Poxpinikan biçûk, dawiya mayî hemî Berazê serxet, anê yê tirkiyê ye. Çiqas ko ev qeza berê gelekî mezin bû jî; piştî çêbûna hikûmeta Sûriyê, di sala 1919an da hêla Berêz a mezin dane ser welatê Sûryê. Berazê Sûryê bi qeza Eyn-el-ereb (kaniya ereban) bi nav dibe.}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê|y}}
==== Hevmane ====
* [[Pirsûs]]
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|arc}}:
*: {{Z|syc}}: {{W-|syc|ܣܪܘܓ|tr=Sĕrûḡ}}
* {{Z|hy}}: {{W-|hy|Սրուճ}}
*: {{Z|axm}}: {{W-|axm|Սրուճ}}
* {{Z|tr}}: {{W+|tr|Suruç}}
{{werger-bin}}
8fwg8x29b1rlzakr5k1cnfoqiohxrm8
6342816
6342815
2026-08-26T22:09:28Z
Wikihez
7344
6342816
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Serenav ===
{{wp}}
{{serenav|ku|z=m}}
# {{f|ku|bajar}} Bajarekî girêdayî [[Riha]]yê.
# {{f|ku|navçe}} Qezayeke girêdayî [[Riha]]yê.
#* {{J:Hawar:2:1998|sernav=Tarîxa Kurd û Kurdistanê 2|nivîskar=w:Osman Sebrî|hejmar=29|r=731|jêgirtin=Ordû ('''Sirûc'''): ev qeza, bê du sê eşîrên wek Mersawî û Poxpinikan biçûk, dawiya mayî hemî Berazê serxet, anê yê tirkiyê ye. Çiqas ko ev qeza berê gelekî mezin bû jî; piştî çêbûna hikûmeta Sûriyê, di sala 1919an da hêla Berêz a mezin dane ser welatê Sûryê. Berazê Sûryê bi qeza Eyn-el-ereb (kaniya ereban) bi nav dibe.}}
==== Tewandin ====
{{ku-tewîn-nav/nû|mê|y}}
==== Hevmane ====
* [[Pirsûs]]
==== Etîmolojî ====
{{bêetîmolojî|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|arc}}:
*: {{Z|syc}}: {{W-|syc|ܣܪܘܓ|tr=Sĕrûḡ}}
* {{Z|hy}}: {{W-|hy|Սրուճ}}
*: {{Z|axm}}: {{W-|axm|Սրուճ}}
* {{Z|tr}}: {{W+|tr|Suruç}}
{{werger-bin}}
kdoqim6rt63hp900akojo2on6iz0d2j
dev lê kirin
0
933808
6342809
6335202
2026-08-26T21:38:27Z
Wikihez
7344
/* Lêker */
6342809
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-kîte}}
=== Lêker ===
{{lêker|ku|c=b-gh}}
# [[gez kirin]]
#* {{J:Hawar:1998:2|r=1126|nivîskar=w:Herekol Azîzan|sernav=Yên Ko Xizmeta Însaniyetê Kirine: Lwîs Pastor|hj=55|jêgirtin=Wî gurî '''dev li''' heywan û însanan '''kiribû'''.}}
#* {{J:Firat Cewerî:Girtî:1986|r=57|jêgirtin=Hingî Kotan '''dev li''' lêva xwe ya jêr '''kiribû''' û bêdeng mabû.}}
#* {{J:Bavê Nazê:1986|r=31|jêgirtin=Ji fediya û qehra reşxeniqî '''dev li''' lêva xwe ya jêr '''kir''' (...)}}
==== Etîmolojî ====
Ji {{heve|ku|[[dev]] + [[lê]]|kirin}}.
==== Werger ====
{{werger-ser}}
* {{Z|tr}}: {{W|tr|ısırmak}}, {{W+|tr|dişlemek}}
{{werger-bin}}
drvpu8mfc4xfugcmpufn7zkggpe1hp1
وتن
0
971825
6342742
6231439
2026-08-26T19:25:13Z
Keyomerd
8814
/* Etîmolojî */
6342742
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Lêker ===
{{lêker|ckb|tr=[[witin]]}}
# [[gotin]]
#: {{mk|ckb|من '''دەڵێم'''.|tr=Min '''dełêm'''.|w=Ez dibêjim.|birêz=1}}
==== Etîmolojî ====
Ji {{hv|ira-pro|*uxtíš}}, ji {{hv|ine-pro|*uktíš||gotin}}. Hevreha {{hv|sdh|وەتن}}, {{hv|hac|واتەی}} (>kurmancî [[wate]]), {{hv|ae|𐬎𐬑𐬙𐬌|tr=ûxtî}}, {{hv|xcl|ուխտ|tr=ûxt}} (ji zimanekî Îranî), {{hv|sa|उक्ति|tr=ûktî}}. Rayeka dema niha -łê- hewceyî ravekirinê ye.
== {{ziman|sdh}} ==
=== Lêker ===
{{lêker|sdh|tr=[[witin]]}}
# {{guharto|sdh|وەتن}}
f0352jwp4rtvxv5s2urvtrb170yzwy3
6342747
6342742
2026-08-26T19:38:10Z
Şêr
1103
6342747
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Lêker ===
{{lêker|ckb}}
# [[gotin]] (raman, hest an agahiyekek bi rêya peyvan û zimên derbirîn)
#: {{mînak|ckb|من هیچم نەوت و ڕۆیشتم.|tr=Min hîçim newit u royştim.|werger=Min tiştek negot û çûm.}}
==== Dijmane ====
* {{g|ckb|بێدەنگ بوون}}
==== Hevmane ====
* {{g|ckb|گوتن}}
* {{g|ckb|قسە کردن}}
* {{g|ckb|درکاندن}}
* {{g|ckb|دوان}}
==== Etîmolojî ====
Ji {{hv|ira-pro|*uxtíš}}, ji {{hv|ine-pro|*uktíš||gotin}}. Hevreha {{hv|sdh|وەتن}}, {{hv|hac|واتەی}} (>kurmancî [[wate]]), {{hv|ae|𐬎𐬑𐬙𐬌|tr=ûxtî}}, {{hv|xcl|ուխտ|tr=ûxt}} (ji zimanekî Îranî), {{hv|sa|उक्ति|tr=ûktî}}. Rayeka dema niha -łê- hewceyî ravekirinê ye.
== {{ziman|sdh}} ==
=== Lêker ===
{{lêker|sdh|tr=[[witin]]}}
# {{guharto|sdh|وەتن}}
1oyjrhvvhphma82hzly11d1rys3fj8o
6342750
6342747
2026-08-26T19:41:16Z
Balyozbot
7867
[[Special:PermanentLink/6298023|Bot]]: rêzkirina beşan
6342750
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Lêker ===
{{lêker|ckb}}
# [[gotin]] (raman, hest an agahiyekek bi rêya peyvan û zimên derbirîn)
#: {{mînak|ckb|من هیچم نەوت و ڕۆیشتم.|tr=Min hîçim newit u royştim.|werger=Min tiştek negot û çûm.}}
==== Hevmane ====
* {{g|ckb|گوتن}}
* {{g|ckb|قسە کردن}}
* {{g|ckb|درکاندن}}
* {{g|ckb|دوان}}
==== Dijmane ====
* {{g|ckb|بێدەنگ بوون}}
==== Etîmolojî ====
Ji {{hv|ira-pro|*uxtíš}}, ji {{hv|ine-pro|*uktíš||gotin}}. Hevreha {{hv|sdh|وەتن}}, {{hv|hac|واتەی}} (>kurmancî [[wate]]), {{hv|ae|𐬎𐬑𐬙𐬌|tr=ûxtî}}, {{hv|xcl|ուխտ|tr=ûxt}} (ji zimanekî Îranî), {{hv|sa|उक्ति|tr=ûktî}}. Rayeka dema niha -łê- hewceyî ravekirinê ye.
== {{ziman|sdh}} ==
=== Lêker ===
{{lêker|sdh|tr=[[witin]]}}
# {{guharto|sdh|وەتن}}
iikpfjdeivtrzbjtqzophko3l8pqh48
Şablon:J:Hawar:1:1998
10
1325432
6342739
6334456
2026-08-26T19:07:56Z
Wikihez
7344
6342739
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|sal={{{sal|}}}
|nivîskar={{{nivîskar|}}}
|title={{{sernav|}}}
|weşanxane=Çapxana Teraqî
|url=
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=nivîskar,sal,hejmar,hj,sernav,r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly>
<noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=Celadet Alî Bedirxan|hejmar=19|sal=1933|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
]
},
"r": {
"label": "rûpel"
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"sal": {
"label": "sal"
}
},
"paramOrder": [
"hejmar",
"sal",
"sernav",
"nivîskar",
"terciman",
"r"
]
}
</templatedata>}}
{{jgcat|ku}}
</noinclude>
1iqgm7y16oox3lqj43ttmxwodlxzvuw
6342740
6342739
2026-08-26T19:08:20Z
Wikihez
7344
6342740
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|sal={{{sal|}}}
|nivîskar={{{nivîskar|}}}
|title={{{sernav|}}}
|weşanxane=Çapxana Teraqî
|url=
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=nivîskar,sal,hejmar,hj,sernav,r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=Celadet Alî Bedirxan|hejmar=19|sal=1933|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
]
},
"r": {
"label": "rûpel"
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"sal": {
"label": "sal"
}
},
"paramOrder": [
"hejmar",
"sal",
"sernav",
"nivîskar",
"terciman",
"r"
]
}
</templatedata>}}
{{jgcat|ku}}
</noinclude>
5qiruo1bstw5cp0klzx86tbcbb47sdi
6342741
6342740
2026-08-26T19:17:50Z
Wikihez
7344
6342741
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,sal,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=Celadet Alî Bedirxan|hejmar=19|sal=1933|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
]
},
"r": {
"label": "rûpel"
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"sal": {
"label": "sal"
}
},
"paramOrder": [
"hejmar",
"sal",
"sernav",
"nivîskar",
"terciman",
"r"
]
}
</templatedata>}}
{{jgcat|ku}}
</noinclude>
0k1j26pjp99sk19r84eeyjj1wnon8hs
6342744
6342741
2026-08-26T19:32:34Z
Wikihez
7344
6342744
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,sal,hj,sala-weşandinê
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=Celadet Alî Bedirxan|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
]
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
]
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
}
},
"paramOrder": [
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal"
]
}
</templatedata>}}
{{jgcat|ku}}
</noinclude>
8yvwopl1vs8daweut4re6cinp6v8i0f
6342745
6342744
2026-08-26T19:35:01Z
Wikihez
7344
6342745
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,sal,hj,sala-weşandinê
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=Celadet Alî Bedirxan|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
}
},
"paramOrder": [
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an"
}
</templatedata>}}
{{jgcat|ku}}
</noinclude>
iosenqm97lz4yq9nfzbowozowdy7uel
6342746
6342745
2026-08-26T19:37:20Z
Wikihez
7344
6342746
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=Celadet Alî Bedirxan|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an"
}
</templatedata>}}
{{jgcat|ku}}
</noinclude>
a26w7z3f3xc7uezayfryfuhhg9qzq5x
6342749
6342746
2026-08-26T19:41:05Z
Wikihez
7344
6342749
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=w:Celadet Alî Bedirxan|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an"
}
</templatedata>}}
{{jgcat|ku}}
</noinclude>
5lm3wqetiwh12hxh3hcf9c3nc7l3hu1
6342753
6342749
2026-08-26T19:42:40Z
Wikihez
7344
6342753
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=w:Celadet Alî Bedirxan|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an"
}
</templatedata>}}
{{jgcat|ku}}
</noinclude>
6tfpto58oe7j3ai8lhkhzychklfjjjv
6342754
6342753
2026-08-26T19:43:42Z
Wikihez
7344
6342754
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=w:Celadet Alî Bedirxan|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an"
}
</templatedata>}}
== Herwiha binêre ==
* {{ş|Hawar2}}
{{jgcat|ku}}
</noinclude>
b7ssscgqrkvqeur6tcm21i3ykylcb9h
6342755
6342754
2026-08-26T19:44:05Z
Wikihez
7344
6342755
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=w:Celadet Alî Bedirxan|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an"
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar2}}
{{jgcat|ku}}
}}
</noinclude>
2mnvqby1k75rbj1wzny9hk8dtk9nelh
6342757
6342755
2026-08-26T19:48:14Z
Wikihez
7344
6342757
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=w:Celadet Alî Bedirxan|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 1ê"
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar2}}
{{jgcat|ku}}
}}
</noinclude>
ek8mqw9f5er1nq3qrzwsinyhdnnucgt
6342764
6342757
2026-08-26T20:24:10Z
Wikihez
7344
6342764
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=w:Celadet Alî Bedirxan|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 1ê. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar2}}
{{jgcat|ku}}
}}
</noinclude>
51lr51m2pzf18asfkurxde7s5sltjrz
6342770
6342764
2026-08-26T20:28:32Z
Wikihez
7344
Wikihezî/ê navê [[Şablon:J:Hawar:1998:1]] weke [[Şablon:J:Hawar:1:1998]] guhart
6342764
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Teraqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=w:Celadet Alî Bedirxan|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 1ê. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar2}}
{{jgcat|ku}}
}}
</noinclude>
51lr51m2pzf18asfkurxde7s5sltjrz
6342820
6342770
2026-08-26T23:04:14Z
Wikihez
7344
6342820
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Tereqî
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=w:Celadet Alî Bedirxan|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 1ê. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar2}}
{{jgcat|ku}}
}}
</noinclude>
gqeq210nfjj4i6bdwt4clvb2jhfphij
6342829
6342820
2026-08-27T06:48:24Z
Wikihez
7344
6342829
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Tereqî
|nivîskar = {{#if:{{{nivîskar|}}}|{{Hawar/nivîskar-switch|{{{nivîskar|}}}}}}}
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=C.A.B|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 1ê. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar2}}
{{jgcat|ku}}
}}
</noinclude>
tpj7vlj1iku5vduflqt5jphhj6l9fwy
6342831
6342829
2026-08-27T06:55:48Z
Wikihez
7344
6342831
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Tereqî
|nivîskar ={{#if:{{{nivîskar|}}}|{{Hawar/nivîskar-switch|{{{nivîskar|}}}}}}}
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,nivîskar,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=C.A.B|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 1ê. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar2}}
{{jgcat|ku}}
}}
</noinclude>
9o71ee7hzs4fohin5axg4de1pnk9n28
6342832
6342831
2026-08-27T06:58:29Z
Wikihez
7344
6342832
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Tereqî
|nivîskar ={{#if:{{{nivîskar|}}}|{{Hawar/nivîskar-switch|{{{nivîskar|}}}}}}}
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal,nivîskar
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=Celadet Alî Bedirxan|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 1ê. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar2}}
{{jgcat|ku}}
}}
</noinclude>
jjm10tkgk0znjhfzc9el86yrxcaakm7
6342833
6342832
2026-08-27T06:59:31Z
Wikihez
7344
6342833
wikitext
text/x-wiki
<includeonly>{{#invoke:quote|call_quote_template
|template=quote-journal
|ku
|weşanxane=Çapxana Tereqî
|nivîskar ={{#if:{{{nivîskar|}}}|{{Hawar/nivîskar-switch|{{{nivîskar|}}}}}}}
|url=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/mode/2up
|kovar=w:Hawar
|versiyona-nû=ji nû ve hatiye weşandin bi{{#ifexpr:{{#invoke:string/templates|match|{{{rûpel|{{{r|}}}}}}|[0-9]+|}}>485| transkrîpsiyona {{w|Emîn Narozî}} û}}
|cild2=1
|sernav2=Hawar Hejmar 1-23
|sal={{#ifexpr:{{#invoke:string/templates|match|{{{hejmar|{{{hj|}}}}}}|[0-9]+|}}>14|1933|1932}}
|sal2=1998
|cih2=w:Stockholm
|amadekar2=w:Firat Cewerî
|isbn2=91 88592-34-0
|weşanxane2=Weşanên Nûdem
|allowparams=r,rûpel,rûpela-orîjînal,nivîskar
|textparam=jg,jêgirtin
|rûpel2={{{r|{{{rûpel|}}}}}}
|rûpel={{{rûpela-orîjînal|}}}
|propagateparams=terciman,wergêr,sernav,hejmar,hj
|pageurl2=https://archive.org/details/KovaraHawar/HAWAR%20CILT%201/page/n{{#invoke:ugly hacks|match|{{{r|{{{rûpel|}}}}}}|[n0-9]+|}}/mode/2up
}}</includeonly><noinclude>
* {{J:Hawar:1998:1|sernav=Ferhengoq|nivîskar=Celadet Alî Bedirxan|hj=19|r=387|jêgirtin=('''Çand''') Ev pirseqe{{sic}} geleq {{j-wesf|beriya guhartina herfên Q-K}} mihim e. Divêt xwendevanên me kenc bala xwe bidin û di ser zmanê xwe re bêxin. Ji ber qo ev pirsa ha ne di zmanê me de ne jî di zmanên cînar de jî heye. Ereban jî vê paşîyê xistine zmanê xwe. Ji tevayiya ilm û hiner û pîşeyên spehî re çand tête gotin. Me ev pirs ji çandinê girt. Ji xwe di her zmanî de jî welê ye.}}
{{belgekirin|naverok=
{{kurterê|Şablon:Hawar1}}
<templatedata>
{
"params": {
"sernav": {},
"nivîskar": {},
"hejmar": {
"aliases": [
"hj"
],
"type": "number",
"required": true
},
"r": {
"label": "rûpela Firat Cewerî",
"aliases": [
"rûpel"
],
"type": "number",
"required": true
},
"terciman": {
"aliases": [
"wergêr"
],
"label": "terciman",
"description": "terciman"
},
"rûpela-orîjînal": {
"label": "rûpela Hawarê"
},
"jêgirtin": {
"label": "metna jêgirtinê",
"type": "string",
"suggested": true
},
"wekçavkanî": {
"description": "Eger di nav etîketa çavkaniyê (ref) de tê bikaranîn, li vir 1 binivîse da ku formata çavkaniyê were bikaranîn"
}
},
"paramOrder": [
"jêgirtin",
"hejmar",
"sernav",
"nivîskar",
"terciman",
"r",
"rûpela-orîjînal",
"wekçavkanî"
],
"description": "Ji bo jêgirtinên Kovara Hawarê ji edîsyona Firat Cewerî ya 1998an cildê 1ê. Sal li gorî hejmarê otomatîk derdiveke."
}
</templatedata>
== Herwiha binêre ==
* {{ş|Hawar2}}
* {{ş|Hawar/nivîskar-switch}}
{{jgcat|ku}}
}}
</noinclude>
mlj93t7oxdejq5evk7mch2ckynep1zw
Şablon:Hawar1
10
1325433
6342772
6334787
2026-08-26T20:29:00Z
Wikihez
7344
Rûpel hat valakirin
6342772
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
6342773
6342772
2026-08-26T20:29:04Z
Wikihez
7344
Ji bo [[Şablon:J:Hawar:1:1998]] hat beralîkirin
6342773
wikitext
text/x-wiki
#BERALÎKIRIN [[Şablon:J:Hawar:1:1998]]
k1a0pb01s4zfnasml1ih91dpfs5flya
Şablon:Hawar2
10
1325434
6342775
6334785
2026-08-26T20:29:42Z
Wikihez
7344
Hedefa beralîkirinê ji [[Şablon:J:Hawar:1998:2]] ber bi [[Şablon:J:Hawar:2:1998]] ve guhart
6342775
wikitext
text/x-wiki
#BERALÎKIRIN [[Şablon:J:Hawar:2:1998]]
7a9u26knin03q05wxs47042jz9na0y6
Wîkîferheng:Dîwan/2026
4
1327120
6342765
6340889
2026-08-26T20:25:29Z
Wikihez
7344
6342765
wikitext
text/x-wiki
<noinclude>{{Dîwan/arşîv-ser|2026}}</noinclude>
{{clear}}
== Daxwazên standardkirinê ==
https://ku.wiktionary.org/wiki/W%C3%AEk%C3%AEferheng:Daxwaz%C3%AAn_standardkirin%C3%AA, Gelo di vê malperê de peyvên hatîye standart kirin; ji malperê rakin? Zêde tehlîhev e. @[[Bikarhêner:Bikarhêner|Bikarhêner]]@[[Bikarhêner:Guherto|Guherto]] [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine|gotûbêj]]) 10:03, 8 kanûna paşîn 2026 (UTC)
:@[[Bikarhêner:Rewiye tine|Rewiye tine]] [[Taybet:Tercîh#mw-prefsection-gadgets]] li vir amûra [[MediaWiki:Gadget-aWa.js/belgekirin|awa]] aktîv bike û pê re dikarî gotûbêjan arşîv bikî. Li sayfa [[WF:DS]] li kêleka her sernavê gotûbêjê <nowiki>[arşîv bike]</nowiki> derdikeve, pê lê bike û ew ê arşîv bike. Eger nikarî tu tenê şablona {{ş|ds-kirî}} îlawe bike, ez ê dûre arşîv bikim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:35, 5 tîrmeh 2026 (UTC)
== Standartkirin ==
Sala borî, min pêşnîyazek kiribû. Halî hazir piştî daxwaza standarkirinê em du heftî disekinin, eger kesek fikrek dîyar neke. Raste rast peyv li gor ferhenga standart a mezopotamyayê tê standart kirin. Ji xwe sazîyek vê karî dike çima em vê barî dikin stuyê xwe. Mesela ez çaxe di wîkîferhengê de peyvek digêrim; standart a peyvê jî li cem xwe kontrol dikim. Eger destûr hebe bi germî dikarim wê malperê standart bikim. Benda bûna du heftîyan gelo ne zehmet e? Duyemîn pêşnîyaza min nîşandana standarta peyvê di malpera de ye. Kesek dema malperan binêre, divê li jora malperan bibîne ku ev peyv standart e. Ev jî hîzmet e. Çimkî nivîskar, wergêr, edîtor, rojnemavan hez dikin bi peyvê standart binivîsin. https://ku.wiktionary.org/wiki/k%C3%AAf li vir wekî mînak min daye nîşan. Lê îfade eger wisa be: Standarda Rastnivîsîna Ferhenga Kurdî a Weqfa Mezopotamyayê kêf (r. 253) e yê çetir be. Çimkî îfadeya berê de peyva kurdî-tirkî derbas dibe û di mejîyê mirov de tevlihevî çêdibe.@[[Bikarhêner:Bikarhêner|Bikarhêner]]@[[Bikarhêner:Guherto|Guherto]] [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine|gotûbêj]]) 10:25, 8 kanûna paşîn 2026 (UTC)
:Merheba. Hevalno dîyar e karê standarkirinê li wîkîferhengê rawestîya ye. Min sê peyv ji bo standartkirinê qeyd kir. Kes li ser şîrove nenivîsî. Mehek jî li ser derbas bû. Aniha ez dikarim van rupelan biguherim. Li gor qaîdeya hatine danîn wisa ye. Daxwaza min heta niha jî ew e kelîmeyên di ferhenga standartkirinê de heyî divê em bikaribin rasterast li vir jî bikin standart. An jî demê kurttir bikin. Li weqfa mezapotamyayê 20 mirov digêhin hev li ser peyvekî seetan nîqaş dikin. Ma hewceyê em jî li vir nîqaş bikin? Tevlî vê jî ji xwe kes li ser vê mijare nasekîne van dema. Xeynî vê pêşnîyaza min nîşandana standarta peyvê di malpera de hebû. Li ser malperê 'Standarda Rastnivîsîna Ferhenga Kurdî a Weqfa Mezopotamyayê kêf (r.253) e' Tiştek mîna wî hebe yê gelek kêrî her cure nivîskarê me were. Çimkî hin nivîskarên me hez dike bi kelîmeyên standart binivîse. Di malperê de bila vê hêsanî fam bike çêtir e. @[[Bikarhêner:Bikarhêner|Bikarhêner]]@[[Bikarhêner:Ghybu|Ghybu]] [[Bikarhêner:Rewiye tine|Rewiye tine]] ([[Gotûbêja bikarhêner:Rewiye tine|gotûbêj]]) 18:35, 17 sibat 2026 (UTC)
::Merheba @[[Bikarhêner:Rewiye tine|Rewiye tine]]. Ev format pir xirab dibe. Tu dikarî li beşa Çavkaniyê binivîsî bi şablona {{ş|kitêb}} binivîsî çêtir e û tê eynî maneyê. Lê her kes standarda Weqfa Mezopotamyayê qebûl nakin û ez jî şibhê dikim ku ev websîte bi awayekî kolektîv tê çêkirin an na. Loma em bi ya kitêba rastnivisînê çêkin û eger îtîraz tinebe, şablona {{ş|ds-kirî}} li gotûbêja [[WF:DS]] binivîse, dûre li gotûbêjê arşîv bike, ne hewce ye li hêviya kesên din bisekinî. Eger itirazek hebe, ê ku dixwaze dûre dîsa şablona ds zêde bike. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:30, 5 tîrmeh 2026 (UTC)
:::[https://berwarnews.com/ferhenga-rastnivisine-qonaxeke-giring-a-standardkirina-kurmanci-ye/ Roportaja Mikail Bülbül] li ser proseya standardkirinê. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:57, 9 tîrmeh 2026 (UTC)
::::Min nû dît an jî nû hatiye zêdekirin lê meqaleyek bi navê [https://www.ferhengkurdi.com/?q=iltihap&modal=lijne lijneya edîtorîyê] nivîsandine [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:40, 22 tîrmeh 2026 (UTC)
== <span lang="en" dir="ltr">Annual review of the Universal Code of Conduct and Enforcement Guidelines</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
I am writing to you to let you know the annual review period for the Universal Code of Conduct and Enforcement Guidelines is open now. You can make suggestions for changes through 9 February 2026. This is the first step of several to be taken for the annual review. [[m:Special:MyLanguage/Universal Code of Conduct/Annual review/2026|Read more information and find a conversation to join on the UCoC page on Meta]].
The [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Universal Code of Conduct Coordinating Committee]] (U4C) is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review was planned and implemented by the U4C. For more information and the responsibilities of the U4C, [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|you may review the U4C Charter]].
Please share this information with other members in your community wherever else might be appropriate.
-- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]])<section end="announcement-content" />
</div>
21:02, 19 kanûna paşîn 2026 (UTC)
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29905753 -->
== Request for comment (global AI policy) ==
<bdi lang="en" dir="ltr" class="mw-content-ltr">
Apologies for writing in English. {{int:Please-translate}}
A [[:m:Requests for comment/Artificial intelligence policy|request for comment]] is currently being held to decide on a global AI policy. {{int:Feedback-thanks-title}}
[[Bikarhêner:MediaWiki message delivery|MediaWiki message delivery]] ([[Gotûbêja bikarhêner:MediaWiki message delivery|gotûbêj]]) 00:58, 26 nîsan 2026 (UTC)
</bdi>
<!-- Message sent by User:Codename Noreste@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30424282 -->
== Guharto ==
: <small>→ Ji rûpela ''[//ku.wiktionary.org/w/index.php?title=Got%C3%BBb%C3%AAj:berf%C3%AEtik&oldid=6233338 Gotûbêj:berfîtik]'' hatiye girtin.</small>
Silav {{r|Ghybu}} ma hewce ye em guhartoyan jî kategorîze bikin? Li vê [[ژیشک]] binere, tije guhartoyên wê hene, ku em ji gişan re guhandar binivîsin dê 10 navên heman hebin di nav wê kategorîyê de. Tu çi difikirî? [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 09:40, 26 nîsan 2026 (UTC)
:{{silav|Keyomerd}}. Erê, problem çî ye? {{=)}} Ew jî tên bikaranîn... Dema ku peyvek tê çêkirin hewce ye ku em hemû agahiyên wan binivîsin: bilêvkirin, bikaranîn, mînak, terîm, herêm, tewandin, etîmolojî...
:Bi min peyvên ku wekî ''guherto'' hatine nivîsandin bi nivîsa {{w|Italic type|îtalîk|ziman=en}} (xwahr) di nav kategoriyan de werin nişan kirin (ji bo cudakirinê). {{ping|Ferhengvan|Bikarhêner}} [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 16:40, 30 nîsan 2026 (UTC)
::Yên '''''nestandard''''' di kategorîyan de biferq werin nîşandan baştir e. Qene em karibin wan ji yên stadard ferq bikin. @[[Bikarhêner:Ghybu|Ghybu]] Xêra xwe hûn sîstemeke wisa çêkin. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 14:36, 1 gulan 2026 (UTC)
:::Merheba @[[Bikarhêner:Keyomerd|Keyomerd]] û @[[Bikarhêner:Bikarhêner|Bikarhêner]] ev xisûsiyet jixwe di şablonên rêzimanê de heye, wextê {{param|formaalt|1}} dinivîsin, made dikeve Kategoriya [[:Kategorî:Formên alternatîv bi kurmancî]] li gorî koda zimanî jî zimanên din tê çêkirin. Hemû madeyên kurmancî bi alfabeya erebî dikevin vê kategoriyê lê nizanim ev tiştekî rast e Yan xelet e, ji bo nîşandanê min çêkiribû lê min hîn wext nedît ku nîqaşek li ser çêkim. Qaîdeyên bikaranîna vê parametreyê di wîkiya îngilîzî de jî tam ne belî ye. Du gotûbêj [https://en.wiktionary.org/wiki/Wiktionary:Requests_for_moves,_mergers_and_splits#Category:Alternative_forms_by_language] [https://en.wiktionary.org/wiki/Wiktionary:Beer_parlour/2024/June#Decluttering_the_altform_mess] çêkirine lê ji bo îngilîzî ev parametre nehatiye bikaranîn. Min ji bo nîşandanê niha [https://ku.wiktionary.org/w/index.php?title=bax%C3%A7%C3%AA_zarokan&diff=prev&oldid=6241372] ceriband lê bi min xelet e. Em çawa bikin? Kengî vê parametreyê bi kar bînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:29, 8 tîrmeh 2026 (UTC)
::::@[[Bikarhêner:Kurdanparez|Kurdanparez]] Tu çi difikirî? Ji bo zazakî [https://ku.wiktionary.org/w/index.php?title=a_c%C4%B1_geyrayene&oldid=6241396 wisa] bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:55, 8 tîrmeh 2026 (UTC)
:::::Kategorîyekê cuda baş dibe. Wextê ku ez li kategorîya "lekêren bi zazakî" dinêrim, ez hem formê bi şikilê Johnsonê û formê standardê dibînim. Zaten wexte ku ez dikevim ê Johnsonê, min dibe formê standardê. Kategorîyekê cuda, bi taybetî ji bo nivîsandinên alternatîf, baş dibe.
:::::Lê em bîr nekin ku wextê ku em bo formên alternatîf yên devokî qal dikin, belkî adil neye ku em ev bişînin derekê din yê ku însan ewqas nabînin. [[Bikarhêner:Kurdanparez|Kurdanparez]] ([[Gotûbêja bikarhêner:Kurdanparez|gotûbêj]]) 22:03, 8 tîrmeh 2026 (UTC)
::::::@[[Bikarhêner:Kurdanparez|Kurdanparez]] Gelo min rast fêm kir? Tu dibêjî formên {{q|ku|kîvroşk}} bi dîqet werin guhartokirin lê bi yên bi alfabeya Jacobsonê hemû bikin {{param|formaalt|1}}? Formên Jacobsonê dê bikevin Kategoriya [[:Kategorî:Lêker bi zazakî|Lêker bi zazakî]] û [[:Kategorî:Lema bi zazakî|Lema bi zazakî]] yan na? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:55, 8 tîrmeh 2026 (UTC)
:::::::Bi min naxwaze di wan kategoriyan de bikeve. Wek tu dibînî dûplîkat pir hene. Bi min çareya baştir yên Johnsonê di katehgorîyekê din bikevin (bila format li rûpelan neyin guherandin, bi tenê kategorî) [[Bikarhêner:Kurdanparez|Kurdanparez]] ([[Gotûbêja bikarhêner:Kurdanparez|gotûbêj]]) 00:37, 9 tîrmeh 2026 (UTC)
== Peyvên soranî bi latînî ([[:Kategorî:Soranî]]) ==
Silav, di nav vê kategoriyê (''[[:Kategorî:Soranî]]'') de pirr peyv tenê bi alfabeya latînî hatine nivîsandin. Divê ew mutleq jî bi alfabeya erebî werin transkrîbe kirin ji ber ku soranî bi alfabeya erebî tê nivîsand... Bikarênerên ku soranî dizanin dikarin wan sererast bikin? Mînakên guhertinan: [//ku.wiktionary.org/w/index.php?title=zor%C3%AEne&curid=6584&diff=6233355&oldid=5859303], [//ku.wiktionary.org/w/index.php?title=s%C3%AAw&diff=6233097&oldid=6233003], [//ku.wiktionary.org/w/index.php?title=sewz&diff=6233313&oldid=6069107], ... Spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:16, 2 gulan 2026 (UTC)
== <span lang="en" dir="ltr">Vote now in the 2026 U4C election</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
Eligible voters are asked to participate in the 2026 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|2026 Election information page]]. The vote closes on 2 June 2026 at [https://zonestamp.toolforge.org/1780358400 00:00 UTC].
Please vote if your account is eligible. Results will be available by 14 June 2026. -- In cooperation with the U4C,<section end="announcement-content" />
</div>
[[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 17:15, 27 gulan 2026 (UTC)
<!-- Message sent by User:Keegan (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 -->
== RFC about AI-generated content in Wikimedia Commons ==
<bdi lang="en" dir="ltr">Apologies for writing in English, please help translate this message to your language. You are invited to participate in a [[c:Commons:Requests for comment/Policy update for AI content|request for comment on Wikimedia Commons about a policy update for AI content]]. This may affect files that are uploaded to Wikimedia Commons for use on this project. Thank you. [[m:User:Codename Noreste|Codename Noreste]] ([[m:User talk:Codename Noreste|gotûbêj]])</bdi> 17:12, 23 hezîran 2026 (UTC)
<!-- Message sent by User:Codename Noreste@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 -->
== <span lang="en" dir="ltr">Deployment of Legal and Safety Contacts Link in the Footer of Your Wiki</span> ==
<div lang="en" dir="ltr">
<section begin="Message"/>
'''Legal & Safety Contacts'''
Hello community, the Wikimedia Foundation has provided a [[wmf:Special:MyLanguage/Legal:Wikimedia Foundation Legal and Safety Contact Information|single legal and safety contact page]], to be linked in the footer of your wiki, to ensure access to accurate legal information. This is a regulatory requirement. We have already rolled out links to English, German, Italian, Spanish and other wikis and we will deploy to your wiki soon. [[m:Special:MyLanguage/Wikimedia_Foundation_Legal_and_Safety_Contacts_FAQ|Please read more on the project page]] and leave any comments in this thread or on the [[m:Special:MyLanguage/Talk:Wikimedia Foundation Legal and Safety Contacts FAQ|talk page]].
<section end="Message"/>
</div>
-- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 13:31, 25 hezîran 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Sannita_(WMF)/Mass_sending_test&oldid=30731267 -->
== Jêbirina ferhenga Sadallah ==
Merheba @[[Bikarhêner:Guherto|Guherto]] Îmkan heye lîsteyeke wisa çêkî ku hemû sayfeyên Cyrusbot çêkir yên ku tê de tenê tercimeyeke îngilîzî heye û ev tercime jî hatibe jêbirin? Nimûne ''[[derdzanî]], [[êşzanî]]'' tenê tercimeya [[pestology]] heye ew jî ji ber heqê telîfê hatiye jêbirin. Nimûneyeke din ''zêrrgeh'', ''zêrrkar'' [[goldsmith]] hatiye jêbirin zêr wekî zêrr hatiye guhartin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:48, 26 hezîran 2026 (UTC)
:Temam @[[Bikarhêner:Wikihez|Wikihez]], lê vê heyvê ez nikarim, heyva were ez ê li vê meseleyê vegerim înşellah. [[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 22:51, 2 tebax 2026 (UTC)
== Beşa Tewandin bo kurmancî ==
Bi ya min şablona {{ş|ku-tewîn-nav}} û ya fiîlê em bixin beşa Tewandinê (wekî [[şodir|zazakî]]. Bi vî awayî hem ji aliyê şiklî ve hem jî ji aliyê bikaranînê ve xweştir xuya bike. Eger di qismê Tewandinê de be, ê ku dixwaze îzah û notên xwe yan jî emilandinên din jî dikare binivîse. Hûn çi dibêjin? @[[Bikarhêner:Ferhengvan|Ferhengvan]], @[[Bikarhêner:Ghybu|Ghybu]], @[[Bikarhêner:Bikarhêner|Bikarhêner]]. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:05, 6 tîrmeh 2026 (UTC)
:Belkî em dikarin Formata şiweyan wekî ya behdînî jî têxin nav şablonê. Pir caran şiklê tabloya Tercimeyan ji ber dirêjbûna şablona teqînê jî xirab dibe wekî [[astrofizîk]]. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:08, 6 tîrmeh 2026 (UTC)
:Min mijarê te li jorê yê xwe dît, fikirên min jî hene eger baş e. Yê ku te gotiye bi min baş dibe, ji ber ku her rûpel ji vê mîna hev dibe. Em ê rindtir jî ferq li nav devokan binivîsin. [[Bikarhêner:Kurdanparez|Kurdanparez]] ([[Gotûbêja bikarhêner:Kurdanparez|gotûbêj]]) 11:44, 7 tîrmeh 2026 (UTC)
::@[[Bikarhêner:Bikarhêner|Bikarhêner]] fikr? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 08:44, 15 tîrmeh 2026 (UTC)
:::Formata ku te teklîf kirîye jî ne xerab e, baş tê xuyan. Feqet bi min halê berê (mewcûd) baştir e. Ji ber ku ev şablon (ku-tewîn-nav) bi piranî kurt in û ji bo her kesî ne mihîm e, lewma li kinarê bi formeke hebe ku karibe were vekirin û girtin baştir e. Lê belê ger şablon dirêjtir bin, em karin wekî ya wîkîya almanî bikin (ew jî wekî teklîfa te ye). -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:50, 15 tîrmeh 2026 (UTC)
::::Em tabloya lêkerê jî rakin? 1)Em wekî navdêran bikin, bin beşa Tewandinê 2) Tabloya {{ş|ku-tewîn-reh}} were şûnda tabloya {{ş|ku-tewîn-lk}}: '''[//ku.wiktionary.org/w/index.php?title=gotin&diff=prev&oldid=6323518]''' , '''[//ku.wiktionary.org/w/index.php?title=vexwarin&diff=prev&oldid=6323525]''' 3) Bi şablona {{ş|tewandin}} û bi parametreyên {{param2|niha}} û {{param2|borî}}: '''[//ku.wiktionary.org/w/index.php?title=vexwarin&diff=6323528&oldid=6323525]'''--[[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 10:46, 3 tebax 2026 (UTC)
:::::Ez dibêjim em {{ş|ku-tewîn-lk}} bixin bin beşa Tewandinê feqat dema niha û borî tevî formên wan ên negatîv tê de cih bigire, hinek fireh be jî baş e. Dilê min dixwaze yek ji opsiyonên 2 û 3 tevî beşa Tewandinê jî bi kar bînin lê nizanim kîjan hilbijêrin? Herwiha ji bo îsman em dikarin resim zêde bikin ji bo nîşandanê, em ê fiîlan çawa bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:10, 3 tebax 2026 (UTC)
::::::Bi min ji bo kesên ku kurmancî dizanin, tabloya tewandinê "piranî" ne hewce ye. Dema ku ez lêkereke nû hu dikim pêşta rehê wê digerim paşê jî devoka wê... Şablonana "ku-tewîn-reh" pirr dirêj nîne: li ser mobîlê jî pirsgirêk nîne: bin beşa "Lêker"ê de tê nivîsandin: lojîk e. Problema beşa Tewandinê va ye: em ê hertim du rûpel serrast bikinê, rupela lêker (beşa "Tewandinê") û rûpela Tewandin:''lêker''. Bila hêmû gotûbêj tenê li ser rûpela Tewandinê were kirin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:06, 3 tebax 2026 (UTC)
:::::::Erê em ku-tewîn-lk bi ku-tewîn-reh biguherînin dê baştir bibe. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:30, 4 tebax 2026 (UTC)
::::::::Parametreya {{param2|hêl|çep}} jî hat tevlî tabloyê kirin, bnr. {{q|ku|pêçandin}}. Herwiha niha wekî tabloyên navdêran tên veşartin jî (''Toggle element''), bnr. {{q|ku|xwarin}}. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:41, 22 tebax 2026 (UTC)
== Reşwî ==
Silav ji we gî re, Pirsekê min heye.
Ez difikirim şablonekê din çê bikim boy devokek kurmancî, yê êla Reşwî. Ew lêkerên xwe hinek cuda ditewînin. Mesela te hem "ez dikim" bêjî yan jî "ez dikime", "em dikinî, em tênî, te em kuştinî" (ne "em dikin") dema xwe yek in lê maneyên xwe ne yek in, "ez bikim" "ez ê bikim" "ez bikime" û dewamên xwe hemû demên xwe yek in lê mane dîsa ne yek in.
Eger min çê kir, şûna xwe li ku derê tînim? Ez difikirim li tewandina devokên kurdî yê ku "tabên" xwe hene "kurmancîya rojavayî", "kurmancîya standard" hsw. Lê tewandin ewqes cuda ye dixwaze ku wî şablona tewandina kurdî pir were guherîn.
Hûn çi dibêjin? (R: Hûn dewên çi?) [[Bikarhêner:Kurdanparez|Kurdanparez]] ([[Gotûbêja bikarhêner:Kurdanparez|gotûbêj]]) 11:38, 7 tîrmeh 2026 (UTC)
:{{silav|Kurdanparez}} Binêre mînaka devoka ''rojhilatî'': [[Modul:ku-tewandin#L-135]] / [[Modul:ku-tewandin#L-138|L138]] / [[Modul:ku-tewandin#L-143|L-143]], .. Di nav modula ''ku-tewandin"-ê de tê çêkirin. [[Gotûbêja modulê:ku-tewandin#Paşgirên lêkeran di kurmanciya rojhilatî de]] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:09, 7 tîrmeh 2026 (UTC)
::PS: Dema niha: [[Modul:ku-tewandin#L-128]]; dema borî: [[Modul:ku-tewandin#L-153]] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 13:15, 7 tîrmeh 2026 (UTC)
:::Merheba @[[Bikarhêner:Ghybu|Ghybu]], Eger mimkin be tu dikarî yên devokî têxî binmodulekê û bila modul load bike, bi vî awayî belkî çêkirina yên nû û famkirina modulê hêsantir be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:09, 7 tîrmeh 2026 (UTC)
:::Lê di devokê reşwî de hem dema niha yê statîk heye (Îng: I do -> Ez dikim) û yê progressîf heye (I am doing -> Eîz (nêr) Ez î (mê) dikime, yan jî Ez î dikime/Ez ê dikime). Reşwî ji yê standardê pirtir bo zayend ferq tîne, hem jî li dema pêşî (Ez ê bikim (Nêr) ez a bikim (Mê)). Dema pêşî jî formên cuda hene (Ezêk bikime (I will be doing it) û ez ê/a bikim (I will do it))
:::Ev di modûlê têhel bê? [[Bikarhêner:Kurdanparez|Kurdanparez]] ([[Gotûbêja bikarhêner:Kurdanparez|gotûbêj]]) 22:09, 8 tîrmeh 2026 (UTC)
== WF:Xebat ==
Min sayfeya [[WF:Xebat]] çêkir, xeletiyên ku hûn ferq dikin ji kerema xwe lê zêde bikin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:35, 15 tîrmeh 2026 (UTC)
== Modul:quote ==
@[[Bikarhêner:Ghybu|Ghybu]], @[[Bikarhêner:Bikarhêner|Bikarhêner]], @[[Bikarhêner:Keyomerd|Keyomerd]], @[[Bikarhêner:Ferhengvan|Ferhengvan]] Merheba, ez modula îngilîzî ya jêgirtin û çavkaniyan li gorî şablonên {{ş|jêder}} format dikim û ji bo ku hertişt wekî formata me ya niha be, gelek serê min diêşe. Ez dibêjim bila em dev ji formata niha berdin wekî ya îngilîzî bi kar bînin ji ber ku gelek xisûsiyetên îngilîzî hene ku yekî dikare biemilîne. Hûn ê bibêjin niha ji kû hat bîra tê, min got [[Wîkîferheng:Xebat#MediaWiki:Gadget-start.js|start.js]] nû bikim û min dît otomatîk çavkanî bi riya [[mw:Citoid]]ê bi riya DOI, ISBN û lînk tê çêkirin, min got wiya jî li skrîptê îlawe bikim loma min [[Wîkîferheng:Xebat#Mediawiki:Gadget-citoid-helper.js|Mediawiki:Gadget-citoid-helper.js]] hazir kir lê hin parametreyên Citoidê kêm bûn, min got ka wana rast bikim, min dît formata me ya niha ti standard bi kar nayîne tenê parametreyan bi virgulê li hev dixe.
Ez dibêjim formata îngilîzî baştir e, hem ne îtalîk e ku bi hêsanî tên xwendin, hem jî tarîx û çavkanî herî pêşî tên nîşandan ku ji bo peyitandinê bo min muhîm e. Modula îngilîzî de hema bêje her tişt hatiye çêkirin, eger em rûnin tenê yên lazim li şablona çavkaniyên xwe binivîsin ew ê gelek wext bistîne. Eger em modula îngilîzî bi kar bînin, em ê hem karibin şablonên îngilîzî bi hêsanî û rast kopî bikin hem jî kurdîkirina parametreyan gelek hêsan e. Fikir? --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:20, 24 tîrmeh 2026 (UTC)
: Ji bo miqayesekirinê bnr. [[:en:Template:quote-book]] / [[Şablon:jêder-kitêb/ceribandin]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:32, 24 tîrmeh 2026 (UTC)
::Bi min bila yê mewcûd jî bimîne, ew jî şiklen xweş û baştir e. Feqet bi min jî yên îngilîzî rehettir in, eger rastkirina yê mewcûd zehmet be, em rasterast wan ji xwe re bînin û tercime bikin. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 09:41, 24 tîrmeh 2026 (UTC)
:::Ez êvarê ve dixebitim, min nêzîk kiribû lê min got belkî hûn qane bibin lê xuya ye hûn ê hîn serê min gelek biêşînin {{=D}} [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 09:59, 24 tîrmeh 2026 (UTC)
::::@[[Bikarhêner:Bikarhêner|Bikarhêner]] û @[[Bikarhêner:Ghybu|Ghybu]] Eger îtîrazek tinebe, ez ê îtalîk ji jêgirtinê rakim... Jixwe bi riya [jêgirtin] dikare were veşartin û her daim bi * dest pê dike loma bi hêsanî tê fêmkirin û xwendin rihettir dibe. Bnr. [https://ku.wiktionary.org/w/index.php?title=W%C3%AEk%C3%AEferheng:ceribandin/nim%C3%BBne&oldid=6277132#L%C3%AAker_2 ceribandinê] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:13, 24 tîrmeh 2026 (UTC)
== Request for comment (the future of Abstract Wikipedia) ==
<bdi lang="en" dir="ltr" class="mw-content-ltr">
Apologies if this has not yet been translated into your wiki's language. {{int:Please-translate}}
You are invited to voice your opinions in a [[:m:Requests for comment/The future of Abstract Wikipedia|request for comment about the future of Abstract Wikipedia]]. {{Int:Feedback-thanks-title}}
[[:m:User:Kowal2701|Kowal2701]] ([[:m:User talk:Kowal2701|talk]]) 12:25, 24 tîrmeh 2026 (UTC)
</bdi>
<!-- Message sent by User:DreamRimmer@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 -->
== ''mê'' yan ''nêr'' li gorî maneyê / ''mê'' yan ''nêr'' (bikaranîn dudil e) ==
[//ku.wiktionary.org/w/index.php?title=xelat&diff=prev&oldid=6291766]: Mixabin pirr bikarhêner şûnda parametreya <code>z=m/n</code> ('' m yan n li gorî maneyê'') <code>z=mn</code> (''m yan n (bikaranîn dudil e)'') bi kar tînin ([[Şablon:navdêr#Parametre]]) ji ber ku di nav her du nivîsê de pir ferq nebînin. Nizanim em ê dîsa parametreya <code>z=nt</code> (''nêtar'') çêkin, wekî berê: [//ku.wiktionary.org/w/index.php?title=W%C3%AEk%C3%AEferheng:D%C3%AEwan/ar%C5%9F%C3%AEv_2019&oldid=6104681#Zayend]. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:17, 28 tîrmeh 2026 (UTC)
:Merheba {{r|Ghybu}} {{demo|sep=wisa xuya dibe:<br>|<nowiki>{{navdêr|ku|kelîme|c=mn}}</nowiki>}}
Ya din jî; {{demo|sep=wisa xuya dibe:<br>|<nowiki>{{navdêr|ku|kelîme|c=m/n}}</nowiki>}}
Tu dixwazî em wana berevajî bikin? Not: nêtar ji bo kurmancî nabe, mn û m/n baş in. Berê ji ber ku m/n tinebû, her kes li gorî parametreyên heyî dixebitî. Niha hene bi min problem nîne eger em berevajî nekin.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 05:32, 28 tîrmeh 2026 (UTC)
: Bi min ev format baştir e:
{{demo|sep=wisa xuya dibe:<br>|<nowiki>{{navdêr|ku|kelîme|c1=m|c1etîk=Mêrdîn|c2=n|c2etîk=Dihok}}</nowiki>}}
Yan jî:
{{demo|sep=wisa xuya dibe:<br>|<nowiki>{{navdêr|ku|zayend|c1=n|c2=m|c1ref={{J:Hawar:1998:2|sernav=Ferhengoka Hawarê|nivîskar=Ferhengvan|hj=27|r=696|jêgirtin=Di nav bêjeyên vê Ferhengokê de herçî bêjeyên ko xudan '''zayend''' in, tîpek li ber e. Ew tîp '''zayendê''' bêjeyê şanî dide:m. — mê, n. — nêr.|wekçavkanî=1}}|c2ref={{Zana Farqînî}}}}</nowiki>}}
{{çavkanî}}
:--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 05:49, 28 tîrmeh 2026 (UTC)
::Feqat em dikarin li şûna {{param2|c|m/n}}, {{param2|c|mn?}} yan {{param2|c|mn!}} çêkin ji bo ku neyên tevlihevkirin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 06:00, 28 tîrmeh 2026 (UTC)
:::Ez jî dizanim ku "nêtar ji bo kurmancî nabe" ([//ku.wiktionary.org/w/index.php?title=Got%C3%BBb%C3%AAj%3Afikirmend&diff=3063789&oldid=3063526]) jixwe min "nêtar" kiribû "[//ku.wiktionary.org/w/index.php?title=Got%C3%BBb%C3%AAj:fikirmend&diff=prev&oldid=3063788 mê an nêr li gorî bikaranînê]". Feqet nizanim çima rind nayê fêm kirin: Ferhengvan jî ew parametreyê bi awayekî rast bi kar nayîne [//ku.wiktionary.org/w/index.php?title=Got%C3%BBb%C3%AAj%3Areh&diff=6235991&oldid=6235985]. {{ping|Bikarhêner}} ? Min heta niha pirr gotar serrerastkir... Em ê hertim kontrol bikinê: pêşta problemeke vitira tine bû :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:13, 28 tîrmeh 2026 (UTC)
::::Bi rastî kî li vira parametreyên ku te li jor nivîsandine bi kar tîne {{=D}} ? Ji bîr meke em li ser wîkîferhenga kurdî ne... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 15:39, 28 tîrmeh 2026 (UTC)
:::::Ya muhîm hebûna sîstemekê ye, heta niha ti sîstemeke baş nehatiye çêkirin û ti rê nehatiye dayîn ji bikarhêneran re ku hîn bibin, hêdî hêdî em ê çi ji destê me were, çêkin û hîn bikin. Bi min atolyeyek lazim e em hin tiştan ji bikarhênerên din re hîn bikin. Mîsal min <code><nowiki>{{subst:beralîbike}}</nowiki></code> li wîkîpediyayê çêkir û ji bikarhênerekî re nîşan da çawa tê bikaranîn, wî dest bi bikaranînê kir. Ji ber ku bikarhênerekî mobîlê ye, nikaribû bi tenê serê xwe beralîkin çêke her daîm alîkarî ji kesên din dixwast ku pir carî ti kes nedihat. Însanên me ji aliyê teknîkî ve baş nebin jî, wextê bi riyeke baş îzah dikî, fam dikim şikir ji xwedê re.
:::::Welhasil, [https://ku.wiktionary.org/w/index.php?title=reh&diff=prev&oldid=6291839 reh] çêbû? Eger tu nabêjî nêtar be, min daxwaza te fam nekir. Tu çi dixwazî em çawa bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 15:58, 28 tîrmeh 2026 (UTC)
::::::Nivîs dîsa "''mê yan nêr li gorî maneyê''" be (kategorî jî) feqet di nav parametreyê de <code>mn</code> neyê nivîsandin. Parametre wekî {{param2|z/c|nt}} bisekiniyana (an jî navekî din "g" an "c") feqet nivîs û kategorî bihata guhertin... Herwiha profîlên bikarhênerên ku tên vira wekî en.wiki nînin: li vir zêde namînin û tiştên ku hu dikin jî ji bîr dikin. PS: Di zimanê peştûyî de jî (nêzîkî zimanê kurmancî ye) peyvên "mê an nêr" (''common gender'') hene [[:en:Category:Pashto nouns with multiple genders]] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 17:28, 28 tîrmeh 2026 (UTC)
:::::::"g", "c", "nt" gî behsa cureyekî xisûsî dikin loma nabin, feqat di nav [https://ku.wiktionary.org/w/index.php?title=Modul:r%C3%AAziman&oldid=6115355#L-306 Modul:rêziman] de koda me "mn" otomatîk dike "mnmane" min ji bo back-compatiblity wisa kiribû lê ya rast "mnmane" ya, em "mn" ji bo kurmancî rakin, hemû "mn" bikin "mnmane" û "m/n" jî rakin û bikin "mndudil", nabe? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:44, 28 tîrmeh 2026 (UTC)
::::::::OK, bi min baş e:) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 18:18, 28 tîrmeh 2026 (UTC)
:::::::::Îmkan heye şablona tewandinê jî wisa bikî ku hem di qismê tewandinê de hem jî aliyê rastê were bikaranîn? Wekî me [[Wîkîferheng:Dîwan/2026#Beşa_Tewandin_bo_kurmancî|li vir]] got? Wextê gelek dirêj be yan mndudil be, em dikarin bixin qismê tewandinê bi şiklê "ya mêr" û "ya nêr". Wekî din yên biçûk û standard bila li aliyê rastê bimînin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:54, 28 tîrmeh 2026 (UTC)
::::::::::Erê bi parametreya {{param2|hêl|çep}} tê çêkirin. Belkî bi JSê tiştekî vitra jî tê çêkirin: dema ku tablo pirr fireh ye (>450px) tablo wekî "veşartî" xuya bike...
::::::::::"''Wekî din yên biçûk û standard bila li aliyê rastê bimînin?''": '''Aliyê rast:''' Dema ku tu mînakan dixwînî bi hêsanî tabloya tewandinê jî seh dikî (pedagojîk e). '''Bin beşa Tewandinê:''' 1) Ji bo mobilan rind e, tablo ne ser maneya peyvê ye. 3) Şûnda maneyan direj dibe 3) Wêne baştir xuya dikin ji ber ku ne bin tabloyê ne. '''Encam''': yek pratîk e, yek jî pedagojîk e [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 19:27, 28 tîrmeh 2026 (UTC)
:::::::::::Di bin beşa Tewandinê de baştir xuya dike... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 20:28, 28 tîrmeh 2026 (UTC)
::::::::::::Erê {{=D}} [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:29, 28 tîrmeh 2026 (UTC)
:::::::::::::Feqat lazim e yên mezin wekî [[mustensîx]] di nav qutîyê de bê wekî [[:en:heval]] di mobîlê de ya me sayfeyê fireh dike, ya îngilîzî de dikarî qutîyê bişemitînî [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:44, 28 tîrmeh 2026 (UTC)
::::::::::::::Formata herî xweş [https://ku.wiktionary.org/wiki/mustens%C3%AEx#Kurmanc%C3%AE] resm jî lê tê tablo jî di cihê xwe de ye. Wekî din wextê tablo li aliyê rastê ye însan naxwaze resmekî jî lê zêde bike. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:54, 28 tîrmeh 2026 (UTC)
:::::::::::::::''overflow'' bi tagên "div"-an rind tên çêkirin. Em ê tabloyên ''NavFrame'' bi kar bînin... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:06, 28 tîrmeh 2026 (UTC)
::::::::::::::::Eger class inflection-table bi kar bînî, bi [[MediaWiki:Gadget-defaultVisibilityToggles.js#L-43]] ê ku dixwaze dikare gîya veşêre an nîşan bide. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:11, 28 tîrmeh 2026 (UTC)
:::::::::::::::::Min fêm nekir, biryara we çi ye? Hemû bin beşa Tewandinê? an jî herdu? Li gor wê şablon tê guherandin. Bi min ferq nake, her du jî baş in... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:19, 28 tîrmeh 2026 (UTC)
::::::::::::::::::Me [[#Beşa Tewandin bo kurmancî|li jor]] gotibû bila hemû di beşa Tewandinê de bin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:21, 28 tîrmeh 2026 (UTC)
:::::::::::::::::::Erê, min xwand Bikarnêner tiştekî din gotibû... Tu bi botê çêdikî? Bi botê hemû tabloyan bê parmetreya "hêl" bike bin beşa "Tewandin"-ê. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:30, 28 tîrmeh 2026 (UTC)
::::::::::::::::::::Va rabim botekê hazir bikim. Bi qasî min jê fam kir, tam nabêje hemû nekin, nabêje hemû bikin jî. Lê em hemû bikin çunkî du kes got erê. Cihê Tewandinê piştî Bi alfabeyên din û Formên alternatîv be an jî beriya wan piştî maneyê (piştî wajeya klasîk) be? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:38, 28 tîrmeh 2026 (UTC)
:::::::::::::::::::::Eger di yekcarê de nayê çêkirin bi parametreya "hêl" ve çêke. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:42, 28 tîrmeh 2026 (UTC)
::::::::::::::::::::::[https://linkcount.toolforge.org/?project=ku.wiktionary.org&page=%C5%9Eablon%3Aku-tew%C3%AEn-nav 27 hezar] car tê bikaranîn, Eger behsa wextê dikî, ne problem e, eger behsa "tenê yên fireh bixin tewandinê" wê carê yên mê û nêr bixim? Te cewaba pirsê cihê tewandinê jî neda? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:48, 28 tîrmeh 2026 (UTC)
:::::::::::::::::::::::Lojîk dibêje ku piştî bi "alfabeyên din", "formên alternatîv" û "Ji wêjeya klasîk" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:55, 28 tîrmeh 2026 (UTC)
::::::::::::::::::::::::Feqet tabloya tewandinê dûr dikeve... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:00, 28 tîrmeh 2026 (UTC)
:::::::::::::::::::::::::Bi min "Bi alfabeyên din" bixin piştî Bilêvkirinê çûnkî @[[Bikarhêner:Ferhengvan|Ferhengvan]] pir caran ji bo nîşandana dengî alfaba erebî bi kar tîne, h3 rengê teal tenê ji bo "Navdêr, Lêker hwd." bi cssê bi kar bînin [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/vector-2022.css&diff=prev&oldid=6241199 wekî wisa lê berevajî], Piştî "Ji wêjeyê/klasîk" em tewandinê deynîn, "Formên alternatîv" piştî Tewandinê be û îro nekin, eger dixwazî di ceribandinê de tabloya nû hazir bike, em hefteyek li hêviya hevalên din bisekinin, eger îtîraz nehat, em çêkin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:15, 28 tîrmeh 2026 (UTC)
::::::::::::::::::::::::::Beşa "Bikaranîn" jî heye... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:28, 28 tîrmeh 2026 (UTC)
:::::::::::::::::::::::::::Piştî Bikaranînê bnr. [[:en:Wiktionary:Entry_layout#Headings_after_the_definitions]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:37, 28 tîrmeh 2026 (UTC)
::::::::::::::::::::::::::::(h3) Bilêvkirin, Bi alfabeyên din, Sinifa rêzimanî,
::::::::::::::::::::::::::::(h4) Ji wêjeyê/klasîk (divê were xistin bin maneyê), Bikaranîn, Tewandin, Formên alternatîv, Hevmane, Nêzîk, Dijmane, Jê, Têkildar, Etîmolojî (eger du sinifa rêzimanî ji eynî kokê hebe h3) Dûnde, Binêre herwiha, Werger [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:40, 28 tîrmeh 2026 (UTC)
{{outdent|::::::::::::::::::::::::::::}} {{r|Ferhengvan|Bikarhêner|Keyomerd|Zerwanda|Kurdanparez}} Fikir? --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:42, 28 tîrmeh 2026 (UTC)
:"Bi alfabeyên din" beşeke pirr hewce nîne, niha beşa "mane" li ser rûpelê dûr dikeve. Bi min "Bîlêvkirin" > Mane > Ji wêjeya klasîk (wekî mînak e) > Bikaranîn > Tewandin > Bi alfabeyên din > Formên alternatîv > ... Divê beşên ku herî zêde tên xwastin werin "ronîkirin". [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 03:07, 29 tîrmeh 2026 (UTC)
::''[[bileks|Bîl'eks]],'' "Bi alfabeyên din" gelek muhîm e, ev ji bo kurmancî "formên alternatîv"-a wîkiya îngilîzî ye, başûrî tenê bi alfaba erebî dinivîsin û wextê kelîmeyek digerin çawa zanibin hatin kîjan kelîmeyê? Bi kirîlî ne lazim e lê bi erebî mecbûrî ye. Ji bo nettir bikin, lazim e em beşa "Bi alfabeyên din" baştir bikin. Mane hinek li jêr be ne muhîm e, wîkiya îngilîzî de jî gelek car lazim e herî jêr ji bo dîtina maneyê. "Ronîkirin"/teal xelet tê famkirin, sankî "qismê sereke (h3) lazim e wê be û qismên din werin xistin binê wê" tê famkirin loma em tenê Mane ronî bikin bes e, ka [https://ku.wiktionary.org/w/index.php?title=Bikarh%C3%AAner:Wikihez/common.css&oldid=6291927 vê cssê] biceribîne û dîsa fikrên xwe bibêje. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 07:20, 29 tîrmeh 2026 (UTC)
:1. '''Li ser cinsîyetê:''' Bi min, em malûmatên ekstra yên wek ''"li Dihokê nêr, li Serhedê mê"'' (Serhed:m|Dihok:n) li qismê ''"Bikaranîn/Emilandin"''ê bidin baştir e. Kelîme di ferhengan de wek form û cinsîyet bi halê standard cih digirin, eger li mintiqayek cuda be ew cudahî li qismê "Bikaranîn/Emilandin"ê wek malûmatek ekstra cih bigire çêtir e. Ferhenga ku em vê gavê ji bo standardkirinê esas digirin ''"Ji bo Rastnivîsînê Ferhenga Kurdî (Kurmancî) - Tirkî ya Nû"'' de jî bi yek cinsîyetê cih dane kelîmeyan. Ji xeynî wê di ferhenga standardkirinê ya Weqfa Mezopotamyayê de jî ew kelîme bi yek cinsîyetê cih digirin. Tiştekî din jî bêjim, eger em şablonê wek "mndudil" bi nav bikin mimkin e ku rê bide şaşîyan. Çimkî gava mirov wê dibîne, mirov dibêje qey li ser cinsîyeta kelîmeyê dudilîyek heye, bi qenaeta min dudilîyek bi wî şiklî nîne. Divê her kelîme xwedî cinsîyetekê bin û îstîsnayên mintiqayî -ger were xwestin- ekstra were nîşandan. Lewma bi min halê mewcûd baş e. 2. '''Li ser şablonên tewandinê:''' Ger şablonên tewandinê di xuyabûna mobîl de bibin sedema xirabîyê, em wan şablonan ji bo mobîlan têxin qismê "Tewandin"ê. 3. '''Li ser rêzkirina qisman:''' Bi min divê mane li pêş be û ne hewce ye ku qismê "Bi alfabeyên din" derxin pêş. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 13:20, 29 tîrmeh 2026 (UTC)
::Li ser cinsiyetê erê, eger di ferhenga rastnivîsînê de cinsiyet hatibe nivîsandin ne hewce ye em "mndudil" binivîsin li qismê Bikaranînê behskirin bes e, lê eger tê de ev kelîme tinebe û di ferhengên din de jî dudiliyek li ser bikaranîna cinsiyetê hebe, wê demê "mndudil" lazim e bikaranîn çunkî wîkîferheng lazim e li gorî çavkaniyan were nivîsin. Li ser tewandinê ne mimkûnê em di mobîlê de di qismê Tewandinê de, di sermaseyê de em li qismê maneyê bixin loma lazim e em bi yek şiklî li qismê Tewandinê hemû bixin çêtir e. Li ser "Bi alfabeyên din" ji bo min zêde muhîm nîne, feqat dîsa jî ez dibêjim lazim e were pêşxistin. Tiştekî wisa jî heye eger di sayfeyekê de ji yekî zêdetir sinifên rêzimanî hebe wê demê lazim e Bi alfabeyên din bi sê = were bikaranîn, û cihê wê ne li dawiyê lê divê piştî Bilêvkirinê be.--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:45, 29 tîrmeh 2026 (UTC)
:Bi a min beşa çevandinê li serê rûpelê be beşa maneyê pir dûrî çavan dikeve. Li jêrtir be çêtir e. [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 06:01, 31 tîrmeh 2026 (UTC)
::{{r|Wikihez}} Bi min di nav tabloyê de parametreya yekem jî were rakirin, ne hewce ye bi <nowiki>{{PAGNAME}}</nowiki> tê çêkirin. Di rûpelên din de jî (ne yên sereke) bi parametreya {{param2|nav}} were nivîsandin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 11:07, 31 tîrmeh 2026 (UTC)
:::Erê, maqûl e. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:23, 31 tîrmeh 2026 (UTC)
::::cinsiyet jî m, n, mn be bes e ma bila wekî {{ş|navdêr}} be. cuda nebin [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 11:41, 31 tîrmeh 2026 (UTC)
:::::@[[Bikarhêner:Bikarhêner|Bikarhêner]], @[[Bikarhêner:Keyomerd|Keyomerd]], @[[Bikarhêner:Ghybu|Ghybu]] "Bikaranîn" an "Notên bikaranînê" ? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:47, 31 tîrmeh 2026 (UTC)
:::::Wekî {{r|Bikarhêner}}î gotî zayenda peyvnan gorî devokan jî diguhere, divê ew jî bêne dîyarkirin. Herwiha beşa lêvandinê a ji bo pîtên cêwî pir tê paşguhkirin. Divê jê re cîyekî cihê bê hilanîn. Û ew jî wek zayendê bi devokan diguhere. Meselen tya pêşîn a "tişt" ê li ba me nerm e lê li deverên din hişk e. Û ji devla reqê (wek t-ya req) hişk bi kar bê çêtir e, jixwe her kes wê bi kar tîne nizanim req ji ku derketîye. [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 14:05, 31 tîrmeh 2026 (UTC)
:
<syntaxhighlight lang="json">
"subsections": [ "Ji wêjeya klasîk", "Ji wêjeyê", "Bikaranîn", "Tewandin", "Bi alfabeyên din", "Formên alternatîv", "Kurtkirin", "Sembol", "Navê zanistî", "Hevmane", "Dijmane", "Jê", "Nêzîk", "Jornav", "Jêrnav", "Têkildar", "Etîmolojî", "Dûnde", "Binêre herwiha", "Bi zaravayên din", "Werger", "Qafiye", "Anagram" ]
</syntaxhighlight>
{{r|Keyomerd|Ghybu|Bikarhêner}}Li gorî nîqaşa jor û [[Alîkarî:Formata nivîsînê]] min ev lîste hazir kir lê tê de hin kêmasî hene, "Bide ber" tê de tine ye, li kû derê bixim? Mihtemelen beşên din jî hene ku haya min ji wan nîne. Pirsek din, beşên nestandard wekî [https://ku.wiktionary.org/w/index.php?title=berf&diff=prev&oldid=6292461] çi bikim? Min got li dawiyê bixim berî Wergerê lê sankî piştî Wergerê be çêtir e?--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 16:24, 31 tîrmeh 2026 (UTC)
:@[[Bikarhêner:Bikarhêner|Bikarhêner]], @[[Bikarhêner:Ghybu|Ghybu]], @[[Bikarhêner:Keyomerd|Keyomerd]] Eger îtîraz an fikrekî din neyê, ez ê beşên nestandard bixim beriya "Bi zaravayên din" eger ev beş tinebe, beriya "Werger". Ez ê "Nêzîk" jî bixim piştî Hevmane û li ser [[Alîkarî:Formata nivîsînê]] "rast" bikim. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:50, 1 tebax 2026 (UTC)
::Ez ê "Bikaranîn" jî bikim "Notên bikaranînê" [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:03, 1 tebax 2026 (UTC)
:::Jixwe bot hema bêje hazir e, eger dûre kesek rabe fikrekî din li pêş bixe, em dikarin biguherînin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:04, 1 tebax 2026 (UTC)
::::Ev hinek zêdetir problematîk e feqat ez ê "Ji wêjeyê/a klasîk" jî bikim "Ji edebiyatê"/"Ji edebiyata klasîk". Tabî eger fikrekî din hebe, ne problem e. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:05, 1 tebax 2026 (UTC)
:::::Na, bi min "wêje" bimînî... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 01:22, 1 tebax 2026 (UTC)
::::::Ok {{=D}} [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:23, 1 tebax 2026 (UTC)
:::::::"Bide ber" pêşiya "Binêre herwiha"
:::::::"Jê" pêşiya "Têkildar" piştî jornav, jêrnav [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:41, 1 tebax 2026 (UTC)
:::::Ji bo min "'''edebîyat'''" çêtir e, bila ne wêje be. "wêje" kelîmeyeke şaşçêkirî ye. Mahîyeta qisman (kîjan qism bi kêrî çi tê) ji navên wan nayê famkirin. "Binêre herwiha" û "Herwiha" tevlihev dibû, baş e we rast kirîye. Feqet mahîyeta wê qismê ("Binêre herwiha") hê jî ji navê wî nayê famkirin. Jixwe ger em bixwazin bi wî şeklî binivîsin jî divê em bikin "Herwiha binêre", ew jî zid hatîye nivîsandin. Ji xeynî wê, "Navê zanistî" na, "'''Navê îlmî'''" çêtir e. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 22:51, 2 tebax 2026 (UTC)
::::::Bi min beşa Navê zanistî werin rakirin, wekî en.wikt em li dawiyê yan li pêşiya maneya bi şablona {{ş|q}} binivîsin yan jî wê şablona îngilîzî çêkin ku enwikt bi kar tîne.
::::::Li wikipediyayê min çend car dîtiye Penaber49 jî "Binêre herwiha" dike "Binêre" loma guhartina wê wekî "Herwiha binêre" fikrekî maqûl e.
::::::Herwiha tu ji bo Bêhtir xwendin çi dibêjî [[Special:PermanentLink/6323554#Binêrê_herwiha]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:29, 3 tebax 2026 (UTC)
:::::::Ez dibêjim bila '''''"Xwendina Zêdetir"''''' be. -- [[Bikarhêner:Bikarhêner|Bikarhêner]] ([[Gotûbêja bikarhêner:Bikarhêner|gotûbêj]]) 05:03, 6 tebax 2026 (UTC)
:::Em çima peyva notê bi kar tînin, ma "nîşeyên bikaranînê" ne çêtir e? [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 06:04, 1 tebax 2026 (UTC)
:Rêzkirina dawî:
<syntaxhighlight lang="json">
"subsections": ["Ji wêjeya klasîk", "Ji wêjeyê", "Tewandin", "Notên bikaranînê", "Bi alfabeyên din", "Formên alternatîv", "Kurtkirin", "Sembol", "Navê zanistî", "Hevmane", "Nêzîk", "Dijmane", "Jornav", "Jêrnav", "Jê", "Têkildar", "Etîmolojî", "Dûnde", "Bide ber", "Binêre herwiha", "Bi zaravayên din", "Werger", "Qafiye", "Anagram"]
</syntaxhighlight>
Bnr. [[Wîkîferheng:Bot/Balyozbot/tercîh.json]] --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:44, 1 tebax 2026 (UTC)
:Bi botê ez ê tenê binebeşên sinifên rêzimanî yên bi 4 = biguherînim, yên din lazim e bi destî werin guhartin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 01:46, 1 tebax 2026 (UTC)
::@[[Bikarhêner:Ghybu|Ghybu]] Bota rêzkirina binebeşan û cihguhartina Tewandinê hema bêje hazir e. Param {{param|hêl}} bi kar bînim (eger wisa be, em kategoriya "ku-tewîn-nav bê param hêl" çêkin daku hemû xilas bikin) yan jî şablonên heyî bikim ku-tewîn-nav/kevn û piştî kontrolkirinê hemû bikin nû? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:26, 1 tebax 2026 (UTC)
:::Bi parametreyê {{param2|hêl}} tu ê paşê wan dîsa rakî... Herwiha min va [https://ku.wiktionary.org/w/index.php?title=abes%C3%AEv&curid=43641&diff=6294632&oldid=6244736] fêm nekir, me çima Tabloya tewandinê rakir :)? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 20:26, 1 tebax 2026 (UTC)
::::Ji bo ku rê bidin tiştên wisa :D Em ê li kû derê deynîn examples?? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:28, 1 tebax 2026 (UTC)
:::::Tablo hazir bin, em dest pê bikin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:28, 1 tebax 2026 (UTC)
::::::Sernav tê rakirin, mê bikim "m"? yan bila bimînî? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:28, 1 tebax 2026 (UTC)
:::::::Tablo hatiye çêkirin bi [https://ku.wiktionary.org/wiki/Modul:ku-tew%C3%AEn-nav/ceribandin vê] kodê her du parametre jî tên bikaranîn mê/m, nêr/n û mê û nêr/mn... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 20:41, 1 tebax 2026 (UTC)
:::::Ez nizanim çi bibêjim... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 20:43, 1 tebax 2026 (UTC)
::::::[https://ku.wiktionary.org/w/index.php?title=abes%C3%AEv&diff=prev&oldid=6294657] ok?
::::::Bi min li şûna {{param|hêl}} em {{ş|ku-tewîn-nav/nû}} bi [[Modul:ku-tewîn-nav/ceribandin|modula ceribandinê]] çêkin, paşê navê şablonê biguherînin baştir be, çunkî [[Special:PermanentLink/6294527#L-337|modula nû]] ne backward compatible e. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:56, 1 tebax 2026 (UTC)
:::::::Em ê dîsa paşê nivîsa "/nû" rakin. Bi botê 22000 rûpel di 2 rojan de tê guherandin? Eger wisa ye (bi min pirr nîne), bi navê rast biguhrîne, bila di nav rûpelên ku nehatine guherandin xeletî hebin... Dîsa jî tu dizanî, bot te çêkiriye û tu sererast dikî :) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:17, 1 tebax 2026 (UTC)
::::::::Min gelek caran dîtiye, bi botê tiştekî hatiye guhartin lê ji ber ku rind nehatiye kontrolkirin, şablona kevn bi halê xwe yê kevn maye. Tirsa min ew e. Ji ber ku formata hemû sayfeyan ne eynî ne, ez dibêm bot gelek ji wan derbas bike. Bi vî awayî em ê {{ş|ku-tewîn-nav}} sêwî bihêlin û piştî bot xilas kir, em ê bi dil rehetî karibin şablona nû rakin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:26, 1 tebax 2026 (UTC)
:::::::::Rast e! {{param|g|2}} :)) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:32, 1 tebax 2026 (UTC)
::::::::::Mîsalên wan gelek in :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:36, 1 tebax 2026 (UTC)
:::::::::::Eger karibî hinek round edges bixî û rengê background a "Tewandina X" biguherînî, gelek moderntir û xweştir xuya bike :) [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:25, 1 tebax 2026 (UTC)
::::::::::::''Simplicity is best'' / ''Fewer choices mean less worry:'' felsefeya min e:) Me tabloyê wekî en.wîkî kir [https://ku.wiktionary.org/wiki/%C5%9Eablon:tabloya-tewandin%C3%AA-ser {tabloya-tewandinê-ser}], tenê [//ku.wiktionary.org/wiki/Modul:ku-tew%C3%AEn-nav/ceribandin#L-362 reng] ({{param2|palette}}) tê guherandin (felsefeya wan e jî...). Bi min tiştekî pir rind çêkirine. Dîsa jî em dikarin (wekî berî) bi CSSê biguherînin. Ji bo çêkirina tabloyan min di rûpela şablonê de tiştên ku pirr hewce ne nivisandiye ji bo detayan jî rûpela en.wiki heye. Herwiha tabloyê li gor daxwaza we biguherînin û serrast bikin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 03:04, 2 tebax 2026 (UTC)
:::::::::::::PS: Şiklê tabloyê li vira tê guherandin [[Şablon:tewandin-ser/style.css]] [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 04:41, 2 tebax 2026 (UTC)
::::::::::::::Mala te ava tu ji heqê rengan gelek xweş derdikevî :)
::::::::::::::Ev felsefeya te gelek caran karê min pir zor dike {{=D}} en.witk gelek tiştî bi awayekî xweş çêkirine, ez jî heta ku wana adapte bikim, gelek êş dikşînim bnr. [[#Modul:quote]] û Şablonên etîmolojiyê [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 10:47, 2 tebax 2026 (UTC)
:::::::::::::::Bot xilas kiriye, Baş e [[Special:PermanentLink/6323268#Şablona_ku-tewîn-nav_ne_li_binê_Serenav_an_Navdêrê_ye|zêde]] xeletî derneketin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:35, 2 tebax 2026 (UTC)
::::::::::::::::Gelek spas! [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:42, 2 tebax 2026 (UTC)
:::::::::::::::::Niha şablon sêwî ma ji xeynî gotûbêjan, ew jî dûrê rast bikim, tu dikarî modulan rojane bikî? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:28, 3 tebax 2026 (UTC)
::::::::::::::::::Spas. Ev rûpel pirr dirêj bû... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 00:33, 3 tebax 2026 (UTC)
:::::::::::::::::::Erê, rêzkirina beşan ez ê bikim yek satir, lê dîsa jî zêde fêde nede, fikrekî din heye? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:38, 3 tebax 2026 (UTC)
::::::::::::::::::::@[[Bikarhêner:Ghybu|Ghybu]] [https://ku.wiktionary.org/wiki/W%C3%AEk%C3%AEferheng:D%C3%AEwan#c-Wikihez-20260801005000-Wikihez-20260731162400] û [https://ku.wiktionary.org/w/index.php?title=gur&curid=5384&diff=6328092&oldid=6328089] ? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 14:00, 7 tebax 2026 (UTC)
:::::::::::::::::::::@[[Bikarhêner:Ghybu|Ghybu]] Rêza notên bikaranînê [https://ku.wiktionary.org/w/index.php?title=neyam&diff=next&oldid=6340610] biguhêrînim? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:25, 22 tebax 2026 (UTC)
== SEO ==
Merheba @[[Bikarhêner:Ghybu|Ghybu]] Wextê ''jiyannas'' bi şiklê "jiyannas" lê digerî di nav netîceyên googlê de [[jiyannas]] derdikeve? Min hem bi Chromeê û hem jî bi VPNê ceriband lê [[jiyannaseke]] derdikeve feqat [[jiyannas]] dernakeve. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:31, 2 tebax 2026 (UTC)
:"zengilok" derdikeve [[zengilok]] [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:38, 2 tebax 2026 (UTC)
:Min jî tenê [https://usercontent.one/wp/portal.arsivakurd.org/wp-content/uploads/2024/08/Bernamegeh-4.pdf?media=1709107483 va] (''Berna Megeh'', Jan Dost, OCCO MAHABAD) û https://portal.arsivakurd.org/wp-content/uploads/2022/06/Xwebun-34.pdf va] (''Xwebûn'', hj.34) dît herwiha ''Jihannasî'' jî heye... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 20:44, 2 tebax 2026 (UTC)
::Behsa çavkaniyan nakim behsa SEOyê dikim, çima [[jiyannas]] di netîceyan de dernakeve. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:49, 2 tebax 2026 (UTC)
:::Min fêm nekir, pirsa te çima Wîkîferheng dernakeve ye? [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 20:51, 2 tebax 2026 (UTC)
::::Erê çima sayfeya Wîkîferhengê ya [[jiyannas]] dernakeve feqat [[jiyannaseke]] derdikeve. Min du nimûne nivîsandin ka piştî mehekê em binêrin derkeve yan na. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:54, 2 tebax 2026 (UTC)
:::::Bi min dema ku motora googlê "jiyannaseke" (-eke bi kurdî ye) digere, ew peyv tenê di kurdî de heye ji ber vê yekî dide. Feqet "Jiyannas" di nav zimanên din de jî heye (belkî difikire ku ew xeletî ye.). Herwiha nivîsa bin "Jiyannas" li gor "jiyannaseke" biçûk e û li bin "biolog" hatiye nivîsandin:) Herwiya peyva "biolog" jî dide ew jî giridayî pirr peyvan e... Pirr parametre hene... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:09, 2 tebax 2026 (UTC)
::::::Wextê li "birakujî" dictionnaire digerî netîceya ewil rasterast fr.wikt e. Wana tiştekî kirine lê çi? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:13, 2 tebax 2026 (UTC)
:::::::"Trust Score" ? Herwiha peyva "birakujî" pêş Wîkîfehengê hatiye çêkirin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:21, 2 tebax 2026 (UTC)
::::::::Nizanim [[:en:Wiktionary:Votes/2023-08/Installing the WikiSEO extension]] heye lê [[:phab:T346590]] sekinî ye. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:27, 2 tebax 2026 (UTC)
:::::::::Erê, feqet lînkên û navên Wîkîferhenga fransî û îngilîzî di internetê de pirr tên parvê kirin. Wîkîferhenga fansî ferhengek derxistiye: [https://www.fnac.com/a13530183/Collectif-Le-dico-adapte-du-Wiktionnaire Le dico] (li ser Amazonê). Kî qala Wîkîferhenga kurdî dike? Ji ber vê yêke hertim pêş me ne. Daxwaza wan werin pêş malperên din... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:36, 2 tebax 2026 (UTC)
::::::::::[https://www.google.com/search?sca_esv=a854c327b7bb0786&q=%22W%C3%AEk%C3%AEferheng%22&tbm=nws&source=lnms&fbs=ABfTbFUDadgeu2mn4mYJ8iEZ1GUDDuwRa4um-2LNhBFWIpqZc7ZL_t3iAe0lB1D4hb_Ohp7yg8FO-XwZ7R-ba4YefvIQCF4Ra4wbUNQStQ8dVc6IK2vWHoXbgHLwJobq4HTNMksBhYHBmxw2hK9Sa4pHAI3I2Ovzox54EiEId7q7IoMJRkRlr-XDezqDqx33xDsZIWuHy-a_vqoqDlYrhNBbNeVEP9MwaA&sa=X&ved=2ahUKEwiz94Co9IKWAxXNUaQEHQJAAGYQ0pQJegQIGBAB&biw=1320&bih=583&dpr=1 Wîkîferheng] {{=D}} Li ser X û medyayên din de jî pirr qala Wîkîferhengê nakin... Bi rastî kî Wîkîfrhengê dixwîne? [https://pageviews.wmcloud.org/topviews/?project=ku.wiktionary.org&platform=all-access&date=yesterday&excludes=]... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:41, 2 tebax 2026 (UTC)
:::::::::::Haya ti kesî ji Wîkîferhengê nîne bi rastî loma pêşxistina SEOyê hewce ye. Ez dibêjim miheqeq fr.wikt tiştek çêkiriye ne mimkun e wextê heval dictionnaire binivîsî wiktionary derkeve bêyî çêkirina tiştekî. Not: Min ferq kir li ser fr.wikt wextê bi mobîlê tê dikevî, eger di sayfeyekê de du ziman hebe ya fransî otomatîk vedibe zimanê din veşartî dimîne. Fikrekî xweş e em jî çêkin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:21, 2 tebax 2026 (UTC)
::::::::::::Erê bila were çêkirin. Min gotûbêja wan li ser vê mijarê xwandibû, Wîkîferhenga fransî jî ne razî ye. Dema ku li ser Googlê tu peyvek diguherî Wîkîferhenga wan di bin Wîkîpediyayê û di bin malperên din de derdikeve. Û çend caran şûnda "Wiktionnaire" "Wikipédia" tê nivîsansin... Ew jî nizanin çi bikin :)) Niha dizanim ku en.wikt ji ne razî ye... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:37, 2 tebax 2026 (UTC)
:::::::::::::@[[Bikarhêner:Ghybu|Ghybu]], @[[Bikarhêner:Wikihez|Wikihez]]: Ez dibêjim rûpelên ku tenê form di wan de hene, divê <nowiki>__NOINDEX__</nowiki> bin. Wî çaxî, rêza wan nikare ji lemmayê bilindtir be ji ber ku wê nînbin. Ez dibêjim belkî îhtîmala derketina lemmayê bêhtir jî bibe heke netîceyên ku dişibin wê nînbin. Jixwe lemma wê derkeve heke yek li formekê bigere, ji ber ku di rûpelê lemmayê de tabloyên tewandinê hene û ev tên jimartin. [[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 22:55, 2 tebax 2026 (UTC)
::::::::::::::@[[Bikarhêner:Guherto|Guherto]] Em dibêjin tenê form xuya dike ya sermade xuya nake tu dibêjî em formê noindex bikin {{=D}}
::::::::::::::Claude [[Special:PermanentLink/6323375|li vir]] dibêje ya ku Ghybu got rast e, ji ber ku frwikt gelek tê bikaranîn bêtir dikeve ber çavê google. Eger rojek Wikiseo li en.wikt were çêkirin, em jî bixwazin qet nebe kêrî tiştekî were.
::::::::::::::Em şablonek ji bo metadescription çêkin? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 23:09, 2 tebax 2026 (UTC)
:::::::::::::::@[[Bikarhêner:Wikihez|Wikihez]] Min got, ''Wî çaxî, rêza wan nikare ji lemmayê bilindtir be ji ber ku wê nînbin. Ez dibêjim belkî îhtîmala derketina lemmayê bêhtir jî bibe heke netîceyên ku dişibin wê nînbin.'' [[Bikarhêner:Guherto|Guherto]] ([[Gotûbêja bikarhêner:Guherto|gotûbêj]]) 23:10, 2 tebax 2026 (UTC)
:::::::::::Em jegirtinan lînk bikin? Bi vî sayî gelek sayfe lînk bide ser hev. Bi riya cssê em dikarin rengê tarî bikin da ku wekî lînk xuya nekin... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:39, 3 tebax 2026 (UTC)
::::::::::::Wextê jîwar ferheng yan jî boçik ferheng lê digerî rasterast Wîkîferheng dertê. Meselê hejmara bikaranîna eynî kelîmeyê di sayfeyê de ye. Em çiqas jêgirtin lê zêde bikin ewqas baştir dibe netîce :) Google AI Mode rasterast Wîkîferheng wek çavkanî nîşan û lînk dide loma kurmanc bi kar neyînin jî AI bi kar tînin baş e ... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:24, 3 tebax 2026 (UTC)
:::::::::::::Êêêê Google AI Overview çi bi şikle "tarîxiyen" ferheng lê digerim wekî ku min li ferhengê qeyd kiriye gelek xweş îzah dike (ji ber ku hîn gelek nû ye netîceyan de Wîkîferheng dernakeve) Nimûneyên bikaranînê jî ji înternetê derdixe. Çi mana ferhengê nemaye... Em çi îşî dikin li vir :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:47, 3 tebax 2026 (UTC)
:::::::::::::Êdî Google jî nayê bikaranîn :)) Niha kî tere ser ''Stack Overflow'' û di nav belgeyên kodan de digere... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 21:47, 3 tebax 2026 (UTC)
::::::::::::::Erê welle, ez gelek car dibînim kesên derdora min hemen Gemini an Chatgpt vedikin, çi tiştê biçûk hebin, hemen pirs dikin, qet li ser Googlê jî lê nagerin :D [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:52, 3 tebax 2026 (UTC)
:::::::::::::::"êgsig ferheng" netîce nade feqat wexta "ornag ferheng" digerim rasterast wîkîferheng derdikeve li binê dibêje "Tewandina ornag. Zayenda nêr a binavkirî. Rewş, Yekjimar, Pirjimar. Navkî, ornag, ornag. Îzafe, ornagê · ornagên. Çemandî, ornagî · ornagan.Read more"
:::::::::::::::Meraq dikim guhartina cihê tewandinê çi netîce bide. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 22:21, 3 tebax 2026 (UTC)
::::::::::::::::Pêşta me tabloya Tewandinê vitira dinivîsand: [[ketin (Tewandin)]] Dma ku nav hat guherandin li ser Googlê tewandin winda bû...
::::::::::::::::Min tewandin:kirin geriya tabloya tewandina Wîkîferhengê dide. Êdî kes nê vira:) [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:38, 3 tebax 2026 (UTC)
:::::::::::::::::Tenê dema "niha" nivîsand. Min jî bi kurdî "dema bê jî binivîse" nivîsî: ew jî nivîsand... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 22:42, 3 tebax 2026 (UTC)
::::::::::::::::::[https://support.google.com/webmasters/answer/16908024?hl=en tê asteng kirin]... [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:07, 4 tebax 2026 (UTC)
:::::::::::::::::::kî dibêje? li wir tiştek wisa nabêje...? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 02:16, 4 tebax 2026 (UTC)
::::::::::::::::::::Va hatiye nivîsandin: "''Exclude my site's links and content from Search generative AI features: Your site's content is prevented from being visible to users in Search generative AI features, including being linked to within these features and helping with grounding AI responses in these features. You won't receive any traffic or impressions from these features. Learn more about what excluding your site means.''" [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 02:23, 4 tebax 2026 (UTC)
== Moda tarî ==
Bi chrome û Firefoxê wextê Reng dikî "otomatîk", eger tarî be, tiştên bi reng xirab xuya dikin, lê wextê "tarî" hildibijêrî xweş xuya dikin. Min hemû js/css/Gadget betal kirin û ?safemode=1 ceriband, dîsa jî wextê "otomatîk" e, her tiştê tarî xirab e. Êdî nizanim problem li cem min e yan di Moda tarî de ye. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:15, 9 tebax 2026 (UTC)
== Formata jêgirtinan ==
Merheba hevalno {{r|Ghybu|Bikarhêner|Keyomerd|Kurdanparez|Guherto|Şêr}} Wekî min [[#Modul:quote|li jor]] jî gotiye, formata îngilîzî ji ya me baştir e. Her tişt di cihên xwe de ne. Ya me wexta çend tercime yan jî transliterasyon îlawe dikî, gelek tevlihev dibe. Berê me çavkaniyê bi amûra [[MediaWiki:Gadget-jeder.js]] kurt kiribû feqat ew jî ne tiştekî baş e ji ber ku gelek malûmat tên veşartin û kesên nû tên tenê sal û nivîskarê dinivîsin carinan ew jî ne tiştekî baş e. Em dikarin amûra jêderê wisa eyar bikin ku bêyî parentez bixebite û ewilî vekirî be, dûre ê ku dixwaze malûmatan kurttir bike. Eger em vî tiştî bi formata me ya niha bikin, jêgirtinên bi çavkaniyên dirêj dê gelek xirab xuya bikin.
Hûn dikarin li vir miqayese bikin ka kîjan baştir xuya dike:
# [[Special:PermanentLink/6329434|jêgirtina dirêj bi îngilîzî bi formata en.wikt]] vs. [[Special:PermanentLink/6329414|bi formata me ya niha]]
# [[Special:PermanentLink/6329439|jêgirtineke bi soranî bi formata en.wikt]] vs. [[Special:PermanentLink/6329437|jêgirtineke bi soranî bi formata me ya niha]]
Ez naxwazim xwe wisa nîşan bidim ku li ser eynî tiştî her daîm israr dike feqat bi ya min ev zarûriyeteke ji bo baştirkirina xwendina nimûneyan e. Loma ez li vir dengdanek li dar dixim, bila qerar çi be, em wisa bikin, dûre em dikarin amûreke nû çêkin ku li gorî tercîhên bikarhênerî formata en.wikt yan jî formata niha were bikaranîn.
Ji kerema xwe raya xwe li jêr bidin. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:01, 11 tebax 2026 (UTC)
=== Dengdan ===
{{dengdan/borî|destpêk=11.08.2026|dawî=18.08.2026}} <!-- kengî dengdan xilas bû vê şablonê {{dengdan/borî|destpêk=|dawî=}} bi kar bînin. -->
==== Bila formata niha bimîne ====
<!-- Li jêr '# {{erê}} ~~~~' binivîse ji bo raya erê. -->
==== Bila formata en.wikt were bikaranîn ====
<!-- Li jêr '# {{erê}} ~~~~' binivîse ji bo raya erê. -->
# {{erê}} [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:05, 11 tebax 2026 (UTC)
# {{erê}} [[Bikarhêner:Keyomerd|Keyomerd]] ([[Gotûbêja bikarhêner:Keyomerd|gotûbêj]]) 14:40, 16 tebax 2026 (UTC)
=== Gotûbêj ===
{{şirove}} Eger hûn bibêjin çima sal û çavkanî li herî pêş e sebeb ev e: Ji bo en.wiktê "attestion" yanî peyitandin bi riya emilandinên heqîqî pêk tê. Yanî eger di ferhengekê de ev kelîme derbas bibe ji bo wan ne muhîm e, ya muhîm emilandina di nav cumleyan de ye. Mîsal ew kelîmeyên ku tenê ferhengan de derbas dibin dixin [[:en:Appendix:English dictionary-only terms]]. --[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 20:14, 11 tebax 2026 (UTC)
:@[[Bikarhêner:Ferhengvan|Ferhengvan]], @[[Bikarhêner:Bibliophile|Bibliophile]] û @[[Bikarhêner:Dûrzan|Dûrzan]] fikrê we çi ye li ser vê meseleyê? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 13:48, 12 tebax 2026 (UTC)
::Ez ji tiştên teknîk pirr fêhm nakim. Çewa baş be ên ku pispor in bila biryar bidin... [[Bikarhêner:Dûrzan|Dûrzan]] ([[Gotûbêja bikarhêner:Dûrzan|gotûbêj]]) 21:04, 12 tebax 2026 (UTC)
== Guhartina rêbaznameyê ==
Ez fam nakim me çima di rêbaznameyê de gotiye twitter nayê hesibandin wextê çavkanîdayînê. en.wikt bi kar tîne û eger wek cimleyek derbas bibe bi min ti problem nîne. Fikr? [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:06, 14 tebax 2026 (UTC)
:Heta twitter ji bikaranîna ferhengan hîn baştir e, qet nebe em emilandina kelîmeyekê ya eseh dibînin... [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:07, 14 tebax 2026 (UTC)
::Merheba @[[Bikarhêner:Ghybu|Ghybu]] Min ev guhartina xwe [https://ku.wiktionary.org/w/index.php?title=%D9%85%D8%B2%DA%AF%DB%95%D9%88%D8%AA&diff=prev&oldid=6337765] betal kir çunkî rast dibêjî ji bo hesabên biçûk dikare wekî reklam were fehmkirin, feqat bi min bila gotina te ya "peyv nayê dîtin" qaîde nebe, bila em li hemû madeyan yên Xjî zêde bikin, xisûsen ji nivîskarên me zêdekirina jêgirtinan bi min muhîm e. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 18:23, 22 tebax 2026 (UTC)
== Etîmolojî (hevreh) ==
Li ser Wîkîferhengê etîmolojî pirr dirêj hatine nivîsandin û piranî jî ji hevrehê hatine tijî kirin. Hemû nivîsên ku tê de ne hewce nînin, bnr. {{q|ku|kirin#Etîmolojî}} nayê fêm kirin; hevreh li ser hatiye nivîsandin û tiştên ku hewce ne jî li bin hatine nivîsandin. Li ser en.wiki jî vitira nivîsandine: [[:en:kirin#Northern Kurdish]]. Herwiha li ser en.wiki hevrehan veşartine: [[:en:talk#Etymology 1]]. Bi zanîna min di nav ferhengan de etîmolojî bi du û sê hevokan tê nivîsandin. [[Bikarhêner:Ghybu|Ghybu]] ([[Gotûbêja bikarhêner:Ghybu|gotûbêj]]) 23:41, 22 tebax 2026 (UTC)
tfv6npwh0qt23gqvxkl7nyruljmul9u
وەتن
0
1356791
6342743
6260271
2026-08-26T19:26:15Z
Keyomerd
8814
/* Etîmolojî */
6342743
wikitext
text/x-wiki
== {{ziman|sdh}} ==
=== Lêker ===
{{lêker|sdh}}
# [[gotin]]
#: {{mk|sdh|م '''ئۊشم'''.|tr=Mi '''üşim'''.|w=Ez dibêjim.|birêz=1}}
==== Formên alternatîv ====
* {{hw|sdh|وتن|tr=witin}}
==== Etîmolojî ====
Ji {{hv|ira-pro|*uxtíš}}, ji {{hv|ine-pro|*uktíš||gotin}}. Hevreha {{hv|ckb|وتن|tr=witin}}, {{hv|hac|واتەی}} (>kurmancî [[wate]]), {{hv|ae|𐬎𐬑𐬙𐬌|tr=ûxtî}}, {{hv|xcl|ուխտ|tr=ûxt}} (ji zimanekî Îranî), {{hv|sa|उक्ति|tr=ûktî}}. Rayeka dema niha -üş- dibe ku hevreha [[gotin|-bêj-]]a kurmancî be: wêj>wêş>üş.
k6ghpr9bo1xhy2l19edkn8g7bvyu98s
6342796
6342743
2026-08-26T21:12:19Z
Balyozbot
7867
Bot: Paqijiyên kozmetîk (Lînk paqij kir.)
6342796
wikitext
text/x-wiki
== {{ziman|sdh}} ==
=== Lêker ===
{{lêker|sdh}}
# [[gotin]]
#: {{mk|sdh|م '''ئۊشم'''.|tr=Mi '''üşim'''.|w=Ez dibêjim.|birêz=1}}
==== Formên alternatîv ====
* {{hw|sdh|وتن|tr=witin}}
==== Etîmolojî ====
Ji {{hv|ira-pro|*uxtíš}}, ji {{hv|ine-pro|*uktíš||gotin}}. Hevreha {{hv|ckb|وتن|tr=witin}}, {{hv|hac|واتەی}} (>kurmancî [[wate]]), {{hv|ae|𐬎𐬑𐬙𐬌|tr=ûxtî}}, {{hv|xcl|ուխտ|tr=ûxt}} (ji zimanekî Îranî), {{hv|sa|उक्ति|tr=ûktî}}. Rayeka dema niha -üş- dibe ku hevreha [[gotin|-bêj-a]] kurmancî be: wêj>wêş>üş.
ks3perddoc1bqisuytctrc6vzxhdnmk
Bikarhêner:Wikihez/skrîpt/js/delete.js
2
1357331
6342695
6334047
2026-08-26T13:46:41Z
Wikihez
7344
6342695
javascript
text/javascript
// <nowiki>
// Key: mass-delete-category
// Label: Jêbirina bi kom
// Info: Rûpelên di kategoriyê de an rûpelên girêdayî (Girêdanên li ser vir) bi komî jê dibe (Taybet ji bo adminan)
(function() {
// Navê fonksiyonê li vir wekî 'mass-delete-category' tê diyarkirin daku loader.js bikar bîne
window.wikihez_scripts = window.wikihez_scripts || {};
window.wikihez_scripts['mass-delete-category'] = function() {
// Mode diyar bike: 'category' an 'backlinks'
function getMode() {
if (mw.config.get('wgNamespaceNumber') === 14) {
return 'category';
}
if (mw.config.get('wgCanonicalSpecialPageName') === 'Whatlinkshere') {
return 'backlinks';
}
// Check for custom backlinks page: Taybet:Girêdanên li ser vir/...
const pageName = mw.config.get('wgPageName');
if (pageName && pageName.startsWith('Taybet:Girêdanên_li_ser_vir/')) {
return 'backlinks';
}
return null;
}
const mode = getMode();
if (!mode) {
mw.notify('Ev amûr tenê di rûpelên kategoriyê de an di rûpelên "Girêdanên li ser vir" de dixebite.', { type: 'error' });
return;
}
// Rûpela armanc a bidest bixe (kategorî bixwe, an rûpela ku Taybet:Girêdanên_li_ser_vir lê dinêre)
function getTargetTitle() {
if (mode === 'category') {
return mw.config.get('wgPageName');
}
// backlinks mode
const pageName = mw.config.get('wgPageName');
// Extract subpage: "Taybet:Girêdanên_li_ser_vir/Şablon:Ferhenga_Destê" → "Şablon:Ferhenga_Destê"
if (pageName && pageName.startsWith('Taybet:Girêdanên_li_ser_vir/')) {
const parts = pageName.split('/');
if (parts.length > 1) {
return parts.slice(1).join('/');
}
}
let target = mw.config.get('wgRelevantPageName');
if (!target) {
target = mw.util.getParamValue('target');
}
return target;
}
const targetTitle = getTargetTitle();
if (!targetTitle) {
mw.notify('Rûpela armanc nehat dîtin.', { type: 'error' });
return;
}
mw.loader.using(["mediawiki.api", "mediawiki.util", "jquery.ui"]).done(function() {
const api = new mw.Api();
function getCategoryMembers(categoryName, callback) {
api.get({
action: "query",
list: "categorymembers",
cmtitle: categoryName,
cmlimit: "max",
format: "json"
}).done(function(data) {
if (data.query && data.query.categorymembers) {
const members = data.query.categorymembers.reduce((acc, member) => {
// Hemû namespaces: 14 binkategorî ne, yên din rûpelên normal/yên din in
const group = (member.ns === 14) ? '14' : 'others';
if (!acc[group]) acc[group] = [];
acc[group].push(member.title);
return acc;
}, { 'others': [], '14': [] });
callback(members);
} else {
callback({ 'others': [], '14': [] });
}
}).fail(() => callback({ 'others': [], '14': [] }));
}
function getBacklinkMembers(pageTitle, callback) {
api.get({
action: "query",
list: "backlinks",
bltitle: pageTitle,
bllimit: "max",
format: "json"
}).done(function(data) {
if (data.query && data.query.backlinks) {
const nsMap = {};
const members = data.query.backlinks.reduce((acc, member) => {
// Rûpelên ku bixwe redirect in ber bi armancê ve, ji yên din cuda tomar bike
const group = member.redirect !== undefined ? 'redirects' : 'others';
if (!acc[group]) acc[group] = [];
acc[group].push(member.title);
nsMap[member.title] = member.ns;
return acc;
}, { 'others': [], 'redirects': [] });
members.nsMap = nsMap;
callback(members);
} else {
callback({ 'others': [], 'redirects': [], nsMap: {} });
}
}).fail(() => callback({ 'others': [], 'redirects': [], nsMap: {} }));
}
function getMembers(callback) {
if (mode === 'category') {
getCategoryMembers(targetTitle, callback);
} else {
getBacklinkMembers(targetTitle, callback);
}
}
// Sedemên jêbirinê yên pêş-danasînkirî. Yekem ji bo mode/target diyar e,
// "bot" gişî ye, "custom" nivîsandina bi destan vedibe.
function getReasonPresets() {
const presets = [];
if (mode === 'category') {
presets.push({
key: 'default',
label: 'Paqijkirina kategoriyê',
value: "Paqijkirina kategoriya [[:Kategorî:Madeyên ku bên jêbirin\n|Madeyên ku bên jêbirin]]"
});
} else {
presets.push({
key: 'default',
label: 'Bêçavkanî',
value: `Formên [[${targetTitle}]] hatine jêbirin çunkî bêçavkanî ne`
});
}
presets.push({ key: 'bot', label: 'Xeletiya botê', value: 'Xeletiya botê' });
presets.push({ key: 'custom', label: 'Din (bi destan)', value: '' });
return presets;
}
function getDefaultReason() {
return getReasonPresets()[0].value;
}
function getDialogTitle() {
return mode === 'category'
? 'Jêbirina bi kom ji kategoriyê'
: 'Jêbirina bi kom ji rûpelên girêdayî';
}
function getSecondGroupConfig() {
// { value: hilbijartina di members de, label: ya ku têtê nîşandan }
return mode === 'category'
? { value: '14', label: 'Binkategorî' }
: { value: 'redirects', label: 'Redirect' };
}
function displayModal(members) {
const secondGroup = getSecondGroupConfig();
const reasonPresets = getReasonPresets();
const reasonOptionsHtml = reasonPresets.map(p =>
`<option value="${p.key}">${mw.html.escape(p.label)}</option>`
).join('');
const modalHtml = `
<style>
#md-container {
/* Şêwaza ronahiyê ya standard */
--md-bg: #ffffff;
--md-fg: #202122;
--md-border: #a2a9b1;
--md-input-bg: #ffffff;
--md-list-bg: #f8f9fa;
--md-item-border: #eaecf0;
--md-item-hover: #fee7e6;
--md-danger-bg: #d33333;
--md-danger-fg: #ffffff;
--md-btn-bg: #f8f9fa;
--md-btn-fg: #202122;
--md-progress-track: #eaecf0;
font-family: sans-serif;
padding: 10px;
background: var(--md-bg);
color: var(--md-fg);
}
/* Şêwaza tarî: dema tercîha pergalê tarî be (skin-theme-clientpref-os) */
@media (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os #md-container {
--md-bg: #101418;
--md-fg: #eaecf0;
--md-border: #54595d;
--md-input-bg: #27292d;
--md-list-bg: #18181d;
--md-item-border: #36383d;
--md-item-hover: #3a2626;
--md-danger-bg: #f54739;
--md-danger-fg: #ffffff;
--md-btn-bg: #2b2d31;
--md-btn-fg: #eaecf0;
--md-progress-track: #36383d;
}
}
/* Şêwaza tarî: dema bikarhêner bi zelalî moda şevê hilbijartibe */
html.skin-theme-clientpref-night #md-container {
--md-bg: #101418;
--md-fg: #eaecf0;
--md-border: #54595d;
--md-input-bg: #27292d;
--md-list-bg: #18181d;
--md-item-border: #36383d;
--md-item-hover: #3a2626;
--md-danger-bg: #f54739;
--md-danger-fg: #ffffff;
--md-btn-bg: #2b2d31;
--md-btn-fg: #eaecf0;
--md-progress-track: #36383d;
}
/* Fallback: heke tu klasa skînê tune be lê pergal tarî be (nimûne, li derveyî wîkiyê) */
@media (prefers-color-scheme: dark) {
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) #md-container {
--md-bg: #101418;
--md-fg: #eaecf0;
--md-border: #54595d;
--md-input-bg: #27292d;
--md-list-bg: #18181d;
--md-item-border: #36383d;
--md-item-hover: #3a2626;
--md-danger-bg: #f54739;
--md-danger-fg: #ffffff;
--md-btn-bg: #2b2d31;
--md-btn-fg: #eaecf0;
--md-progress-track: #36383d;
}
}
.md-input-group { margin-bottom: 12px; }
.md-input-group label { display: block; font-weight: bold; margin-bottom: 5px; color: var(--md-fg); }
#md-reason, #md-pattern, #md-reason-preset {
width: 100%;
padding: 8px;
box-sizing: border-box;
border: 1px solid var(--md-border);
background: var(--md-input-bg);
color: var(--md-fg);
}
#md-reason-preset { margin-bottom: 6px; }
#md-pattern { font-family: monospace; }
#md-list {
border: 1px solid var(--md-border);
max-height: 200px;
overflow-y: scroll;
background: var(--md-list-bg);
margin-bottom: 10px;
}
.md-item {
padding: 5px 10px;
border-bottom: 1px solid var(--md-item-border);
cursor: pointer;
font-size: 0.85em;
display: flex;
justify-content: space-between;
color: var(--md-fg);
}
.md-item:hover { background-color: var(--md-item-hover); }
.md-item.selected { background-color: var(--md-danger-bg) !important; color: var(--md-danger-fg); }
#md-progress-container { display: none; margin-bottom: 15px; }
#md-progress-bar { width: 100%; background: var(--md-progress-track); height: 12px; border-radius: 6px; overflow: hidden; }
#md-progress-fill { width: 0%; height: 100%; background: var(--md-danger-bg); transition: width 0.2s; }
#md-status-text { font-size: 0.85em; margin-top: 5px; text-align: center; color: var(--md-fg); }
.md-buttons { display: flex; gap: 5px; }
.md-btn { padding: 6px 12px; border: 1px solid var(--md-border); background: var(--md-btn-bg); color: var(--md-btn-fg); cursor: pointer; }
.md-btn-danger { background: var(--md-danger-bg); color: var(--md-danger-fg); border-color: var(--md-danger-bg); font-weight: bold; margin-left: auto; }
.md-btn:disabled { opacity: 0.5; cursor: default; }
/* Şêwaza dîalogê ya jQuery UI (sernav, kêlek) */
.md-dialog.ui-dialog { background: var(--md-bg, #fff); border-color: var(--md-border, #a2a9b1); }
.md-dialog .ui-dialog-titlebar { background: var(--md-list-bg, #f8f9fa); border-color: var(--md-border, #a2a9b1); color: var(--md-fg, #202122); }
.md-dialog .ui-dialog-title { color: var(--md-fg, #202122); }
.md-dialog .ui-dialog-content { background: var(--md-bg, #fff); color: var(--md-fg, #202122); }
html.skin-theme-clientpref-night .md-dialog.ui-dialog,
html.skin-theme-clientpref-night .md-dialog .ui-dialog-titlebar,
html.skin-theme-clientpref-night .md-dialog .ui-dialog-content {
background: #101418; color: #eaecf0; border-color: #54595d;
}
@media (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .md-dialog.ui-dialog,
html.skin-theme-clientpref-os .md-dialog .ui-dialog-titlebar,
html.skin-theme-clientpref-os .md-dialog .ui-dialog-content {
background: #101418; color: #eaecf0; border-color: #54595d;
}
}
</style>
<div id="md-container">
<div class="md-input-group">
<label>Sedemê jêbirinê:</label>
<select id="md-reason-preset">
${reasonOptionsHtml}
</select>
<input type="text" id="md-reason" placeholder="Sedemê binivîse..." value="${getDefaultReason()}">
</div>
<div class="md-input-group">
<label>Fîltra Regex (vebijarkî):</label>
<input type="text" id="md-pattern" placeholder="Nimûne: ^Bikarhêner:.*">
</div>
<div class="md-input-group">
<input type="radio" id="pgRadio" name="md-type" value="others" checked> <label style="display:inline" for="pgRadio">Rûpel (Hemû)</label>
<input type="radio" id="catRadio" name="md-type" value="${secondGroup.value}"> <label style="display:inline" for="catRadio">${secondGroup.label}</label>
</div>
${mode === 'backlinks' ? `
<div class="md-input-group">
<input type="checkbox" id="md-ns0-filter"> <label style="display:inline" for="md-ns0-filter">Tenê made (ns:0)</label>
</div>
` : ''}
<div id="md-list"></div>
<div id="md-progress-container">
<div id="md-progress-bar"><div id="md-progress-fill"></div></div>
<div id="md-status-text">Amade ye...</div>
</div>
<div class="md-buttons">
<button class="md-btn" id="md-selectAll">Hemûyan hilbijêre</button>
<button class="md-btn md-btn-danger" id="md-deleteButton">Jê bibe</button>
</div>
</div>
`;
const $dialog = $('<div>').html(modalHtml).dialog({
title: getDialogTitle(),
width: 500,
modal: true,
dialogClass: 'md-dialog'
});
function renderList() {
const type = $('input[name="md-type"]:checked').val();
const items = members[type] || [];
const $list = $('#md-list').empty();
const pattern = $('#md-pattern').val();
const ns0Only = $('#md-ns0-filter').is(':checked');
let regex;
try { if(pattern) regex = new RegExp(pattern); } catch(e) {}
items.forEach(item => {
if (regex && !regex.test(item)) return;
if (ns0Only && members.nsMap && members.nsMap[item] !== 0) return;
const $el = $('<div>').addClass('md-item').text(item);
$list.append($el);
});
}
$('#md-list').on('click', '.md-item', function() {
$(this).toggleClass('selected');
});
$('#md-selectAll').on('click', function() {
$('.md-item').addClass('selected');
});
$('#md-reason-preset').on('change', function() {
const key = $(this).val();
const preset = reasonPresets.find(p => p.key === key);
if (preset && key !== 'custom') {
$('#md-reason').val(preset.value);
} else {
$('#md-reason').val('').focus();
}
});
$('#md-pattern, input[name="md-type"], #md-ns0-filter').on('input change', renderList);
$('#md-deleteButton').on('click', function() {
const selected = $('.md-item.selected').map(function() { return $(this).text(); }).get();
const reason = $('#md-reason').val();
if (selected.length === 0) {
alert("Ji kerema xwe rûpelan hilbijêre!");
return;
}
if (!confirm(`Tu dixwazî ${selected.length} rûpelan jê bibe? Ev kiryar paşve naye girtin!`)) return;
$(this).prop('disabled', true);
$('.md-btn').prop('disabled', true);
$('#md-progress-container').show();
processDeletions(selected, reason, $dialog);
});
renderList();
}
async function processDeletions(titles, reason, $dialog) {
let deleted = 0;
const total = titles.length;
for (let i = 0; i < total; i++) {
const title = titles[i];
const progress = Math.round(((i + 1) / total) * 100);
$('#md-progress-fill').css('width', progress + '%');
$('#md-status-text').text(`Tê jêbirin: ${i + 1} / ${total} (${title})`);
try {
await api.postWithToken("csrf", {
action: "delete",
title: title,
reason: reason + " ([[Bikarhêner:Wikihez/skrîpt/js/delete.js|delete.js]])"
});
deleted++;
} catch (err) {
console.error("Xeletî di jêbirina rûpela " + title + ":", err);
}
}
$('#md-status-text').text(`Temam bû! ${deleted} rûpel hatin jêbirin.`);
setTimeout(() => {
$dialog.dialog('close');
location.reload();
}, 1500);
}
// Destpêkirina pêvajoyê
getMembers(displayModal);
});
};
})();
// </nowiki>
nt524ha8mqh2an7f4lxix4jzo4lkwku
6342697
6342695
2026-08-26T13:52:48Z
Wikihez
7344
6342697
javascript
text/javascript
// <nowiki>
// Key: mass-delete-category
// Label: Jêbirina bi kom
// Info: Rûpelên di kategoriyê de an rûpelên girêdayî (Girêdanên li ser vir) bi komî jê dibe (Taybet ji bo adminan)
(function() {
// Navê fonksiyonê li vir wekî 'mass-delete-category' tê diyarkirin daku loader.js bikar bîne
window.wikihez_scripts = window.wikihez_scripts || {};
window.wikihez_scripts['mass-delete-category'] = function() {
// Mode diyar bike: 'category' an 'backlinks'
function getMode() {
if (mw.config.get('wgNamespaceNumber') === 14) {
return 'category';
}
if (mw.config.get('wgCanonicalSpecialPageName') === 'Whatlinkshere') {
return 'backlinks';
}
// Check for custom backlinks page: Taybet:Girêdanên li ser vir/...
const pageName = mw.config.get('wgPageName');
if (pageName && pageName.startsWith('Taybet:Girêdanên_li_ser_vir/')) {
return 'backlinks';
}
return null;
}
const mode = getMode();
if (!mode) {
mw.notify('Ev amûr tenê di rûpelên kategoriyê de an di rûpelên "Girêdanên li ser vir" de dixebite.', { type: 'error' });
return;
}
// Rûpela armanc a bidest bixe (kategorî bixwe, an rûpela ku Taybet:Girêdanên_li_ser_vir lê dinêre)
function getTargetTitle() {
if (mode === 'category') {
return mw.config.get('wgPageName');
}
// backlinks mode
const pageName = mw.config.get('wgPageName');
// Extract subpage: "Taybet:Girêdanên_li_ser_vir/Şablon:Ferhenga_Destê" → "Şablon:Ferhenga_Destê"
if (pageName && pageName.startsWith('Taybet:Girêdanên_li_ser_vir/')) {
const parts = pageName.split('/');
if (parts.length > 1) {
return parts.slice(1).join('/');
}
}
let target = mw.config.get('wgRelevantPageName');
if (!target) {
target = mw.util.getParamValue('target');
}
return target;
}
const targetTitle = getTargetTitle();
if (!targetTitle) {
mw.notify('Rûpela armanc nehat dîtin.', { type: 'error' });
return;
}
mw.loader.using(["mediawiki.api", "mediawiki.util", "jquery.ui"]).done(function() {
const api = new mw.Api();
function getCategoryMembers(categoryName, callback) {
api.get({
action: "query",
list: "categorymembers",
cmtitle: categoryName,
cmlimit: "max",
format: "json"
}).done(function(data) {
if (data.query && data.query.categorymembers) {
const members = data.query.categorymembers.reduce((acc, member) => {
// Hemû namespaces: 14 binkategorî ne, yên din rûpelên normal/yên din in
const group = (member.ns === 14) ? '14' : 'others';
if (!acc[group]) acc[group] = [];
acc[group].push(member.title);
return acc;
}, { 'others': [], '14': [] });
callback(members);
} else {
callback({ 'others': [], '14': [] });
}
}).fail(() => callback({ 'others': [], '14': [] }));
}
function getBacklinkMembers(pageTitle, callback) {
api.get({
action: "query",
list: "backlinks",
bltitle: pageTitle,
bllimit: "max",
blnamespace: "0|4|10|14", // ns:0 (main), ns:4 (Wîkîferheng:), ns:10 (Template:), ns:14 (Category:)
blredirect: "all", // Include redirects
format: "json"
}).done(function(data) {
if (data.query && data.query.backlinks) {
const nsMap = {};
const members = data.query.backlinks.reduce((acc, member) => {
// Rûpelên ku bixwe redirect in ber bi armancê ve, ji yên din cuda tomar bike
const group = member.redirect !== undefined ? 'redirects' : 'others';
if (!acc[group]) acc[group] = [];
acc[group].push(member.title);
nsMap[member.title] = member.ns;
return acc;
}, { 'others': [], 'redirects': [] });
members.nsMap = nsMap;
callback(members);
} else {
callback({ 'others': [], 'redirects': [], nsMap: {} });
}
}).fail(() => callback({ 'others': [], 'redirects': [], nsMap: {} }));
}
function getMembers(callback) {
if (mode === 'category') {
getCategoryMembers(targetTitle, callback);
} else {
getBacklinkMembers(targetTitle, callback);
}
}
// Sedemên jêbirinê yên pêş-danasînkirî. Yekem ji bo mode/target diyar e,
// "bot" gişî ye, "custom" nivîsandina bi destan vedibe.
function getReasonPresets() {
const presets = [];
if (mode === 'category') {
presets.push({
key: 'default',
label: 'Paqijkirina kategoriyê',
value: "Paqijkirina kategoriya [[:Kategorî:Madeyên ku bên jêbirin\n|Madeyên ku bên jêbirin]]"
});
} else {
presets.push({
key: 'default',
label: 'Bêçavkanî',
value: `Formên [[${targetTitle}]] hatine jêbirin çunkî bêçavkanî ne`
});
}
presets.push({ key: 'bot', label: 'Xeletiya botê', value: 'Xeletiya botê' });
presets.push({ key: 'custom', label: 'Din (bi destan)', value: '' });
return presets;
}
function getDefaultReason() {
return getReasonPresets()[0].value;
}
function getDialogTitle() {
return mode === 'category'
? 'Jêbirina bi kom ji kategoriyê'
: 'Jêbirina bi kom ji rûpelên girêdayî';
}
function getSecondGroupConfig() {
// { value: hilbijartina di members de, label: ya ku têtê nîşandan }
return mode === 'category'
? { value: '14', label: 'Binkategorî' }
: { value: 'redirects', label: 'Redirect' };
}
function displayModal(members) {
const secondGroup = getSecondGroupConfig();
const reasonPresets = getReasonPresets();
const reasonOptionsHtml = reasonPresets.map(p =>
`<option value="${p.key}">${mw.html.escape(p.label)}</option>`
).join('');
const modalHtml = `
<style>
#md-container {
/* Şêwaza ronahiyê ya standard */
--md-bg: #ffffff;
--md-fg: #202122;
--md-border: #a2a9b1;
--md-input-bg: #ffffff;
--md-list-bg: #f8f9fa;
--md-item-border: #eaecf0;
--md-item-hover: #fee7e6;
--md-danger-bg: #d33333;
--md-danger-fg: #ffffff;
--md-btn-bg: #f8f9fa;
--md-btn-fg: #202122;
--md-progress-track: #eaecf0;
font-family: sans-serif;
padding: 10px;
background: var(--md-bg);
color: var(--md-fg);
}
/* Şêwaza tarî: dema tercîha pergalê tarî be (skin-theme-clientpref-os) */
@media (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os #md-container {
--md-bg: #101418;
--md-fg: #eaecf0;
--md-border: #54595d;
--md-input-bg: #27292d;
--md-list-bg: #18181d;
--md-item-border: #36383d;
--md-item-hover: #3a2626;
--md-danger-bg: #f54739;
--md-danger-fg: #ffffff;
--md-btn-bg: #2b2d31;
--md-btn-fg: #eaecf0;
--md-progress-track: #36383d;
}
}
/* Şêwaza tarî: dema bikarhêner bi zelalî moda şevê hilbijartibe */
html.skin-theme-clientpref-night #md-container {
--md-bg: #101418;
--md-fg: #eaecf0;
--md-border: #54595d;
--md-input-bg: #27292d;
--md-list-bg: #18181d;
--md-item-border: #36383d;
--md-item-hover: #3a2626;
--md-danger-bg: #f54739;
--md-danger-fg: #ffffff;
--md-btn-bg: #2b2d31;
--md-btn-fg: #eaecf0;
--md-progress-track: #36383d;
}
/* Fallback: heke tu klasa skînê tune be lê pergal tarî be (nimûne, li derveyî wîkiyê) */
@media (prefers-color-scheme: dark) {
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) #md-container {
--md-bg: #101418;
--md-fg: #eaecf0;
--md-border: #54595d;
--md-input-bg: #27292d;
--md-list-bg: #18181d;
--md-item-border: #36383d;
--md-item-hover: #3a2626;
--md-danger-bg: #f54739;
--md-danger-fg: #ffffff;
--md-btn-bg: #2b2d31;
--md-btn-fg: #eaecf0;
--md-progress-track: #36383d;
}
}
.md-input-group { margin-bottom: 12px; }
.md-input-group label { display: block; font-weight: bold; margin-bottom: 5px; color: var(--md-fg); }
#md-reason, #md-pattern, #md-reason-preset {
width: 100%;
padding: 8px;
box-sizing: border-box;
border: 1px solid var(--md-border);
background: var(--md-input-bg);
color: var(--md-fg);
}
#md-reason-preset { margin-bottom: 6px; }
#md-pattern { font-family: monospace; }
#md-list {
border: 1px solid var(--md-border);
max-height: 200px;
overflow-y: scroll;
background: var(--md-list-bg);
margin-bottom: 10px;
}
.md-item {
padding: 5px 10px;
border-bottom: 1px solid var(--md-item-border);
cursor: pointer;
font-size: 0.85em;
display: flex;
justify-content: space-between;
color: var(--md-fg);
}
.md-item:hover { background-color: var(--md-item-hover); }
.md-item.selected { background-color: var(--md-danger-bg) !important; color: var(--md-danger-fg); }
#md-progress-container { display: none; margin-bottom: 15px; }
#md-progress-bar { width: 100%; background: var(--md-progress-track); height: 12px; border-radius: 6px; overflow: hidden; }
#md-progress-fill { width: 0%; height: 100%; background: var(--md-danger-bg); transition: width 0.2s; }
#md-status-text { font-size: 0.85em; margin-top: 5px; text-align: center; color: var(--md-fg); }
.md-buttons { display: flex; gap: 5px; }
.md-btn { padding: 6px 12px; border: 1px solid var(--md-border); background: var(--md-btn-bg); color: var(--md-btn-fg); cursor: pointer; }
.md-btn-danger { background: var(--md-danger-bg); color: var(--md-danger-fg); border-color: var(--md-danger-bg); font-weight: bold; margin-left: auto; }
.md-btn:disabled { opacity: 0.5; cursor: default; }
/* Şêwaza dîalogê ya jQuery UI (sernav, kêlek) */
.md-dialog.ui-dialog { background: var(--md-bg, #fff); border-color: var(--md-border, #a2a9b1); }
.md-dialog .ui-dialog-titlebar { background: var(--md-list-bg, #f8f9fa); border-color: var(--md-border, #a2a9b1); color: var(--md-fg, #202122); }
.md-dialog .ui-dialog-title { color: var(--md-fg, #202122); }
.md-dialog .ui-dialog-content { background: var(--md-bg, #fff); color: var(--md-fg, #202122); }
html.skin-theme-clientpref-night .md-dialog.ui-dialog,
html.skin-theme-clientpref-night .md-dialog .ui-dialog-titlebar,
html.skin-theme-clientpref-night .md-dialog .ui-dialog-content {
background: #101418; color: #eaecf0; border-color: #54595d;
}
@media (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .md-dialog.ui-dialog,
html.skin-theme-clientpref-os .md-dialog .ui-dialog-titlebar,
html.skin-theme-clientpref-os .md-dialog .ui-dialog-content {
background: #101418; color: #eaecf0; border-color: #54595d;
}
}
</style>
<div id="md-container">
<div class="md-input-group">
<label>Sedemê jêbirinê:</label>
<select id="md-reason-preset">
${reasonOptionsHtml}
</select>
<input type="text" id="md-reason" placeholder="Sedemê binivîse..." value="${getDefaultReason()}">
</div>
<div class="md-input-group">
<label>Fîltra Regex (vebijarkî):</label>
<input type="text" id="md-pattern" placeholder="Nimûne: ^Bikarhêner:.*">
</div>
<div class="md-input-group">
<input type="radio" id="pgRadio" name="md-type" value="others" checked> <label style="display:inline" for="pgRadio">Rûpel (Hemû)</label>
<input type="radio" id="catRadio" name="md-type" value="${secondGroup.value}"> <label style="display:inline" for="catRadio">${secondGroup.label}</label>
</div>
${mode === 'backlinks' ? `
<div class="md-input-group">
<input type="checkbox" id="md-ns0-filter"> <label style="display:inline" for="md-ns0-filter">Tenê made (ns:0)</label>
</div>
` : ''}
<div id="md-list"></div>
<div id="md-progress-container">
<div id="md-progress-bar"><div id="md-progress-fill"></div></div>
<div id="md-status-text">Amade ye...</div>
</div>
<div class="md-buttons">
<button class="md-btn" id="md-selectAll">Hemûyan hilbijêre</button>
<button class="md-btn md-btn-danger" id="md-deleteButton">Jê bibe</button>
</div>
</div>
`;
const $dialog = $('<div>').html(modalHtml).dialog({
title: getDialogTitle(),
width: 500,
modal: true,
dialogClass: 'md-dialog'
});
function renderList() {
const type = $('input[name="md-type"]:checked').val();
const items = members[type] || [];
const $list = $('#md-list').empty();
const pattern = $('#md-pattern').val();
const ns0Only = $('#md-ns0-filter').is(':checked');
let regex;
try { if(pattern) regex = new RegExp(pattern); } catch(e) {}
items.forEach(item => {
if (regex && !regex.test(item)) return;
if (ns0Only && members.nsMap && members.nsMap[item] !== 0) return;
const $el = $('<div>').addClass('md-item').text(item);
$list.append($el);
});
}
$('#md-list').on('click', '.md-item', function() {
$(this).toggleClass('selected');
});
$('#md-selectAll').on('click', function() {
$('.md-item').addClass('selected');
});
$('#md-reason-preset').on('change', function() {
const key = $(this).val();
const preset = reasonPresets.find(p => p.key === key);
if (preset && key !== 'custom') {
$('#md-reason').val(preset.value);
} else {
$('#md-reason').val('').focus();
}
});
$('#md-pattern, input[name="md-type"], #md-ns0-filter').on('input change', renderList);
$('#md-deleteButton').on('click', function() {
const selected = $('.md-item.selected').map(function() { return $(this).text(); }).get();
const reason = $('#md-reason').val();
if (selected.length === 0) {
alert("Ji kerema xwe rûpelan hilbijêre!");
return;
}
if (!confirm(`Tu dixwazî ${selected.length} rûpelan jê bibe? Ev kiryar paşve naye girtin!`)) return;
$(this).prop('disabled', true);
$('.md-btn').prop('disabled', true);
$('#md-progress-container').show();
processDeletions(selected, reason, $dialog);
});
renderList();
}
async function processDeletions(titles, reason, $dialog) {
let deleted = 0;
const total = titles.length;
for (let i = 0; i < total; i++) {
const title = titles[i];
const progress = Math.round(((i + 1) / total) * 100);
$('#md-progress-fill').css('width', progress + '%');
$('#md-status-text').text(`Tê jêbirin: ${i + 1} / ${total} (${title})`);
try {
await api.postWithToken("csrf", {
action: "delete",
title: title,
reason: reason + " ([[Bikarhêner:Wikihez/skrîpt/js/delete.js|delete.js]])"
});
deleted++;
} catch (err) {
console.error("Xeletî di jêbirina rûpela " + title + ":", err);
}
}
$('#md-status-text').text(`Temam bû! ${deleted} rûpel hatin jêbirin.`);
setTimeout(() => {
$dialog.dialog('close');
location.reload();
}, 1500);
}
// Destpêkirina pêvajoyê
getMembers(displayModal);
});
};
})();
// </nowiki>
fcf110q9t6kojkl88akstqgsufw7f1x
6342698
6342697
2026-08-26T13:57:33Z
Wikihez
7344
6342698
javascript
text/javascript
// <nowiki>
// Key: mass-delete-category
// Label: Jêbirina bi kom
// Info: Rûpelên di kategoriyê de an rûpelên girêdayî (Girêdanên li ser vir) bi komî jê dibe (Taybet ji bo adminan)
(function() {
// Navê fonksiyonê li vir wekî 'mass-delete-category' tê diyarkirin daku loader.js bikar bîne
window.wikihez_scripts = window.wikihez_scripts || {};
window.wikihez_scripts['mass-delete-category'] = function() {
// Mode diyar bike: 'category' an 'backlinks'
function getMode() {
if (mw.config.get('wgNamespaceNumber') === 14) {
return 'category';
}
if (mw.config.get('wgCanonicalSpecialPageName') === 'Whatlinkshere') {
return 'backlinks';
}
// Check for custom backlinks page: Taybet:Girêdanên li ser vir/...
const pageName = mw.config.get('wgPageName');
if (pageName && pageName.startsWith('Taybet:Girêdanên_li_ser_vir/')) {
return 'backlinks';
}
return null;
}
const mode = getMode();
if (!mode) {
mw.notify('Ev amûr tenê di rûpelên kategoriyê de an di rûpelên "Girêdanên li ser vir" de dixebite.', { type: 'error' });
return;
}
// Rûpela armanc a bidest bixe (kategorî bixwe, an rûpela ku Taybet:Girêdanên_li_ser_vir lê dinêre)
function getTargetTitle() {
if (mode === 'category') {
return mw.config.get('wgPageName');
}
// backlinks mode
const pageName = mw.config.get('wgPageName');
// Extract subpage: "Taybet:Girêdanên_li_ser_vir/Şablon:Ferhenga_Destê" → "Şablon:Ferhenga_Destê"
if (pageName && pageName.startsWith('Taybet:Girêdanên_li_ser_vir/')) {
const parts = pageName.split('/');
if (parts.length > 1) {
return parts.slice(1).join('/');
}
}
let target = mw.config.get('wgRelevantPageName');
if (!target) {
target = mw.util.getParamValue('target');
}
return target;
}
const targetTitle = getTargetTitle();
if (!targetTitle) {
mw.notify('Rûpela armanc nehat dîtin.', { type: 'error' });
return;
}
mw.loader.using(["mediawiki.api", "mediawiki.util", "jquery.ui"]).done(function() {
const api = new mw.Api();
function getCategoryMembers(categoryName, callback) {
api.get({
action: "query",
list: "categorymembers",
cmtitle: categoryName,
cmlimit: "max",
format: "json"
}).done(function(data) {
if (data.query && data.query.categorymembers) {
const members = data.query.categorymembers.reduce((acc, member) => {
// Hemû namespaces: 14 binkategorî ne, yên din rûpelên normal/yên din in
const group = (member.ns === 14) ? '14' : 'others';
if (!acc[group]) acc[group] = [];
acc[group].push(member.title);
return acc;
}, { 'others': [], '14': [] });
callback(members);
} else {
callback({ 'others': [], '14': [] });
}
}).fail(() => callback({ 'others': [], '14': [] }));
}
// Fetch pages linking to (list=backlinks) or transcluding (list=embeddedin) a title
function fetchLinksAndTransclusions(title, callback) {
const namespaces = "0|4|10|14";
let combined = [];
let pending = 2;
function onDone() {
pending--;
if (pending === 0) callback(combined);
}
api.get({
action: "query",
list: "backlinks",
bltitle: title,
bllimit: "max",
blnamespace: namespaces,
format: "json"
}).done(function(data) {
combined = combined.concat((data.query && data.query.backlinks) || []);
onDone();
}).fail(onDone);
api.get({
action: "query",
list: "embeddedin",
eititle: title,
eilimit: "max",
einamespace: namespaces,
format: "json"
}).done(function(data) {
combined = combined.concat((data.query && data.query.embeddedin) || []);
onDone();
}).fail(onDone);
}
function getBacklinkMembers(pageTitle, callback) {
fetchLinksAndTransclusions(pageTitle, function(directLinks) {
const nsMap = {};
const others = [];
const redirects = [];
const seen = new Set();
directLinks.forEach(function(member) {
if (seen.has(member.title)) return;
seen.add(member.title);
nsMap[member.title] = member.ns;
// Rûpelên ku bixwe redirect in ber bi armancê ve, ji yên din cuda tomar bike
if (member.redirect !== undefined) {
redirects.push(member.title);
} else {
others.push(member.title);
}
});
// Ji bo her redirectê, girêdan/karanîna wê jî bide (asta yekem)
const toExpand = redirects.slice();
if (toExpand.length === 0) {
callback({ others: others, redirects: redirects, nsMap: nsMap });
return;
}
let remaining = toExpand.length;
toExpand.forEach(function(redirTitle) {
fetchLinksAndTransclusions(redirTitle, function(indirectLinks) {
indirectLinks.forEach(function(member) {
if (seen.has(member.title)) return;
seen.add(member.title);
nsMap[member.title] = member.ns;
if (member.redirect !== undefined) {
redirects.push(member.title);
} else {
others.push(member.title);
}
});
remaining--;
if (remaining === 0) {
callback({ others: others, redirects: redirects, nsMap: nsMap });
}
});
});
});
}
function getMembers(callback) {
if (mode === 'category') {
getCategoryMembers(targetTitle, callback);
} else {
getBacklinkMembers(targetTitle, callback);
}
}
// Sedemên jêbirinê yên pêş-danasînkirî. Yekem ji bo mode/target diyar e,
// "bot" gişî ye, "custom" nivîsandina bi destan vedibe.
function getReasonPresets() {
const presets = [];
if (mode === 'category') {
presets.push({
key: 'default',
label: 'Paqijkirina kategoriyê',
value: "Paqijkirina kategoriya [[:Kategorî:Madeyên ku bên jêbirin\n|Madeyên ku bên jêbirin]]"
});
} else {
presets.push({
key: 'default',
label: 'Bêçavkanî',
value: `Formên [[${targetTitle}]] hatine jêbirin çunkî bêçavkanî ne`
});
}
presets.push({ key: 'bot', label: 'Xeletiya botê', value: 'Xeletiya botê' });
presets.push({ key: 'custom', label: 'Din (bi destan)', value: '' });
return presets;
}
function getDefaultReason() {
return getReasonPresets()[0].value;
}
function getDialogTitle() {
return mode === 'category'
? 'Jêbirina bi kom ji kategoriyê'
: 'Jêbirina bi kom ji rûpelên girêdayî';
}
function getSecondGroupConfig() {
// { value: hilbijartina di members de, label: ya ku têtê nîşandan }
return mode === 'category'
? { value: '14', label: 'Binkategorî' }
: { value: 'redirects', label: 'Redirect' };
}
function displayModal(members) {
const secondGroup = getSecondGroupConfig();
const reasonPresets = getReasonPresets();
const reasonOptionsHtml = reasonPresets.map(p =>
`<option value="${p.key}">${mw.html.escape(p.label)}</option>`
).join('');
const modalHtml = `
<style>
#md-container {
/* Şêwaza ronahiyê ya standard */
--md-bg: #ffffff;
--md-fg: #202122;
--md-border: #a2a9b1;
--md-input-bg: #ffffff;
--md-list-bg: #f8f9fa;
--md-item-border: #eaecf0;
--md-item-hover: #fee7e6;
--md-danger-bg: #d33333;
--md-danger-fg: #ffffff;
--md-btn-bg: #f8f9fa;
--md-btn-fg: #202122;
--md-progress-track: #eaecf0;
font-family: sans-serif;
padding: 10px;
background: var(--md-bg);
color: var(--md-fg);
}
/* Şêwaza tarî: dema tercîha pergalê tarî be (skin-theme-clientpref-os) */
@media (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os #md-container {
--md-bg: #101418;
--md-fg: #eaecf0;
--md-border: #54595d;
--md-input-bg: #27292d;
--md-list-bg: #18181d;
--md-item-border: #36383d;
--md-item-hover: #3a2626;
--md-danger-bg: #f54739;
--md-danger-fg: #ffffff;
--md-btn-bg: #2b2d31;
--md-btn-fg: #eaecf0;
--md-progress-track: #36383d;
}
}
/* Şêwaza tarî: dema bikarhêner bi zelalî moda şevê hilbijartibe */
html.skin-theme-clientpref-night #md-container {
--md-bg: #101418;
--md-fg: #eaecf0;
--md-border: #54595d;
--md-input-bg: #27292d;
--md-list-bg: #18181d;
--md-item-border: #36383d;
--md-item-hover: #3a2626;
--md-danger-bg: #f54739;
--md-danger-fg: #ffffff;
--md-btn-bg: #2b2d31;
--md-btn-fg: #eaecf0;
--md-progress-track: #36383d;
}
/* Fallback: heke tu klasa skînê tune be lê pergal tarî be (nimûne, li derveyî wîkiyê) */
@media (prefers-color-scheme: dark) {
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) #md-container {
--md-bg: #101418;
--md-fg: #eaecf0;
--md-border: #54595d;
--md-input-bg: #27292d;
--md-list-bg: #18181d;
--md-item-border: #36383d;
--md-item-hover: #3a2626;
--md-danger-bg: #f54739;
--md-danger-fg: #ffffff;
--md-btn-bg: #2b2d31;
--md-btn-fg: #eaecf0;
--md-progress-track: #36383d;
}
}
.md-input-group { margin-bottom: 12px; }
.md-input-group label { display: block; font-weight: bold; margin-bottom: 5px; color: var(--md-fg); }
#md-reason, #md-pattern, #md-reason-preset {
width: 100%;
padding: 8px;
box-sizing: border-box;
border: 1px solid var(--md-border);
background: var(--md-input-bg);
color: var(--md-fg);
}
#md-reason-preset { margin-bottom: 6px; }
#md-pattern { font-family: monospace; }
#md-list {
border: 1px solid var(--md-border);
max-height: 200px;
overflow-y: scroll;
background: var(--md-list-bg);
margin-bottom: 10px;
}
.md-item {
padding: 5px 10px;
border-bottom: 1px solid var(--md-item-border);
cursor: pointer;
font-size: 0.85em;
display: flex;
justify-content: space-between;
color: var(--md-fg);
}
.md-item:hover { background-color: var(--md-item-hover); }
.md-item.selected { background-color: var(--md-danger-bg) !important; color: var(--md-danger-fg); }
#md-progress-container { display: none; margin-bottom: 15px; }
#md-progress-bar { width: 100%; background: var(--md-progress-track); height: 12px; border-radius: 6px; overflow: hidden; }
#md-progress-fill { width: 0%; height: 100%; background: var(--md-danger-bg); transition: width 0.2s; }
#md-status-text { font-size: 0.85em; margin-top: 5px; text-align: center; color: var(--md-fg); }
.md-buttons { display: flex; gap: 5px; }
.md-btn { padding: 6px 12px; border: 1px solid var(--md-border); background: var(--md-btn-bg); color: var(--md-btn-fg); cursor: pointer; }
.md-btn-danger { background: var(--md-danger-bg); color: var(--md-danger-fg); border-color: var(--md-danger-bg); font-weight: bold; margin-left: auto; }
.md-btn:disabled { opacity: 0.5; cursor: default; }
/* Şêwaza dîalogê ya jQuery UI (sernav, kêlek) */
.md-dialog.ui-dialog { background: var(--md-bg, #fff); border-color: var(--md-border, #a2a9b1); }
.md-dialog .ui-dialog-titlebar { background: var(--md-list-bg, #f8f9fa); border-color: var(--md-border, #a2a9b1); color: var(--md-fg, #202122); }
.md-dialog .ui-dialog-title { color: var(--md-fg, #202122); }
.md-dialog .ui-dialog-content { background: var(--md-bg, #fff); color: var(--md-fg, #202122); }
html.skin-theme-clientpref-night .md-dialog.ui-dialog,
html.skin-theme-clientpref-night .md-dialog .ui-dialog-titlebar,
html.skin-theme-clientpref-night .md-dialog .ui-dialog-content {
background: #101418; color: #eaecf0; border-color: #54595d;
}
@media (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .md-dialog.ui-dialog,
html.skin-theme-clientpref-os .md-dialog .ui-dialog-titlebar,
html.skin-theme-clientpref-os .md-dialog .ui-dialog-content {
background: #101418; color: #eaecf0; border-color: #54595d;
}
}
</style>
<div id="md-container">
<div class="md-input-group">
<label>Sedemê jêbirinê:</label>
<select id="md-reason-preset">
${reasonOptionsHtml}
</select>
<input type="text" id="md-reason" placeholder="Sedemê binivîse..." value="${getDefaultReason()}">
</div>
<div class="md-input-group">
<label>Fîltra Regex (vebijarkî):</label>
<input type="text" id="md-pattern" placeholder="Nimûne: ^Bikarhêner:.*">
</div>
<div class="md-input-group">
<input type="radio" id="pgRadio" name="md-type" value="others" checked> <label style="display:inline" for="pgRadio">Rûpel (Hemû)</label>
<input type="radio" id="catRadio" name="md-type" value="${secondGroup.value}"> <label style="display:inline" for="catRadio">${secondGroup.label}</label>
</div>
${mode === 'backlinks' ? `
<div class="md-input-group">
<input type="checkbox" id="md-ns0-filter"> <label style="display:inline" for="md-ns0-filter">Tenê made (ns:0)</label>
</div>
` : ''}
<div id="md-list"></div>
<div id="md-progress-container">
<div id="md-progress-bar"><div id="md-progress-fill"></div></div>
<div id="md-status-text">Amade ye...</div>
</div>
<div class="md-buttons">
<button class="md-btn" id="md-selectAll">Hemûyan hilbijêre</button>
<button class="md-btn md-btn-danger" id="md-deleteButton">Jê bibe</button>
</div>
</div>
`;
const $dialog = $('<div>').html(modalHtml).dialog({
title: getDialogTitle(),
width: 500,
modal: true,
dialogClass: 'md-dialog'
});
function renderList() {
const type = $('input[name="md-type"]:checked').val();
const items = members[type] || [];
const $list = $('#md-list').empty();
const pattern = $('#md-pattern').val();
const ns0Only = $('#md-ns0-filter').is(':checked');
let regex;
try { if(pattern) regex = new RegExp(pattern); } catch(e) {}
items.forEach(item => {
if (regex && !regex.test(item)) return;
if (ns0Only && members.nsMap && members.nsMap[item] !== 0) return;
const $el = $('<div>').addClass('md-item').text(item);
$list.append($el);
});
}
$('#md-list').on('click', '.md-item', function() {
$(this).toggleClass('selected');
});
$('#md-selectAll').on('click', function() {
$('.md-item').addClass('selected');
});
$('#md-reason-preset').on('change', function() {
const key = $(this).val();
const preset = reasonPresets.find(p => p.key === key);
if (preset && key !== 'custom') {
$('#md-reason').val(preset.value);
} else {
$('#md-reason').val('').focus();
}
});
$('#md-pattern, input[name="md-type"], #md-ns0-filter').on('input change', renderList);
$('#md-deleteButton').on('click', function() {
const selected = $('.md-item.selected').map(function() { return $(this).text(); }).get();
const reason = $('#md-reason').val();
if (selected.length === 0) {
alert("Ji kerema xwe rûpelan hilbijêre!");
return;
}
if (!confirm(`Tu dixwazî ${selected.length} rûpelan jê bibe? Ev kiryar paşve naye girtin!`)) return;
$(this).prop('disabled', true);
$('.md-btn').prop('disabled', true);
$('#md-progress-container').show();
processDeletions(selected, reason, $dialog);
});
renderList();
}
async function processDeletions(titles, reason, $dialog) {
let deleted = 0;
const total = titles.length;
for (let i = 0; i < total; i++) {
const title = titles[i];
const progress = Math.round(((i + 1) / total) * 100);
$('#md-progress-fill').css('width', progress + '%');
$('#md-status-text').text(`Tê jêbirin: ${i + 1} / ${total} (${title})`);
try {
await api.postWithToken("csrf", {
action: "delete",
title: title,
reason: reason + " ([[Bikarhêner:Wikihez/skrîpt/js/delete.js|delete.js]])"
});
deleted++;
} catch (err) {
console.error("Xeletî di jêbirina rûpela " + title + ":", err);
}
}
$('#md-status-text').text(`Temam bû! ${deleted} rûpel hatin jêbirin.`);
setTimeout(() => {
$dialog.dialog('close');
location.reload();
}, 1500);
}
// Destpêkirina pêvajoyê
getMembers(displayModal);
});
};
})();
// </nowiki>
phtrxk7dix5nqkzcnhcllpg05jpcpoj
Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js
2
1357853
6342875
6342596
2026-08-27T09:13:10Z
Wikihez
7344
6342875
javascript
text/javascript
/**
* Gadget-citoid-helper.js
*
* Amûreke hevpar ji bo standina daneyên çavkaniyê ji Citoid û
* veguherandina wan bo qadên şablonên jêder-* (jêder-kitêb, jêder-kovar, jêder-websîte, jêder-vîdeo).
*
* BIKARANÎN JI SCRIPTEKE DIN:
*
* Vê rûpelê wek dependency lê zêde bike di eyarên gadgeta xwe de li ser
* [[Special:Gadgets]] (an jî MediaWiki:Gadgets-definition), paşê:
*
* mw.loader.using("ext.gadget.citoid-helper").then(function () {
* wikt.citoid.fetchJederFields(url).then(function (result) {
* console.log(result.jederKey, result.fields);
* });
* });
*
* API ya `window.wikt.citoid`:
* - getRestUrl() → {string} URLya REST a Citoid a vê wîkiyê
* - yearFromDate(dateStr) → {string} sala (4 reqem) ji rêzikeke tarîxê
* - formatAuthors(authors) → {string} navên nivîskaran wek rêzikek yekane
* - typeToJederKey(itemType) → {string} "jêder-kitêb" / "jêder-kovar" / "jêder-websîte" / "jêder-vîdeo"
* - dataToJederFields(jederKey, data, originalUrl) → {Object<string,string>} merheleyên şablona jêder-*
* - fetchData(query) → {jQuery.Promise<Object>} daneya xam a Citoid
* - fetchJederFields(query) → {jQuery.Promise<{jederKey, fields, raw}>} hêsankirî
* - extractVideoTimestamp(urlStr) → {string} a video URL's "t=" start time, as "M:SS"/"H:MM:SS"
* - isYouTubeUrl(urlStr) → {boolean} whether the URL is a youtube.com/youtu.be link
* - websiteNameForUrl(urlStr) → {string} jêder-websîte "websîte" value: known-site wikilink, else the bare domain
* - TYPE_TO_JEDER → {Object} xerîteya itemType → jederKey
*/
window.wikt = window.wikt || {};
(function () {
"use strict";
// Heke jixwe hatibe barkirin, dubare neke.
if (window.wikt.citoid) {
return;
}
// Xerîteya cureyên Citoid (itemType) li ser şablonên me yên jêder-*
var CITOID_TYPE_TO_JEDER = {
"book": "jêder-kitêb",
"bookSection": "jêder-kitêb",
"thesis": "jêder-kitêb",
"report": "jêder-kitêb",
"manuscript": "jêder-kitêb",
"journalArticle": "jêder-kovar",
"magazineArticle": "jêder-kovar",
"newspaperArticle": "jêder-kovar",
"webpage": "jêder-websîte",
"blogPost": "jêder-websîte",
"forumPost": "jêder-websîte",
"videoRecording": "jêder-vîdeo",
"podcast": "jêder-websîte",
"encyclopediaArticle": "jêder-websîte"
};
/**
* Ji mantiqa [[:en:w:User:BrandonXLF/Citoid.js]]
* Vedigere URLya REST a Citoid, li gorî eyarên vê wîkiyê.
* @return {string}
*/
function getRestUrl() {
var cfg = mw.config.get("wgCitoidConfig");
var vecfg = mw.config.get("wgVisualEditorConfig");
return (cfg && (cfg.fullRestbaseUrl || cfg.wbFullRestbaseUrl)) ? (cfg.fullRestbaseUrl || cfg.wbFullRestbaseUrl) + "v1/data/citation/mediawiki/"
: (vecfg && vecfg.fullRestbaseUrl) ? vecfg.fullRestbaseUrl + "v1/data/citation/mediawiki/"
: (cfg && cfg.citoidServiceUrl) ? cfg.citoidServiceUrl + "/mediawiki/"
: "https://ku.wiktionary.org/api/rest_v1/data/citation/mediawiki/";
}
/**
* Ji tarîxa Citoid (rêzik an tarîxeke ISO) sala wê (4 reqem) derdixe.
* @param dateStr {string}
* @return {string}
*/
function yearFromDate(dateStr) {
if (!dateStr) {
return "";
}
var match = /\d{4}/.exec(dateStr);
return match ? match[0] : "";
}
/**
* Navên nivîskaran ên Citoid (rêzek [pêşnav, paşnav]) dike rêzikek yekane.
* @param authors {Array<Array<string>>}
* @return {string}
*/
function formatAuthors(authors) {
if (!Array.isArray(authors)) {
return "";
}
return authors.map(function (pair) {
return (pair || []).filter(function (part) {
return !!part;
}).join(" ");
}).filter(function (name) {
return !!name;
}).join("; ");
}
function formatEditors(editors) {
if (!Array.isArray(editors)) {
return "";
}
return editors.map(function (pair) {
return (pair || []).filter(function (part) {
return !!part;
}).join(" ");
}).filter(function (name) {
return !!name;
}).join("; ");
}
/**
* Li gorî itemType a Citoid, navê şablona jêder-* a munasib vedigerîne.
* @param itemType {string}
* @return {string} Yek ji "jêder-kitêb", "jêder-kovar", "jêder-websîte" an "jêder-vîdeo".
*/
function typeToJederKey(itemType) {
return CITOID_TYPE_TO_JEDER[itemType] || "jêder-websîte";
}
/**
* Whether a URL is a youtube.com/youtu.be link -- used to force jêder-vîdeo regardless of
* Citoid's own itemType guess, and to pick the "w:Youtube" platform value.
* @param urlStr {string}
* @return {boolean}
*/
function isYouTubeUrl(urlStr) {
return /^https?:\/\/(www\.|m\.)?(youtube\.com|youtu\.be)\//i.test(urlStr || "");
}
// Known domains mapped to a nicer jêder-websîte "websîte" value (a wikilink where a Wikipedia article exists).
var KNOWN_WEBSITE_NAMES = {
"x.com": "w:Twitter",
"twitter.com": "w:Twitter",
"rudaw.net": "w:Rûdaw"
};
/**
* Bare domain of a URL (protocol and "www." stripped), e.g. "https://www.example.com/x" -> "example.com".
* @param urlStr {string}
* @return {string} Lowercased domain, or an empty string if urlStr isn't an absolute http(s) URL.
*/
function bareDomainFromUrl(urlStr) {
var match = /^https?:\/\/(?:www\.)?([^\/]+)/i.exec(urlStr || "");
return match ? match[1].toLowerCase() : "";
}
/**
* A jêder-websîte "websîte" value for a URL: a known-site wikilink (KNOWN_WEBSITE_NAMES) if the domain
* matches one, else the bare domain itself as a plain fallback name.
* @param urlStr {string}
* @return {string} The site name, or an empty string if urlStr isn't an absolute http(s) URL.
*/
function websiteNameForUrl(urlStr) {
var host = bareDomainFromUrl(urlStr);
return host ? (KNOWN_WEBSITE_NAMES[host] || host) : "";
}
/**
* Extracts a video's start time from its URL's "t=" param (YouTube-style: plain seconds like "137",
* or "2m17s"/"1h2m3s"). Reads the caller-supplied URL directly, since Citoid's own resolved data.url
* usually strips this param.
* @param urlStr {string}
* @return {string} "M:SS" or "H:MM:SS", or an empty string if absent/unrecognized.
*/
function extractVideoTimestamp(urlStr) {
if (!urlStr) {
return "";
}
var match = /[?&]t=([^&]+)/.exec(urlStr);
if (!match) {
return "";
}
var raw = decodeURIComponent(match[1]);
var seconds;
if (/^\d+s?$/.test(raw)) {
seconds = parseInt(raw, 10);
} else {
var parts = /^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/.exec(raw);
if (!parts || (!parts[1] && !parts[2] && !parts[3])) {
return "";
}
seconds = (parseInt(parts[1] || "0", 10) * 3600) + (parseInt(parts[2] || "0", 10) * 60) + parseInt(parts[3] || "0", 10);
}
var h = Math.floor(seconds / 3600);
var m = Math.floor((seconds % 3600) / 60);
var s = seconds % 60;
var ss = s < 10 ? "0" + s : String(s);
return h > 0 ? (h + ":" + (m < 10 ? "0" + m : m) + ":" + ss) : (m + ":" + ss);
}
/**
* Daneyên Citoid vediguherîne tabloyeke parametreyên şablona jêder-* (li gorî cureyê wê).
* @param jederKey {string} Yek ji "jêder-kitêb", "jêder-kovar", "jêder-websîte" an "jêder-vîdeo".
* @param data {Object} Netîceya Citoid.
* @param originalUrl {string} [optional] The URL/DOI/ISBN as originally typed/fetched -- preferred over
* data.url for the "url" field when it's an absolute http(s) URL, since Citoid's own resolved data.url
* strips query params (e.g. a video's "t=" timestamp) that the original URL still has.
* @return {Object<string, string>}
*/
function dataToJederFields(jederKey, data, originalUrl) {
var out = {};
var author = formatAuthors(data.author);
var editor = formatEditors(data.editor);
var url = (originalUrl && /^https?:\/\//i.test(originalUrl)) ? originalUrl : data.url;
if (author) { out["nivîskar"] = author; }
if (editor) { out["amadekar"] = editor; }
if (data.title) { out["sernav"] = data.title; }
if (url) { out.url = url; }
if (jederKey === "jêder-kitêb") {
if (data.publisher) { out["weşanxane"] = data.publisher; }
if (data.place) { out.cih = data.place; }
if (data.date) { out.sal = yearFromDate(data.date); }
if (data.ISBN) { out.isbn = Array.isArray(data.ISBN) ? data.ISBN[0] : data.ISBN; }
if (data.edition) { out["çap"] = data.edition; }
if (data.pages) { out["rûpel"] = data.pages; }
} else if (jederKey === "jêder-kovar") {
if (data.publicationTitle) { out.kovar = data.publicationTitle; }
if (data.publisher) { out["weşanxane"] = data.publisher; }
if (data.volume) { out.cild = data.volume; }
if (data.issue) { out.hejmar = data.issue; }
if (data.pages) { out["rûpel"] = data.pages; }
if (data.date) { out.sal = yearFromDate(data.date); }
} else if (jederKey === "jêder-websîte") {
var websiteName = data.websiteTitle || websiteNameForUrl(url);
if (websiteName) { out["websîte"] = websiteName; }
if (data.date) {
out["tarîx"] = data.date;
}
} else if (jederKey === "jêder-vîdeo") {
delete out["nivîskar"]; // "hunermend" is jêder-vîdeo's own performer/artist field
if (author) { out.hunermend = author; }
var platform = isYouTubeUrl(url) ? "w:Youtube" : (data.libraryCatalog || "").toLowerCase();
if (platform) { out.platform = platform; }
// tarîx and sal are mutually exclusive -- prefer the full date, fall back to year-only otherwise.
if (data.date) {
out.tarîx = data.date;
} else {
var year = yearFromDate(data.date);
if (year) { out.sal = year; }
}
var dem = extractVideoTimestamp(url);
if (dem) { out.dem = dem; }
}
return out;
}
/**
* Ji Citoid daneyên çavkaniyekê tîne (li gorî URL, DOI an ISBNyê).
* @param query {string}
* @return {jQuery.Promise} Bi daneya ewil a Citoid (Object) tê safîkirin.
*/
function fetchData(query) {
var url;
try {
url = encodeURIComponent(decodeURIComponent(query));
} catch (e) {
url = encodeURIComponent(query);
}
return $.get(getRestUrl() + url).then(function (res) {
if (!res || !res[0]) {
return $.Deferred().reject("Netîceya ji Citoidê vala ye.").promise();
}
return res[0];
});
}
/**
* Fonksiyoneke hêsankirî: ji URL/DOI/ISBNyekê rasterast şablona jêder-* a munasib
* û merheleyên wê yên tijîkirî vedigerîne (fetchData + typeToJederKey + dataToJederFields
* bi hev re).
* @param query {string}
* @return {jQuery.Promise} Bi {jederKey: string, fields: Object<string,string>, raw: Object} tê safîkirin.
*/
function fetchJederFields(query) {
return fetchData(query).then(function (data) {
// YouTube links always use jêder-vîdeo, regardless of what itemType Citoid guessed.
var jederKey = (isYouTubeUrl(query) || isYouTubeUrl(data.url)) ? "jêder-vîdeo" : typeToJederKey(data.itemType);
return {
jederKey: jederKey,
fields: dataToJederFields(jederKey, data, query),
raw: data
};
});
}
window.wikt.citoid = {
getRestUrl: getRestUrl,
yearFromDate: yearFromDate,
formatAuthors: formatAuthors,
typeToJederKey: typeToJederKey,
dataToJederFields: dataToJederFields,
fetchData: fetchData,
fetchJederFields: fetchJederFields,
extractVideoTimestamp: extractVideoTimestamp,
isYouTubeUrl: isYouTubeUrl,
websiteNameForUrl: websiteNameForUrl,
TYPE_TO_JEDER: CITOID_TYPE_TO_JEDER
};
})();
rlmb3h2u6pba357h1xndj2po0se8idu
Wîkîferheng:Xebat
4
1357857
6342883
6337716
2026-08-27T09:50:46Z
Wikihez
7344
[[MediaWiki:Gadget-aWa.js/belgekirin|aWa]]: Jêbirina 1 made(yan): "Şablon:jêder"
6342883
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-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)
:::Muhîm e û zû were rastkirin feqat piştî îro ez çend rojan misaîd nebim:
:::* Li şûna Navdêr 2, jêgirtin çû Navdêr 1 [https://ku.wiktionary.org/w/index.php?title=palas&diff=prev&oldid=6337440]
:::[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 00:01, 19 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)
== [[MediaWiki:Gadget-start.js]] 2 ==
Tiştên ku werin zêdekirin:
# Wextê ji Kategorî:Çavkanî şablonek zêde dikî, li gorî TemplateDatayê qutî çêke û malûmatên din werin nivîsîn. Jêgirtin bila bikeve nav şablonê. Niha dikeve nav jêderê
## Lêgerîn tenê navên Şablonan derdixe loma dîtina şablonekê belkî zor be, hemû beralîkirin werin data.jsonê were zêdekirin.
# Dever/Şîve li gorî dataya modul:labels ji bo zimanan biguhêre niha hemû dibêje Behdînan :D
# Autocomplete ji bo etîket û kategorî bi riya dataya modul:labels
# Yekkirina qismên eleqedarî jegirtinan bi skrîpta nimûne zêde bike
#Wextê |form=erê be |c=? li îsm û fiîlan zêde neke! [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 12:36, 21 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)
5k8dnrg25m4en9kwcjmc2nrug98pynk
Wîkîferheng:ceribandin/nimûne
4
1357865
6342863
6342536
2026-08-27T07:56:15Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342863
wikitext
text/x-wiki
{{/vê rêzê neguhêre}}
{{/vê rêzê neguhêre}}
== {{ziman|ku}} ==
=== Bilêvkirin ===
* {{ku-IPA}}
* {{ku-kîte}}
=== Lêker ===
[[Wêne:Example.jpg|thumb|Mînak]]
{{lêker|ku|c=h-gh}}
# Maneya 1ê.
#: {{mk|ku|'''Nimûneyeke''' bikaranînê ya vê peyvê.}}
#: {{nimûne|ku|test}}
#* {{jêder-websîte|ku|websîte=Bangaheq|sernav=XEMA HEVPAR A XANÎ Û AQTEPÎ: BÊXWEDÎBÛN|url=https://bangaheq.com/xema-hevpar-a-xan-aqtep-bxwedbn-tr-1226.html|jêgirtin=test}}
# {{f|ku|mecazî}} Maneya 2an.
#* {{jêder-pirtûk|ku|jêgirtin=Jêgirtinek ji kitêbekê.|nivîskar=Rojen Barnas|sernav=Sîlvan/ Silîvan / FARQÎN|sal=2013|weşandxane=Nûbihar|rûpel=189|isbn= 9786055402884, 6055402882}}
# Maneya 3an.
==== Bikaranîn ====
''Çend not li ser bikaranîna peyvê.''
==== Jê ====
{{kol3|ku|cure=Jê
|ceribandinvan
}}
==== Têkildar ====
* ''Peyvên ku têkiliya [[etîmolojîk]] bi peyvê re hene''.
=== Etîmolojî ===
''Çîroka tarîxî ya eslê kelîmeyê. Nimûneya bandor'': Ji {{deyn|ota|ku|باندره}}, {{q|ota|باكدیره}}, ({{hv|tr|bandıra}}) ji {{ji|vec|ku|bandéra}} ({{hv|it|bandiera}}) ji {{ji|gem|ku}} *''bandwa-'' ({{cotreh|ku|band|bend}}). Bide ber {{hv|fr|bandière}} (wek {{hv|en|banner}}), {{hv|el|παντιέρα}}.
==== Binêre herwiha ====
* ''Peyvên eleqadar lê belê têkiliya etîmolojîk nîne''.
* {{wpedî}}
==== Werger ====
{{werger-ser|1|Maneya 1ê}}
* {{Z|en}}: {{W+|en|word}}
{{werger-bin}}
{{werger-ser|2|Maneya an}}
{{werger-bin}}
{{werger-bnr|Maneya 3an|kelîme}}
=== Navdêr ===
{{ku-tewîn-nav|nav=nimûne|mê}}
{{navdêr|ku|z=m}}
# mane 1
#: mînak 1-1
#: mînak 1-2
#* jêgirtin 1-1
#* jêgirtin 1-2
# mane 2
#: mînak 2-1
#: mînak 2-2
#* jêgirtin 2-1
#* jêgirtin 2-2
# mane 3
==== Werger ====
{{werger-ser|1|Maneya 1ê}}
{{werger-bin}}
{{werger-ser|2|Maneya 2an}}
{{werger-bin}}
{{werger-ser|3|Maneya 3an}}
{{werger-bin}}
=== Çavkanî ===
{{Çavkanî}}
* Çavkaniyên din li vir binivîse.
2l147glstbag9x682huj3c7ji368lz7
Bikarhêner:Wikihez/Gadget-wikt.add-examples.js
2
1357893
6342718
6342685
2026-08-26T17:20:35Z
Wikihez
7344
6342718
javascript
text/javascript
// <nowiki>
// dependencies (declared in MediaWiki:Gadgets-definition): oojs, oojs-ui, ext.gadget.citoid-helper (wikihez.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 = "2.0";
// 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 normally lives in MediaWiki:Gadget-citoid-helper.js as a registered gadget dependency; not
// currently editable, so ensureCitoid() (below) loads it from a user testing page on demand instead.
// Sentinel _currentJederKey value for the "pick a template from Kategorî:Çavkanî" dropdown option -- not a
// real jederDefs key, same convention as Wiki/start.js's own "__category__" picker.
var CATEGORY_TEMPLATE_KEY = "__category__";
// "span" is the field's width in the 12-column grid the fields render in (see .add-example-jeder-fields
// in the CSS and _setSourceType below) -- field ORDER here is also the grid's reading order.
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "cih", "label": "Cih", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "sala-weşandinê", "label": "Sala weşandinê", "span": 2 },
{ "key": "çap", "label": "Çap", "span": 1 },
{ "key": "rûpel", "label": "Rûpel", "span": 1 },
{ "key": "isbn", "label": "ISBN", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "kovar", "label": "Kovar", "span": 4 },
{ "key": "cild", "label": "Cild", "span": 2 },
{ "key": "hejmar", "label": "Hejmar", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "rûpel", "label": "Rûpel", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 4 },
{ "key": "terciman", "label": "Terciman", "span": 4 },
{ "key": "websîte", "label": "Websîte", "span": 4 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "url", "label": "URL", "span": 5 },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "span": 5 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "tarîx", "label": "Tarîx", "span": 1 }
]
},
"jêder-vîdeo": {
"label": "Vîdeo",
"fields": [
{ "key": "hunermend", "label": "Hunermend", "span": 6 },
{ "key": "platform", "label": "Platform", "span": 6 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "tarîx", "label": "Tarîx", "span": 3 },
{ "key": "dem", "label": "Dem", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
}
};
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;
}
// Escapes str for safe interpolation into a RegExp -- page titles can contain regex metacharacters
// (parentheses for disambiguation, periods in abbreviation entries, etc.).
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
// Wraps the first occurrence of the page title (+ an optional glued-on suffix, e.g. a plural "-an") in the
// example text with wikitext bold markup, so the headword stands out in the rendered example. Skips it if
// the title is already bolded by hand, to avoid turning "'''reh'''" into "'''''reh'''''" (bold+italic).
// Returns {text, bolded}; bolded is false if the title wasn't found anywhere and nothing changed.
function boldenPageTitle(text, title) {
var escapedTitle = escapeRegExp(title);
var suffixPattern = "([^\\s.,;?!()']+)?";
if (new RegExp("'''" + escapedTitle + suffixPattern + "'''", "i").test(text)) {
return { text: text, bolded: true };
}
var bolded = text.replace(new RegExp("(" + escapedTitle + suffixPattern + ")", "ig"), "'''$1'''");
return { text: bolded, bolded: bolded !== text };
}
// Extracts a human-readable message from an mw.Api rejection (code, result).
function apiErrorMessage(code, result) {
return (result && result.error && result.error.info) || (typeof code === "string" ? code : "Xeletiyeke nenas");
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
var api = new mw.Api();
// Loads wikihez.citoid if it isn't already loaded, from Wikihez's testing page (MediaWiki: isn't editable
// right now) -- self-contained rather than calling wikihez.citoidHelper.ensure() directly, since that
// function only exists once citoid-helper.js has already run once, which isn't guaranteed here.
function ensureCitoid() {
if (window.wikihez && window.wikihez.citoid) {
return $.Deferred().resolve().promise();
}
var url = mw.util.getUrl("Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js", {
action: "raw",
ctype: "text/javascript"
});
return mw.loader.getScript(mw.config.get("wgServer") + url);
}
// Kategorî:Çavkanî's template members plus their redirects (each redirect as its own searchable entry
// pointing at the same canonical target, so a template is findable by any of its names). Ported from
// Wiki/start.js's fetchCatSrcTemplates(), extended with prop=redirects. Cached after first fetch.
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) {
return catSrcTemplatesPromise;
}
catSrcTemplatesPromise = api.get({
action: "query",
generator: "categorymembers",
gcmtitle: "Kategorî:Çavkanî",
gcmnamespace: 10,
gcmlimit: "max",
prop: "redirects",
rdnamespace: 10,
rdlimit: "max",
formatversion: 2,
}).then(function(data) {
var pages = (data.query && data.query.pages) || [];
var list = [];
pages.forEach(function(page) {
var target = page.title.replace(/^[^:]+:/, "");
list.push({ label: target, target: target });
(page.redirects || []).forEach(function(redirect) {
list.push({ label: redirect.title.replace(/^[^:]+:/, ""), target: target });
});
});
list.sort(function(a, b) {
return a.label.localeCompare(b.label, mw.config.get("wgUserLanguage"));
});
catSrcTemplates = list;
return list;
}, function() {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
// TemplateData params for one template (name without the "Şablon:" prefix); redirects:1 so this also
// resolves if `name` is itself a redirect. Resolves to [] if the template has no TemplateData. Cached.
var tplDataCache = {};
function fetchTemplateDataFor(name) {
if (Object.prototype.hasOwnProperty.call(tplDataCache, name)) {
return $.Deferred().resolve(tplDataCache[name]).promise();
}
return api.get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2,
}).then(function(data) {
var pages = (data && data.pages) || {};
var first = null;
Object.keys(pages).forEach(function(id) {
if (!first) {
first = pages[id];
}
});
var params = [];
if (first && first.params) {
Object.keys(first.params).forEach(function(key) {
var p = first.params[key];
var label = p && p.label;
if (label && typeof label === "object") {
var userLang = mw.config.get("wgUserLanguage");
label = label[userLang] || label.en || label[Object.keys(label)[0]];
}
params.push({ key: key, label: label || key, required: !!(p && p.required) });
});
}
tplDataCache[name] = params;
return params;
}, function() {
tplDataCache[name] = [];
return [];
});
}
// Language display name, read from the matching section's .besazimani link text.
function languageNameForCode(code) {
var $mark = $(".besazimani[id='" + code + "']").first();
return $mark.length ? $mark.text().trim() : null;
}
// Whether the page title itself (accented Kurdish Latin letters included) is written in Latin script.
var pageTitleIsLatin = !/[^\x00-\x7FÀ-ɏḀ-ỿ‘’]/.test(mw.config.get("wgTitle") || "");
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex containers used directly by Şablon:nimûne; .citation-whole = Modul:quote's own wrapper, now used by jêder-* templates (Modul:quote nests .h-quotation inside .citation-whole > dl > dd instead of putting it directly under the <li>, so it needs its own entry here).
// Requiring "ul > li >" is what makes this only match an example that's grouped into its own <ul> -- a
// {{nimûne}} (or its "mk" redirect) with no jêder-family citation alongside it in the same definition
// renders straight under the definition's own content instead, with no such group; also reused below to
// tell whether the second pass still needs to handle a given definition.
var EXISTING_EXAMPLE_SELECTOR = "ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation, ul > li > .citation-whole";
$(EXISTING_EXAMPLE_SELECTOR).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.
// A jêder-* citation with no jêgirtin= (quotation text) yet renders no h-quotation/e-quotation at all
// (see get_quote() in Modul quote.lua) -- exactly the "bare citation" case this button exists to fill
// in, so this can't just crash: without the guard, [0] is undefined here and ".lang" throws, which
// (since $.each() has no try/catch) silently kills the button for every remaining match on the page.
var $langEl = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0];
if (!$langEl) {
console.warn("Gadget-wikt.add-examples: nikaribe zimanê vê nimûneyê bibîne, valakirî hate derbaskirin.", $item);
return;
}
var language = $langEl.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. $group is the citation-group <ul> itself (parent of $item);
// the form panel is inserted AFTER it (see click handler below), not inside it, so the panel isn't
// squeezed into that <ul>'s narrow hanging-indent width on mobile -- only the button/title stays
// there, matching the "Form redesign for Kurdish example" mockup (title inside the bullet list,
// full-width panel below it).
var $group = $item.parent();
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($item, $button, $title, language, definitionLevel);
$group.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem);
}
});
// Second pass: some definitions have no example the pass above could react to at all -- either genuinely
// zero examples, or one rendered via {{nimûne}} (or its "mk" redirect) with no jêder-family citation next
// to it, which (see the comment on EXISTING_EXAMPLE_SELECTOR above) renders with no "ul > li" group to
// match. This walks every recognized POS section's own definitions list directly instead of reacting to
// an existing example, and reads the language off the language section's own <h2> rather than off an
// example -- so it doesn't need one to already exist. Everything else (Form, submit()) is reused as-is.
// MediaWiki wraps each heading in a "mw-heading2"/"mw-heading3"/... div in current skin output; falls
// back to the bare heading element for older/other output that doesn't wrap it.
function headingOuter($h) {
var $wrap = $h.closest(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6");
return $wrap.length ? $wrap : $h;
}
// Section's language code: nearest preceding .besazimani[id] by document order (not sibling-walking, which mobile's per-section wrapping breaks).
function languageCodeForOl($ol) {
var $marks = $(".besazimani[id]").add($ol);
var ol = $ol.get(0);
var idx = $marks.index(ol);
for (var i = idx - 1; i >= 0; i--) {
var el = $marks.get(i);
if (el.id) {
return el.id;
}
}
return null;
}
// A <li> whose OWN direct content (not counting a nested <ol>) is wrapped in ".form-of-definition" is
// MediaWiki's "form of" template system marking that content as generated by a template -- e.g.
// {{ku-tewîna-nav}}'s "Formeke heval:" wrapper together with its "rewşa îzafeyî"/"rewşa çemandî"/...
// readings underneath. That whole nested block is normally the ENTIRE expansion of a single "#"
// wikitext line, with no separate "##" line behind any individual reading -- recursing into it would
// hand out one button per reading, each trying to match a "##" line that doesn't exist, and submit()
// would fail to find where to insert every one of them. A <li> without that class whose nested <ol>
// holds real hand-typed prose (e.g. sîno-koreyî/Navdêr's two genuinely separate "##" sub-senses) has
// no such problem -- those really are individually addressable wikitext lines.
function isFormOfWrapper($li) {
return $li.children(".form-of-definition").length > 0;
}
// Recurse into a <li>'s own nested <ol> UNLESS it's a form-of-template wrapper (see isFormOfWrapper) --
// a wrapper <li> with its own nested <ol> isn't itself a sense with content of its own, only its real
// (non-generated) leaves are.
function eachLeafDefinition($ol, fn) {
$ol.children("li").each(function() {
var $li = $(this);
var $childOl = $li.children("ol");
if ($childOl.length && !isFormOfWrapper($li)) {
$childOl.each(function() {
eachLeafDefinition($(this), fn);
});
} else {
fn($li);
}
});
}
$("h3").each(function() {
var sectionType = $(this).text().trim();
if (!sectionNames[sectionType]) {
return; // not a recognized word-sense section (Bilêvkirin, Etîmolojî, Çavkanî, ...)
}
var h3Id = $(this).attr("id");
// Forward-walk siblings to the definitions <ol>, skipping over a declension table/TemplateStyles/the
// headword line; stop (nothing to attach to in this section) if another heading comes first instead.
var $ol = null;
for (var $cursor = headingOuter($(this)).next(); $cursor.length; $cursor = $cursor.next()) {
if ($cursor.is("ol")) {
$ol = $cursor;
break;
}
if ($cursor.is(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6, h2, h3, h4, h5, h6")) {
break;
}
}
if (!$ol) {
return;
}
var language = languageCodeForOl($ol);
if (!language) {
console.warn("Gadget-wikt.add-examples: nikaribe koda zimanê vê beşê bibîne.", $ol);
return;
}
eachLeafDefinition($ol, function($li) {
// The pass above already added a button here (or will) -- an actual example already wrapped in
// its own "ul > li" group.
if ($li.find(EXISTING_EXAMPLE_SELECTOR).length) {
return;
}
var definitionLevel = [];
var $definitionItem = $li;
while ($definitionItem.prop("tagName") === "LI") {
// 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);
$definitionItem = $definitionItem.parent().parent();
}
definitionLevel.splice(0, 0, h3Id);
// A hidden, empty placeholder <li> so submit()'s existing "_$lastExample.after(newLi)" insertion
// (unchanged, same as the pass above) lands the first submitted example right before the button
// -- matching the existing convention of new examples going in before the button, not after it.
var $placeholder = $("<li style='display:none'></li>");
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
// A "ul" nested directly under a definition "li" starts hidden here (see the HQToggle-controlled
// jêder-citation-group "ul", which only ever renders with an explicit "style="display: block""
// set on it) -- this one has no HQToggle to unhide it, so it needs the same explicit override or
// the button (and the placeholder above) never becomes visible at all.
var $ul = $("<ul>").css("display", "block").append($placeholder).append($formItem);
// The form panel is inserted AFTER $ul (not inside it) once opened -- same reasoning as the first
// pass above: keeps the full-width panel out of the tight bulleted-list indentation on mobile.
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($placeholder, $button, $title, language, definitionLevel);
$ul.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$li.append($ul);
});
});
// Pulls the form panel flush with the page's own left/right edges, undoing whatever nested-list indent it inherited from sitting inside a deeply-nested definition.
function alignFormToPage($form) {
var $container = $form.closest(".mw-parser-output");
if (!$container.length) {
return;
}
var pad = parseFloat(window.getComputedStyle($container[0]).paddingLeft) || 0;
var containerLeft = $container.offset().left + pad;
var indent = $form.offset().left - containerLeft;
$form.css({
marginLeft: indent > 0 ? -indent : 0,
width: $container.width() + "px"
});
}
// Constructor for the edit form; lastExample/button/title/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, $title, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._$title = $title;
this._currentJederKey = "";
this._jederFieldWidgets = {};
// Set once a template is picked in the Kategorî:Çavkanî mode (see _renderCategoryTemplatePicker); the
// canonical template title (without the "Şablon:" prefix), used as `sablon` in _doSubmit.
this._categoryTemplateName = null;
this._textInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
// Shown under the text box (see boldenPageTitle) when the page title can't be found in the example text
// as typed, so it won't get bolded; purely informational, doesn't block submitting.
this._titleBoldHint = $("<span class='add-example-title-bold-hint'></span>").hide();
this._updateTitleBoldHint = function() {
var text = self._textInput.getValue().trim();
var title = mw.config.get("wgTitle");
var show = !!text && !boldenPageTitle(text, title).bolded;
self._titleBoldHint.toggle(show).html(show ? "Sermade (" + escapeHtmlForBackdrop(title) + ") nehat dîtin; dê neyê <b>stûr</b>kirin." : "");
};
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
self._updateReadyHint();
self._updateTitleBoldHint();
});
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,
}));
}
}
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: CATEGORY_TEMPLATE_KEY,
label: "Ji Kategorî:Çavkanî şablonekê hilbijêre",
}));
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._sourceInput.on("change", function() {
self._updateReadyHint();
});
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. The Citoid fetch button sits right next to it (not in a separate box) -- see _urlRowWidget below.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
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, malûmatan 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));
this._sourceURLInput.on("change", function() {
self._updateReadyHint();
self._autofillVideoTimestamp();
});
// URL input + inline "auto-fill" button as one row (replaces the old separate framed Citoid box's
// button row) -- a plain OO.ui.Widget used purely as a flex-row container (same pattern as
// _loadingImage below: build it empty, then manually append its children's $elements). Disabling
// during submit() still goes through the individual _sourceURLInput/_citoidButton references, not
// through this wrapper.
this._urlRowWidget = new OO.ui.Widget({ classes: ["add-example-url-row"] });
this._urlRowWidget.$element.append(this._sourceURLInput.$element, this._citoidButton.$element);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, {
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;
// Shown right after a successful Citoid fetch (see _fillFromCitoid); hidden again on clear.
this._citoidSuccessMsg = $("<span class='add-example-citoid-success'>✓ Malûmat hatin dagirtin — li jêr kontrol bike.</span>").hide();
// 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("");
self._citoidSuccessMsg.hide();
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
// Plain div (not OO.ui.FieldsetLayout) so the grid CSS class applies directly to the field items.
this._jederFieldsFieldset = $("<div class='add-example-jeder-fields'>");
// "Malûmatên çavkaniyê" header (+ the "Vala bike" clear button) sitting right above the fields grid,
// replacing the old framed "Ji Citoid an bi destan tijî bike:" box -- like this only makes sense once
// a real jêder-* template is active (there's nothing here to show for the "citoid: not yet detected"
// placeholder or for free text), so the whole section toggles together in _setSourceType().
this._jederSection = $("<div class='add-example-jeder-section'>").append(
$("<div class='add-example-jeder-header'>")
.append($("<span class='add-example-jeder-header-label'>Malûmatên çavkaniyê</span>"))
.append(this._citoidClearButton.$element),
this._jederFieldsFieldset
);
this._translationInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
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({ rows: 4 });
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Translîterasyona 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));
// Reactive "ready to submit" hint next to Biweşîne: no text yet, text but no source (still submittable
// as a bare {{nimûne}}), or fully ready -- kept in sync by _updateReadyHint(), wired to every field below.
this._readyHint = $("<span class='add-example-ready-hint'></span>").text("Metna nimûneyê lazim e.");
// True while a Citoid-eligible URL/DOI/ISBN is typed in but not yet fetched (or fetched then edited away) and no jêder field has been filled by hand -- the "looks done but isn't" trap this exists to catch. Not applicable in free-text mode, where the fetch button isn't even offered.
this._citoidPending = function() {
return self._currentJederKey !== "" &&
self._currentJederKey !== CATEGORY_TEMPLATE_KEY &&
!!self._sourceURLInput.getValue().trim() &&
!self._citoidSuccessMsg.is(":visible") &&
!Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
};
this._updateReadyHint = function() {
if (!self._textInput.getValue()) {
self._readyHint.text("Metna nimûneyê lazim e.");
return;
}
if (self._citoidPending()) {
self._readyHint.text("Pêşî 'Bi otomatîk tijî bike' bitikîne.");
return;
}
var hasSource = self._sourceInput.getValue().trim() || self._sourceURLInput.getValue().trim() ||
Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
self._readyHint.text(hasSource ? "Hazir e." : "Çavkanî nehatiye dayîn.");
};
// Prefills the Dem field from the typed URL's own "t=" (see wikihez.citoid.extractVideoTimestamp) once jêder-vîdeo is active -- never overwrites a value the user already entered by hand.
this._autofillVideoTimestamp = function() {
var demWidget = self._jederFieldWidgets.dem;
if (self._currentJederKey !== "jêder-vîdeo" || !demWidget || demWidget.getValue().trim()) {
return;
}
ensureCitoid().then(function() {
var dem = wikihez.citoid.extractVideoTimestamp(self._sourceURLInput.getValue().trim());
if (dem && !demWidget.getValue().trim()) {
demWidget.setValue(dem);
}
});
};
// framed:false (+ the "destructive" flag for the red text/hover) matches the mockup's borderless
// "Betal bike" -- a plain colored link rather than a boxed button, distinguishing it from Paqij bike.
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
framed: false,
});
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);
// Two-column top section (see "Form redesign for Kurdish example/Nimûne zêde bike.dc.html"): example
// text (+ translation/transliteration for non-ku, right after it, not after the source fields) on the
// left; source-type + link/Citoid on the right. Built as plain <div>s, not an OOUI layout -- OOUI has
// no CSS-grid container -- so .add-example-top-grid in the CSS can lay them out as a real responsive
// 7fr/5fr grid (collapsing to one column on narrow screens).
var $topLeft = $("<div class='add-example-top-col'>").append(textInputLayout.$element, this._titleBoldHint);
if (language !== "ku") {
$topLeft.append(translationInputLayout.$element);
}
if (!pageTitleIsLatin) {
$topLeft.append(transcriptionInputLayout.$element);
}
var $topRight = $("<div class='add-example-top-col'>").append(
sourceTypeLayout.$element,
this._sourceInputLayout.$element,
this._sourceURLInputLayout.$element,
this._citoidSuccessMsg
);
var $topGrid = $("<div class='add-example-top-grid'>").append($topLeft, $topRight);
// 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 (see the FieldLayout replaceWith() there).
this._fieldsLayout = $("<div class='add-example-fieldset'>").append($topGrid, this._jederSection);
// Bottom action row -- order/spacing matches the mockup: Biweşîne (+ spinner + ready hint), a spacer
// pushing the rest right, then Paqij bike (bordered/subtle) and Betal bike (borderless red text, via
// framed:false above). A plain flex <div>, not an OOUI HorizontalLayout, so the raw hint/spacer
// elements can sit alongside the real button widgets (same reasoning as the top grid above).
var $buttonsRow = $("<div class='add-example-main-buttons'>").append(
this._applyButton.$element,
this._loadingImage.$element,
this._readyHint,
$("<span class='add-example-buttons-spacer'></span>"),
this._clearButton.$element,
this._cancelButton.$element
);
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
});
this._frame.$element.append(this._fieldsLayout, $buttonsRow);
// 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 fetch button, and the "Malûmatên çavkaniyê" fields section toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateName = null;
var isRealJederKey = jederKey && jederDefs[jederKey];
var isCategoryTemplateKey = jederKey === CATEGORY_TEMPLATE_KEY;
if (isRealJederKey) {
var def = jederDefs[jederKey];
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;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: ["add-example-field-span-" + (field.span || 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
} else if (isCategoryTemplateKey) {
this._renderCategoryTemplatePicker();
}
// "Malûmatên çavkaniyê" header + fields grid: only once a real template is chosen/detected --
// nothing to show yet for the plain "citoid: not yet detected" placeholder or for free text.
this._jederSection.toggle(!!isRealJederKey || isCategoryTemplateKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid fetch button: hidden for free text (nothing there for it to fill in) and for the
// Kategorî:Çavkanî picker (Citoid has no mapping for an arbitrary picked template), shown for
// "citoid" auto-detect and any real jêder-* key. The URL input itself next to it stays visible in
// every OTHER mode -- see the sourceURLInputLayout toggle below for the one exception.
this._citoidButton.toggle(jederKey !== "" && !isCategoryTemplateKey);
// URL field wording: plain "attach a link" phrasing for free text, 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 $oldLayout = this._sourceURLInputLayout.$element;
// Re-wraps the SAME _urlRowWidget (still holding _sourceURLInput + _citoidButton) in a new
// FieldLayout with the new label/help; the widget's $element moves along with it, same as the
// old addItems()/removeItems() swap did for the plain input before this redesign.
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, 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,
});
$oldLayout.replaceWith(this._sourceURLInputLayout.$element);
}
// The URL/Citoid row is normally always visible (see the constructor comment), but Citoid has no
// mapping for an arbitrary Kategorî:Çavkanî template, so it'd just be dead UI in that one mode.
this._sourceURLInputLayout.toggle(!isCategoryTemplateKey);
this._autofillVideoTimestamp();
this._updateReadyHint();
},
// Renders the Kategorî:Çavkanî template search box, replacing the static jederDefs grid for this mode;
// once a template is picked, its TemplateData params (or a lone "Rûpel" fallback if it has none) render
// below the search box. Search/filter interaction ported from Wiki/start.js's own "__category__" picker.
_renderCategoryTemplatePicker: function() {
var self = this;
var $wrap = $("<div class='add-example-cat-tpl-picker'>");
var $input = $("<input type='search' autocomplete='off' class='add-example-cat-tpl-input'>")
.attr("placeholder", "Li navê şablonê bigere…");
var $results = $("<ul class='add-example-cat-tpl-results'>").hide();
var $status = $("<span class='add-example-cat-tpl-status'>Şablon tên barkirin…</span>");
var $fieldsArea = $("<div class='add-example-jeder-fields add-example-cat-tpl-fields'>");
function showResults(query) {
var q = query.trim().toLowerCase();
$results.empty();
var list = catSrcTemplates || [];
var matched = q ? list.filter(function(entry) {
return entry.label.toLowerCase().indexOf(q) !== -1;
}) : list;
if (!matched.length) {
$results.hide();
return;
}
matched.slice(0, 50).forEach(function(entry) {
var $li = $("<li>").text(entry.label);
$li.on("mousedown", function(e) {
e.preventDefault(); // keeps the input's blur (and the results-hiding it triggers) from firing before the click registers
selectTemplate(entry);
});
$results.append($li);
});
$results.show();
}
function selectTemplate(entry) {
$results.hide();
$input.val(entry.label);
self._categoryTemplateName = entry.target;
renderTemplateFields(entry.target);
}
// Builds one text input per TemplateData param of `name`, or a lone "Rûpel" fallback field if it
// has no TemplateData -- see the jêgirtin=/rûpel= example in the feature request this implements.
function renderTemplateFields(name) {
$fieldsArea.empty();
self._jederFieldWidgets = {};
fetchTemplateDataFor(name).then(function(params) {
var list = (params && params.length) ? params : [{ key: "rûpel", label: "Rûpel", required: false }];
list.forEach(function(p) {
var widget = new OO.ui.TextInputWidget();
self._jederFieldWidgets[p.key] = widget;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: p.label,
align: "top",
classes: ["add-example-field-span-4"],
});
$fieldsArea.append(layout.$element);
});
self._updateReadyHint();
});
}
$input.on("input focus", function() {
showResults($(this).val());
});
$input.on("blur", function() {
setTimeout(function() { $results.hide(); }, 200); // lets the mousedown handler above fire first
});
$wrap.append($input, $results, $status, $fieldsArea);
this._jederFieldsFieldset.append($wrap);
fetchCatSrcTemplates().then(function() {
$status.text("");
}, function() {
$status.text("Şablon nehatin barkirin.");
});
},
// Fetches data via wikihez.citoid (loaded on demand by ensureCitoid() if needed), picks the matching jêder-* template, and fills its empty fields.
_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);
ensureCitoid().then(function() {
return wikihez.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 : wikihez.citoid.dataToJederFields(targetJederKey, result.raw, query);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
self._citoidSuccessMsg.show();
self._updateReadyHint();
mw.notify("Malûmat ji Citoid hatin barkirin.");
}, function(errorMsg) {
// wikihez.citoid may still be missing here if ensureCitoid() itself failed to load the script (e.g. network error) -- fall back to the bare error notice in that case.
if (!window.wikihez || !window.wikihez.citoid) {
mw.notify("Nekarî citoid-helper.js bar bike.");
return;
}
// Citoid can't fetch some sites at all (e.g. x.com/twitter.com) -- fall back to jêder-websîte with a website name guessed from the URL itself, rather than just a bare error.
var fallbackSite = wikihez.citoid.websiteNameForUrl(query);
if (fallbackSite) {
if (self._currentJederKey !== "jêder-websîte") {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData("jêder-websîte");
if (item) {
menu.chooseItem(item); // this calls _setSourceType("jêder-websîte") automatically
}
}
var websiteWidget = self._jederFieldWidgets["websîte"];
if (websiteWidget && !websiteWidget.getValue()) {
websiteWidget.setValue(fallbackSite);
}
mw.notify("Citoid nikare vê malperê bixwîne; şablona Websîte hate hilbijartin, ji kerema xwe mayî bi destan tijî bike.");
return;
}
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî malûmatan 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. The title text takes
// the button's place while open (see the "Form redesign for Kurdish example" mockup); the button
// itself stays put ready to reappear once the form is cancelled/closed.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._$title.toggle(visible);
this._frame.toggle(visible);
if (visible) {
alignFormToPage(this._frame.$element);
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._citoidSuccessMsg.hide();
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Warns before submitting if a Citoid URL/DOI/ISBN was typed but never successfully fetched, then defers
// to _doSubmit. The title-not-boldable case (see boldenPageTitle) is shown inline under the text box
// instead (_titleBoldHint) rather than blocking submission here.
submit: function() {
if (this._citoidPending() && !window.confirm("Te lînk, DOI an ISBN nivîsand lê hîn jê malûmat nehatine standin. Bêyî wan berdewam bikî?")) {
return;
}
this._doSubmit();
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
_doSubmit: 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; if a Kategorî:Çavkanî template was
// picked instead, collect its TemplateData-driven fields the same way, plus wekjêgirtin=1 for any
// "Ç:"-prefixed template (a quotation-equivalent, not a usage example -- see Modul:quote).
var jederParams = [];
var usingCategoryTemplate = this._currentJederKey === CATEGORY_TEMPLATE_KEY && !!this._categoryTemplateName;
if (usingCategoryTemplate) {
Object.keys(self._jederFieldWidgets).forEach(function(key) {
var value = self._jederFieldWidgets[key].getValue().trim();
if (value) {
jederParams.push(key + "=" + value);
}
});
if (/^Ç:/.test(self._categoryTemplateName)) {
jederParams.push("wekjêgirtin=1");
}
} else 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);
}
});
}
// A Kategorî:Çavkanî template is used as soon as it's picked, even with every field left blank
// (still submittable as a bare jêgirtin=); a jêder-* type only counts once a field is actually filled.
var usingJederTemplate = usingCategoryTemplate || (this._currentJederKey && jederParams.length > 0);
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-*/Kategorî:Çavkanî template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = usingCategoryTemplate ? this._categoryTemplateName : 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 (see boldenPageTitle), then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(boldenPageTitle(text, title).text);
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
if (translation) {
// Kategorî:Çavkanî templates route through Modul:quote directly and take its "t=" param name;
// the jêder-* templates use "tercime=" instead (see the jêder-* template docs).
code += "|" + (usingCategoryTemplate ? "t" : "tercime") + "=" + translation;
}
}
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
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)) {
// Match only the specific numbered section the button was clicked in (e.g. "Navdêr 2",
// not just the first "===Navdêr...===" heading found) -- both sides are "" when the
// section has no number at all (a single unnumbered "===Navdêr===").
var matchedSectionNumValue = matchedSectionNum ? parseInt(matchedSectionNum, 10) : "";
if (matchedSectionNumValue === sectionNum) {
// 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(code, result) {
error("Nekarî rûpelê xilas bike: " + apiErrorMessage(code, result));
});
}, function(code, result) {
error("Nekarî naveroka rûpelê bistîne: " + apiErrorMessage(code, result));
});
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>
ly2nvjla9jkqx53o0702vkpozrviurt
6342720
6342718
2026-08-26T17:23:31Z
Wikihez
7344
6342720
javascript
text/javascript
// <nowiki>
// dependencies (declared in MediaWiki:Gadgets-definition): oojs, oojs-ui, ext.gadget.citoid-helper (wikihez.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 = "2.0";
// 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 normally lives in MediaWiki:Gadget-citoid-helper.js as a registered gadget dependency; not
// currently editable, so ensureCitoid() (below) loads it from a user testing page on demand instead.
// Sentinel _currentJederKey value for the "pick a template from Kategorî:Çavkanî" dropdown option -- not a
// real jederDefs key, same convention as Wiki/start.js's own "__category__" picker.
var CATEGORY_TEMPLATE_KEY = "__category__";
// "span" is the field's width in the 12-column grid the fields render in (see .add-example-jeder-fields
// in the CSS and _setSourceType below) -- field ORDER here is also the grid's reading order.
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "cih", "label": "Cih", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "sala-weşandinê", "label": "Sala weşandinê", "span": 2 },
{ "key": "çap", "label": "Çap", "span": 1 },
{ "key": "rûpel", "label": "Rûpel", "span": 1 },
{ "key": "isbn", "label": "ISBN", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "kovar", "label": "Kovar", "span": 4 },
{ "key": "cild", "label": "Cild", "span": 2 },
{ "key": "hejmar", "label": "Hejmar", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "rûpel", "label": "Rûpel", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 4 },
{ "key": "terciman", "label": "Terciman", "span": 4 },
{ "key": "websîte", "label": "Websîte", "span": 4 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "url", "label": "URL", "span": 5 },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "span": 5 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "tarîx", "label": "Tarîx", "span": 1 }
]
},
"jêder-vîdeo": {
"label": "Vîdeo",
"fields": [
{ "key": "hunermend", "label": "Hunermend", "span": 6 },
{ "key": "platform", "label": "Platform", "span": 6 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "tarîx", "label": "Tarîx", "span": 3 },
{ "key": "dem", "label": "Dem", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
}
};
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;
}
// Escapes str for safe interpolation into a RegExp -- page titles can contain regex metacharacters
// (parentheses for disambiguation, periods in abbreviation entries, etc.).
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
// Wraps the first occurrence of the page title (+ an optional glued-on suffix, e.g. a plural "-an") in the
// example text with wikitext bold markup, so the headword stands out in the rendered example. Skips it if
// the title is already bolded by hand, to avoid turning "'''reh'''" into "'''''reh'''''" (bold+italic).
// Returns {text, bolded}; bolded is false if the title wasn't found anywhere and nothing changed.
function boldenPageTitle(text, title) {
var escapedTitle = escapeRegExp(title);
var suffixPattern = "([^\\s.,;?!()']+)?";
if (new RegExp("'''" + escapedTitle + suffixPattern + "'''", "i").test(text)) {
return { text: text, bolded: true };
}
var bolded = text.replace(new RegExp("(" + escapedTitle + suffixPattern + ")", "ig"), "'''$1'''");
return { text: bolded, bolded: bolded !== text };
}
// Extracts a human-readable message from an mw.Api rejection (code, result).
function apiErrorMessage(code, result) {
return (result && result.error && result.error.info) || (typeof code === "string" ? code : "Xeletiyeke nenas");
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
var api = new mw.Api();
// Loads wikihez.citoid if it isn't already loaded, from Wikihez's testing page (MediaWiki: isn't editable
// right now) -- self-contained rather than calling wikihez.citoidHelper.ensure() directly, since that
// function only exists once citoid-helper.js has already run once, which isn't guaranteed here.
function ensureCitoid() {
if (window.wikihez && window.wikihez.citoid) {
return $.Deferred().resolve().promise();
}
var url = mw.util.getUrl("Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js", {
action: "raw",
ctype: "text/javascript"
});
return mw.loader.getScript(mw.config.get("wgServer") + url);
}
// Kategorî:Çavkanî's template members plus their redirects (each redirect as its own searchable entry
// pointing at the same canonical target, so a template is findable by any of its names). Ported from
// Wiki/start.js's fetchCatSrcTemplates(), extended with prop=redirects. Cached after first fetch.
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) {
return catSrcTemplatesPromise;
}
catSrcTemplatesPromise = api.get({
action: "query",
generator: "categorymembers",
gcmtitle: "Kategorî:Çavkanî",
gcmnamespace: 10,
gcmlimit: "max",
prop: "redirects",
rdnamespace: 10,
rdlimit: "max",
formatversion: 2,
}).then(function(data) {
var pages = (data.query && data.query.pages) || [];
var list = [];
pages.forEach(function(page) {
var target = page.title.replace(/^[^:]+:/, "");
list.push({ label: target, target: target });
(page.redirects || []).forEach(function(redirect) {
list.push({ label: redirect.title.replace(/^[^:]+:/, ""), target: target });
});
});
list.sort(function(a, b) {
return a.label.localeCompare(b.label, mw.config.get("wgUserLanguage"));
});
catSrcTemplates = list;
return list;
}, function() {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
// TemplateData params for one template (name without the "Şablon:" prefix); redirects:1 so this also
// resolves if `name` is itself a redirect. Resolves to [] if the template has no TemplateData. Cached.
var tplDataCache = {};
function fetchTemplateDataFor(name) {
if (Object.prototype.hasOwnProperty.call(tplDataCache, name)) {
return $.Deferred().resolve(tplDataCache[name]).promise();
}
return api.get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2,
}).then(function(data) {
var pages = (data && data.pages) || {};
var first = null;
Object.keys(pages).forEach(function(id) {
if (!first) {
first = pages[id];
}
});
var params = [];
if (first && first.params) {
Object.keys(first.params).forEach(function(key) {
var p = first.params[key];
var label = p && p.label;
if (label && typeof label === "object") {
var userLang = mw.config.get("wgUserLanguage");
label = label[userLang] || label.en || label[Object.keys(label)[0]];
}
params.push({ key: key, label: label || key, required: !!(p && p.required) });
});
}
tplDataCache[name] = params;
return params;
}, function() {
tplDataCache[name] = [];
return [];
});
}
// Language display name, read from the matching section's .besazimani link text.
function languageNameForCode(code) {
var $mark = $(".besazimani[id='" + code + "']").first();
return $mark.length ? $mark.text().trim() : null;
}
// Whether the page title itself (accented Kurdish Latin letters included) is written in Latin script.
var pageTitleIsLatin = !/[^\x00-\x7FÀ-ɏḀ-ỿ‘’]/.test(mw.config.get("wgTitle") || "");
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex containers used directly by Şablon:nimûne; .citation-whole = Modul:quote's own wrapper, now used by jêder-* templates (Modul:quote nests .h-quotation inside .citation-whole > dl > dd instead of putting it directly under the <li>, so it needs its own entry here).
// Requiring "ul > li >" is what makes this only match an example that's grouped into its own <ul> -- a
// {{nimûne}} (or its "mk" redirect) with no jêder-family citation alongside it in the same definition
// renders straight under the definition's own content instead, with no such group; also reused below to
// tell whether the second pass still needs to handle a given definition.
var EXISTING_EXAMPLE_SELECTOR = "ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation, ul > li > .citation-whole";
$(EXISTING_EXAMPLE_SELECTOR).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.
// A jêder-* citation with no jêgirtin= (quotation text) yet renders no h-quotation/e-quotation at all
// (see get_quote() in Modul quote.lua) -- exactly the "bare citation" case this button exists to fill
// in, so this can't just crash: without the guard, [0] is undefined here and ".lang" throws, which
// (since $.each() has no try/catch) silently kills the button for every remaining match on the page.
var $langEl = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0];
if (!$langEl) {
console.warn("Gadget-wikt.add-examples: nikaribe zimanê vê nimûneyê bibîne, valakirî hate derbaskirin.", $item);
return;
}
var language = $langEl.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. $group is the citation-group <ul> itself (parent of $item);
// the form panel is inserted AFTER it (see click handler below), not inside it, so the panel isn't
// squeezed into that <ul>'s narrow hanging-indent width on mobile -- only the button/title stays
// there, matching the "Form redesign for Kurdish example" mockup (title inside the bullet list,
// full-width panel below it).
var $group = $item.parent();
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($item, $button, $title, language, definitionLevel);
$group.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem);
}
});
// Second pass: some definitions have no example the pass above could react to at all -- either genuinely
// zero examples, or one rendered via {{nimûne}} (or its "mk" redirect) with no jêder-family citation next
// to it, which (see the comment on EXISTING_EXAMPLE_SELECTOR above) renders with no "ul > li" group to
// match. This walks every recognized POS section's own definitions list directly instead of reacting to
// an existing example, and reads the language off the language section's own <h2> rather than off an
// example -- so it doesn't need one to already exist. Everything else (Form, submit()) is reused as-is.
// MediaWiki wraps each heading in a "mw-heading2"/"mw-heading3"/... div in current skin output; falls
// back to the bare heading element for older/other output that doesn't wrap it.
function headingOuter($h) {
var $wrap = $h.closest(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6");
return $wrap.length ? $wrap : $h;
}
// Section's language code: nearest preceding .besazimani[id] by document order (not sibling-walking, which mobile's per-section wrapping breaks).
function languageCodeForOl($ol) {
var $marks = $(".besazimani[id]").add($ol);
var ol = $ol.get(0);
var idx = $marks.index(ol);
for (var i = idx - 1; i >= 0; i--) {
var el = $marks.get(i);
if (el.id) {
return el.id;
}
}
return null;
}
// A <li> whose OWN direct content (not counting a nested <ol>) is wrapped in ".form-of-definition" is
// MediaWiki's "form of" template system marking that content as generated by a template -- e.g.
// {{ku-tewîna-nav}}'s "Formeke heval:" wrapper together with its "rewşa îzafeyî"/"rewşa çemandî"/...
// readings underneath. That whole nested block is normally the ENTIRE expansion of a single "#"
// wikitext line, with no separate "##" line behind any individual reading -- recursing into it would
// hand out one button per reading, each trying to match a "##" line that doesn't exist, and submit()
// would fail to find where to insert every one of them. A <li> without that class whose nested <ol>
// holds real hand-typed prose (e.g. sîno-koreyî/Navdêr's two genuinely separate "##" sub-senses) has
// no such problem -- those really are individually addressable wikitext lines.
function isFormOfWrapper($li) {
return $li.children(".form-of-definition").length > 0;
}
// Recurse into a <li>'s own nested <ol> UNLESS it's a form-of-template wrapper (see isFormOfWrapper) --
// a wrapper <li> with its own nested <ol> isn't itself a sense with content of its own, only its real
// (non-generated) leaves are.
function eachLeafDefinition($ol, fn) {
$ol.children("li").each(function() {
var $li = $(this);
var $childOl = $li.children("ol");
if ($childOl.length && !isFormOfWrapper($li)) {
$childOl.each(function() {
eachLeafDefinition($(this), fn);
});
} else {
fn($li);
}
});
}
$("h3").each(function() {
var sectionType = $(this).text().trim();
if (!sectionNames[sectionType]) {
return; // not a recognized word-sense section (Bilêvkirin, Etîmolojî, Çavkanî, ...)
}
var h3Id = $(this).attr("id");
// Forward-walk siblings to the definitions <ol>, skipping over a declension table/TemplateStyles/the
// headword line; stop (nothing to attach to in this section) if another heading comes first instead.
var $ol = null;
for (var $cursor = headingOuter($(this)).next(); $cursor.length; $cursor = $cursor.next()) {
if ($cursor.is("ol")) {
$ol = $cursor;
break;
}
if ($cursor.is(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6, h2, h3, h4, h5, h6")) {
break;
}
}
if (!$ol) {
return;
}
var language = languageCodeForOl($ol);
if (!language) {
console.warn("Gadget-wikt.add-examples: nikaribe koda zimanê vê beşê bibîne.", $ol);
return;
}
eachLeafDefinition($ol, function($li) {
// The pass above already added a button here (or will) -- an actual example already wrapped in
// its own "ul > li" group.
if ($li.find(EXISTING_EXAMPLE_SELECTOR).length) {
return;
}
var definitionLevel = [];
var $definitionItem = $li;
while ($definitionItem.prop("tagName") === "LI") {
// 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);
$definitionItem = $definitionItem.parent().parent();
}
definitionLevel.splice(0, 0, h3Id);
// A hidden, empty placeholder <li> so submit()'s existing "_$lastExample.after(newLi)" insertion
// (unchanged, same as the pass above) lands the first submitted example right before the button
// -- matching the existing convention of new examples going in before the button, not after it.
var $placeholder = $("<li style='display:none'></li>");
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
// A "ul" nested directly under a definition "li" starts hidden here (see the HQToggle-controlled
// jêder-citation-group "ul", which only ever renders with an explicit "style="display: block""
// set on it) -- this one has no HQToggle to unhide it, so it needs the same explicit override or
// the button (and the placeholder above) never becomes visible at all.
var $ul = $("<ul>").css("display", "block").append($placeholder).append($formItem);
// The form panel is inserted AFTER $ul (not inside it) once opened -- same reasoning as the first
// pass above: keeps the full-width panel out of the tight bulleted-list indentation on mobile.
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($placeholder, $button, $title, language, definitionLevel);
$ul.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$li.append($ul);
});
});
// Pulls the form panel flush with the page's own left/right edges, undoing whatever nested-list indent it inherited from sitting inside a deeply-nested definition.
function alignFormToPage($form) {
var $container = $form.closest(".mw-parser-output");
if (!$container.length) {
return;
}
var pad = parseFloat(window.getComputedStyle($container[0]).paddingLeft) || 0;
var containerLeft = $container.offset().left + pad;
var indent = $form.offset().left - containerLeft;
$form.css({
marginLeft: indent > 0 ? -indent : 0,
width: $container.width() + "px"
});
}
// Constructor for the edit form; lastExample/button/title/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, $title, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._$title = $title;
this._currentJederKey = "";
this._jederFieldWidgets = {};
// Set once a template is picked in the Kategorî:Çavkanî mode (see _renderCategoryTemplatePicker); the
// canonical template title (without the "Şablon:" prefix), used as `sablon` in _doSubmit.
this._categoryTemplateName = null;
this._textInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
// Shown under the text box (see boldenPageTitle) when the page title can't be found in the example text
// as typed, so it won't get bolded; purely informational, doesn't block submitting.
this._titleBoldHint = $("<span class='add-example-title-bold-hint'></span>").hide();
this._updateTitleBoldHint = function() {
var text = self._textInput.getValue().trim();
var title = mw.config.get("wgTitle");
var show = !!text && !boldenPageTitle(text, title).bolded;
self._titleBoldHint.toggle(show).html(show ? "Sermade (" + escapeHtmlForBackdrop(title) + ") nehat dîtin; dê neyê <b>stûr</b>kirin." : "");
};
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
self._updateReadyHint();
self._updateTitleBoldHint();
});
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,
}));
}
}
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: CATEGORY_TEMPLATE_KEY,
label: "Ji Kategorî:Çavkanî şablonekê hilbijêre",
}));
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._sourceInput.on("change", function() {
self._updateReadyHint();
});
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. The Citoid fetch button sits right next to it (not in a separate box) -- see _urlRowWidget below.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
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, malûmatan 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));
this._sourceURLInput.on("change", function() {
self._updateReadyHint();
self._autofillVideoTimestamp();
});
// URL input + inline "auto-fill" button as one row (replaces the old separate framed Citoid box's
// button row) -- a plain OO.ui.Widget used purely as a flex-row container (same pattern as
// _loadingImage below: build it empty, then manually append its children's $elements). Disabling
// during submit() still goes through the individual _sourceURLInput/_citoidButton references, not
// through this wrapper.
this._urlRowWidget = new OO.ui.Widget({ classes: ["add-example-url-row"] });
this._urlRowWidget.$element.append(this._sourceURLInput.$element, this._citoidButton.$element);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, {
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;
// Shown right after a successful Citoid fetch (see _fillFromCitoid); hidden again on clear.
this._citoidSuccessMsg = $("<span class='add-example-citoid-success'>✓ Malûmat hatin dagirtin — li jêr kontrol bike.</span>").hide();
// 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("");
self._citoidSuccessMsg.hide();
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
// Plain div (not OO.ui.FieldsetLayout) so the grid CSS class applies directly to the field items.
this._jederFieldsFieldset = $("<div class='add-example-jeder-fields'>");
// "Malûmatên çavkaniyê" header (+ the "Vala bike" clear button) sitting right above the fields grid,
// replacing the old framed "Ji Citoid an bi destan tijî bike:" box -- like this only makes sense once
// a real jêder-* template is active (there's nothing here to show for the "citoid: not yet detected"
// placeholder or for free text), so the whole section toggles together in _setSourceType().
this._jederSection = $("<div class='add-example-jeder-section'>").append(
$("<div class='add-example-jeder-header'>")
.append($("<span class='add-example-jeder-header-label'>Malûmatên çavkaniyê</span>"))
.append(this._citoidClearButton.$element),
this._jederFieldsFieldset
);
this._translationInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
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({ rows: 4 });
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Translîterasyona 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));
// Reactive "ready to submit" hint next to Biweşîne: no text yet, text but no source (still submittable
// as a bare {{nimûne}}), or fully ready -- kept in sync by _updateReadyHint(), wired to every field below.
this._readyHint = $("<span class='add-example-ready-hint'></span>").text("Metna nimûneyê lazim e.");
// True while a Citoid-eligible URL/DOI/ISBN is typed in but not yet fetched (or fetched then edited away) and no jêder field has been filled by hand -- the "looks done but isn't" trap this exists to catch. Not applicable in free-text mode, where the fetch button isn't even offered.
this._citoidPending = function() {
return self._currentJederKey !== "" &&
self._currentJederKey !== CATEGORY_TEMPLATE_KEY &&
!!self._sourceURLInput.getValue().trim() &&
!self._citoidSuccessMsg.is(":visible") &&
!Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
};
this._updateReadyHint = function() {
if (!self._textInput.getValue()) {
self._readyHint.text("Metna nimûneyê lazim e.");
return;
}
if (self._citoidPending()) {
self._readyHint.text("Pêşî 'Bi otomatîk tijî bike' bitikîne.");
return;
}
var hasSource = self._sourceInput.getValue().trim() || self._sourceURLInput.getValue().trim() ||
Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
self._readyHint.text(hasSource ? "Hazir e." : "Çavkanî nehatiye dayîn.");
};
// Prefills the Dem field from the typed URL's own "t=" (see wikihez.citoid.extractVideoTimestamp) once jêder-vîdeo is active -- never overwrites a value the user already entered by hand.
this._autofillVideoTimestamp = function() {
var demWidget = self._jederFieldWidgets.dem;
if (self._currentJederKey !== "jêder-vîdeo" || !demWidget || demWidget.getValue().trim()) {
return;
}
ensureCitoid().then(function() {
var dem = wikihez.citoid.extractVideoTimestamp(self._sourceURLInput.getValue().trim());
if (dem && !demWidget.getValue().trim()) {
demWidget.setValue(dem);
}
});
};
// framed:false (+ the "destructive" flag for the red text/hover) matches the mockup's borderless
// "Betal bike" -- a plain colored link rather than a boxed button, distinguishing it from Paqij bike.
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
framed: false,
});
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);
// Two-column top section (see "Form redesign for Kurdish example/Nimûne zêde bike.dc.html"): example
// text (+ translation/transliteration for non-ku, right after it, not after the source fields) on the
// left; source-type + link/Citoid on the right. Built as plain <div>s, not an OOUI layout -- OOUI has
// no CSS-grid container -- so .add-example-top-grid in the CSS can lay them out as a real responsive
// 7fr/5fr grid (collapsing to one column on narrow screens).
var $topLeft = $("<div class='add-example-top-col'>").append(textInputLayout.$element, this._titleBoldHint);
if (language !== "ku") {
$topLeft.append(translationInputLayout.$element);
}
if (!pageTitleIsLatin) {
$topLeft.append(transcriptionInputLayout.$element);
}
var $topRight = $("<div class='add-example-top-col'>").append(
sourceTypeLayout.$element,
this._sourceInputLayout.$element,
this._sourceURLInputLayout.$element,
this._citoidSuccessMsg
);
var $topGrid = $("<div class='add-example-top-grid'>").append($topLeft, $topRight);
// 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 (see the FieldLayout replaceWith() there).
this._fieldsLayout = $("<div class='add-example-fieldset'>").append($topGrid, this._jederSection);
// Bottom action row -- order/spacing matches the mockup: Biweşîne (+ spinner + ready hint), a spacer
// pushing the rest right, then Paqij bike (bordered/subtle) and Betal bike (borderless red text, via
// framed:false above). A plain flex <div>, not an OOUI HorizontalLayout, so the raw hint/spacer
// elements can sit alongside the real button widgets (same reasoning as the top grid above).
var $buttonsRow = $("<div class='add-example-main-buttons'>").append(
this._applyButton.$element,
this._loadingImage.$element,
this._readyHint,
$("<span class='add-example-buttons-spacer'></span>"),
this._clearButton.$element,
this._cancelButton.$element
);
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
});
this._frame.$element.append(this._fieldsLayout, $buttonsRow);
// 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 fetch button, and the "Malûmatên çavkaniyê" fields section toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateName = null;
var isRealJederKey = jederKey && jederDefs[jederKey];
var isCategoryTemplateKey = jederKey === CATEGORY_TEMPLATE_KEY;
if (isRealJederKey) {
var def = jederDefs[jederKey];
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;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: ["add-example-field-span-" + (field.span || 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
} else if (isCategoryTemplateKey) {
this._renderCategoryTemplatePicker();
}
// "Malûmatên çavkaniyê" header + fields grid: only once a real template is chosen/detected --
// nothing to show yet for the plain "citoid: not yet detected" placeholder or for free text.
this._jederSection.toggle(!!isRealJederKey || isCategoryTemplateKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid fetch button: hidden for free text (nothing there for it to fill in) and for the
// Kategorî:Çavkanî picker (Citoid has no mapping for an arbitrary picked template), shown for
// "citoid" auto-detect and any real jêder-* key. The URL input itself next to it stays visible in
// every OTHER mode -- see the sourceURLInputLayout toggle below for the one exception.
this._citoidButton.toggle(jederKey !== "" && !isCategoryTemplateKey);
// URL field wording: plain "attach a link" phrasing for free text, 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 $oldLayout = this._sourceURLInputLayout.$element;
// Re-wraps the SAME _urlRowWidget (still holding _sourceURLInput + _citoidButton) in a new
// FieldLayout with the new label/help; the widget's $element moves along with it, same as the
// old addItems()/removeItems() swap did for the plain input before this redesign.
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, 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,
});
$oldLayout.replaceWith(this._sourceURLInputLayout.$element);
}
// The URL/Citoid row is normally always visible (see the constructor comment), but Citoid has no
// mapping for an arbitrary Kategorî:Çavkanî template, so it'd just be dead UI in that one mode.
this._sourceURLInputLayout.toggle(!isCategoryTemplateKey);
this._autofillVideoTimestamp();
this._updateReadyHint();
},
// Renders the Kategorî:Çavkanî template search box, replacing the static jederDefs grid for this mode;
// once a template is picked, its TemplateData params (or a lone "Rûpel" fallback if it has none) render
// below the search box. Search/filter interaction ported from Wiki/start.js's own "__category__" picker.
_renderCategoryTemplatePicker: function() {
var self = this;
// Full-width grid item (see .add-example-cat-tpl-picker in the CSS) -- without an explicit span this
// lands as a bare 1-column item in the parent's 12-col grid, squeezing everything inside it.
var $wrap = $("<div class='add-example-cat-tpl-picker'>");
// Its own position:relative anchor for $results, kept separate from $wrap (see .add-example-cat-tpl-search-row) so the dropdown always pins under the input, not under however tall $fieldsArea has grown below it.
var $searchRow = $("<div class='add-example-cat-tpl-search-row'>");
var $input = $("<input type='search' autocomplete='off' class='add-example-cat-tpl-input'>")
.attr("placeholder", "Li navê şablonê bigere…");
var $results = $("<ul class='add-example-cat-tpl-results'>").hide();
var $status = $("<span class='add-example-cat-tpl-status'>Şablon tên barkirin…</span>");
var $fieldsArea = $("<div class='add-example-jeder-fields add-example-cat-tpl-fields'>");
function showResults(query) {
var q = query.trim().toLowerCase();
$results.empty();
var list = catSrcTemplates || [];
var matched = q ? list.filter(function(entry) {
return entry.label.toLowerCase().indexOf(q) !== -1;
}) : list;
if (!matched.length) {
$results.hide();
return;
}
matched.slice(0, 50).forEach(function(entry) {
var $li = $("<li>").text(entry.label);
$li.on("mousedown", function(e) {
e.preventDefault(); // keeps the input's blur (and the results-hiding it triggers) from firing before the click registers
selectTemplate(entry);
});
$results.append($li);
});
$results.show();
}
function selectTemplate(entry) {
$results.hide();
$input.val(entry.label);
self._categoryTemplateName = entry.target;
renderTemplateFields(entry.target);
}
// Builds one text input per TemplateData param of `name`, or a lone "Rûpel" fallback field if it
// has no TemplateData -- see the jêgirtin=/rûpel= example in the feature request this implements.
function renderTemplateFields(name) {
$fieldsArea.empty();
self._jederFieldWidgets = {};
fetchTemplateDataFor(name).then(function(params) {
var list = (params && params.length) ? params : [{ key: "rûpel", label: "Rûpel", required: false }];
list.forEach(function(p) {
var widget = new OO.ui.TextInputWidget();
self._jederFieldWidgets[p.key] = widget;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: p.label,
align: "top",
classes: ["add-example-field-span-4"],
});
$fieldsArea.append(layout.$element);
});
self._updateReadyHint();
});
}
$input.on("input focus", function() {
showResults($(this).val());
});
$input.on("blur", function() {
setTimeout(function() { $results.hide(); }, 200); // lets the mousedown handler above fire first
});
$searchRow.append($input, $results);
$wrap.append($searchRow, $status, $fieldsArea);
this._jederFieldsFieldset.append($wrap);
fetchCatSrcTemplates().then(function() {
$status.text("");
}, function() {
$status.text("Şablon nehatin barkirin.");
});
},
// Fetches data via wikihez.citoid (loaded on demand by ensureCitoid() if needed), picks the matching jêder-* template, and fills its empty fields.
_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);
ensureCitoid().then(function() {
return wikihez.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 : wikihez.citoid.dataToJederFields(targetJederKey, result.raw, query);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
self._citoidSuccessMsg.show();
self._updateReadyHint();
mw.notify("Malûmat ji Citoid hatin barkirin.");
}, function(errorMsg) {
// wikihez.citoid may still be missing here if ensureCitoid() itself failed to load the script (e.g. network error) -- fall back to the bare error notice in that case.
if (!window.wikihez || !window.wikihez.citoid) {
mw.notify("Nekarî citoid-helper.js bar bike.");
return;
}
// Citoid can't fetch some sites at all (e.g. x.com/twitter.com) -- fall back to jêder-websîte with a website name guessed from the URL itself, rather than just a bare error.
var fallbackSite = wikihez.citoid.websiteNameForUrl(query);
if (fallbackSite) {
if (self._currentJederKey !== "jêder-websîte") {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData("jêder-websîte");
if (item) {
menu.chooseItem(item); // this calls _setSourceType("jêder-websîte") automatically
}
}
var websiteWidget = self._jederFieldWidgets["websîte"];
if (websiteWidget && !websiteWidget.getValue()) {
websiteWidget.setValue(fallbackSite);
}
mw.notify("Citoid nikare vê malperê bixwîne; şablona Websîte hate hilbijartin, ji kerema xwe mayî bi destan tijî bike.");
return;
}
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî malûmatan 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. The title text takes
// the button's place while open (see the "Form redesign for Kurdish example" mockup); the button
// itself stays put ready to reappear once the form is cancelled/closed.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._$title.toggle(visible);
this._frame.toggle(visible);
if (visible) {
alignFormToPage(this._frame.$element);
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._citoidSuccessMsg.hide();
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Warns before submitting if a Citoid URL/DOI/ISBN was typed but never successfully fetched, then defers
// to _doSubmit. The title-not-boldable case (see boldenPageTitle) is shown inline under the text box
// instead (_titleBoldHint) rather than blocking submission here.
submit: function() {
if (this._citoidPending() && !window.confirm("Te lînk, DOI an ISBN nivîsand lê hîn jê malûmat nehatine standin. Bêyî wan berdewam bikî?")) {
return;
}
this._doSubmit();
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
_doSubmit: 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; if a Kategorî:Çavkanî template was
// picked instead, collect its TemplateData-driven fields the same way, plus wekjêgirtin=1 for any
// "Ç:"-prefixed template (a quotation-equivalent, not a usage example -- see Modul:quote).
var jederParams = [];
var usingCategoryTemplate = this._currentJederKey === CATEGORY_TEMPLATE_KEY && !!this._categoryTemplateName;
if (usingCategoryTemplate) {
Object.keys(self._jederFieldWidgets).forEach(function(key) {
var value = self._jederFieldWidgets[key].getValue().trim();
if (value) {
jederParams.push(key + "=" + value);
}
});
if (/^Ç:/.test(self._categoryTemplateName)) {
jederParams.push("wekjêgirtin=1");
}
} else 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);
}
});
}
// A Kategorî:Çavkanî template is used as soon as it's picked, even with every field left blank
// (still submittable as a bare jêgirtin=); a jêder-* type only counts once a field is actually filled.
var usingJederTemplate = usingCategoryTemplate || (this._currentJederKey && jederParams.length > 0);
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-*/Kategorî:Çavkanî template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = usingCategoryTemplate ? this._categoryTemplateName : 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 (see boldenPageTitle), then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(boldenPageTitle(text, title).text);
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
if (translation) {
// Kategorî:Çavkanî templates route through Modul:quote directly and take its "t=" param name;
// the jêder-* templates use "tercime=" instead (see the jêder-* template docs).
code += "|" + (usingCategoryTemplate ? "t" : "tercime") + "=" + translation;
}
}
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
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)) {
// Match only the specific numbered section the button was clicked in (e.g. "Navdêr 2",
// not just the first "===Navdêr...===" heading found) -- both sides are "" when the
// section has no number at all (a single unnumbered "===Navdêr===").
var matchedSectionNumValue = matchedSectionNum ? parseInt(matchedSectionNum, 10) : "";
if (matchedSectionNumValue === sectionNum) {
// 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(code, result) {
error("Nekarî rûpelê xilas bike: " + apiErrorMessage(code, result));
});
}, function(code, result) {
error("Nekarî naveroka rûpelê bistîne: " + apiErrorMessage(code, result));
});
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>
mv7qug73evhklcrmw881ztc0seartbv
6342721
6342720
2026-08-26T17:28:59Z
Wikihez
7344
6342721
javascript
text/javascript
/* Design tokens shared with the "Entry wizard" redesign, so gadgets read as one site: warm parchment card
palette, Spectral/IBM Plex Sans/IBM Plex Mono type, no drop shadows, pill-shaped action buttons. */
@import url('https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,300;0,400;0,600;1,400&family=IBM+Plex+Sans:ital,wght@0,400;0,500;0,600;1,400&family=IBM+Plex+Mono:wght@400;500&display=swap');
:root {
--wikt-ae-font-sans: 'IBM Plex Sans', system-ui, sans-serif;
--wikt-ae-font-mono: 'IBM Plex Mono', monospace;
--wikt-ae-card-bg: #fffdf8;
--wikt-ae-card-border: #e6dfd2;
--wikt-ae-divider: #efe8db;
--wikt-ae-input-border: #cfc7b8;
--wikt-ae-input-bg: #fff;
--wikt-ae-text: #1c1a17;
--wikt-ae-text-body: #4a453d;
--wikt-ae-text-label: #3d3830;
--wikt-ae-text-muted: #8a8378;
--wikt-ae-text-placeholder: #b3ab9e;
--wikt-ae-accent: #2a5db0;
--wikt-ae-accent-hover: #1c4685;
--wikt-ae-accent-bg: #eef2fa;
--wikt-ae-accent-border: #d5def0;
--wikt-ae-destructive: #9c3a28;
--wikt-ae-section-bg: #fbf8f1;
}
html.skin-theme-clientpref-night {
--wikt-ae-card-bg: var(--background-color-base, #101418);
--wikt-ae-card-border: rgba(255, 255, 255, 0.08);
--wikt-ae-divider: rgba(255, 255, 255, 0.06);
--wikt-ae-input-border: rgba(255, 255, 255, 0.2);
--wikt-ae-input-bg: rgba(255, 255, 255, 0.04);
--wikt-ae-text: #f0ece4;
--wikt-ae-text-body: #cfc7b8;
--wikt-ae-text-label: #e4ddd0;
--wikt-ae-text-muted: #a89f8f;
--wikt-ae-text-placeholder: #6b6459;
--wikt-ae-accent: #6ea1e0;
--wikt-ae-accent-hover: #8fb6e8;
--wikt-ae-accent-bg: rgba(110, 161, 224, 0.15);
--wikt-ae-accent-border: rgba(110, 161, 224, 0.35);
--wikt-ae-destructive: #d97a63;
--wikt-ae-section-bg: rgba(255, 255, 255, 0.03);
}
/* {{bênimûne}}'s own "Nimûneyekê bide" prompt is redundant once this gadget's own button renders in its place */
.mw-parser-output li:has(> .benimune) {
display: none;
}
.add-example-form .oo-ui-inputWidget-input {
font-family: var(--wikt-ae-font-sans) !important;
}
.add-example-form .add-example-fieldset {
margin-bottom: 1em;
}
/* Form panel: card with border and radius, no shadow (matches the Entry wizard "no shadows" rule) */
.add-example-form {
width: 100%;
box-sizing: border-box;
margin-top: 0.5em;
padding: 1.25em;
font-family: var(--wikt-ae-font-sans);
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-card-border);
border-radius: 14px;
background-color: var(--wikt-ae-card-bg);
}
/* Title shown in place of the "add example" link while its form is open */
.add-example-form-title {
font-family: var(--wikt-ae-font-sans);
font-weight: 600;
font-size: 13.5px;
color: var(--wikt-ae-text-label);
}
/* Field labels: consistent weight/size/color across all OOUI FieldLayouts in the form */
.add-example-form .oo-ui-fieldLayout-header label {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
font-weight: 500;
color: var(--wikt-ae-text-label);
}
/* Text inputs: shared border/radius/background, focus ring instead of OOUI's default */
.add-example-form .oo-ui-textInputWidget input,
.add-example-form .oo-ui-textInputWidget textarea {
border-color: var(--wikt-ae-input-border) !important;
border-radius: 10px !important;
background-color: var(--wikt-ae-input-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input:focus,
.add-example-form .oo-ui-textInputWidget textarea:focus {
border-color: var(--wikt-ae-accent) !important;
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input {
min-height: 44px;
}
/* Action buttons: pill-shaped, accent-colored to match the Entry wizard's Bişîne/secondary buttons */
.add-example-form .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
border-radius: 999px !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent) !important;
border-color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary:hover .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-hover) !important;
border-color: var(--wikt-ae-accent-hover) !important;
}
.add-example-form .oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive:not(.oo-ui-flaggedElement-primary) .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-bg) !important;
border-color: var(--wikt-ae-accent-border) !important;
color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
color: var(--wikt-ae-destructive) !important;
}
/* Two-column top section: example text left, source type/link right; collapses to one column below 640px */
.add-example-top-grid {
display: grid;
grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
gap: 16px 20px;
align-items: start;
}
.add-example-top-col {
display: flex;
flex-direction: column;
gap: 12px;
min-width: 0; /* lets long unbreakable text shrink instead of overflowing */
}
/* URL input and Citoid fetch button, each on its own line */
.add-example-url-row {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 8px;
}
.add-example-url-row .oo-ui-textInputWidget {
width: 100%;
}
.add-example-url-row .add-example-citoid-fetch {
align-self: flex-start;
}
.add-example-citoid-success {
font-size: 0.92em;
color: var(--wikt-palette-green6, #14866d);
}
/* Source-info section: "Malûmatên çavkaniyê" header + the jêder-* fields grid */
.add-example-jeder-section {
border-top: 1px solid var(--wikt-ae-divider);
background-color: var(--wikt-ae-section-bg);
padding: 1em 1.25em;
margin: 0.75em -1.25em 0; /* bleeds tint to the panel's side edges only */
}
.add-example-jeder-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 0.6em;
}
/* Section eyebrow style, matching the Entry wizard's small-caps section labels */
.add-example-jeder-header-label {
font-family: var(--wikt-ae-font-mono);
font-size: 11px;
letter-spacing: 0.12em;
color: var(--wikt-ae-text-muted);
}
.add-example-jeder-header .add-example-citoid-clear {
font-size: 12px;
}
.add-example-jeder-header .add-example-citoid-clear .oo-ui-iconElement-icon {
min-width: 14px;
min-height: 14px;
background-size: 14px;
}
/* jêder-* template fields: 12-column grid, each field spans its own jederDefs[key].span columns */
.add-example-jeder-fields {
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: 4px 12px;
align-items: start;
}
.add-example-jeder-fields .oo-ui-fieldLayout {
min-width: 0; /* lets a field shrink below its content's natural width */
margin-top: 0 !important; /* overrides OOUI's own stacking margin, not wanted between fields sharing a grid row */
}
.add-example-field-span-1 { grid-column: span 1; }
.add-example-field-span-2 { grid-column: span 2; }
.add-example-field-span-3 { grid-column: span 3; }
.add-example-field-span-4 { grid-column: span 4; }
.add-example-field-span-5 { grid-column: span 5; }
.add-example-field-span-6 { grid-column: span 6; }
.add-example-field-span-12 { grid-column: span 12; }
.add-example-jeder-fields .oo-ui-fieldLayout-header label {
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget {
max-width: 100%;
width: 100%;
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget input,
.add-example-jeder-fields .oo-ui-textInputWidget textarea {
font-size: 0.95em;
padding: 4px 8px;
min-height: 2.2em;
line-height: 1.4;
resize: vertical;
}
/* Kategorî:Çavkanî template search picker (search/filter interaction ported from Wiki/start.js's own
"__category__" picker); its result fields reuse .add-example-jeder-fields (see above) for the grid. */
.add-example-cat-tpl-picker {
/* Without this it's a bare 1-column item in the parent's 12-col grid -- see _renderCategoryTemplatePicker. */
grid-column: span 12;
}
.add-example-cat-tpl-search-row {
position: relative;
}
.add-example-cat-tpl-input {
display: block;
width: 100%;
box-sizing: border-box;
padding: 6px 10px;
font-family: var(--wikt-ae-font-sans);
font-size: 0.95em;
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-input-border);
border-radius: 10px;
background-color: var(--wikt-ae-input-bg);
}
.add-example-cat-tpl-input:focus {
outline: none;
border-color: var(--wikt-ae-accent);
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg);
}
.add-example-cat-tpl-results {
position: absolute;
z-index: 10;
top: 100%;
left: 0;
right: 0;
margin: 4px 0 0;
padding: 4px 0;
list-style: none;
max-height: 16em;
overflow-y: auto;
border: 1px solid var(--wikt-ae-card-border);
border-radius: 10px;
background-color: var(--wikt-ae-card-bg);
}
.add-example-cat-tpl-results li {
margin: 0;
padding: 5px 10px;
font-size: 0.92em;
cursor: pointer;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.add-example-cat-tpl-results li:hover {
background-color: var(--wikt-ae-accent-bg);
}
/* Marks a redirect entry with where it actually resolves to (see showResults() in the JS) */
.add-example-cat-tpl-redirect-arrow {
color: var(--wikt-ae-text-muted);
font-size: 0.9em;
}
.add-example-cat-tpl-status {
display: block;
font-size: 0.82em;
color: var(--wikt-ae-text-muted);
margin-top: 4px;
}
.add-example-cat-tpl-fields {
margin-top: 0.75em;
}
/* Larger font for the top-section textareas than the bibliographic sub-fields below */
.add-example-top-col textarea {
font-size: 1.05em;
}
/* Bottom action row: Biweşîne + hint, spacer, Paqij bike, Betal bike */
.add-example-main-buttons {
display: flex;
align-items: center;
margin-top: 0.75em;
padding-top: 0.75em;
border-top: 1px solid var(--wikt-ae-divider);
gap: 0.5em;
flex-wrap: wrap; /* keep buttons from overflowing on narrow screens */
}
.add-example-ready-hint {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-text-muted);
}
.add-example-title-bold-hint {
display: block;
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-destructive);
margin-top: 0.35em;
}
.add-example-buttons-spacer {
flex: 1 1 auto;
}
/* CSS-only loading spinner, matches dark/light mode */
.add-example-spinner {
display: inline-block;
width: 1.2em;
height: 1.2em;
vertical-align: middle;
border: 2px solid var(--wikt-ae-input-border);
border-top-color: var(--wikt-ae-accent);
border-radius: 50%;
animation: add-example-spin 0.8s linear infinite;
}
@keyframes add-example-spin {
to { transform: rotate(360deg); }
}
/* Narrow screens: collapse the top grid to one column */
@media (max-width: 640px) {
.add-example-top-grid {
grid-template-columns: 1fr;
}
}
/* Small screens: tighter padding, jêder-fields grid drops to 2 columns */
@media (max-width: 480px) {
.add-example-form {
padding: 0.75em;
}
.add-example-jeder-section {
margin-left: -0.75em;
margin-right: -0.75em;
}
.add-example-jeder-fields {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.add-example-jeder-fields [class*="add-example-field-span-"] {
grid-column: span 1;
}
.add-example-jeder-fields .add-example-field-span-12,
.add-example-jeder-fields .add-example-cat-tpl-picker {
grid-column: span 2;
}
}
/* Warns when the example/translation/transcription text has a literal linebreak */
.add-example-form textarea.add-example-has-linebreak {
border-color: var(--wikt-palette-yellow6, #ac6600) !important;
}
/* Backdrop mirrors the textarea's text with a marker at each linebreak; metrics synced from the textarea via JS */
.add-example-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;
display: none;
}
/* Textarea sits above its backdrop with a transparent background so the marker shows through */
.add-example-form textarea.add-example-has-linebreak-source {
position: relative;
z-index: 1;
background-color: transparent !important;
}
/* The ↵ marker itself, placed after each line followed by a linebreak */
.add-example-linebreak-mark {
background-color: var(--wikt-palette-yellow6, #ac6600);
color: var(--wikt-palette-white, #fff);
border-radius: 2px;
}
6txv8mfmxz2eyhfyrayyburvbv411kh
6342723
6342721
2026-08-26T17:29:19Z
Wikihez
7344
6342723
javascript
text/javascript
// <nowiki>
// dependencies (declared in MediaWiki:Gadgets-definition): oojs, oojs-ui, ext.gadget.citoid-helper (wikihez.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 = "2.0";
// 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 normally lives in MediaWiki:Gadget-citoid-helper.js as a registered gadget dependency; not
// currently editable, so ensureCitoid() (below) loads it from a user testing page on demand instead.
// Sentinel _currentJederKey value for the "pick a template from Kategorî:Çavkanî" dropdown option -- not a
// real jederDefs key, same convention as Wiki/start.js's own "__category__" picker.
var CATEGORY_TEMPLATE_KEY = "__category__";
// TemplateData params already covered by the form's own top-level text/translation/transliteration boxes --
// skipped when building a Kategorî:Çavkanî template's dynamic fields (see renderTemplateFields) so they
// don't get a redundant duplicate inputbox.
var CATEGORY_TEMPLATE_COVERED_PARAMS = ["jêgirtin", "jg", "t", "tr"];
// "span" is the field's width in the 12-column grid the fields render in (see .add-example-jeder-fields
// in the CSS and _setSourceType below) -- field ORDER here is also the grid's reading order.
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "cih", "label": "Cih", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "sala-weşandinê", "label": "Sala weşandinê", "span": 2 },
{ "key": "çap", "label": "Çap", "span": 1 },
{ "key": "rûpel", "label": "Rûpel", "span": 1 },
{ "key": "isbn", "label": "ISBN", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "kovar", "label": "Kovar", "span": 4 },
{ "key": "cild", "label": "Cild", "span": 2 },
{ "key": "hejmar", "label": "Hejmar", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "rûpel", "label": "Rûpel", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 4 },
{ "key": "terciman", "label": "Terciman", "span": 4 },
{ "key": "websîte", "label": "Websîte", "span": 4 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "url", "label": "URL", "span": 5 },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "span": 5 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "tarîx", "label": "Tarîx", "span": 1 }
]
},
"jêder-vîdeo": {
"label": "Vîdeo",
"fields": [
{ "key": "hunermend", "label": "Hunermend", "span": 6 },
{ "key": "platform", "label": "Platform", "span": 6 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "tarîx", "label": "Tarîx", "span": 3 },
{ "key": "dem", "label": "Dem", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
}
};
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;
}
// Escapes str for safe interpolation into a RegExp -- page titles can contain regex metacharacters
// (parentheses for disambiguation, periods in abbreviation entries, etc.).
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
// Wraps the first occurrence of the page title (+ an optional glued-on suffix, e.g. a plural "-an") in the
// example text with wikitext bold markup, so the headword stands out in the rendered example. Skips it if
// the title is already bolded by hand, to avoid turning "'''reh'''" into "'''''reh'''''" (bold+italic).
// Returns {text, bolded}; bolded is false if the title wasn't found anywhere and nothing changed.
function boldenPageTitle(text, title) {
var escapedTitle = escapeRegExp(title);
var suffixPattern = "([^\\s.,;?!()']+)?";
if (new RegExp("'''" + escapedTitle + suffixPattern + "'''", "i").test(text)) {
return { text: text, bolded: true };
}
var bolded = text.replace(new RegExp("(" + escapedTitle + suffixPattern + ")", "ig"), "'''$1'''");
return { text: bolded, bolded: bolded !== text };
}
// Extracts a human-readable message from an mw.Api rejection (code, result).
function apiErrorMessage(code, result) {
return (result && result.error && result.error.info) || (typeof code === "string" ? code : "Xeletiyeke nenas");
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
var api = new mw.Api();
// Loads wikihez.citoid if it isn't already loaded, from Wikihez's testing page (MediaWiki: isn't editable
// right now) -- self-contained rather than calling wikihez.citoidHelper.ensure() directly, since that
// function only exists once citoid-helper.js has already run once, which isn't guaranteed here.
function ensureCitoid() {
if (window.wikihez && window.wikihez.citoid) {
return $.Deferred().resolve().promise();
}
var url = mw.util.getUrl("Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js", {
action: "raw",
ctype: "text/javascript"
});
return mw.loader.getScript(mw.config.get("wgServer") + url);
}
// Kategorî:Çavkanî's template members plus their redirects (each redirect as its own searchable entry
// pointing at the same canonical target, so a template is findable by any of its names). Ported from
// Wiki/start.js's fetchCatSrcTemplates(), extended with prop=redirects. Cached after first fetch.
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) {
return catSrcTemplatesPromise;
}
catSrcTemplatesPromise = api.get({
action: "query",
generator: "categorymembers",
gcmtitle: "Kategorî:Çavkanî",
gcmnamespace: 10,
gcmlimit: "max",
prop: "redirects",
rdnamespace: 10,
rdlimit: "max",
formatversion: 2,
}).then(function(data) {
var pages = (data.query && data.query.pages) || [];
var list = [];
pages.forEach(function(page) {
var target = page.title.replace(/^[^:]+:/, "");
list.push({ label: target, target: target });
(page.redirects || []).forEach(function(redirect) {
list.push({ label: redirect.title.replace(/^[^:]+:/, ""), target: target });
});
});
list.sort(function(a, b) {
return a.label.localeCompare(b.label, mw.config.get("wgUserLanguage"));
});
catSrcTemplates = list;
return list;
}, function() {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
// TemplateData params for one template (name without the "Şablon:" prefix); redirects:1 so this also
// resolves if `name` is itself a redirect. Resolves to [] if the template has no TemplateData. Cached.
var tplDataCache = {};
function fetchTemplateDataFor(name) {
if (Object.prototype.hasOwnProperty.call(tplDataCache, name)) {
return $.Deferred().resolve(tplDataCache[name]).promise();
}
return api.get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2,
}).then(function(data) {
var pages = (data && data.pages) || {};
var first = null;
Object.keys(pages).forEach(function(id) {
if (!first) {
first = pages[id];
}
});
var params = [];
if (first && first.params) {
Object.keys(first.params).forEach(function(key) {
var p = first.params[key];
var label = p && p.label;
if (label && typeof label === "object") {
var userLang = mw.config.get("wgUserLanguage");
label = label[userLang] || label.en || label[Object.keys(label)[0]];
}
params.push({ key: key, label: label || key, required: !!(p && p.required) });
});
}
tplDataCache[name] = params;
return params;
}, function() {
tplDataCache[name] = [];
return [];
});
}
// Language display name, read from the matching section's .besazimani link text.
function languageNameForCode(code) {
var $mark = $(".besazimani[id='" + code + "']").first();
return $mark.length ? $mark.text().trim() : null;
}
// Whether the page title itself (accented Kurdish Latin letters included) is written in Latin script.
var pageTitleIsLatin = !/[^\x00-\x7FÀ-ɏḀ-ỿ‘’]/.test(mw.config.get("wgTitle") || "");
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex containers used directly by Şablon:nimûne; .citation-whole = Modul:quote's own wrapper, now used by jêder-* templates (Modul:quote nests .h-quotation inside .citation-whole > dl > dd instead of putting it directly under the <li>, so it needs its own entry here).
// Requiring "ul > li >" is what makes this only match an example that's grouped into its own <ul> -- a
// {{nimûne}} (or its "mk" redirect) with no jêder-family citation alongside it in the same definition
// renders straight under the definition's own content instead, with no such group; also reused below to
// tell whether the second pass still needs to handle a given definition.
var EXISTING_EXAMPLE_SELECTOR = "ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation, ul > li > .citation-whole";
$(EXISTING_EXAMPLE_SELECTOR).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.
// A jêder-* citation with no jêgirtin= (quotation text) yet renders no h-quotation/e-quotation at all
// (see get_quote() in Modul quote.lua) -- exactly the "bare citation" case this button exists to fill
// in, so this can't just crash: without the guard, [0] is undefined here and ".lang" throws, which
// (since $.each() has no try/catch) silently kills the button for every remaining match on the page.
var $langEl = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0];
if (!$langEl) {
console.warn("Gadget-wikt.add-examples: nikaribe zimanê vê nimûneyê bibîne, valakirî hate derbaskirin.", $item);
return;
}
var language = $langEl.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. $group is the citation-group <ul> itself (parent of $item);
// the form panel is inserted AFTER it (see click handler below), not inside it, so the panel isn't
// squeezed into that <ul>'s narrow hanging-indent width on mobile -- only the button/title stays
// there, matching the "Form redesign for Kurdish example" mockup (title inside the bullet list,
// full-width panel below it).
var $group = $item.parent();
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($item, $button, $title, language, definitionLevel);
$group.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem);
}
});
// Second pass: some definitions have no example the pass above could react to at all -- either genuinely
// zero examples, or one rendered via {{nimûne}} (or its "mk" redirect) with no jêder-family citation next
// to it, which (see the comment on EXISTING_EXAMPLE_SELECTOR above) renders with no "ul > li" group to
// match. This walks every recognized POS section's own definitions list directly instead of reacting to
// an existing example, and reads the language off the language section's own <h2> rather than off an
// example -- so it doesn't need one to already exist. Everything else (Form, submit()) is reused as-is.
// MediaWiki wraps each heading in a "mw-heading2"/"mw-heading3"/... div in current skin output; falls
// back to the bare heading element for older/other output that doesn't wrap it.
function headingOuter($h) {
var $wrap = $h.closest(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6");
return $wrap.length ? $wrap : $h;
}
// Section's language code: nearest preceding .besazimani[id] by document order (not sibling-walking, which mobile's per-section wrapping breaks).
function languageCodeForOl($ol) {
var $marks = $(".besazimani[id]").add($ol);
var ol = $ol.get(0);
var idx = $marks.index(ol);
for (var i = idx - 1; i >= 0; i--) {
var el = $marks.get(i);
if (el.id) {
return el.id;
}
}
return null;
}
// A <li> whose OWN direct content (not counting a nested <ol>) is wrapped in ".form-of-definition" is
// MediaWiki's "form of" template system marking that content as generated by a template -- e.g.
// {{ku-tewîna-nav}}'s "Formeke heval:" wrapper together with its "rewşa îzafeyî"/"rewşa çemandî"/...
// readings underneath. That whole nested block is normally the ENTIRE expansion of a single "#"
// wikitext line, with no separate "##" line behind any individual reading -- recursing into it would
// hand out one button per reading, each trying to match a "##" line that doesn't exist, and submit()
// would fail to find where to insert every one of them. A <li> without that class whose nested <ol>
// holds real hand-typed prose (e.g. sîno-koreyî/Navdêr's two genuinely separate "##" sub-senses) has
// no such problem -- those really are individually addressable wikitext lines.
function isFormOfWrapper($li) {
return $li.children(".form-of-definition").length > 0;
}
// Recurse into a <li>'s own nested <ol> UNLESS it's a form-of-template wrapper (see isFormOfWrapper) --
// a wrapper <li> with its own nested <ol> isn't itself a sense with content of its own, only its real
// (non-generated) leaves are.
function eachLeafDefinition($ol, fn) {
$ol.children("li").each(function() {
var $li = $(this);
var $childOl = $li.children("ol");
if ($childOl.length && !isFormOfWrapper($li)) {
$childOl.each(function() {
eachLeafDefinition($(this), fn);
});
} else {
fn($li);
}
});
}
$("h3").each(function() {
var sectionType = $(this).text().trim();
if (!sectionNames[sectionType]) {
return; // not a recognized word-sense section (Bilêvkirin, Etîmolojî, Çavkanî, ...)
}
var h3Id = $(this).attr("id");
// Forward-walk siblings to the definitions <ol>, skipping over a declension table/TemplateStyles/the
// headword line; stop (nothing to attach to in this section) if another heading comes first instead.
var $ol = null;
for (var $cursor = headingOuter($(this)).next(); $cursor.length; $cursor = $cursor.next()) {
if ($cursor.is("ol")) {
$ol = $cursor;
break;
}
if ($cursor.is(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6, h2, h3, h4, h5, h6")) {
break;
}
}
if (!$ol) {
return;
}
var language = languageCodeForOl($ol);
if (!language) {
console.warn("Gadget-wikt.add-examples: nikaribe koda zimanê vê beşê bibîne.", $ol);
return;
}
eachLeafDefinition($ol, function($li) {
// The pass above already added a button here (or will) -- an actual example already wrapped in
// its own "ul > li" group.
if ($li.find(EXISTING_EXAMPLE_SELECTOR).length) {
return;
}
var definitionLevel = [];
var $definitionItem = $li;
while ($definitionItem.prop("tagName") === "LI") {
// 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);
$definitionItem = $definitionItem.parent().parent();
}
definitionLevel.splice(0, 0, h3Id);
// A hidden, empty placeholder <li> so submit()'s existing "_$lastExample.after(newLi)" insertion
// (unchanged, same as the pass above) lands the first submitted example right before the button
// -- matching the existing convention of new examples going in before the button, not after it.
var $placeholder = $("<li style='display:none'></li>");
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
// A "ul" nested directly under a definition "li" starts hidden here (see the HQToggle-controlled
// jêder-citation-group "ul", which only ever renders with an explicit "style="display: block""
// set on it) -- this one has no HQToggle to unhide it, so it needs the same explicit override or
// the button (and the placeholder above) never becomes visible at all.
var $ul = $("<ul>").css("display", "block").append($placeholder).append($formItem);
// The form panel is inserted AFTER $ul (not inside it) once opened -- same reasoning as the first
// pass above: keeps the full-width panel out of the tight bulleted-list indentation on mobile.
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($placeholder, $button, $title, language, definitionLevel);
$ul.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$li.append($ul);
});
});
// Pulls the form panel flush with the page's own left/right edges, undoing whatever nested-list indent it inherited from sitting inside a deeply-nested definition.
function alignFormToPage($form) {
var $container = $form.closest(".mw-parser-output");
if (!$container.length) {
return;
}
var pad = parseFloat(window.getComputedStyle($container[0]).paddingLeft) || 0;
var containerLeft = $container.offset().left + pad;
var indent = $form.offset().left - containerLeft;
$form.css({
marginLeft: indent > 0 ? -indent : 0,
width: $container.width() + "px"
});
}
// Constructor for the edit form; lastExample/button/title/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, $title, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._$title = $title;
this._currentJederKey = "";
this._jederFieldWidgets = {};
// Set once a template is picked in the Kategorî:Çavkanî mode (see _renderCategoryTemplatePicker); the
// canonical template title (without the "Şablon:" prefix), used as `sablon` in _doSubmit.
this._categoryTemplateName = null;
this._textInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
// Shown under the text box (see boldenPageTitle) when the page title can't be found in the example text
// as typed, so it won't get bolded; purely informational, doesn't block submitting.
this._titleBoldHint = $("<span class='add-example-title-bold-hint'></span>").hide();
this._updateTitleBoldHint = function() {
var text = self._textInput.getValue().trim();
var title = mw.config.get("wgTitle");
var show = !!text && !boldenPageTitle(text, title).bolded;
self._titleBoldHint.toggle(show).html(show ? "Sermade (" + escapeHtmlForBackdrop(title) + ") nehat dîtin; dê neyê <b>stûr</b>kirin." : "");
};
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
self._updateReadyHint();
self._updateTitleBoldHint();
});
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,
}));
}
}
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: CATEGORY_TEMPLATE_KEY,
label: "Ji Kategorî:Çavkanî şablonekê hilbijêre",
}));
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._sourceInput.on("change", function() {
self._updateReadyHint();
});
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. The Citoid fetch button sits right next to it (not in a separate box) -- see _urlRowWidget below.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
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, malûmatan 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));
this._sourceURLInput.on("change", function() {
self._updateReadyHint();
self._autofillVideoTimestamp();
});
// URL input + inline "auto-fill" button as one row (replaces the old separate framed Citoid box's
// button row) -- a plain OO.ui.Widget used purely as a flex-row container (same pattern as
// _loadingImage below: build it empty, then manually append its children's $elements). Disabling
// during submit() still goes through the individual _sourceURLInput/_citoidButton references, not
// through this wrapper.
this._urlRowWidget = new OO.ui.Widget({ classes: ["add-example-url-row"] });
this._urlRowWidget.$element.append(this._sourceURLInput.$element, this._citoidButton.$element);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, {
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;
// Shown right after a successful Citoid fetch (see _fillFromCitoid); hidden again on clear.
this._citoidSuccessMsg = $("<span class='add-example-citoid-success'>✓ Malûmat hatin dagirtin — li jêr kontrol bike.</span>").hide();
// 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("");
self._citoidSuccessMsg.hide();
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
// Plain div (not OO.ui.FieldsetLayout) so the grid CSS class applies directly to the field items.
this._jederFieldsFieldset = $("<div class='add-example-jeder-fields'>");
// "Malûmatên çavkaniyê" header (+ the "Vala bike" clear button) sitting right above the fields grid,
// replacing the old framed "Ji Citoid an bi destan tijî bike:" box -- like this only makes sense once
// a real jêder-* template is active (there's nothing here to show for the "citoid: not yet detected"
// placeholder or for free text), so the whole section toggles together in _setSourceType().
this._jederSection = $("<div class='add-example-jeder-section'>").append(
$("<div class='add-example-jeder-header'>")
.append($("<span class='add-example-jeder-header-label'>Malûmatên çavkaniyê</span>"))
.append(this._citoidClearButton.$element),
this._jederFieldsFieldset
);
this._translationInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
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({ rows: 4 });
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Translîterasyona 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));
// Reactive "ready to submit" hint next to Biweşîne: no text yet, text but no source (still submittable
// as a bare {{nimûne}}), or fully ready -- kept in sync by _updateReadyHint(), wired to every field below.
this._readyHint = $("<span class='add-example-ready-hint'></span>").text("Metna nimûneyê lazim e.");
// True while a Citoid-eligible URL/DOI/ISBN is typed in but not yet fetched (or fetched then edited away) and no jêder field has been filled by hand -- the "looks done but isn't" trap this exists to catch. Not applicable in free-text mode, where the fetch button isn't even offered.
this._citoidPending = function() {
return self._currentJederKey !== "" &&
self._currentJederKey !== CATEGORY_TEMPLATE_KEY &&
!!self._sourceURLInput.getValue().trim() &&
!self._citoidSuccessMsg.is(":visible") &&
!Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
};
this._updateReadyHint = function() {
if (!self._textInput.getValue()) {
self._readyHint.text("Metna nimûneyê lazim e.");
return;
}
if (self._citoidPending()) {
self._readyHint.text("Pêşî 'Bi otomatîk tijî bike' bitikîne.");
return;
}
var hasSource = self._sourceInput.getValue().trim() || self._sourceURLInput.getValue().trim() ||
Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
self._readyHint.text(hasSource ? "Hazir e." : "Çavkanî nehatiye dayîn.");
};
// Prefills the Dem field from the typed URL's own "t=" (see wikihez.citoid.extractVideoTimestamp) once jêder-vîdeo is active -- never overwrites a value the user already entered by hand.
this._autofillVideoTimestamp = function() {
var demWidget = self._jederFieldWidgets.dem;
if (self._currentJederKey !== "jêder-vîdeo" || !demWidget || demWidget.getValue().trim()) {
return;
}
ensureCitoid().then(function() {
var dem = wikihez.citoid.extractVideoTimestamp(self._sourceURLInput.getValue().trim());
if (dem && !demWidget.getValue().trim()) {
demWidget.setValue(dem);
}
});
};
// framed:false (+ the "destructive" flag for the red text/hover) matches the mockup's borderless
// "Betal bike" -- a plain colored link rather than a boxed button, distinguishing it from Paqij bike.
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
framed: false,
});
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);
// Two-column top section (see "Form redesign for Kurdish example/Nimûne zêde bike.dc.html"): example
// text (+ translation/transliteration for non-ku, right after it, not after the source fields) on the
// left; source-type + link/Citoid on the right. Built as plain <div>s, not an OOUI layout -- OOUI has
// no CSS-grid container -- so .add-example-top-grid in the CSS can lay them out as a real responsive
// 7fr/5fr grid (collapsing to one column on narrow screens).
var $topLeft = $("<div class='add-example-top-col'>").append(textInputLayout.$element, this._titleBoldHint);
if (language !== "ku") {
$topLeft.append(translationInputLayout.$element);
}
if (!pageTitleIsLatin) {
$topLeft.append(transcriptionInputLayout.$element);
}
var $topRight = $("<div class='add-example-top-col'>").append(
sourceTypeLayout.$element,
this._sourceInputLayout.$element,
this._sourceURLInputLayout.$element,
this._citoidSuccessMsg
);
var $topGrid = $("<div class='add-example-top-grid'>").append($topLeft, $topRight);
// 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 (see the FieldLayout replaceWith() there).
this._fieldsLayout = $("<div class='add-example-fieldset'>").append($topGrid, this._jederSection);
// Bottom action row -- order/spacing matches the mockup: Biweşîne (+ spinner + ready hint), a spacer
// pushing the rest right, then Paqij bike (bordered/subtle) and Betal bike (borderless red text, via
// framed:false above). A plain flex <div>, not an OOUI HorizontalLayout, so the raw hint/spacer
// elements can sit alongside the real button widgets (same reasoning as the top grid above).
var $buttonsRow = $("<div class='add-example-main-buttons'>").append(
this._applyButton.$element,
this._loadingImage.$element,
this._readyHint,
$("<span class='add-example-buttons-spacer'></span>"),
this._clearButton.$element,
this._cancelButton.$element
);
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
});
this._frame.$element.append(this._fieldsLayout, $buttonsRow);
// 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 fetch button, and the "Malûmatên çavkaniyê" fields section toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateName = null;
var isRealJederKey = jederKey && jederDefs[jederKey];
var isCategoryTemplateKey = jederKey === CATEGORY_TEMPLATE_KEY;
if (isRealJederKey) {
var def = jederDefs[jederKey];
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;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: ["add-example-field-span-" + (field.span || 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
} else if (isCategoryTemplateKey) {
this._renderCategoryTemplatePicker();
}
// "Malûmatên çavkaniyê" header + fields grid: only once a real template is chosen/detected --
// nothing to show yet for the plain "citoid: not yet detected" placeholder or for free text.
this._jederSection.toggle(!!isRealJederKey || isCategoryTemplateKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid fetch button: hidden for free text (nothing there for it to fill in) and for the
// Kategorî:Çavkanî picker (Citoid has no mapping for an arbitrary picked template), shown for
// "citoid" auto-detect and any real jêder-* key. The URL input itself next to it stays visible in
// every OTHER mode -- see the sourceURLInputLayout toggle below for the one exception.
this._citoidButton.toggle(jederKey !== "" && !isCategoryTemplateKey);
// URL field wording: plain "attach a link" phrasing for free text, 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 $oldLayout = this._sourceURLInputLayout.$element;
// Re-wraps the SAME _urlRowWidget (still holding _sourceURLInput + _citoidButton) in a new
// FieldLayout with the new label/help; the widget's $element moves along with it, same as the
// old addItems()/removeItems() swap did for the plain input before this redesign.
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, 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,
});
$oldLayout.replaceWith(this._sourceURLInputLayout.$element);
}
// The URL/Citoid row is normally always visible (see the constructor comment), but Citoid has no
// mapping for an arbitrary Kategorî:Çavkanî template, so it'd just be dead UI in that one mode.
this._sourceURLInputLayout.toggle(!isCategoryTemplateKey);
this._autofillVideoTimestamp();
this._updateReadyHint();
},
// Renders the Kategorî:Çavkanî template search box, replacing the static jederDefs grid for this mode;
// once a template is picked, its TemplateData params (or a lone "Rûpel" fallback if it has none) render
// below the search box. Search/filter interaction ported from Wiki/start.js's own "__category__" picker.
_renderCategoryTemplatePicker: function() {
var self = this;
// Full-width grid item (see .add-example-cat-tpl-picker in the CSS) -- without an explicit span this
// lands as a bare 1-column item in the parent's 12-col grid, squeezing everything inside it.
var $wrap = $("<div class='add-example-cat-tpl-picker'>");
// Its own position:relative anchor for $results, kept separate from $wrap (see .add-example-cat-tpl-search-row) so the dropdown always pins under the input, not under however tall $fieldsArea has grown below it.
var $searchRow = $("<div class='add-example-cat-tpl-search-row'>");
var $input = $("<input type='search' autocomplete='off' class='add-example-cat-tpl-input'>")
.attr("placeholder", "Li navê şablonê bigere…");
var $results = $("<ul class='add-example-cat-tpl-results'>").hide();
var $status = $("<span class='add-example-cat-tpl-status'>Şablon tên barkirin…</span>");
var $fieldsArea = $("<div class='add-example-jeder-fields add-example-cat-tpl-fields'>");
function showResults(query) {
var q = query.trim().toLowerCase();
$results.empty();
var list = catSrcTemplates || [];
var matched = q ? list.filter(function(entry) {
return entry.label.toLowerCase().indexOf(q) !== -1;
}) : list;
if (!matched.length) {
$results.hide();
return;
}
matched.slice(0, 50).forEach(function(entry) {
var $li = $("<li>").text(entry.label);
// A redirect entry's label differs from its target -- mark where it actually resolves to.
if (entry.label !== entry.target) {
$li.append($("<span class='add-example-cat-tpl-redirect-arrow'>").text(" → " + entry.target));
}
$li.on("mousedown", function(e) {
e.preventDefault(); // keeps the input's blur (and the results-hiding it triggers) from firing before the click registers
selectTemplate(entry);
});
$results.append($li);
});
$results.show();
}
function selectTemplate(entry) {
$results.hide();
// Left as the plain label (not "label → target") -- putting the arrow in the input's own value
// would get re-used as the search query if the box is focused again to pick something else.
$input.val(entry.label);
self._categoryTemplateName = entry.target;
renderTemplateFields(entry.target);
}
// Builds one text input per TemplateData param of `name`, or a lone "Rûpel" fallback field if it
// has no TemplateData -- see the jêgirtin=/rûpel= example in the feature request this implements.
function renderTemplateFields(name) {
$fieldsArea.empty();
self._jederFieldWidgets = {};
fetchTemplateDataFor(name).then(function(params) {
var filtered = (params || []).filter(function(p) {
return CATEGORY_TEMPLATE_COVERED_PARAMS.indexOf(p.key) === -1;
});
var list = filtered.length ? filtered : [{ key: "rûpel", label: "Rûpel", required: false }];
list.forEach(function(p) {
var widget = new OO.ui.TextInputWidget();
self._jederFieldWidgets[p.key] = widget;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: p.label,
align: "top",
classes: ["add-example-field-span-4"],
});
$fieldsArea.append(layout.$element);
});
self._updateReadyHint();
});
}
$input.on("input focus", function() {
showResults($(this).val());
});
$input.on("blur", function() {
setTimeout(function() { $results.hide(); }, 200); // lets the mousedown handler above fire first
});
$searchRow.append($input, $results);
$wrap.append($searchRow, $status, $fieldsArea);
this._jederFieldsFieldset.append($wrap);
fetchCatSrcTemplates().then(function() {
$status.text("");
}, function() {
$status.text("Şablon nehatin barkirin.");
});
},
// Fetches data via wikihez.citoid (loaded on demand by ensureCitoid() if needed), picks the matching jêder-* template, and fills its empty fields.
_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);
ensureCitoid().then(function() {
return wikihez.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 : wikihez.citoid.dataToJederFields(targetJederKey, result.raw, query);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
self._citoidSuccessMsg.show();
self._updateReadyHint();
mw.notify("Malûmat ji Citoid hatin barkirin.");
}, function(errorMsg) {
// wikihez.citoid may still be missing here if ensureCitoid() itself failed to load the script (e.g. network error) -- fall back to the bare error notice in that case.
if (!window.wikihez || !window.wikihez.citoid) {
mw.notify("Nekarî citoid-helper.js bar bike.");
return;
}
// Citoid can't fetch some sites at all (e.g. x.com/twitter.com) -- fall back to jêder-websîte with a website name guessed from the URL itself, rather than just a bare error.
var fallbackSite = wikihez.citoid.websiteNameForUrl(query);
if (fallbackSite) {
if (self._currentJederKey !== "jêder-websîte") {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData("jêder-websîte");
if (item) {
menu.chooseItem(item); // this calls _setSourceType("jêder-websîte") automatically
}
}
var websiteWidget = self._jederFieldWidgets["websîte"];
if (websiteWidget && !websiteWidget.getValue()) {
websiteWidget.setValue(fallbackSite);
}
mw.notify("Citoid nikare vê malperê bixwîne; şablona Websîte hate hilbijartin, ji kerema xwe mayî bi destan tijî bike.");
return;
}
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî malûmatan 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. The title text takes
// the button's place while open (see the "Form redesign for Kurdish example" mockup); the button
// itself stays put ready to reappear once the form is cancelled/closed.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._$title.toggle(visible);
this._frame.toggle(visible);
if (visible) {
alignFormToPage(this._frame.$element);
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._citoidSuccessMsg.hide();
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Warns before submitting if a Citoid URL/DOI/ISBN was typed but never successfully fetched, then defers
// to _doSubmit. The title-not-boldable case (see boldenPageTitle) is shown inline under the text box
// instead (_titleBoldHint) rather than blocking submission here.
submit: function() {
if (this._citoidPending() && !window.confirm("Te lînk, DOI an ISBN nivîsand lê hîn jê malûmat nehatine standin. Bêyî wan berdewam bikî?")) {
return;
}
this._doSubmit();
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
_doSubmit: 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; if a Kategorî:Çavkanî template was
// picked instead, collect its TemplateData-driven fields the same way, plus wekjêgirtin=1 for any
// "Ç:"-prefixed template (a quotation-equivalent, not a usage example -- see Modul:quote).
var jederParams = [];
var usingCategoryTemplate = this._currentJederKey === CATEGORY_TEMPLATE_KEY && !!this._categoryTemplateName;
if (usingCategoryTemplate) {
Object.keys(self._jederFieldWidgets).forEach(function(key) {
var value = self._jederFieldWidgets[key].getValue().trim();
if (value) {
jederParams.push(key + "=" + value);
}
});
if (/^Ç:/.test(self._categoryTemplateName)) {
jederParams.push("wekjêgirtin=1");
}
} else 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);
}
});
}
// A Kategorî:Çavkanî template is used as soon as it's picked, even with every field left blank
// (still submittable as a bare jêgirtin=); a jêder-* type only counts once a field is actually filled.
var usingJederTemplate = usingCategoryTemplate || (this._currentJederKey && jederParams.length > 0);
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-*/Kategorî:Çavkanî template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = usingCategoryTemplate ? this._categoryTemplateName : 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 (see boldenPageTitle), then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(boldenPageTitle(text, title).text);
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
if (translation) {
// Kategorî:Çavkanî templates route through Modul:quote directly and take its "t=" param name;
// the jêder-* templates use "tercime=" instead (see the jêder-* template docs).
code += "|" + (usingCategoryTemplate ? "t" : "tercime") + "=" + translation;
}
}
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
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)) {
// Match only the specific numbered section the button was clicked in (e.g. "Navdêr 2",
// not just the first "===Navdêr...===" heading found) -- both sides are "" when the
// section has no number at all (a single unnumbered "===Navdêr===").
var matchedSectionNumValue = matchedSectionNum ? parseInt(matchedSectionNum, 10) : "";
if (matchedSectionNumValue === sectionNum) {
// 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(code, result) {
error("Nekarî rûpelê xilas bike: " + apiErrorMessage(code, result));
});
}, function(code, result) {
error("Nekarî naveroka rûpelê bistîne: " + apiErrorMessage(code, result));
});
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>
dpwpvp1sd23rm5s4vyhfcp4mz51ehnv
6342725
6342723
2026-08-26T17:45:51Z
Wikihez
7344
6342725
javascript
text/javascript
// <nowiki>
// dependencies (declared in MediaWiki:Gadgets-definition): oojs, oojs-ui, ext.gadget.citoid-helper (wikihez.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 = "2.0";
// 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 normally lives in MediaWiki:Gadget-citoid-helper.js as a registered gadget dependency; not
// currently editable, so ensureCitoid() (below) loads it from a user testing page on demand instead.
// Sentinel _currentJederKey value for the "pick a template from Kategorî:Çavkanî" dropdown option -- not a
// real jederDefs key, same convention as Wiki/start.js's own "__category__" picker.
var CATEGORY_TEMPLATE_KEY = "__category__";
// TemplateData params already covered by the form's own top-level text/translation/transliteration boxes --
// skipped when building a Kategorî:Çavkanî template's dynamic fields (see renderTemplateFields) so they
// don't get a redundant duplicate inputbox.
var CATEGORY_TEMPLATE_COVERED_PARAMS = ["jêgirtin", "jg", "t", "tr"];
// "span" is the field's width in the 12-column grid the fields render in (see .add-example-jeder-fields
// in the CSS and _setSourceType below) -- field ORDER here is also the grid's reading order.
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "cih", "label": "Cih", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "sala-weşandinê", "label": "Sala weşandinê", "span": 2 },
{ "key": "çap", "label": "Çap", "span": 1 },
{ "key": "rûpel", "label": "Rûpel", "span": 1 },
{ "key": "isbn", "label": "ISBN", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "kovar", "label": "Kovar", "span": 4 },
{ "key": "cild", "label": "Cild", "span": 2 },
{ "key": "hejmar", "label": "Hejmar", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "rûpel", "label": "Rûpel", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 4 },
{ "key": "terciman", "label": "Terciman", "span": 4 },
{ "key": "websîte", "label": "Websîte", "span": 4 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "url", "label": "URL", "span": 5 },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "span": 5 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "tarîx", "label": "Tarîx", "span": 1 }
]
},
"jêder-vîdeo": {
"label": "Vîdeo",
"fields": [
{ "key": "hunermend", "label": "Hunermend", "span": 6 },
{ "key": "platform", "label": "Platform", "span": 6 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "tarîx", "label": "Tarîx", "span": 3 },
{ "key": "dem", "label": "Dem", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
}
};
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;
}
// Escapes str for safe interpolation into a RegExp -- page titles can contain regex metacharacters
// (parentheses for disambiguation, periods in abbreviation entries, etc.).
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
// Wraps the first occurrence of the page title (+ an optional glued-on suffix, e.g. a plural "-an") in the
// example text with wikitext bold markup, so the headword stands out in the rendered example. Skips it if
// the title is already bolded by hand, to avoid turning "'''reh'''" into "'''''reh'''''" (bold+italic).
// Returns {text, bolded}; bolded is false if the title wasn't found anywhere and nothing changed.
function boldenPageTitle(text, title) {
var escapedTitle = escapeRegExp(title);
var suffixPattern = "([^\\s.,;?!()']+)?";
if (new RegExp("'''" + escapedTitle + suffixPattern + "'''", "i").test(text)) {
return { text: text, bolded: true };
}
var bolded = text.replace(new RegExp("(" + escapedTitle + suffixPattern + ")", "ig"), "'''$1'''");
return { text: bolded, bolded: bolded !== text };
}
// Extracts a human-readable message from an mw.Api rejection (code, result).
function apiErrorMessage(code, result) {
return (result && result.error && result.error.info) || (typeof code === "string" ? code : "Xeletiyeke nenas");
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
// Custom drag-to-resize grip for textareas, ported from Wiki/start.js's wiktkuMakeManualResizable() -- Safari
// has no native corner resize handle on textareas at all, this is the fix start.js already uses for that.
// Inserted as a SIBLING within the textarea's existing OOUI wrapper (same reasoning as
// ensureLinebreakBackdrop above: wrapping the textarea in a NEW div risks disturbing OOUI's own layout),
// not by wrapping it in a new div like start.js's own version does. Unlike start.js's version, this doesn't
// persist the chosen height across page loads (start.js keys that off the textarea's own CSS class, but
// every textarea here is a plain OOUI MultilineTextInputWidget with no distinguishing class, so a direct
// port would have every field here share one save slot and overwrite each other's heights).
function makeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.data("addExampleResizableDone")) {
return;
}
textarea.data("addExampleResizableDone", true);
textarea.css("resize", "none"); // replaced by the custom grip below
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var grip = $("<div class='add-example-resize-grip'></div>");
textarea.after(grip);
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) { /* already released */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
}
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 makeManualResizable to every textarea in `context` (itself or its descendants).
function initManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function() {
makeManualResizable(this);
});
}
var api = new mw.Api();
// Loads wikihez.citoid if it isn't already loaded, from Wikihez's testing page (MediaWiki: isn't editable
// right now) -- self-contained rather than calling wikihez.citoidHelper.ensure() directly, since that
// function only exists once citoid-helper.js has already run once, which isn't guaranteed here.
function ensureCitoid() {
if (window.wikihez && window.wikihez.citoid) {
return $.Deferred().resolve().promise();
}
var url = mw.util.getUrl("Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js", {
action: "raw",
ctype: "text/javascript"
});
return mw.loader.getScript(mw.config.get("wgServer") + url);
}
// Kategorî:Çavkanî's template members plus their redirects (each redirect as its own searchable entry
// pointing at the same canonical target, so a template is findable by any of its names). Ported from
// Wiki/start.js's fetchCatSrcTemplates(), extended with prop=redirects. Cached after first fetch.
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) {
return catSrcTemplatesPromise;
}
catSrcTemplatesPromise = api.get({
action: "query",
generator: "categorymembers",
gcmtitle: "Kategorî:Çavkanî",
gcmnamespace: 10,
gcmlimit: "max",
prop: "redirects",
rdnamespace: 10,
rdlimit: "max",
formatversion: 2,
}).then(function(data) {
var pages = (data.query && data.query.pages) || [];
var list = [];
pages.forEach(function(page) {
var target = page.title.replace(/^[^:]+:/, "");
list.push({ label: target, target: target });
(page.redirects || []).forEach(function(redirect) {
list.push({ label: redirect.title.replace(/^[^:]+:/, ""), target: target });
});
});
list.sort(function(a, b) {
return a.label.localeCompare(b.label, mw.config.get("wgUserLanguage"));
});
catSrcTemplates = list;
return list;
}, function() {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
// TemplateData params for one template (name without the "Şablon:" prefix); redirects:1 so this also
// resolves if `name` is itself a redirect. Resolves to [] if the template has no TemplateData. Cached.
var tplDataCache = {};
function fetchTemplateDataFor(name) {
if (Object.prototype.hasOwnProperty.call(tplDataCache, name)) {
return $.Deferred().resolve(tplDataCache[name]).promise();
}
return api.get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2,
}).then(function(data) {
var pages = (data && data.pages) || {};
var first = null;
Object.keys(pages).forEach(function(id) {
if (!first) {
first = pages[id];
}
});
var params = [];
if (first && first.params) {
Object.keys(first.params).forEach(function(key) {
var p = first.params[key];
var label = p && p.label;
if (label && typeof label === "object") {
var userLang = mw.config.get("wgUserLanguage");
label = label[userLang] || label.en || label[Object.keys(label)[0]];
}
params.push({ key: key, label: label || key, required: !!(p && p.required) });
});
}
tplDataCache[name] = params;
return params;
}, function() {
tplDataCache[name] = [];
return [];
});
}
// Language display name, read from the matching section's .besazimani link text.
function languageNameForCode(code) {
var $mark = $(".besazimani[id='" + code + "']").first();
return $mark.length ? $mark.text().trim() : null;
}
// Whether the page title itself (accented Kurdish Latin letters included) is written in Latin script.
var pageTitleIsLatin = !/[^\x00-\x7FÀ-ɏḀ-ỿ‘’]/.test(mw.config.get("wgTitle") || "");
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex containers used directly by Şablon:nimûne; .citation-whole = Modul:quote's own wrapper, now used by jêder-* templates (Modul:quote nests .h-quotation inside .citation-whole > dl > dd instead of putting it directly under the <li>, so it needs its own entry here).
// Requiring "ul > li >" is what makes this only match an example that's grouped into its own <ul> -- a
// {{nimûne}} (or its "mk" redirect) with no jêder-family citation alongside it in the same definition
// renders straight under the definition's own content instead, with no such group; also reused below to
// tell whether the second pass still needs to handle a given definition.
var EXISTING_EXAMPLE_SELECTOR = "ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation, ul > li > .citation-whole";
$(EXISTING_EXAMPLE_SELECTOR).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.
// A jêder-* citation with no jêgirtin= (quotation text) yet renders no h-quotation/e-quotation at all
// (see get_quote() in Modul quote.lua) -- exactly the "bare citation" case this button exists to fill
// in, so this can't just crash: without the guard, [0] is undefined here and ".lang" throws, which
// (since $.each() has no try/catch) silently kills the button for every remaining match on the page.
var $langEl = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0];
if (!$langEl) {
console.warn("Gadget-wikt.add-examples: nikaribe zimanê vê nimûneyê bibîne, valakirî hate derbaskirin.", $item);
return;
}
var language = $langEl.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. $group is the citation-group <ul> itself (parent of $item);
// the form panel is inserted AFTER it (see click handler below), not inside it, so the panel isn't
// squeezed into that <ul>'s narrow hanging-indent width on mobile -- only the button/title stays
// there, matching the "Form redesign for Kurdish example" mockup (title inside the bullet list,
// full-width panel below it).
var $group = $item.parent();
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($item, $button, $title, language, definitionLevel);
$group.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem);
}
});
// Second pass: some definitions have no example the pass above could react to at all -- either genuinely
// zero examples, or one rendered via {{nimûne}} (or its "mk" redirect) with no jêder-family citation next
// to it, which (see the comment on EXISTING_EXAMPLE_SELECTOR above) renders with no "ul > li" group to
// match. This walks every recognized POS section's own definitions list directly instead of reacting to
// an existing example, and reads the language off the language section's own <h2> rather than off an
// example -- so it doesn't need one to already exist. Everything else (Form, submit()) is reused as-is.
// MediaWiki wraps each heading in a "mw-heading2"/"mw-heading3"/... div in current skin output; falls
// back to the bare heading element for older/other output that doesn't wrap it.
function headingOuter($h) {
var $wrap = $h.closest(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6");
return $wrap.length ? $wrap : $h;
}
// Section's language code: nearest preceding .besazimani[id] by document order (not sibling-walking, which mobile's per-section wrapping breaks).
function languageCodeForOl($ol) {
var $marks = $(".besazimani[id]").add($ol);
var ol = $ol.get(0);
var idx = $marks.index(ol);
for (var i = idx - 1; i >= 0; i--) {
var el = $marks.get(i);
if (el.id) {
return el.id;
}
}
return null;
}
// A <li> whose OWN direct content (not counting a nested <ol>) is wrapped in ".form-of-definition" is
// MediaWiki's "form of" template system marking that content as generated by a template -- e.g.
// {{ku-tewîna-nav}}'s "Formeke heval:" wrapper together with its "rewşa îzafeyî"/"rewşa çemandî"/...
// readings underneath. That whole nested block is normally the ENTIRE expansion of a single "#"
// wikitext line, with no separate "##" line behind any individual reading -- recursing into it would
// hand out one button per reading, each trying to match a "##" line that doesn't exist, and submit()
// would fail to find where to insert every one of them. A <li> without that class whose nested <ol>
// holds real hand-typed prose (e.g. sîno-koreyî/Navdêr's two genuinely separate "##" sub-senses) has
// no such problem -- those really are individually addressable wikitext lines.
function isFormOfWrapper($li) {
return $li.children(".form-of-definition").length > 0;
}
// Recurse into a <li>'s own nested <ol> UNLESS it's a form-of-template wrapper (see isFormOfWrapper) --
// a wrapper <li> with its own nested <ol> isn't itself a sense with content of its own, only its real
// (non-generated) leaves are.
function eachLeafDefinition($ol, fn) {
$ol.children("li").each(function() {
var $li = $(this);
var $childOl = $li.children("ol");
if ($childOl.length && !isFormOfWrapper($li)) {
$childOl.each(function() {
eachLeafDefinition($(this), fn);
});
} else {
fn($li);
}
});
}
$("h3").each(function() {
var sectionType = $(this).text().trim();
if (!sectionNames[sectionType]) {
return; // not a recognized word-sense section (Bilêvkirin, Etîmolojî, Çavkanî, ...)
}
var h3Id = $(this).attr("id");
// Forward-walk siblings to the definitions <ol>, skipping over a declension table/TemplateStyles/the
// headword line; stop (nothing to attach to in this section) if another heading comes first instead.
var $ol = null;
for (var $cursor = headingOuter($(this)).next(); $cursor.length; $cursor = $cursor.next()) {
if ($cursor.is("ol")) {
$ol = $cursor;
break;
}
if ($cursor.is(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6, h2, h3, h4, h5, h6")) {
break;
}
}
if (!$ol) {
return;
}
var language = languageCodeForOl($ol);
if (!language) {
console.warn("Gadget-wikt.add-examples: nikaribe koda zimanê vê beşê bibîne.", $ol);
return;
}
eachLeafDefinition($ol, function($li) {
// The pass above already added a button here (or will) -- an actual example already wrapped in
// its own "ul > li" group.
if ($li.find(EXISTING_EXAMPLE_SELECTOR).length) {
return;
}
var definitionLevel = [];
var $definitionItem = $li;
while ($definitionItem.prop("tagName") === "LI") {
// 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);
$definitionItem = $definitionItem.parent().parent();
}
definitionLevel.splice(0, 0, h3Id);
// A hidden, empty placeholder <li> so submit()'s existing "_$lastExample.after(newLi)" insertion
// (unchanged, same as the pass above) lands the first submitted example right before the button
// -- matching the existing convention of new examples going in before the button, not after it.
var $placeholder = $("<li style='display:none'></li>");
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
// A "ul" nested directly under a definition "li" starts hidden here (see the HQToggle-controlled
// jêder-citation-group "ul", which only ever renders with an explicit "style="display: block""
// set on it) -- this one has no HQToggle to unhide it, so it needs the same explicit override or
// the button (and the placeholder above) never becomes visible at all.
var $ul = $("<ul>").css("display", "block").append($placeholder).append($formItem);
// The form panel is inserted AFTER $ul (not inside it) once opened -- same reasoning as the first
// pass above: keeps the full-width panel out of the tight bulleted-list indentation on mobile.
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($placeholder, $button, $title, language, definitionLevel);
$ul.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$li.append($ul);
});
});
// Pulls the form panel flush with the page's own left/right edges, undoing whatever nested-list indent it inherited from sitting inside a deeply-nested definition.
function alignFormToPage($form) {
var $container = $form.closest(".mw-parser-output");
if (!$container.length) {
return;
}
var pad = parseFloat(window.getComputedStyle($container[0]).paddingLeft) || 0;
var containerLeft = $container.offset().left + pad;
var indent = $form.offset().left - containerLeft;
$form.css({
marginLeft: indent > 0 ? -indent : 0,
width: $container.width() + "px"
});
}
// Constructor for the edit form; lastExample/button/title/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, $title, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._$title = $title;
this._currentJederKey = "";
this._jederFieldWidgets = {};
// Set once a template is picked in the Kategorî:Çavkanî mode (see _renderCategoryTemplatePicker); the
// canonical template title (without the "Şablon:" prefix), used as `sablon` in _doSubmit.
this._categoryTemplateName = null;
this._textInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
// Shown under the text box (see boldenPageTitle) when the page title can't be found in the example text
// as typed, so it won't get bolded; purely informational, doesn't block submitting.
this._titleBoldHint = $("<span class='add-example-title-bold-hint'></span>").hide();
this._updateTitleBoldHint = function() {
var text = self._textInput.getValue().trim();
var title = mw.config.get("wgTitle");
var show = !!text && !boldenPageTitle(text, title).bolded;
self._titleBoldHint.toggle(show).html(show ? "Sermade (" + escapeHtmlForBackdrop(title) + ") nehat dîtin; dê neyê <b>stûr</b>kirin." : "");
};
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
self._updateReadyHint();
self._updateTitleBoldHint();
});
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,
}));
}
}
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: CATEGORY_TEMPLATE_KEY,
label: "Ji Kategorî:Çavkanî şablonekê hilbijêre",
}));
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._sourceInput.on("change", function() {
self._updateReadyHint();
});
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. The Citoid fetch button sits right next to it (not in a separate box) -- see _urlRowWidget below.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
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, malûmatan 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));
this._sourceURLInput.on("change", function() {
self._updateReadyHint();
self._autofillVideoTimestamp();
});
// URL input + inline "auto-fill" button as one row (replaces the old separate framed Citoid box's
// button row) -- a plain OO.ui.Widget used purely as a flex-row container (same pattern as
// _loadingImage below: build it empty, then manually append its children's $elements). Disabling
// during submit() still goes through the individual _sourceURLInput/_citoidButton references, not
// through this wrapper.
this._urlRowWidget = new OO.ui.Widget({ classes: ["add-example-url-row"] });
this._urlRowWidget.$element.append(this._sourceURLInput.$element, this._citoidButton.$element);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, {
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;
// Shown right after a successful Citoid fetch (see _fillFromCitoid); hidden again on clear.
this._citoidSuccessMsg = $("<span class='add-example-citoid-success'>✓ Malûmat hatin dagirtin — li jêr kontrol bike.</span>").hide();
// 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("");
self._citoidSuccessMsg.hide();
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
// Plain div (not OO.ui.FieldsetLayout) so the grid CSS class applies directly to the field items.
this._jederFieldsFieldset = $("<div class='add-example-jeder-fields'>");
// "Malûmatên çavkaniyê" header (+ the "Vala bike" clear button) sitting right above the fields grid,
// replacing the old framed "Ji Citoid an bi destan tijî bike:" box -- like this only makes sense once
// a real jêder-* template is active (there's nothing here to show for the "citoid: not yet detected"
// placeholder or for free text), so the whole section toggles together in _setSourceType().
this._jederSection = $("<div class='add-example-jeder-section'>").append(
$("<div class='add-example-jeder-header'>")
.append($("<span class='add-example-jeder-header-label'>Malûmatên çavkaniyê</span>"))
.append(this._citoidClearButton.$element),
this._jederFieldsFieldset
);
this._translationInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
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({ rows: 4 });
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Translîterasyona 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));
// Reactive "ready to submit" hint next to Biweşîne: no text yet, text but no source (still submittable
// as a bare {{nimûne}}), or fully ready -- kept in sync by _updateReadyHint(), wired to every field below.
this._readyHint = $("<span class='add-example-ready-hint'></span>").text("Metna nimûneyê lazim e.");
// True while a Citoid-eligible URL/DOI/ISBN is typed in but not yet fetched (or fetched then edited away) and no jêder field has been filled by hand -- the "looks done but isn't" trap this exists to catch. Not applicable in free-text mode, where the fetch button isn't even offered.
this._citoidPending = function() {
return self._currentJederKey !== "" &&
self._currentJederKey !== CATEGORY_TEMPLATE_KEY &&
!!self._sourceURLInput.getValue().trim() &&
!self._citoidSuccessMsg.is(":visible") &&
!Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
};
this._updateReadyHint = function() {
if (!self._textInput.getValue()) {
self._readyHint.text("Metna nimûneyê lazim e.");
return;
}
if (self._citoidPending()) {
self._readyHint.text("Pêşî 'Bi otomatîk tijî bike' bitikîne.");
return;
}
var hasSource = self._sourceInput.getValue().trim() || self._sourceURLInput.getValue().trim() ||
Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
self._readyHint.text(hasSource ? "Hazir e." : "Çavkanî nehatiye dayîn.");
};
// Prefills the Dem field from the typed URL's own "t=" (see wikihez.citoid.extractVideoTimestamp) once jêder-vîdeo is active -- never overwrites a value the user already entered by hand.
this._autofillVideoTimestamp = function() {
var demWidget = self._jederFieldWidgets.dem;
if (self._currentJederKey !== "jêder-vîdeo" || !demWidget || demWidget.getValue().trim()) {
return;
}
ensureCitoid().then(function() {
var dem = wikihez.citoid.extractVideoTimestamp(self._sourceURLInput.getValue().trim());
if (dem && !demWidget.getValue().trim()) {
demWidget.setValue(dem);
}
});
};
// framed:false (+ the "destructive" flag for the red text/hover) matches the mockup's borderless
// "Betal bike" -- a plain colored link rather than a boxed button, distinguishing it from Paqij bike.
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
framed: false,
});
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);
// Two-column top section (see "Form redesign for Kurdish example/Nimûne zêde bike.dc.html"): example
// text (+ translation/transliteration for non-ku, right after it, not after the source fields) on the
// left; source-type + link/Citoid on the right. Built as plain <div>s, not an OOUI layout -- OOUI has
// no CSS-grid container -- so .add-example-top-grid in the CSS can lay them out as a real responsive
// 7fr/5fr grid (collapsing to one column on narrow screens).
var $topLeft = $("<div class='add-example-top-col'>").append(textInputLayout.$element, this._titleBoldHint);
if (language !== "ku") {
$topLeft.append(translationInputLayout.$element);
}
if (!pageTitleIsLatin) {
$topLeft.append(transcriptionInputLayout.$element);
}
var $topRight = $("<div class='add-example-top-col'>").append(
sourceTypeLayout.$element,
this._sourceInputLayout.$element,
this._sourceURLInputLayout.$element,
this._citoidSuccessMsg
);
var $topGrid = $("<div class='add-example-top-grid'>").append($topLeft, $topRight);
// 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 (see the FieldLayout replaceWith() there).
this._fieldsLayout = $("<div class='add-example-fieldset'>").append($topGrid, this._jederSection);
// Bottom action row -- order/spacing matches the mockup: Biweşîne (+ spinner + ready hint), a spacer
// pushing the rest right, then Paqij bike (bordered/subtle) and Betal bike (borderless red text, via
// framed:false above). A plain flex <div>, not an OOUI HorizontalLayout, so the raw hint/spacer
// elements can sit alongside the real button widgets (same reasoning as the top grid above).
var $buttonsRow = $("<div class='add-example-main-buttons'>").append(
this._applyButton.$element,
this._loadingImage.$element,
this._readyHint,
$("<span class='add-example-buttons-spacer'></span>"),
this._clearButton.$element,
this._cancelButton.$element
);
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
});
this._frame.$element.append(this._fieldsLayout, $buttonsRow);
// 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");
initManualResize(this._frame.$element);
}
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 fetch button, and the "Malûmatên çavkaniyê" fields section toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateName = null;
var isRealJederKey = jederKey && jederDefs[jederKey];
var isCategoryTemplateKey = jederKey === CATEGORY_TEMPLATE_KEY;
if (isRealJederKey) {
var def = jederDefs[jederKey];
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;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: ["add-example-field-span-" + (field.span || 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
} else if (isCategoryTemplateKey) {
this._renderCategoryTemplatePicker();
}
// "Malûmatên çavkaniyê" header + fields grid: only once a real template is chosen/detected --
// nothing to show yet for the plain "citoid: not yet detected" placeholder or for free text.
this._jederSection.toggle(!!isRealJederKey || isCategoryTemplateKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid fetch button: hidden for free text (nothing there for it to fill in) and for the
// Kategorî:Çavkanî picker (Citoid has no mapping for an arbitrary picked template), shown for
// "citoid" auto-detect and any real jêder-* key. The URL input itself next to it stays visible in
// every OTHER mode -- see the sourceURLInputLayout toggle below for the one exception.
this._citoidButton.toggle(jederKey !== "" && !isCategoryTemplateKey);
// URL field wording: plain "attach a link" phrasing for free text, 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 $oldLayout = this._sourceURLInputLayout.$element;
// Re-wraps the SAME _urlRowWidget (still holding _sourceURLInput + _citoidButton) in a new
// FieldLayout with the new label/help; the widget's $element moves along with it, same as the
// old addItems()/removeItems() swap did for the plain input before this redesign.
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, 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,
});
$oldLayout.replaceWith(this._sourceURLInputLayout.$element);
}
// The URL/Citoid row is normally always visible (see the constructor comment), but Citoid has no
// mapping for an arbitrary Kategorî:Çavkanî template, so it'd just be dead UI in that one mode.
this._sourceURLInputLayout.toggle(!isCategoryTemplateKey);
this._autofillVideoTimestamp();
this._updateReadyHint();
initManualResize(this._jederFieldsFieldset); // covers a freshly-rebuilt "sernav" field (jêder-*) or the category picker's search box (see initManualResize())
},
// Renders the Kategorî:Çavkanî template search box, replacing the static jederDefs grid for this mode;
// once a template is picked, its TemplateData params (or a lone "Rûpel" fallback if it has none) render
// below the search box. Search/filter interaction ported from Wiki/start.js's own "__category__" picker.
_renderCategoryTemplatePicker: function() {
var self = this;
// Full-width grid item (see .add-example-cat-tpl-picker in the CSS) -- without an explicit span this
// lands as a bare 1-column item in the parent's 12-col grid, squeezing everything inside it.
var $wrap = $("<div class='add-example-cat-tpl-picker'>");
// Its own position:relative anchor for $results, kept separate from $wrap (see .add-example-cat-tpl-search-row) so the dropdown always pins under the input, not under however tall $fieldsArea has grown below it.
var $searchRow = $("<div class='add-example-cat-tpl-search-row'>");
var $input = $("<input type='search' autocomplete='off' class='add-example-cat-tpl-input'>")
.attr("placeholder", "Li navê şablonê bigere…");
var $results = $("<ul class='add-example-cat-tpl-results'>").hide();
var $status = $("<span class='add-example-cat-tpl-status'>Şablon tên barkirin…</span>");
var $fieldsArea = $("<div class='add-example-jeder-fields add-example-cat-tpl-fields'>");
function showResults(query) {
var q = query.trim().toLowerCase();
$results.empty();
var list = catSrcTemplates || [];
var matched = q ? list.filter(function(entry) {
return entry.label.toLowerCase().indexOf(q) !== -1;
}) : list;
if (!matched.length) {
$results.hide();
return;
}
matched.slice(0, 50).forEach(function(entry) {
var $li = $("<li>").text(entry.label);
// A redirect entry's label differs from its target -- mark where it actually resolves to.
if (entry.label !== entry.target) {
$li.append($("<span class='add-example-cat-tpl-redirect-arrow'>").text(" → " + entry.target));
}
$li.on("mousedown", function(e) {
e.preventDefault(); // keeps the input's blur (and the results-hiding it triggers) from firing before the click registers
selectTemplate(entry);
});
$results.append($li);
});
$results.show();
}
function selectTemplate(entry) {
$results.hide();
// Left as the plain label (not "label → target") -- putting the arrow in the input's own value
// would get re-used as the search query if the box is focused again to pick something else.
$input.val(entry.label);
self._categoryTemplateName = entry.target;
renderTemplateFields(entry.target);
}
// Builds one text input per TemplateData param of `name`, or a lone "Rûpel" fallback field if it
// has no TemplateData -- see the jêgirtin=/rûpel= example in the feature request this implements.
function renderTemplateFields(name) {
$fieldsArea.empty();
self._jederFieldWidgets = {};
fetchTemplateDataFor(name).then(function(params) {
var filtered = (params || []).filter(function(p) {
return CATEGORY_TEMPLATE_COVERED_PARAMS.indexOf(p.key) === -1;
});
var list = filtered.length ? filtered : [{ key: "rûpel", label: "Rûpel", required: false }];
list.forEach(function(p) {
var widget = new OO.ui.TextInputWidget();
self._jederFieldWidgets[p.key] = widget;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: p.label,
align: "top",
classes: ["add-example-field-span-4"],
});
$fieldsArea.append(layout.$element);
});
self._updateReadyHint();
initManualResize($fieldsArea); // no-op today (these fields are all single-line), future-proofing if a multiline param ever gets added here
});
}
$input.on("input focus", function() {
showResults($(this).val());
});
$input.on("blur", function() {
setTimeout(function() { $results.hide(); }, 200); // lets the mousedown handler above fire first
});
$searchRow.append($input, $results);
$wrap.append($searchRow, $status, $fieldsArea);
this._jederFieldsFieldset.append($wrap);
fetchCatSrcTemplates().then(function() {
$status.text("");
}, function() {
$status.text("Şablon nehatin barkirin.");
});
},
// Fetches data via wikihez.citoid (loaded on demand by ensureCitoid() if needed), picks the matching jêder-* template, and fills its empty fields.
_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);
ensureCitoid().then(function() {
return wikihez.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 : wikihez.citoid.dataToJederFields(targetJederKey, result.raw, query);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
self._citoidSuccessMsg.show();
self._updateReadyHint();
mw.notify("Malûmat ji Citoid hatin barkirin.");
}, function(errorMsg) {
// wikihez.citoid may still be missing here if ensureCitoid() itself failed to load the script (e.g. network error) -- fall back to the bare error notice in that case.
if (!window.wikihez || !window.wikihez.citoid) {
mw.notify("Nekarî citoid-helper.js bar bike.");
return;
}
// Citoid can't fetch some sites at all (e.g. x.com/twitter.com) -- fall back to jêder-websîte with a website name guessed from the URL itself, rather than just a bare error.
var fallbackSite = wikihez.citoid.websiteNameForUrl(query);
if (fallbackSite) {
if (self._currentJederKey !== "jêder-websîte") {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData("jêder-websîte");
if (item) {
menu.chooseItem(item); // this calls _setSourceType("jêder-websîte") automatically
}
}
var websiteWidget = self._jederFieldWidgets["websîte"];
if (websiteWidget && !websiteWidget.getValue()) {
websiteWidget.setValue(fallbackSite);
}
mw.notify("Citoid nikare vê malperê bixwîne; şablona Websîte hate hilbijartin, ji kerema xwe mayî bi destan tijî bike.");
return;
}
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî malûmatan 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. The title text takes
// the button's place while open (see the "Form redesign for Kurdish example" mockup); the button
// itself stays put ready to reappear once the form is cancelled/closed.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._$title.toggle(visible);
this._frame.toggle(visible);
if (visible) {
alignFormToPage(this._frame.$element);
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._citoidSuccessMsg.hide();
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Warns before submitting if a Citoid URL/DOI/ISBN was typed but never successfully fetched, then defers
// to _doSubmit. The title-not-boldable case (see boldenPageTitle) is shown inline under the text box
// instead (_titleBoldHint) rather than blocking submission here.
submit: function() {
if (this._citoidPending() && !window.confirm("Te lînk, DOI an ISBN nivîsand lê hîn jê malûmat nehatine standin. Bêyî wan berdewam bikî?")) {
return;
}
this._doSubmit();
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
_doSubmit: 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; if a Kategorî:Çavkanî template was
// picked instead, collect its TemplateData-driven fields the same way, plus wekjêgirtin=1 for any
// "Ç:"-prefixed template (a quotation-equivalent, not a usage example -- see Modul:quote).
var jederParams = [];
var usingCategoryTemplate = this._currentJederKey === CATEGORY_TEMPLATE_KEY && !!this._categoryTemplateName;
if (usingCategoryTemplate) {
Object.keys(self._jederFieldWidgets).forEach(function(key) {
var value = self._jederFieldWidgets[key].getValue().trim();
if (value) {
jederParams.push(key + "=" + value);
}
});
if (/^Ç:/.test(self._categoryTemplateName)) {
jederParams.push("wekjêgirtin=1");
}
} else 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);
}
});
}
// A Kategorî:Çavkanî template is used as soon as it's picked, even with every field left blank
// (still submittable as a bare jêgirtin=); a jêder-* type only counts once a field is actually filled.
var usingJederTemplate = usingCategoryTemplate || (this._currentJederKey && jederParams.length > 0);
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-*/Kategorî:Çavkanî template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = usingCategoryTemplate ? this._categoryTemplateName : 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 (see boldenPageTitle), then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(boldenPageTitle(text, title).text);
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
if (translation) {
// Kategorî:Çavkanî templates route through Modul:quote directly and take its "t=" param name;
// the jêder-* templates use "tercime=" instead (see the jêder-* template docs).
code += "|" + (usingCategoryTemplate ? "t" : "tercime") + "=" + translation;
}
}
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
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)) {
// Match only the specific numbered section the button was clicked in (e.g. "Navdêr 2",
// not just the first "===Navdêr...===" heading found) -- both sides are "" when the
// section has no number at all (a single unnumbered "===Navdêr===").
var matchedSectionNumValue = matchedSectionNum ? parseInt(matchedSectionNum, 10) : "";
if (matchedSectionNumValue === sectionNum) {
// 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(code, result) {
error("Nekarî rûpelê xilas bike: " + apiErrorMessage(code, result));
});
}, function(code, result) {
error("Nekarî naveroka rûpelê bistîne: " + apiErrorMessage(code, result));
});
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>
56sfb6wrzeex0t6gwb1nrz6rd8f1o7m
6342726
6342725
2026-08-26T17:50:15Z
Wikihez
7344
6342726
javascript
text/javascript
// <nowiki>
// dependencies (declared in MediaWiki:Gadgets-definition): oojs, oojs-ui, ext.gadget.citoid-helper (wikihez.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 = "2.0";
// 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 normally lives in MediaWiki:Gadget-citoid-helper.js as a registered gadget dependency; not
// currently editable, so ensureCitoid() (below) loads it from a user testing page on demand instead.
// Sentinel _currentJederKey value for the "pick a template from Kategorî:Çavkanî" dropdown option -- not a
// real jederDefs key, same convention as Wiki/start.js's own "__category__" picker.
var CATEGORY_TEMPLATE_KEY = "__category__";
// TemplateData params already covered by the form's own top-level text/translation/transliteration boxes --
// skipped when building a Kategorî:Çavkanî template's dynamic fields (see renderTemplateFields) so they
// don't get a redundant duplicate inputbox.
var CATEGORY_TEMPLATE_COVERED_PARAMS = ["jêgirtin", "jg", "t", "tr"];
// "span" is the field's width in the 12-column grid the fields render in (see .add-example-jeder-fields
// in the CSS and _setSourceType below) -- field ORDER here is also the grid's reading order.
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "cih", "label": "Cih", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "sala-weşandinê", "label": "Sala weşandinê", "span": 2 },
{ "key": "çap", "label": "Çap", "span": 1 },
{ "key": "rûpel", "label": "Rûpel", "span": 1 },
{ "key": "isbn", "label": "ISBN", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "kovar", "label": "Kovar", "span": 4 },
{ "key": "cild", "label": "Cild", "span": 2 },
{ "key": "hejmar", "label": "Hejmar", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "rûpel", "label": "Rûpel", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 4 },
{ "key": "terciman", "label": "Terciman", "span": 4 },
{ "key": "websîte", "label": "Websîte", "span": 4 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "url", "label": "URL", "span": 5 },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "span": 5 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "tarîx", "label": "Tarîx", "span": 1 }
]
},
"jêder-vîdeo": {
"label": "Vîdeo",
"fields": [
{ "key": "hunermend", "label": "Hunermend", "span": 6 },
{ "key": "platform", "label": "Platform", "span": 6 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "tarîx", "label": "Tarîx", "span": 3 },
{ "key": "dem", "label": "Dem", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
}
};
// Field key -> {span, multiline}, from the FIRST jêder-* def (in jederDefs's own declaration order above)
// that defines it -- e.g. "sernav" ends up span 12 + multiline everywhere. Used to size a Kategorî:Çavkanî
// template's dynamic TemplateData fields the same way when a param key matches a known jêder-* field key,
// since most of these templates share the same handful of bibliographic param names (see
// _renderCategoryTemplatePicker's renderTemplateFields).
var JEDER_FIELD_SIZE_BY_KEY = {};
Object.keys(jederDefs).forEach(function(jederKey) {
jederDefs[jederKey].fields.forEach(function(field) {
if (!JEDER_FIELD_SIZE_BY_KEY[field.key]) {
JEDER_FIELD_SIZE_BY_KEY[field.key] = { span: field.span || 4, multiline: !!field.multiline };
}
});
});
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;
}
// Escapes str for safe interpolation into a RegExp -- page titles can contain regex metacharacters
// (parentheses for disambiguation, periods in abbreviation entries, etc.).
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
// Wraps the first occurrence of the page title (+ an optional glued-on suffix, e.g. a plural "-an") in the
// example text with wikitext bold markup, so the headword stands out in the rendered example. Skips it if
// the title is already bolded by hand, to avoid turning "'''reh'''" into "'''''reh'''''" (bold+italic).
// Returns {text, bolded}; bolded is false if the title wasn't found anywhere and nothing changed.
function boldenPageTitle(text, title) {
var escapedTitle = escapeRegExp(title);
var suffixPattern = "([^\\s.,;?!()']+)?";
if (new RegExp("'''" + escapedTitle + suffixPattern + "'''", "i").test(text)) {
return { text: text, bolded: true };
}
var bolded = text.replace(new RegExp("(" + escapedTitle + suffixPattern + ")", "ig"), "'''$1'''");
return { text: bolded, bolded: bolded !== text };
}
// Extracts a human-readable message from an mw.Api rejection (code, result).
function apiErrorMessage(code, result) {
return (result && result.error && result.error.info) || (typeof code === "string" ? code : "Xeletiyeke nenas");
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
// Custom drag-to-resize grip for textareas, ported from Wiki/start.js's wiktkuMakeManualResizable() -- Safari
// has no native corner resize handle on textareas at all, this is the fix start.js already uses for that.
// Inserted as a SIBLING within the textarea's existing OOUI wrapper (same reasoning as
// ensureLinebreakBackdrop above: wrapping the textarea in a NEW div risks disturbing OOUI's own layout),
// not by wrapping it in a new div like start.js's own version does. Unlike start.js's version, this doesn't
// persist the chosen height across page loads (start.js keys that off the textarea's own CSS class, but
// every textarea here is a plain OOUI MultilineTextInputWidget with no distinguishing class, so a direct
// port would have every field here share one save slot and overwrite each other's heights).
function makeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.data("addExampleResizableDone")) {
return;
}
textarea.data("addExampleResizableDone", true);
textarea.css("resize", "none"); // replaced by the custom grip below
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var grip = $("<div class='add-example-resize-grip'></div>");
textarea.after(grip);
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) { /* already released */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
}
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 makeManualResizable to every textarea in `context` (itself or its descendants).
function initManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function() {
makeManualResizable(this);
});
}
var api = new mw.Api();
// Loads wikihez.citoid if it isn't already loaded, from Wikihez's testing page (MediaWiki: isn't editable
// right now) -- self-contained rather than calling wikihez.citoidHelper.ensure() directly, since that
// function only exists once citoid-helper.js has already run once, which isn't guaranteed here.
function ensureCitoid() {
if (window.wikihez && window.wikihez.citoid) {
return $.Deferred().resolve().promise();
}
var url = mw.util.getUrl("Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js", {
action: "raw",
ctype: "text/javascript"
});
return mw.loader.getScript(mw.config.get("wgServer") + url);
}
// Kategorî:Çavkanî's template members plus their redirects (each redirect as its own searchable entry
// pointing at the same canonical target, so a template is findable by any of its names). Ported from
// Wiki/start.js's fetchCatSrcTemplates(), extended with prop=redirects. Cached after first fetch.
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) {
return catSrcTemplatesPromise;
}
catSrcTemplatesPromise = api.get({
action: "query",
generator: "categorymembers",
gcmtitle: "Kategorî:Çavkanî",
gcmnamespace: 10,
gcmlimit: "max",
prop: "redirects",
rdnamespace: 10,
rdlimit: "max",
formatversion: 2,
}).then(function(data) {
var pages = (data.query && data.query.pages) || [];
var list = [];
pages.forEach(function(page) {
var target = page.title.replace(/^[^:]+:/, "");
list.push({ label: target, target: target });
(page.redirects || []).forEach(function(redirect) {
list.push({ label: redirect.title.replace(/^[^:]+:/, ""), target: target });
});
});
list.sort(function(a, b) {
return a.label.localeCompare(b.label, mw.config.get("wgUserLanguage"));
});
catSrcTemplates = list;
return list;
}, function() {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
// TemplateData params for one template (name without the "Şablon:" prefix); redirects:1 so this also
// resolves if `name` is itself a redirect. Resolves to [] if the template has no TemplateData. Cached.
var tplDataCache = {};
function fetchTemplateDataFor(name) {
if (Object.prototype.hasOwnProperty.call(tplDataCache, name)) {
return $.Deferred().resolve(tplDataCache[name]).promise();
}
return api.get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2,
}).then(function(data) {
var pages = (data && data.pages) || {};
var first = null;
Object.keys(pages).forEach(function(id) {
if (!first) {
first = pages[id];
}
});
var params = [];
if (first && first.params) {
Object.keys(first.params).forEach(function(key) {
var p = first.params[key];
var label = p && p.label;
if (label && typeof label === "object") {
var userLang = mw.config.get("wgUserLanguage");
label = label[userLang] || label.en || label[Object.keys(label)[0]];
}
params.push({ key: key, label: label || key, required: !!(p && p.required) });
});
}
tplDataCache[name] = params;
return params;
}, function() {
tplDataCache[name] = [];
return [];
});
}
// Language display name, read from the matching section's .besazimani link text.
function languageNameForCode(code) {
var $mark = $(".besazimani[id='" + code + "']").first();
return $mark.length ? $mark.text().trim() : null;
}
// Whether the page title itself (accented Kurdish Latin letters included) is written in Latin script.
var pageTitleIsLatin = !/[^\x00-\x7FÀ-ɏḀ-ỿ‘’]/.test(mw.config.get("wgTitle") || "");
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex containers used directly by Şablon:nimûne; .citation-whole = Modul:quote's own wrapper, now used by jêder-* templates (Modul:quote nests .h-quotation inside .citation-whole > dl > dd instead of putting it directly under the <li>, so it needs its own entry here).
// Requiring "ul > li >" is what makes this only match an example that's grouped into its own <ul> -- a
// {{nimûne}} (or its "mk" redirect) with no jêder-family citation alongside it in the same definition
// renders straight under the definition's own content instead, with no such group; also reused below to
// tell whether the second pass still needs to handle a given definition.
var EXISTING_EXAMPLE_SELECTOR = "ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation, ul > li > .citation-whole";
$(EXISTING_EXAMPLE_SELECTOR).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.
// A jêder-* citation with no jêgirtin= (quotation text) yet renders no h-quotation/e-quotation at all
// (see get_quote() in Modul quote.lua) -- exactly the "bare citation" case this button exists to fill
// in, so this can't just crash: without the guard, [0] is undefined here and ".lang" throws, which
// (since $.each() has no try/catch) silently kills the button for every remaining match on the page.
var $langEl = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0];
if (!$langEl) {
console.warn("Gadget-wikt.add-examples: nikaribe zimanê vê nimûneyê bibîne, valakirî hate derbaskirin.", $item);
return;
}
var language = $langEl.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. $group is the citation-group <ul> itself (parent of $item);
// the form panel is inserted AFTER it (see click handler below), not inside it, so the panel isn't
// squeezed into that <ul>'s narrow hanging-indent width on mobile -- only the button/title stays
// there, matching the "Form redesign for Kurdish example" mockup (title inside the bullet list,
// full-width panel below it).
var $group = $item.parent();
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($item, $button, $title, language, definitionLevel);
$group.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem);
}
});
// Second pass: some definitions have no example the pass above could react to at all -- either genuinely
// zero examples, or one rendered via {{nimûne}} (or its "mk" redirect) with no jêder-family citation next
// to it, which (see the comment on EXISTING_EXAMPLE_SELECTOR above) renders with no "ul > li" group to
// match. This walks every recognized POS section's own definitions list directly instead of reacting to
// an existing example, and reads the language off the language section's own <h2> rather than off an
// example -- so it doesn't need one to already exist. Everything else (Form, submit()) is reused as-is.
// MediaWiki wraps each heading in a "mw-heading2"/"mw-heading3"/... div in current skin output; falls
// back to the bare heading element for older/other output that doesn't wrap it.
function headingOuter($h) {
var $wrap = $h.closest(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6");
return $wrap.length ? $wrap : $h;
}
// Section's language code: nearest preceding .besazimani[id] by document order (not sibling-walking, which mobile's per-section wrapping breaks).
function languageCodeForOl($ol) {
var $marks = $(".besazimani[id]").add($ol);
var ol = $ol.get(0);
var idx = $marks.index(ol);
for (var i = idx - 1; i >= 0; i--) {
var el = $marks.get(i);
if (el.id) {
return el.id;
}
}
return null;
}
// A <li> whose OWN direct content (not counting a nested <ol>) is wrapped in ".form-of-definition" is
// MediaWiki's "form of" template system marking that content as generated by a template -- e.g.
// {{ku-tewîna-nav}}'s "Formeke heval:" wrapper together with its "rewşa îzafeyî"/"rewşa çemandî"/...
// readings underneath. That whole nested block is normally the ENTIRE expansion of a single "#"
// wikitext line, with no separate "##" line behind any individual reading -- recursing into it would
// hand out one button per reading, each trying to match a "##" line that doesn't exist, and submit()
// would fail to find where to insert every one of them. A <li> without that class whose nested <ol>
// holds real hand-typed prose (e.g. sîno-koreyî/Navdêr's two genuinely separate "##" sub-senses) has
// no such problem -- those really are individually addressable wikitext lines.
function isFormOfWrapper($li) {
return $li.children(".form-of-definition").length > 0;
}
// Recurse into a <li>'s own nested <ol> UNLESS it's a form-of-template wrapper (see isFormOfWrapper) --
// a wrapper <li> with its own nested <ol> isn't itself a sense with content of its own, only its real
// (non-generated) leaves are.
function eachLeafDefinition($ol, fn) {
$ol.children("li").each(function() {
var $li = $(this);
var $childOl = $li.children("ol");
if ($childOl.length && !isFormOfWrapper($li)) {
$childOl.each(function() {
eachLeafDefinition($(this), fn);
});
} else {
fn($li);
}
});
}
$("h3").each(function() {
var sectionType = $(this).text().trim();
if (!sectionNames[sectionType]) {
return; // not a recognized word-sense section (Bilêvkirin, Etîmolojî, Çavkanî, ...)
}
var h3Id = $(this).attr("id");
// Forward-walk siblings to the definitions <ol>, skipping over a declension table/TemplateStyles/the
// headword line; stop (nothing to attach to in this section) if another heading comes first instead.
var $ol = null;
for (var $cursor = headingOuter($(this)).next(); $cursor.length; $cursor = $cursor.next()) {
if ($cursor.is("ol")) {
$ol = $cursor;
break;
}
if ($cursor.is(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6, h2, h3, h4, h5, h6")) {
break;
}
}
if (!$ol) {
return;
}
var language = languageCodeForOl($ol);
if (!language) {
console.warn("Gadget-wikt.add-examples: nikaribe koda zimanê vê beşê bibîne.", $ol);
return;
}
eachLeafDefinition($ol, function($li) {
// The pass above already added a button here (or will) -- an actual example already wrapped in
// its own "ul > li" group.
if ($li.find(EXISTING_EXAMPLE_SELECTOR).length) {
return;
}
var definitionLevel = [];
var $definitionItem = $li;
while ($definitionItem.prop("tagName") === "LI") {
// 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);
$definitionItem = $definitionItem.parent().parent();
}
definitionLevel.splice(0, 0, h3Id);
// A hidden, empty placeholder <li> so submit()'s existing "_$lastExample.after(newLi)" insertion
// (unchanged, same as the pass above) lands the first submitted example right before the button
// -- matching the existing convention of new examples going in before the button, not after it.
var $placeholder = $("<li style='display:none'></li>");
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
// A "ul" nested directly under a definition "li" starts hidden here (see the HQToggle-controlled
// jêder-citation-group "ul", which only ever renders with an explicit "style="display: block""
// set on it) -- this one has no HQToggle to unhide it, so it needs the same explicit override or
// the button (and the placeholder above) never becomes visible at all.
var $ul = $("<ul>").css("display", "block").append($placeholder).append($formItem);
// The form panel is inserted AFTER $ul (not inside it) once opened -- same reasoning as the first
// pass above: keeps the full-width panel out of the tight bulleted-list indentation on mobile.
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($placeholder, $button, $title, language, definitionLevel);
$ul.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$li.append($ul);
});
});
// Pulls the form panel flush with the page's own left/right edges, undoing whatever nested-list indent it inherited from sitting inside a deeply-nested definition.
function alignFormToPage($form) {
var $container = $form.closest(".mw-parser-output");
if (!$container.length) {
return;
}
var pad = parseFloat(window.getComputedStyle($container[0]).paddingLeft) || 0;
var containerLeft = $container.offset().left + pad;
var indent = $form.offset().left - containerLeft;
$form.css({
marginLeft: indent > 0 ? -indent : 0,
width: $container.width() + "px"
});
}
// Constructor for the edit form; lastExample/button/title/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, $title, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._$title = $title;
this._currentJederKey = "";
this._jederFieldWidgets = {};
// Set once a template is picked in the Kategorî:Çavkanî mode (see _renderCategoryTemplatePicker); the
// canonical template title (without the "Şablon:" prefix), used as `sablon` in _doSubmit.
this._categoryTemplateName = null;
this._textInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
// Shown under the text box (see boldenPageTitle) when the page title can't be found in the example text
// as typed, so it won't get bolded; purely informational, doesn't block submitting.
this._titleBoldHint = $("<span class='add-example-title-bold-hint'></span>").hide();
this._updateTitleBoldHint = function() {
var text = self._textInput.getValue().trim();
var title = mw.config.get("wgTitle");
var show = !!text && !boldenPageTitle(text, title).bolded;
self._titleBoldHint.toggle(show).html(show ? "Sermade (" + escapeHtmlForBackdrop(title) + ") nehat dîtin; dê neyê <b>stûr</b>kirin." : "");
};
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
self._updateReadyHint();
self._updateTitleBoldHint();
});
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,
}));
}
}
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: CATEGORY_TEMPLATE_KEY,
label: "Ji Kategorî:Çavkanî şablonekê hilbijêre",
}));
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._sourceInput.on("change", function() {
self._updateReadyHint();
});
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. The Citoid fetch button sits right next to it (not in a separate box) -- see _urlRowWidget below.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
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, malûmatan 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));
this._sourceURLInput.on("change", function() {
self._updateReadyHint();
self._autofillVideoTimestamp();
});
// URL input + inline "auto-fill" button as one row (replaces the old separate framed Citoid box's
// button row) -- a plain OO.ui.Widget used purely as a flex-row container (same pattern as
// _loadingImage below: build it empty, then manually append its children's $elements). Disabling
// during submit() still goes through the individual _sourceURLInput/_citoidButton references, not
// through this wrapper.
this._urlRowWidget = new OO.ui.Widget({ classes: ["add-example-url-row"] });
this._urlRowWidget.$element.append(this._sourceURLInput.$element, this._citoidButton.$element);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, {
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;
// Shown right after a successful Citoid fetch (see _fillFromCitoid); hidden again on clear.
this._citoidSuccessMsg = $("<span class='add-example-citoid-success'>✓ Malûmat hatin dagirtin — li jêr kontrol bike.</span>").hide();
// 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("");
self._citoidSuccessMsg.hide();
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
// Plain div (not OO.ui.FieldsetLayout) so the grid CSS class applies directly to the field items.
this._jederFieldsFieldset = $("<div class='add-example-jeder-fields'>");
// "Malûmatên çavkaniyê" header (+ the "Vala bike" clear button) sitting right above the fields grid,
// replacing the old framed "Ji Citoid an bi destan tijî bike:" box -- like this only makes sense once
// a real jêder-* template is active (there's nothing here to show for the "citoid: not yet detected"
// placeholder or for free text), so the whole section toggles together in _setSourceType().
this._jederSection = $("<div class='add-example-jeder-section'>").append(
$("<div class='add-example-jeder-header'>")
.append($("<span class='add-example-jeder-header-label'>Malûmatên çavkaniyê</span>"))
.append(this._citoidClearButton.$element),
this._jederFieldsFieldset
);
this._translationInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
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({ rows: 4 });
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Translîterasyona 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));
// Reactive "ready to submit" hint next to Biweşîne: no text yet, text but no source (still submittable
// as a bare {{nimûne}}), or fully ready -- kept in sync by _updateReadyHint(), wired to every field below.
this._readyHint = $("<span class='add-example-ready-hint'></span>").text("Metna nimûneyê lazim e.");
// True while a Citoid-eligible URL/DOI/ISBN is typed in but not yet fetched (or fetched then edited away) and no jêder field has been filled by hand -- the "looks done but isn't" trap this exists to catch. Not applicable in free-text mode, where the fetch button isn't even offered.
this._citoidPending = function() {
return self._currentJederKey !== "" &&
self._currentJederKey !== CATEGORY_TEMPLATE_KEY &&
!!self._sourceURLInput.getValue().trim() &&
!self._citoidSuccessMsg.is(":visible") &&
!Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
};
this._updateReadyHint = function() {
if (!self._textInput.getValue()) {
self._readyHint.text("Metna nimûneyê lazim e.");
return;
}
if (self._citoidPending()) {
self._readyHint.text("Pêşî 'Bi otomatîk tijî bike' bitikîne.");
return;
}
var hasSource = self._sourceInput.getValue().trim() || self._sourceURLInput.getValue().trim() ||
Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
self._readyHint.text(hasSource ? "Hazir e." : "Çavkanî nehatiye dayîn.");
};
// Prefills the Dem field from the typed URL's own "t=" (see wikihez.citoid.extractVideoTimestamp) once jêder-vîdeo is active -- never overwrites a value the user already entered by hand.
this._autofillVideoTimestamp = function() {
var demWidget = self._jederFieldWidgets.dem;
if (self._currentJederKey !== "jêder-vîdeo" || !demWidget || demWidget.getValue().trim()) {
return;
}
ensureCitoid().then(function() {
var dem = wikihez.citoid.extractVideoTimestamp(self._sourceURLInput.getValue().trim());
if (dem && !demWidget.getValue().trim()) {
demWidget.setValue(dem);
}
});
};
// framed:false (+ the "destructive" flag for the red text/hover) matches the mockup's borderless
// "Betal bike" -- a plain colored link rather than a boxed button, distinguishing it from Paqij bike.
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
framed: false,
});
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);
// Two-column top section (see "Form redesign for Kurdish example/Nimûne zêde bike.dc.html"): example
// text (+ translation/transliteration for non-ku, right after it, not after the source fields) on the
// left; source-type + link/Citoid on the right. Built as plain <div>s, not an OOUI layout -- OOUI has
// no CSS-grid container -- so .add-example-top-grid in the CSS can lay them out as a real responsive
// 7fr/5fr grid (collapsing to one column on narrow screens).
var $topLeft = $("<div class='add-example-top-col'>").append(textInputLayout.$element, this._titleBoldHint);
if (language !== "ku") {
$topLeft.append(translationInputLayout.$element);
}
if (!pageTitleIsLatin) {
$topLeft.append(transcriptionInputLayout.$element);
}
var $topRight = $("<div class='add-example-top-col'>").append(
sourceTypeLayout.$element,
this._sourceInputLayout.$element,
this._sourceURLInputLayout.$element,
this._citoidSuccessMsg
);
var $topGrid = $("<div class='add-example-top-grid'>").append($topLeft, $topRight);
// 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 (see the FieldLayout replaceWith() there).
this._fieldsLayout = $("<div class='add-example-fieldset'>").append($topGrid, this._jederSection);
// Bottom action row -- order/spacing matches the mockup: Biweşîne (+ spinner + ready hint), a spacer
// pushing the rest right, then Paqij bike (bordered/subtle) and Betal bike (borderless red text, via
// framed:false above). A plain flex <div>, not an OOUI HorizontalLayout, so the raw hint/spacer
// elements can sit alongside the real button widgets (same reasoning as the top grid above).
var $buttonsRow = $("<div class='add-example-main-buttons'>").append(
this._applyButton.$element,
this._loadingImage.$element,
this._readyHint,
$("<span class='add-example-buttons-spacer'></span>"),
this._clearButton.$element,
this._cancelButton.$element
);
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
});
this._frame.$element.append(this._fieldsLayout, $buttonsRow);
// 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");
initManualResize(this._frame.$element);
}
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 fetch button, and the "Malûmatên çavkaniyê" fields section toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateName = null;
var isRealJederKey = jederKey && jederDefs[jederKey];
var isCategoryTemplateKey = jederKey === CATEGORY_TEMPLATE_KEY;
if (isRealJederKey) {
var def = jederDefs[jederKey];
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;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: ["add-example-field-span-" + (field.span || 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
} else if (isCategoryTemplateKey) {
this._renderCategoryTemplatePicker();
}
// "Malûmatên çavkaniyê" header + fields grid: only once a real template is chosen/detected --
// nothing to show yet for the plain "citoid: not yet detected" placeholder or for free text.
this._jederSection.toggle(!!isRealJederKey || isCategoryTemplateKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid fetch button: hidden for free text (nothing there for it to fill in) and for the
// Kategorî:Çavkanî picker (Citoid has no mapping for an arbitrary picked template), shown for
// "citoid" auto-detect and any real jêder-* key. The URL input itself next to it stays visible in
// every OTHER mode -- see the sourceURLInputLayout toggle below for the one exception.
this._citoidButton.toggle(jederKey !== "" && !isCategoryTemplateKey);
// URL field wording: plain "attach a link" phrasing for free text, 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 $oldLayout = this._sourceURLInputLayout.$element;
// Re-wraps the SAME _urlRowWidget (still holding _sourceURLInput + _citoidButton) in a new
// FieldLayout with the new label/help; the widget's $element moves along with it, same as the
// old addItems()/removeItems() swap did for the plain input before this redesign.
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, 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,
});
$oldLayout.replaceWith(this._sourceURLInputLayout.$element);
}
// The URL/Citoid row is normally always visible (see the constructor comment), but Citoid has no
// mapping for an arbitrary Kategorî:Çavkanî template, so it'd just be dead UI in that one mode.
this._sourceURLInputLayout.toggle(!isCategoryTemplateKey);
this._autofillVideoTimestamp();
this._updateReadyHint();
initManualResize(this._jederFieldsFieldset); // covers a freshly-rebuilt "sernav" field (jêder-*) or the category picker's search box (see initManualResize())
},
// Renders the Kategorî:Çavkanî template search box, replacing the static jederDefs grid for this mode;
// once a template is picked, its TemplateData params (or a lone "Rûpel" fallback if it has none) render
// below the search box. Search/filter interaction ported from Wiki/start.js's own "__category__" picker.
_renderCategoryTemplatePicker: function() {
var self = this;
// Full-width grid item (see .add-example-cat-tpl-picker in the CSS) -- without an explicit span this
// lands as a bare 1-column item in the parent's 12-col grid, squeezing everything inside it.
var $wrap = $("<div class='add-example-cat-tpl-picker'>");
// Its own position:relative anchor for $results, kept separate from $wrap (see .add-example-cat-tpl-search-row) so the dropdown always pins under the input, not under however tall $fieldsArea has grown below it.
var $searchRow = $("<div class='add-example-cat-tpl-search-row'>");
var $input = $("<input type='search' autocomplete='off' class='add-example-cat-tpl-input'>")
.attr("placeholder", "Li navê şablonê bigere…");
var $results = $("<ul class='add-example-cat-tpl-results'>").hide();
var $status = $("<span class='add-example-cat-tpl-status'>Şablon tên barkirin…</span>");
var $fieldsArea = $("<div class='add-example-jeder-fields add-example-cat-tpl-fields'>");
function showResults(query) {
var q = query.trim().toLowerCase();
$results.empty();
var list = catSrcTemplates || [];
var matched = q ? list.filter(function(entry) {
return entry.label.toLowerCase().indexOf(q) !== -1;
}) : list;
if (!matched.length) {
$results.hide();
return;
}
matched.slice(0, 50).forEach(function(entry) {
var $li = $("<li>").text(entry.label);
// A redirect entry's label differs from its target -- mark where it actually resolves to.
if (entry.label !== entry.target) {
$li.append($("<span class='add-example-cat-tpl-redirect-arrow'>").text(" → " + entry.target));
}
$li.on("mousedown", function(e) {
e.preventDefault(); // keeps the input's blur (and the results-hiding it triggers) from firing before the click registers
selectTemplate(entry);
});
$results.append($li);
});
$results.show();
}
function selectTemplate(entry) {
$results.hide();
// Left as the plain label (not "label → target") -- putting the arrow in the input's own value
// would get re-used as the search query if the box is focused again to pick something else.
$input.val(entry.label);
self._categoryTemplateName = entry.target;
renderTemplateFields(entry.target);
}
// Builds one text input per TemplateData param of `name`, or a lone "Rûpel" fallback field if it
// has no TemplateData -- see the jêgirtin=/rûpel= example in the feature request this implements.
function renderTemplateFields(name) {
$fieldsArea.empty();
self._jederFieldWidgets = {};
fetchTemplateDataFor(name).then(function(params) {
var filtered = (params || []).filter(function(p) {
return CATEGORY_TEMPLATE_COVERED_PARAMS.indexOf(p.key) === -1;
});
var list = filtered.length ? filtered : [{ key: "rûpel", label: "Rûpel", required: false }];
list.forEach(function(p) {
// Reuse the jêder-* field's own width/multiline when this param's key matches one (see
// JEDER_FIELD_SIZE_BY_KEY) -- most Kategorî:Çavkanî templates share the same bibliographic
// param names, so e.g. "sernav" ends up full-width+multiline here too, not a generic box.
var sizeHint = JEDER_FIELD_SIZE_BY_KEY[p.key];
var widget = (sizeHint && sizeHint.multiline)
? new OO.ui.MultilineTextInputWidget({ rows: 2, autosize: false })
: new OO.ui.TextInputWidget();
self._jederFieldWidgets[p.key] = widget;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: p.label,
align: "top",
classes: ["add-example-field-span-" + (sizeHint ? sizeHint.span : 4)],
});
$fieldsArea.append(layout.$element);
});
self._updateReadyHint();
initManualResize($fieldsArea); // matters now that a matched key like "sernav" can render multiline
});
}
$input.on("input focus", function() {
showResults($(this).val());
});
$input.on("blur", function() {
setTimeout(function() { $results.hide(); }, 200); // lets the mousedown handler above fire first
});
$searchRow.append($input, $results);
$wrap.append($searchRow, $status, $fieldsArea);
this._jederFieldsFieldset.append($wrap);
fetchCatSrcTemplates().then(function() {
$status.text("");
}, function() {
$status.text("Şablon nehatin barkirin.");
});
},
// Fetches data via wikihez.citoid (loaded on demand by ensureCitoid() if needed), picks the matching jêder-* template, and fills its empty fields.
_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);
ensureCitoid().then(function() {
return wikihez.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 : wikihez.citoid.dataToJederFields(targetJederKey, result.raw, query);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
self._citoidSuccessMsg.show();
self._updateReadyHint();
mw.notify("Malûmat ji Citoid hatin barkirin.");
}, function(errorMsg) {
// wikihez.citoid may still be missing here if ensureCitoid() itself failed to load the script (e.g. network error) -- fall back to the bare error notice in that case.
if (!window.wikihez || !window.wikihez.citoid) {
mw.notify("Nekarî citoid-helper.js bar bike.");
return;
}
// Citoid can't fetch some sites at all (e.g. x.com/twitter.com) -- fall back to jêder-websîte with a website name guessed from the URL itself, rather than just a bare error.
var fallbackSite = wikihez.citoid.websiteNameForUrl(query);
if (fallbackSite) {
if (self._currentJederKey !== "jêder-websîte") {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData("jêder-websîte");
if (item) {
menu.chooseItem(item); // this calls _setSourceType("jêder-websîte") automatically
}
}
var websiteWidget = self._jederFieldWidgets["websîte"];
if (websiteWidget && !websiteWidget.getValue()) {
websiteWidget.setValue(fallbackSite);
}
mw.notify("Citoid nikare vê malperê bixwîne; şablona Websîte hate hilbijartin, ji kerema xwe mayî bi destan tijî bike.");
return;
}
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî malûmatan 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. The title text takes
// the button's place while open (see the "Form redesign for Kurdish example" mockup); the button
// itself stays put ready to reappear once the form is cancelled/closed.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._$title.toggle(visible);
this._frame.toggle(visible);
if (visible) {
alignFormToPage(this._frame.$element);
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._citoidSuccessMsg.hide();
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Warns before submitting if a Citoid URL/DOI/ISBN was typed but never successfully fetched, then defers
// to _doSubmit. The title-not-boldable case (see boldenPageTitle) is shown inline under the text box
// instead (_titleBoldHint) rather than blocking submission here.
submit: function() {
if (this._citoidPending() && !window.confirm("Te lînk, DOI an ISBN nivîsand lê hîn jê malûmat nehatine standin. Bêyî wan berdewam bikî?")) {
return;
}
this._doSubmit();
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
_doSubmit: 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; if a Kategorî:Çavkanî template was
// picked instead, collect its TemplateData-driven fields the same way, plus wekjêgirtin=1 for any
// "Ç:"-prefixed template (a quotation-equivalent, not a usage example -- see Modul:quote).
var jederParams = [];
var usingCategoryTemplate = this._currentJederKey === CATEGORY_TEMPLATE_KEY && !!this._categoryTemplateName;
if (usingCategoryTemplate) {
Object.keys(self._jederFieldWidgets).forEach(function(key) {
var value = self._jederFieldWidgets[key].getValue().trim();
if (value) {
jederParams.push(key + "=" + value);
}
});
if (/^Ç:/.test(self._categoryTemplateName)) {
jederParams.push("wekjêgirtin=1");
}
} else 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);
}
});
}
// A Kategorî:Çavkanî template is used as soon as it's picked, even with every field left blank
// (still submittable as a bare jêgirtin=); a jêder-* type only counts once a field is actually filled.
var usingJederTemplate = usingCategoryTemplate || (this._currentJederKey && jederParams.length > 0);
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-*/Kategorî:Çavkanî template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = usingCategoryTemplate ? this._categoryTemplateName : 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 (see boldenPageTitle), then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(boldenPageTitle(text, title).text);
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
if (translation) {
// Kategorî:Çavkanî templates route through Modul:quote directly and take its "t=" param name;
// the jêder-* templates use "tercime=" instead (see the jêder-* template docs).
code += "|" + (usingCategoryTemplate ? "t" : "tercime") + "=" + translation;
}
}
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
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)) {
// Match only the specific numbered section the button was clicked in (e.g. "Navdêr 2",
// not just the first "===Navdêr...===" heading found) -- both sides are "" when the
// section has no number at all (a single unnumbered "===Navdêr===").
var matchedSectionNumValue = matchedSectionNum ? parseInt(matchedSectionNum, 10) : "";
if (matchedSectionNumValue === sectionNum) {
// 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(code, result) {
error("Nekarî rûpelê xilas bike: " + apiErrorMessage(code, result));
});
}, function(code, result) {
error("Nekarî naveroka rûpelê bistîne: " + apiErrorMessage(code, result));
});
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>
gvbunxfbjvx5hqfg2afjv0locm82suk
6342728
6342726
2026-08-26T17:59:34Z
Wikihez
7344
6342728
javascript
text/javascript
// <nowiki>
// dependencies (declared in MediaWiki:Gadgets-definition): oojs, oojs-ui, ext.gadget.citoid-helper (wikihez.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 = "2.0";
// 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 normally lives in MediaWiki:Gadget-citoid-helper.js as a registered gadget dependency; not
// currently editable, so ensureCitoid() (below) loads it from a user testing page on demand instead.
// Sentinel _currentJederKey value for the "pick a template from Kategorî:Çavkanî" dropdown option -- not a
// real jederDefs key, same convention as Wiki/start.js's own "__category__" picker.
var CATEGORY_TEMPLATE_KEY = "__category__";
// TemplateData params already covered by the form's own top-level text/translation/transliteration boxes --
// skipped when building a Kategorî:Çavkanî template's dynamic fields (see renderTemplateFields) so they
// don't get a redundant duplicate inputbox.
var CATEGORY_TEMPLATE_COVERED_PARAMS = ["jêgirtin", "jg", "t", "tr"];
// "span" is the field's width in the 12-column grid the fields render in (see .add-example-jeder-fields
// in the CSS and _setSourceType below) -- field ORDER here is also the grid's reading order.
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "cih", "label": "Cih", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "sala-weşandinê", "label": "Sala weşandinê", "span": 2 },
{ "key": "çap", "label": "Çap", "span": 1 },
{ "key": "rûpel", "label": "Rûpel", "span": 1 },
{ "key": "isbn", "label": "ISBN", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "kovar", "label": "Kovar", "span": 4 },
{ "key": "cild", "label": "Cild", "span": 2 },
{ "key": "hejmar", "label": "Hejmar", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "rûpel", "label": "Rûpel", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 4 },
{ "key": "terciman", "label": "Terciman", "span": 4 },
{ "key": "websîte", "label": "Websîte", "span": 4 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "url", "label": "URL", "span": 5 },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "span": 5 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "tarîx", "label": "Tarîx", "span": 1 }
]
},
"jêder-vîdeo": {
"label": "Vîdeo",
"fields": [
{ "key": "hunermend", "label": "Hunermend", "span": 6 },
{ "key": "platform", "label": "Platform", "span": 6 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "tarîx", "label": "Tarîx", "span": 3 },
{ "key": "dem", "label": "Dem", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
}
};
// Field key -> {span, multiline}, from the FIRST jêder-* def (in jederDefs's own declaration order above)
// that defines it -- e.g. "sernav" ends up span 12 + multiline everywhere. Used to size a Kategorî:Çavkanî
// template's dynamic TemplateData fields the same way when a param key matches a known jêder-* field key,
// since most of these templates share the same handful of bibliographic param names (see
// _renderCategoryTemplateFields).
var JEDER_FIELD_SIZE_BY_KEY = {};
Object.keys(jederDefs).forEach(function(jederKey) {
jederDefs[jederKey].fields.forEach(function(field) {
if (!JEDER_FIELD_SIZE_BY_KEY[field.key]) {
JEDER_FIELD_SIZE_BY_KEY[field.key] = { span: field.span || 4, multiline: !!field.multiline };
}
});
});
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;
}
// Escapes str for safe interpolation into a RegExp -- page titles can contain regex metacharacters
// (parentheses for disambiguation, periods in abbreviation entries, etc.).
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
// Wraps the first occurrence of the page title (+ an optional glued-on suffix, e.g. a plural "-an") in the
// example text with wikitext bold markup, so the headword stands out in the rendered example. Skips it if
// the title is already bolded by hand, to avoid turning "'''reh'''" into "'''''reh'''''" (bold+italic).
// Returns {text, bolded}; bolded is false if the title wasn't found anywhere and nothing changed.
function boldenPageTitle(text, title) {
var escapedTitle = escapeRegExp(title);
var suffixPattern = "([^\\s.,;?!()']+)?";
if (new RegExp("'''" + escapedTitle + suffixPattern + "'''", "i").test(text)) {
return { text: text, bolded: true };
}
var bolded = text.replace(new RegExp("(" + escapedTitle + suffixPattern + ")", "ig"), "'''$1'''");
return { text: bolded, bolded: bolded !== text };
}
// Extracts a human-readable message from an mw.Api rejection (code, result).
function apiErrorMessage(code, result) {
return (result && result.error && result.error.info) || (typeof code === "string" ? code : "Xeletiyeke nenas");
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
// Custom drag-to-resize grip for textareas, ported from Wiki/start.js's wiktkuMakeManualResizable() -- Safari
// has no native corner resize handle on textareas at all, this is the fix start.js already uses for that.
// Inserted as a SIBLING within the textarea's existing OOUI wrapper (same reasoning as
// ensureLinebreakBackdrop above: wrapping the textarea in a NEW div risks disturbing OOUI's own layout),
// not by wrapping it in a new div like start.js's own version does. Unlike start.js's version, this doesn't
// persist the chosen height across page loads (start.js keys that off the textarea's own CSS class, but
// every textarea here is a plain OOUI MultilineTextInputWidget with no distinguishing class, so a direct
// port would have every field here share one save slot and overwrite each other's heights).
function makeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.data("addExampleResizableDone")) {
return;
}
textarea.data("addExampleResizableDone", true);
textarea.css("resize", "none"); // replaced by the custom grip below
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var grip = $("<div class='add-example-resize-grip'></div>");
textarea.after(grip);
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) { /* already released */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
}
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 makeManualResizable to every textarea in `context` (itself or its descendants).
function initManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function() {
makeManualResizable(this);
});
}
var api = new mw.Api();
// Loads wikihez.citoid if it isn't already loaded, from Wikihez's testing page (MediaWiki: isn't editable
// right now) -- self-contained rather than calling wikihez.citoidHelper.ensure() directly, since that
// function only exists once citoid-helper.js has already run once, which isn't guaranteed here.
function ensureCitoid() {
if (window.wikihez && window.wikihez.citoid) {
return $.Deferred().resolve().promise();
}
var url = mw.util.getUrl("Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js", {
action: "raw",
ctype: "text/javascript"
});
return mw.loader.getScript(mw.config.get("wgServer") + url);
}
// Kategorî:Çavkanî's template members plus their redirects (each redirect as its own searchable entry
// pointing at the same canonical target, so a template is findable by any of its names). Ported from
// Wiki/start.js's fetchCatSrcTemplates(), extended with prop=redirects. Cached after first fetch.
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) {
return catSrcTemplatesPromise;
}
catSrcTemplatesPromise = api.get({
action: "query",
generator: "categorymembers",
gcmtitle: "Kategorî:Çavkanî",
gcmnamespace: 10,
gcmlimit: "max",
prop: "redirects",
rdnamespace: 10,
rdlimit: "max",
formatversion: 2,
}).then(function(data) {
var pages = (data.query && data.query.pages) || [];
var list = [];
pages.forEach(function(page) {
var target = page.title.replace(/^[^:]+:/, "");
list.push({ label: target, target: target });
(page.redirects || []).forEach(function(redirect) {
list.push({ label: redirect.title.replace(/^[^:]+:/, ""), target: target });
});
});
list.sort(function(a, b) {
return a.label.localeCompare(b.label, mw.config.get("wgUserLanguage"));
});
catSrcTemplates = list;
return list;
}, function() {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
// TemplateData params for one template (name without the "Şablon:" prefix); redirects:1 so this also
// resolves if `name` is itself a redirect. Resolves to [] if the template has no TemplateData. Cached.
var tplDataCache = {};
function fetchTemplateDataFor(name) {
if (Object.prototype.hasOwnProperty.call(tplDataCache, name)) {
return $.Deferred().resolve(tplDataCache[name]).promise();
}
return api.get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2,
}).then(function(data) {
var pages = (data && data.pages) || {};
var first = null;
Object.keys(pages).forEach(function(id) {
if (!first) {
first = pages[id];
}
});
var params = [];
if (first && first.params) {
Object.keys(first.params).forEach(function(key) {
var p = first.params[key];
var label = p && p.label;
if (label && typeof label === "object") {
var userLang = mw.config.get("wgUserLanguage");
label = label[userLang] || label.en || label[Object.keys(label)[0]];
}
params.push({ key: key, label: label || key, required: !!(p && p.required) });
});
}
tplDataCache[name] = params;
return params;
}, function() {
tplDataCache[name] = [];
return [];
});
}
// Language display name, read from the matching section's .besazimani link text.
function languageNameForCode(code) {
var $mark = $(".besazimani[id='" + code + "']").first();
return $mark.length ? $mark.text().trim() : null;
}
// Whether the page title itself (accented Kurdish Latin letters included) is written in Latin script.
var pageTitleIsLatin = !/[^\x00-\x7FÀ-ɏḀ-ỿ‘’]/.test(mw.config.get("wgTitle") || "");
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex containers used directly by Şablon:nimûne; .citation-whole = Modul:quote's own wrapper, now used by jêder-* templates (Modul:quote nests .h-quotation inside .citation-whole > dl > dd instead of putting it directly under the <li>, so it needs its own entry here).
// Requiring "ul > li >" is what makes this only match an example that's grouped into its own <ul> -- a
// {{nimûne}} (or its "mk" redirect) with no jêder-family citation alongside it in the same definition
// renders straight under the definition's own content instead, with no such group; also reused below to
// tell whether the second pass still needs to handle a given definition.
var EXISTING_EXAMPLE_SELECTOR = "ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation, ul > li > .citation-whole";
$(EXISTING_EXAMPLE_SELECTOR).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.
// A jêder-* citation with no jêgirtin= (quotation text) yet renders no h-quotation/e-quotation at all
// (see get_quote() in Modul quote.lua) -- exactly the "bare citation" case this button exists to fill
// in, so this can't just crash: without the guard, [0] is undefined here and ".lang" throws, which
// (since $.each() has no try/catch) silently kills the button for every remaining match on the page.
var $langEl = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0];
if (!$langEl) {
console.warn("Gadget-wikt.add-examples: nikaribe zimanê vê nimûneyê bibîne, valakirî hate derbaskirin.", $item);
return;
}
var language = $langEl.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. $group is the citation-group <ul> itself (parent of $item);
// the form panel is inserted AFTER it (see click handler below), not inside it, so the panel isn't
// squeezed into that <ul>'s narrow hanging-indent width on mobile -- only the button/title stays
// there, matching the "Form redesign for Kurdish example" mockup (title inside the bullet list,
// full-width panel below it).
var $group = $item.parent();
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($item, $button, $title, language, definitionLevel);
$group.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem);
}
});
// Second pass: some definitions have no example the pass above could react to at all -- either genuinely
// zero examples, or one rendered via {{nimûne}} (or its "mk" redirect) with no jêder-family citation next
// to it, which (see the comment on EXISTING_EXAMPLE_SELECTOR above) renders with no "ul > li" group to
// match. This walks every recognized POS section's own definitions list directly instead of reacting to
// an existing example, and reads the language off the language section's own <h2> rather than off an
// example -- so it doesn't need one to already exist. Everything else (Form, submit()) is reused as-is.
// MediaWiki wraps each heading in a "mw-heading2"/"mw-heading3"/... div in current skin output; falls
// back to the bare heading element for older/other output that doesn't wrap it.
function headingOuter($h) {
var $wrap = $h.closest(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6");
return $wrap.length ? $wrap : $h;
}
// Section's language code: nearest preceding .besazimani[id] by document order (not sibling-walking, which mobile's per-section wrapping breaks).
function languageCodeForOl($ol) {
var $marks = $(".besazimani[id]").add($ol);
var ol = $ol.get(0);
var idx = $marks.index(ol);
for (var i = idx - 1; i >= 0; i--) {
var el = $marks.get(i);
if (el.id) {
return el.id;
}
}
return null;
}
// A <li> whose OWN direct content (not counting a nested <ol>) is wrapped in ".form-of-definition" is
// MediaWiki's "form of" template system marking that content as generated by a template -- e.g.
// {{ku-tewîna-nav}}'s "Formeke heval:" wrapper together with its "rewşa îzafeyî"/"rewşa çemandî"/...
// readings underneath. That whole nested block is normally the ENTIRE expansion of a single "#"
// wikitext line, with no separate "##" line behind any individual reading -- recursing into it would
// hand out one button per reading, each trying to match a "##" line that doesn't exist, and submit()
// would fail to find where to insert every one of them. A <li> without that class whose nested <ol>
// holds real hand-typed prose (e.g. sîno-koreyî/Navdêr's two genuinely separate "##" sub-senses) has
// no such problem -- those really are individually addressable wikitext lines.
function isFormOfWrapper($li) {
return $li.children(".form-of-definition").length > 0;
}
// Recurse into a <li>'s own nested <ol> UNLESS it's a form-of-template wrapper (see isFormOfWrapper) --
// a wrapper <li> with its own nested <ol> isn't itself a sense with content of its own, only its real
// (non-generated) leaves are.
function eachLeafDefinition($ol, fn) {
$ol.children("li").each(function() {
var $li = $(this);
var $childOl = $li.children("ol");
if ($childOl.length && !isFormOfWrapper($li)) {
$childOl.each(function() {
eachLeafDefinition($(this), fn);
});
} else {
fn($li);
}
});
}
$("h3").each(function() {
var sectionType = $(this).text().trim();
if (!sectionNames[sectionType]) {
return; // not a recognized word-sense section (Bilêvkirin, Etîmolojî, Çavkanî, ...)
}
var h3Id = $(this).attr("id");
// Forward-walk siblings to the definitions <ol>, skipping over a declension table/TemplateStyles/the
// headword line; stop (nothing to attach to in this section) if another heading comes first instead.
var $ol = null;
for (var $cursor = headingOuter($(this)).next(); $cursor.length; $cursor = $cursor.next()) {
if ($cursor.is("ol")) {
$ol = $cursor;
break;
}
if ($cursor.is(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6, h2, h3, h4, h5, h6")) {
break;
}
}
if (!$ol) {
return;
}
var language = languageCodeForOl($ol);
if (!language) {
console.warn("Gadget-wikt.add-examples: nikaribe koda zimanê vê beşê bibîne.", $ol);
return;
}
eachLeafDefinition($ol, function($li) {
// The pass above already added a button here (or will) -- an actual example already wrapped in
// its own "ul > li" group.
if ($li.find(EXISTING_EXAMPLE_SELECTOR).length) {
return;
}
var definitionLevel = [];
var $definitionItem = $li;
while ($definitionItem.prop("tagName") === "LI") {
// 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);
$definitionItem = $definitionItem.parent().parent();
}
definitionLevel.splice(0, 0, h3Id);
// A hidden, empty placeholder <li> so submit()'s existing "_$lastExample.after(newLi)" insertion
// (unchanged, same as the pass above) lands the first submitted example right before the button
// -- matching the existing convention of new examples going in before the button, not after it.
var $placeholder = $("<li style='display:none'></li>");
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
// A "ul" nested directly under a definition "li" starts hidden here (see the HQToggle-controlled
// jêder-citation-group "ul", which only ever renders with an explicit "style="display: block""
// set on it) -- this one has no HQToggle to unhide it, so it needs the same explicit override or
// the button (and the placeholder above) never becomes visible at all.
var $ul = $("<ul>").css("display", "block").append($placeholder).append($formItem);
// The form panel is inserted AFTER $ul (not inside it) once opened -- same reasoning as the first
// pass above: keeps the full-width panel out of the tight bulleted-list indentation on mobile.
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($placeholder, $button, $title, language, definitionLevel);
$ul.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$li.append($ul);
});
});
// Pulls the form panel flush with the page's own left/right edges, undoing whatever nested-list indent it inherited from sitting inside a deeply-nested definition.
function alignFormToPage($form) {
var $container = $form.closest(".mw-parser-output");
if (!$container.length) {
return;
}
var pad = parseFloat(window.getComputedStyle($container[0]).paddingLeft) || 0;
var containerLeft = $container.offset().left + pad;
var indent = $form.offset().left - containerLeft;
$form.css({
marginLeft: indent > 0 ? -indent : 0,
width: $container.width() + "px"
});
}
// Constructor for the edit form; lastExample/button/title/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, $title, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._$title = $title;
this._currentJederKey = "";
this._jederFieldWidgets = {};
// Set once a template is picked in the Kategorî:Çavkanî mode (see _selectCategoryTemplate); the
// canonical template title (without the "Şablon:" prefix), used as `sablon` in _doSubmit.
this._categoryTemplateName = null;
this._textInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
// Shown under the text box (see boldenPageTitle) when the page title can't be found in the example text
// as typed, so it won't get bolded; purely informational, doesn't block submitting.
this._titleBoldHint = $("<span class='add-example-title-bold-hint'></span>").hide();
this._updateTitleBoldHint = function() {
var text = self._textInput.getValue().trim();
var title = mw.config.get("wgTitle");
var show = !!text && !boldenPageTitle(text, title).bolded;
self._titleBoldHint.toggle(show).html(show ? "Sermade (" + escapeHtmlForBackdrop(title) + ") nehat dîtin; dê neyê <b>stûr</b>kirin." : "");
};
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
self._updateReadyHint();
self._updateTitleBoldHint();
});
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,
}));
}
}
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: CATEGORY_TEMPLATE_KEY,
label: "Ji Kategorî:Çavkanî şablonekê hilbijêre",
}));
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._sourceInput.on("change", function() {
self._updateReadyHint();
});
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. The Citoid fetch button sits right next to it (not in a separate box) -- see _urlRowWidget below.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
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, malûmatan 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));
this._sourceURLInput.on("change", function() {
self._updateReadyHint();
self._autofillVideoTimestamp();
});
// URL input + inline "auto-fill" button as one row (replaces the old separate framed Citoid box's
// button row) -- a plain OO.ui.Widget used purely as a flex-row container (same pattern as
// _loadingImage below: build it empty, then manually append its children's $elements). Disabling
// during submit() still goes through the individual _sourceURLInput/_citoidButton references, not
// through this wrapper.
this._urlRowWidget = new OO.ui.Widget({ classes: ["add-example-url-row"] });
this._urlRowWidget.$element.append(this._sourceURLInput.$element, this._citoidButton.$element);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, {
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;
// Shown right after a successful Citoid fetch (see _fillFromCitoid); hidden again on clear.
this._citoidSuccessMsg = $("<span class='add-example-citoid-success'>✓ Malûmat hatin dagirtin — li jêr kontrol bike.</span>").hide();
// 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("");
self._citoidSuccessMsg.hide();
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
// Plain div (not OO.ui.FieldsetLayout) so the grid CSS class applies directly to the field items.
this._jederFieldsFieldset = $("<div class='add-example-jeder-fields'>");
// "Malûmatên çavkaniyê" header (+ the "Vala bike" clear button) sitting right above the fields grid,
// replacing the old framed "Ji Citoid an bi destan tijî bike:" box -- like this only makes sense once
// a real jêder-* template is active (there's nothing here to show for the "citoid: not yet detected"
// placeholder or for free text), so the whole section toggles together in _setSourceType().
this._jederSection = $("<div class='add-example-jeder-section'>").append(
$("<div class='add-example-jeder-header'>")
.append($("<span class='add-example-jeder-header-label'>Malûmatên çavkaniyê</span>"))
.append(this._citoidClearButton.$element),
this._jederFieldsFieldset
);
// Kategorî:Çavkanî template search box: sits directly under the source-type dropdown in $topRight (not
// in the "Malûmatên çavkaniyê" section below, which is reserved for the picked template's own fields --
// see _setSourceType/_selectCategoryTemplate). Built once here, not rebuilt per _setSourceType call, so
// switching in and out of this dropdown mode doesn't lose its own DOM node/event handlers.
this._categoryTemplateInput = $("<input type='search' autocomplete='off' class='add-example-cat-tpl-input'>")
.attr("placeholder", "Li navê şablonê bigere…");
this._categoryTemplateResults = $("<ul class='add-example-cat-tpl-results'>").hide();
this._categoryTemplateStatus = $("<span class='add-example-cat-tpl-status'>Şablon tên barkirin…</span>");
this._categoryTemplateSearchRow = $("<div class='add-example-cat-tpl-search-row'>")
.append(this._categoryTemplateInput, this._categoryTemplateResults, this._categoryTemplateStatus)
.hide();
this._initCategoryTemplatePicker();
this._translationInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
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({ rows: 4 });
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Translîterasyona 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));
// Reactive "ready to submit" hint next to Biweşîne: no text yet, text but no source (still submittable
// as a bare {{nimûne}}), or fully ready -- kept in sync by _updateReadyHint(), wired to every field below.
this._readyHint = $("<span class='add-example-ready-hint'></span>").text("Metna nimûneyê lazim e.");
// True while a Citoid-eligible URL/DOI/ISBN is typed in but not yet fetched (or fetched then edited away) and no jêder field has been filled by hand -- the "looks done but isn't" trap this exists to catch. Not applicable in free-text mode, where the fetch button isn't even offered.
this._citoidPending = function() {
return self._currentJederKey !== "" &&
self._currentJederKey !== CATEGORY_TEMPLATE_KEY &&
!!self._sourceURLInput.getValue().trim() &&
!self._citoidSuccessMsg.is(":visible") &&
!Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
};
this._updateReadyHint = function() {
if (!self._textInput.getValue()) {
self._readyHint.text("Metna nimûneyê lazim e.");
return;
}
if (self._citoidPending()) {
self._readyHint.text("Pêşî 'Bi otomatîk tijî bike' bitikîne.");
return;
}
var hasSource = self._sourceInput.getValue().trim() || self._sourceURLInput.getValue().trim() ||
Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
self._readyHint.text(hasSource ? "Hazir e." : "Çavkanî nehatiye dayîn.");
};
// Prefills the Dem field from the typed URL's own "t=" (see wikihez.citoid.extractVideoTimestamp) once jêder-vîdeo is active -- never overwrites a value the user already entered by hand.
this._autofillVideoTimestamp = function() {
var demWidget = self._jederFieldWidgets.dem;
if (self._currentJederKey !== "jêder-vîdeo" || !demWidget || demWidget.getValue().trim()) {
return;
}
ensureCitoid().then(function() {
var dem = wikihez.citoid.extractVideoTimestamp(self._sourceURLInput.getValue().trim());
if (dem && !demWidget.getValue().trim()) {
demWidget.setValue(dem);
}
});
};
// framed:false (+ the "destructive" flag for the red text/hover) matches the mockup's borderless
// "Betal bike" -- a plain colored link rather than a boxed button, distinguishing it from Paqij bike.
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
framed: false,
});
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);
// Two-column top section (see "Form redesign for Kurdish example/Nimûne zêde bike.dc.html"): example
// text (+ translation/transliteration for non-ku, right after it, not after the source fields) on the
// left; source-type + link/Citoid on the right. Built as plain <div>s, not an OOUI layout -- OOUI has
// no CSS-grid container -- so .add-example-top-grid in the CSS can lay them out as a real responsive
// 7fr/5fr grid (collapsing to one column on narrow screens).
var $topLeft = $("<div class='add-example-top-col'>").append(textInputLayout.$element, this._titleBoldHint);
if (language !== "ku") {
$topLeft.append(translationInputLayout.$element);
}
if (!pageTitleIsLatin) {
$topLeft.append(transcriptionInputLayout.$element);
}
var $topRight = $("<div class='add-example-top-col'>").append(
sourceTypeLayout.$element,
this._categoryTemplateSearchRow,
this._sourceInputLayout.$element,
this._sourceURLInputLayout.$element,
this._citoidSuccessMsg
);
var $topGrid = $("<div class='add-example-top-grid'>").append($topLeft, $topRight);
// 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 (see the FieldLayout replaceWith() there).
this._fieldsLayout = $("<div class='add-example-fieldset'>").append($topGrid, this._jederSection);
// Bottom action row -- order/spacing matches the mockup: Biweşîne (+ spinner + ready hint), a spacer
// pushing the rest right, then Paqij bike (bordered/subtle) and Betal bike (borderless red text, via
// framed:false above). A plain flex <div>, not an OOUI HorizontalLayout, so the raw hint/spacer
// elements can sit alongside the real button widgets (same reasoning as the top grid above).
var $buttonsRow = $("<div class='add-example-main-buttons'>").append(
this._applyButton.$element,
this._loadingImage.$element,
this._readyHint,
$("<span class='add-example-buttons-spacer'></span>"),
this._clearButton.$element,
this._cancelButton.$element
);
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
});
this._frame.$element.append(this._fieldsLayout, $buttonsRow);
// 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");
initManualResize(this._frame.$element);
}
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 fetch button, and the "Malûmatên çavkaniyê" fields section toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateName = null;
var isRealJederKey = jederKey && jederDefs[jederKey];
var isCategoryTemplateKey = jederKey === CATEGORY_TEMPLATE_KEY;
if (isRealJederKey) {
var def = jederDefs[jederKey];
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;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: ["add-example-field-span-" + (field.span || 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
}
// The search box itself is always in the DOM (see the constructor, it lives in $topRight) -- only
// shown in this one mode, and reset when leaving it so a stale query/selection doesn't linger for
// next time it's opened.
this._categoryTemplateSearchRow.toggle(isCategoryTemplateKey);
if (!isCategoryTemplateKey) {
this._categoryTemplateInput.val("");
this._categoryTemplateResults.hide();
}
// "Malûmatên çavkaniyê" header + fields grid: shown for a real jêder-* template (fields built above).
// For the Kategorî:Çavkanî picker it stays hidden here -- there's nothing to put in it until a
// template is actually picked, see _selectCategoryTemplate, which shows it once there is.
this._jederSection.toggle(!!isRealJederKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid fetch button: hidden for free text (nothing there for it to fill in) and for the
// Kategorî:Çavkanî picker (Citoid has no mapping for an arbitrary picked template), shown for
// "citoid" auto-detect and any real jêder-* key. The URL input itself next to it stays visible in
// every OTHER mode -- see the sourceURLInputLayout toggle below for the one exception.
this._citoidButton.toggle(jederKey !== "" && !isCategoryTemplateKey);
// URL field wording: plain "attach a link" phrasing for free text, 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 $oldLayout = this._sourceURLInputLayout.$element;
// Re-wraps the SAME _urlRowWidget (still holding _sourceURLInput + _citoidButton) in a new
// FieldLayout with the new label/help; the widget's $element moves along with it, same as the
// old addItems()/removeItems() swap did for the plain input before this redesign.
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, 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,
});
$oldLayout.replaceWith(this._sourceURLInputLayout.$element);
}
// The URL/Citoid row is normally always visible (see the constructor comment), but Citoid has no
// mapping for an arbitrary Kategorî:Çavkanî template, so it'd just be dead UI in that one mode.
this._sourceURLInputLayout.toggle(!isCategoryTemplateKey);
this._autofillVideoTimestamp();
this._updateReadyHint();
initManualResize(this._jederFieldsFieldset); // covers a freshly-rebuilt "sernav" field (jêder-*); the Kategorî:Çavkanî picker's own fields are resized separately once picked, see _renderCategoryTemplateFields
},
// Wires up the search box's own input/blur handlers and kicks off the template list fetch. Called once
// from the constructor -- the search box lives permanently in $topRight (see there), only shown/hidden
// by _setSourceType, so this only needs to run once, not every time the picker mode is entered.
_initCategoryTemplatePicker: function() {
var self = this;
function showResults(query) {
var q = query.trim().toLowerCase();
self._categoryTemplateResults.empty();
var list = catSrcTemplates || [];
var matched = q ? list.filter(function(entry) {
return entry.label.toLowerCase().indexOf(q) !== -1;
}) : list;
if (!matched.length) {
self._categoryTemplateResults.hide();
return;
}
matched.slice(0, 50).forEach(function(entry) {
var $li = $("<li>").text(entry.label);
// A redirect entry's label differs from its target -- mark where it actually resolves to.
if (entry.label !== entry.target) {
$li.append($("<span class='add-example-cat-tpl-redirect-arrow'>").text(" → " + entry.target));
}
$li.on("mousedown", function(e) {
e.preventDefault(); // keeps the input's blur (and the results-hiding it triggers) from firing before the click registers
self._selectCategoryTemplate(entry);
});
self._categoryTemplateResults.append($li);
});
self._categoryTemplateResults.show();
}
this._categoryTemplateInput.on("input focus", function() {
showResults($(this).val());
});
this._categoryTemplateInput.on("blur", function() {
setTimeout(function() { self._categoryTemplateResults.hide(); }, 200); // lets the mousedown handler above fire first
});
fetchCatSrcTemplates().then(function() {
self._categoryTemplateStatus.text("");
}, function() {
self._categoryTemplateStatus.text("Şablon nehatin barkirin.");
});
},
// Picks a template from the search results: records its canonical name -- a redirect entry resolves to
// its target, the output always uses that, never the redirect's own name (see fetchCatSrcTemplates) --
// and reveals/renders the "Malûmatên çavkaniyê" section for its parameter fields.
_selectCategoryTemplate: function(entry) {
this._categoryTemplateResults.hide();
// Left as the plain label (not "label → target") -- putting the arrow in the input's own value
// would get re-used as the search query if the box is focused again to pick something else.
this._categoryTemplateInput.val(entry.label);
this._categoryTemplateName = entry.target;
this._jederSection.toggle(true);
this._renderCategoryTemplateFields(entry.target);
},
// Builds one text input per TemplateData param of `name` into the shared "Malûmatên çavkaniyê" fields
// grid (_jederFieldsFieldset, the same one the jêder-* fields use), or a lone "Rûpel" fallback field if
// it has no TemplateData -- see the jêgirtin=/rûpel= example in the feature request this implements.
_renderCategoryTemplateFields: function(name) {
var self = this;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
fetchTemplateDataFor(name).then(function(params) {
var filtered = (params || []).filter(function(p) {
return CATEGORY_TEMPLATE_COVERED_PARAMS.indexOf(p.key) === -1;
});
var list = filtered.length ? filtered : [{ key: "rûpel", label: "Rûpel", required: false }];
list.forEach(function(p) {
// Reuse the jêder-* field's own width/multiline when this param's key matches one (see
// JEDER_FIELD_SIZE_BY_KEY) -- most Kategorî:Çavkanî templates share the same bibliographic
// param names, so e.g. "sernav" ends up full-width+multiline here too, not a generic box.
var sizeHint = JEDER_FIELD_SIZE_BY_KEY[p.key];
var widget = (sizeHint && sizeHint.multiline)
? new OO.ui.MultilineTextInputWidget({ rows: 2, autosize: false })
: new OO.ui.TextInputWidget();
self._jederFieldWidgets[p.key] = widget;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: p.label,
align: "top",
classes: ["add-example-field-span-" + (sizeHint ? sizeHint.span : 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
self._updateReadyHint();
initManualResize(self._jederFieldsFieldset); // matters now that a matched key like "sernav" can render multiline
});
},
// Fetches data via wikihez.citoid (loaded on demand by ensureCitoid() if needed), picks the matching jêder-* template, and fills its empty fields.
_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);
ensureCitoid().then(function() {
return wikihez.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 : wikihez.citoid.dataToJederFields(targetJederKey, result.raw, query);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
self._citoidSuccessMsg.show();
self._updateReadyHint();
mw.notify("Malûmat ji Citoid hatin barkirin.");
}, function(errorMsg) {
// wikihez.citoid may still be missing here if ensureCitoid() itself failed to load the script (e.g. network error) -- fall back to the bare error notice in that case.
if (!window.wikihez || !window.wikihez.citoid) {
mw.notify("Nekarî citoid-helper.js bar bike.");
return;
}
// Citoid can't fetch some sites at all (e.g. x.com/twitter.com) -- fall back to jêder-websîte with a website name guessed from the URL itself, rather than just a bare error.
var fallbackSite = wikihez.citoid.websiteNameForUrl(query);
if (fallbackSite) {
if (self._currentJederKey !== "jêder-websîte") {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData("jêder-websîte");
if (item) {
menu.chooseItem(item); // this calls _setSourceType("jêder-websîte") automatically
}
}
var websiteWidget = self._jederFieldWidgets["websîte"];
if (websiteWidget && !websiteWidget.getValue()) {
websiteWidget.setValue(fallbackSite);
}
mw.notify("Citoid nikare vê malperê bixwîne; şablona Websîte hate hilbijartin, ji kerema xwe mayî bi destan tijî bike.");
return;
}
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî malûmatan 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. The title text takes
// the button's place while open (see the "Form redesign for Kurdish example" mockup); the button
// itself stays put ready to reappear once the form is cancelled/closed.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._$title.toggle(visible);
this._frame.toggle(visible);
if (visible) {
alignFormToPage(this._frame.$element);
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._citoidSuccessMsg.hide();
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Warns before submitting if a Citoid URL/DOI/ISBN was typed but never successfully fetched, then defers
// to _doSubmit. The title-not-boldable case (see boldenPageTitle) is shown inline under the text box
// instead (_titleBoldHint) rather than blocking submission here.
submit: function() {
if (this._citoidPending() && !window.confirm("Te lînk, DOI an ISBN nivîsand lê hîn jê malûmat nehatine standin. Bêyî wan berdewam bikî?")) {
return;
}
this._doSubmit();
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
_doSubmit: 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; if a Kategorî:Çavkanî template was
// picked instead, collect its TemplateData-driven fields the same way, plus wekjêgirtin=1 for any
// "Ç:"-prefixed template (a quotation-equivalent, not a usage example -- see Modul:quote).
var jederParams = [];
var usingCategoryTemplate = this._currentJederKey === CATEGORY_TEMPLATE_KEY && !!this._categoryTemplateName;
if (usingCategoryTemplate) {
Object.keys(self._jederFieldWidgets).forEach(function(key) {
var value = self._jederFieldWidgets[key].getValue().trim();
if (value) {
jederParams.push(key + "=" + value);
}
});
if (/^Ç:/.test(self._categoryTemplateName)) {
jederParams.push("wekjêgirtin=1");
}
} else 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);
}
});
}
// A Kategorî:Çavkanî template is used as soon as it's picked, even with every field left blank
// (still submittable as a bare jêgirtin=); a jêder-* type only counts once a field is actually filled.
var usingJederTemplate = usingCategoryTemplate || (this._currentJederKey && jederParams.length > 0);
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-*/Kategorî:Çavkanî template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = usingCategoryTemplate ? this._categoryTemplateName : 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 (see boldenPageTitle), then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(boldenPageTitle(text, title).text);
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
if (translation) {
// Kategorî:Çavkanî templates route through Modul:quote directly and take its "t=" param name;
// the jêder-* templates use "tercime=" instead (see the jêder-* template docs).
code += "|" + (usingCategoryTemplate ? "t" : "tercime") + "=" + translation;
}
}
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
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)) {
// Match only the specific numbered section the button was clicked in (e.g. "Navdêr 2",
// not just the first "===Navdêr...===" heading found) -- both sides are "" when the
// section has no number at all (a single unnumbered "===Navdêr===").
var matchedSectionNumValue = matchedSectionNum ? parseInt(matchedSectionNum, 10) : "";
if (matchedSectionNumValue === sectionNum) {
// 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(code, result) {
error("Nekarî rûpelê xilas bike: " + apiErrorMessage(code, result));
});
}, function(code, result) {
error("Nekarî naveroka rûpelê bistîne: " + apiErrorMessage(code, result));
});
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>
cu9tu9tmaaara95jz9w48a2os9m8nef
6342811
6342728
2026-08-26T21:42:25Z
Wikihez
7344
6342811
javascript
text/javascript
// <nowiki>
// dependencies (declared in MediaWiki:Gadgets-definition): oojs, oojs-ui, ext.gadget.citoid-helper (wikihez.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 = "2.0";
// 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 normally lives in MediaWiki:Gadget-citoid-helper.js as a registered gadget dependency; not
// currently editable, so ensureCitoid() (below) loads it from a user testing page on demand instead.
// Sentinel _currentJederKey value for the "pick a template from Kategorî:Çavkanî" dropdown option -- not a
// real jederDefs key, same convention as Wiki/start.js's own "__category__" picker.
var CATEGORY_TEMPLATE_KEY = "__category__";
// TemplateData params already covered by the form's own top-level text/translation/transliteration boxes --
// skipped when building a Kategorî:Çavkanî template's dynamic fields (see _renderCategoryTemplateFields) so
// they don't get a redundant duplicate inputbox.
var CATEGORY_TEMPLATE_COVERED_PARAMS = ["jêgirtin", "jg", "t", "tr"];
// A TemplateData param labeled exactly this (case/whitespace-insensitive) is auto-filled from the language
// dropdown instead of shown as its own inputbox -- see _renderCategoryTemplateFields/_doSubmit. Unlike
// jêder-*, an arbitrary Kategorî:Çavkanî template has no guaranteed "param 1 = language" convention, so this
// only applies when the template's own TemplateData actually declares such a param.
var CATEGORY_TEMPLATE_LANG_LABEL = "koda zimanî";
// "span" is the field's width in the 12-column grid the fields render in (see .add-example-jeder-fields
// in the CSS and _setSourceType below) -- field ORDER here is also the grid's reading order.
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "cih", "label": "Cih", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "sala-weşandinê", "label": "Sala weşandinê", "span": 2 },
{ "key": "çap", "label": "Çap", "span": 1 },
{ "key": "rûpel", "label": "Rûpel", "span": 1 },
{ "key": "isbn", "label": "ISBN", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "kovar", "label": "Kovar", "span": 4 },
{ "key": "cild", "label": "Cild", "span": 2 },
{ "key": "hejmar", "label": "Hejmar", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "rûpel", "label": "Rûpel", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 4 },
{ "key": "terciman", "label": "Terciman", "span": 4 },
{ "key": "websîte", "label": "Websîte", "span": 4 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "url", "label": "URL", "span": 5 },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "span": 5 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "tarîx", "label": "Tarîx", "span": 1 }
]
},
"jêder-vîdeo": {
"label": "Vîdeo",
"fields": [
{ "key": "hunermend", "label": "Hunermend", "span": 6 },
{ "key": "platform", "label": "Platform", "span": 6 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "tarîx", "label": "Tarîx", "span": 3 },
{ "key": "dem", "label": "Dem", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
}
};
// Field key -> {span, multiline}, from the FIRST jêder-* def (in jederDefs's own declaration order above)
// that defines it -- e.g. "sernav" ends up span 12 + multiline everywhere. Used to size a Kategorî:Çavkanî
// template's dynamic TemplateData fields the same way when a param key matches a known jêder-* field key,
// since most of these templates share the same handful of bibliographic param names (see
// _renderCategoryTemplateFields).
var JEDER_FIELD_SIZE_BY_KEY = {};
Object.keys(jederDefs).forEach(function(jederKey) {
jederDefs[jederKey].fields.forEach(function(field) {
if (!JEDER_FIELD_SIZE_BY_KEY[field.key]) {
JEDER_FIELD_SIZE_BY_KEY[field.key] = { span: field.span || 4, multiline: !!field.multiline };
}
});
});
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;
}
// Same problem as nlToBr (a raw newline breaks the single-line "#*" wikitext), but for jêder-*/Kategorî:Çavkanî
// param values (sernav, nivîskar, ...) a literal <br> would leak into the rendered citation text, so these get
// collapsed to a plain space instead.
function nlToSpace(text) {
return text ? text.replace(/\r\n|\r|\n/g, " ") : text;
}
// Escapes str for safe interpolation into a RegExp -- page titles can contain regex metacharacters
// (parentheses for disambiguation, periods in abbreviation entries, etc.).
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
// Wraps the first occurrence of the page title (+ an optional glued-on suffix, e.g. a plural "-an") in the
// example text with wikitext bold markup, so the headword stands out in the rendered example. Skips it if
// the title is already bolded by hand, to avoid turning "'''reh'''" into "'''''reh'''''" (bold+italic).
// Returns {text, bolded}; bolded is false if the title wasn't found anywhere and nothing changed.
function boldenPageTitle(text, title) {
var escapedTitle = escapeRegExp(title);
var suffixPattern = "([^\\s.,;?!()']+)?";
if (new RegExp("'''" + escapedTitle + suffixPattern + "'''", "i").test(text)) {
return { text: text, bolded: true };
}
var bolded = text.replace(new RegExp("(" + escapedTitle + suffixPattern + ")", "ig"), "'''$1'''");
return { text: bolded, bolded: bolded !== text };
}
// Extracts a human-readable message from an mw.Api rejection (code, result).
function apiErrorMessage(code, result) {
return (result && result.error && result.error.info) || (typeof code === "string" ? code : "Xeletiyeke nenas");
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
// Custom drag-to-resize grip for textareas, ported from Wiki/start.js's wiktkuMakeManualResizable() -- Safari
// has no native corner resize handle on textareas at all, this is the fix start.js already uses for that.
// Inserted as a SIBLING within the textarea's existing OOUI wrapper (same reasoning as
// ensureLinebreakBackdrop above: wrapping the textarea in a NEW div risks disturbing OOUI's own layout),
// not by wrapping it in a new div like start.js's own version does. Unlike start.js's version, this doesn't
// persist the chosen height across page loads (start.js keys that off the textarea's own CSS class, but
// every textarea here is a plain OOUI MultilineTextInputWidget with no distinguishing class, so a direct
// port would have every field here share one save slot and overwrite each other's heights).
function makeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.data("addExampleResizableDone")) {
return;
}
textarea.data("addExampleResizableDone", true);
textarea.css("resize", "none"); // replaced by the custom grip below
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var grip = $("<div class='add-example-resize-grip'></div>");
textarea.after(grip);
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) { /* already released */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
}
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 makeManualResizable to every textarea in `context` (itself or its descendants).
function initManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function() {
makeManualResizable(this);
});
}
var api = new mw.Api();
// Loads wikihez.citoid if it isn't already loaded, from Wikihez's testing page (MediaWiki: isn't editable
// right now) -- self-contained rather than calling wikihez.citoidHelper.ensure() directly, since that
// function only exists once citoid-helper.js has already run once, which isn't guaranteed here.
function ensureCitoid() {
if (window.wikihez && window.wikihez.citoid) {
return $.Deferred().resolve().promise();
}
var url = mw.util.getUrl("Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js", {
action: "raw",
ctype: "text/javascript"
});
return mw.loader.getScript(mw.config.get("wgServer") + url);
}
// Kategorî:Çavkanî's template members plus their redirects (each redirect as its own searchable entry
// pointing at the same canonical target, so a template is findable by any of its names). Ported from
// Wiki/start.js's fetchCatSrcTemplates(), extended with prop=redirects. Cached after first fetch.
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) {
return catSrcTemplatesPromise;
}
catSrcTemplatesPromise = api.get({
action: "query",
generator: "categorymembers",
gcmtitle: "Kategorî:Çavkanî",
gcmnamespace: 10,
gcmlimit: "max",
prop: "redirects",
rdnamespace: 10,
rdlimit: "max",
formatversion: 2,
}).then(function(data) {
var pages = (data.query && data.query.pages) || [];
var list = [];
pages.forEach(function(page) {
var target = page.title.replace(/^[^:]+:/, "");
list.push({ label: target, target: target });
(page.redirects || []).forEach(function(redirect) {
list.push({ label: redirect.title.replace(/^[^:]+:/, ""), target: target });
});
});
list.sort(function(a, b) {
return a.label.localeCompare(b.label, mw.config.get("wgUserLanguage"));
});
catSrcTemplates = list;
return list;
}, function() {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
// TemplateData params for one template (name without the "Şablon:" prefix); redirects:1 so this also
// resolves if `name` is itself a redirect. Resolves to [] if the template has no TemplateData. Cached.
var tplDataCache = {};
function fetchTemplateDataFor(name) {
if (Object.prototype.hasOwnProperty.call(tplDataCache, name)) {
return $.Deferred().resolve(tplDataCache[name]).promise();
}
return api.get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2,
}).then(function(data) {
var pages = (data && data.pages) || {};
var first = null;
Object.keys(pages).forEach(function(id) {
if (!first) {
first = pages[id];
}
});
var params = [];
if (first && first.params) {
Object.keys(first.params).forEach(function(key) {
var p = first.params[key];
var label = p && p.label;
if (label && typeof label === "object") {
var userLang = mw.config.get("wgUserLanguage");
label = label[userLang] || label.en || label[Object.keys(label)[0]];
}
params.push({ key: key, label: label || key, required: !!(p && p.required) });
});
}
tplDataCache[name] = params;
return params;
}, function() {
tplDataCache[name] = [];
return [];
});
}
// Language display name, read from the matching section's .besazimani link text.
function languageNameForCode(code) {
var $mark = $(".besazimani[id='" + code + "']").first();
return $mark.length ? $mark.text().trim() : null;
}
// Whether the page title itself (accented Kurdish Latin letters included) is written in Latin script.
var pageTitleIsLatin = !/[^\x00-\x7FÀ-ɏḀ-ỿ‘’]/.test(mw.config.get("wgTitle") || "");
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex containers used directly by Şablon:nimûne; .citation-whole = Modul:quote's own wrapper, now used by jêder-* templates (Modul:quote nests .h-quotation inside .citation-whole > dl > dd instead of putting it directly under the <li>, so it needs its own entry here).
// Requiring "ul > li >" is what makes this only match an example that's grouped into its own <ul> -- a
// {{nimûne}} (or its "mk" redirect) with no jêder-family citation alongside it in the same definition
// renders straight under the definition's own content instead, with no such group; also reused below to
// tell whether the second pass still needs to handle a given definition.
var EXISTING_EXAMPLE_SELECTOR = "ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation, ul > li > .citation-whole";
$(EXISTING_EXAMPLE_SELECTOR).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.
// A jêder-* citation with no jêgirtin= (quotation text) yet renders no h-quotation/e-quotation at all
// (see get_quote() in Modul quote.lua) -- exactly the "bare citation" case this button exists to fill
// in, so this can't just crash: without the guard, [0] is undefined here and ".lang" throws, which
// (since $.each() has no try/catch) silently kills the button for every remaining match on the page.
var $langEl = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0];
if (!$langEl) {
console.warn("Gadget-wikt.add-examples: nikaribe zimanê vê nimûneyê bibîne, valakirî hate derbaskirin.", $item);
return;
}
var language = $langEl.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. $group is the citation-group <ul> itself (parent of $item);
// the form panel is inserted AFTER it (see click handler below), not inside it, so the panel isn't
// squeezed into that <ul>'s narrow hanging-indent width on mobile -- only the button/title stays
// there, matching the "Form redesign for Kurdish example" mockup (title inside the bullet list,
// full-width panel below it).
var $group = $item.parent();
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($item, $button, $title, language, definitionLevel);
$group.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem);
}
});
// Second pass: some definitions have no example the pass above could react to at all -- either genuinely
// zero examples, or one rendered via {{nimûne}} (or its "mk" redirect) with no jêder-family citation next
// to it, which (see the comment on EXISTING_EXAMPLE_SELECTOR above) renders with no "ul > li" group to
// match. This walks every recognized POS section's own definitions list directly instead of reacting to
// an existing example, and reads the language off the language section's own <h2> rather than off an
// example -- so it doesn't need one to already exist. Everything else (Form, submit()) is reused as-is.
// MediaWiki wraps each heading in a "mw-heading2"/"mw-heading3"/... div in current skin output; falls
// back to the bare heading element for older/other output that doesn't wrap it.
function headingOuter($h) {
var $wrap = $h.closest(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6");
return $wrap.length ? $wrap : $h;
}
// Section's language code: nearest preceding .besazimani[id] by document order (not sibling-walking, which mobile's per-section wrapping breaks).
function languageCodeForOl($ol) {
var $marks = $(".besazimani[id]").add($ol);
var ol = $ol.get(0);
var idx = $marks.index(ol);
for (var i = idx - 1; i >= 0; i--) {
var el = $marks.get(i);
if (el.id) {
return el.id;
}
}
return null;
}
// A <li> whose OWN direct content (not counting a nested <ol>) is wrapped in ".form-of-definition" is
// MediaWiki's "form of" template system marking that content as generated by a template -- e.g.
// {{ku-tewîna-nav}}'s "Formeke heval:" wrapper together with its "rewşa îzafeyî"/"rewşa çemandî"/...
// readings underneath. That whole nested block is normally the ENTIRE expansion of a single "#"
// wikitext line, with no separate "##" line behind any individual reading -- recursing into it would
// hand out one button per reading, each trying to match a "##" line that doesn't exist, and submit()
// would fail to find where to insert every one of them. A <li> without that class whose nested <ol>
// holds real hand-typed prose (e.g. sîno-koreyî/Navdêr's two genuinely separate "##" sub-senses) has
// no such problem -- those really are individually addressable wikitext lines.
function isFormOfWrapper($li) {
return $li.children(".form-of-definition").length > 0;
}
// Recurse into a <li>'s own nested <ol> UNLESS it's a form-of-template wrapper (see isFormOfWrapper) --
// a wrapper <li> with its own nested <ol> isn't itself a sense with content of its own, only its real
// (non-generated) leaves are.
function eachLeafDefinition($ol, fn) {
$ol.children("li").each(function() {
var $li = $(this);
var $childOl = $li.children("ol");
if ($childOl.length && !isFormOfWrapper($li)) {
$childOl.each(function() {
eachLeafDefinition($(this), fn);
});
} else {
fn($li);
}
});
}
$("h3").each(function() {
var sectionType = $(this).text().trim();
if (!sectionNames[sectionType]) {
return; // not a recognized word-sense section (Bilêvkirin, Etîmolojî, Çavkanî, ...)
}
var h3Id = $(this).attr("id");
// Forward-walk siblings to the definitions <ol>, skipping over a declension table/TemplateStyles/the
// headword line; stop (nothing to attach to in this section) if another heading comes first instead.
var $ol = null;
for (var $cursor = headingOuter($(this)).next(); $cursor.length; $cursor = $cursor.next()) {
if ($cursor.is("ol")) {
$ol = $cursor;
break;
}
if ($cursor.is(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6, h2, h3, h4, h5, h6")) {
break;
}
}
if (!$ol) {
return;
}
var language = languageCodeForOl($ol);
if (!language) {
console.warn("Gadget-wikt.add-examples: nikaribe koda zimanê vê beşê bibîne.", $ol);
return;
}
eachLeafDefinition($ol, function($li) {
// The pass above already added a button here (or will) -- an actual example already wrapped in
// its own "ul > li" group.
if ($li.find(EXISTING_EXAMPLE_SELECTOR).length) {
return;
}
var definitionLevel = [];
var $definitionItem = $li;
while ($definitionItem.prop("tagName") === "LI") {
// 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);
$definitionItem = $definitionItem.parent().parent();
}
definitionLevel.splice(0, 0, h3Id);
// A hidden, empty placeholder <li> so submit()'s existing "_$lastExample.after(newLi)" insertion
// (unchanged, same as the pass above) lands the first submitted example right before the button
// -- matching the existing convention of new examples going in before the button, not after it.
var $placeholder = $("<li style='display:none'></li>");
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
// A "ul" nested directly under a definition "li" starts hidden here (see the HQToggle-controlled
// jêder-citation-group "ul", which only ever renders with an explicit "style="display: block""
// set on it) -- this one has no HQToggle to unhide it, so it needs the same explicit override or
// the button (and the placeholder above) never becomes visible at all.
var $ul = $("<ul>").css("display", "block").append($placeholder).append($formItem);
// The form panel is inserted AFTER $ul (not inside it) once opened -- same reasoning as the first
// pass above: keeps the full-width panel out of the tight bulleted-list indentation on mobile.
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($placeholder, $button, $title, language, definitionLevel);
$ul.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$li.append($ul);
});
});
// Pulls the form panel flush with the page's own left/right edges, undoing whatever nested-list indent it inherited from sitting inside a deeply-nested definition.
function alignFormToPage($form) {
var $container = $form.closest(".mw-parser-output");
if (!$container.length) {
return;
}
var pad = parseFloat(window.getComputedStyle($container[0]).paddingLeft) || 0;
var containerLeft = $container.offset().left + pad;
var indent = $form.offset().left - containerLeft;
$form.css({
marginLeft: indent > 0 ? -indent : 0,
width: $container.width() + "px"
});
}
// Constructor for the edit form; lastExample/button/title/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, $title, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._$title = $title;
this._currentJederKey = "";
this._jederFieldWidgets = {};
// Set once a template is picked in the Kategorî:Çavkanî mode (see _selectCategoryTemplate); the
// canonical template title (without the "Şablon:" prefix), used as `sablon` in _doSubmit.
this._categoryTemplateName = null;
// Set by _renderCategoryTemplateFields if the picked template's TemplateData has a "koda zimanî" param;
// that param's own key, used to emit "<key>=<language>" in _doSubmit -- null if no such param exists.
this._categoryTemplateLangParamKey = null;
this._textInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
// Shown under the text box (see boldenPageTitle) when the page title can't be found in the example text
// as typed, so it won't get bolded; purely informational, doesn't block submitting.
this._titleBoldHint = $("<span class='add-example-title-bold-hint'></span>").hide();
this._updateTitleBoldHint = function() {
var text = self._textInput.getValue().trim();
var title = mw.config.get("wgTitle");
var show = !!text && !boldenPageTitle(text, title).bolded;
self._titleBoldHint.toggle(show).html(show ? "Sermade (" + escapeHtmlForBackdrop(title) + ") nehat dîtin; dê neyê <b>stûr</b>kirin." : "");
};
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
self._updateReadyHint();
self._updateTitleBoldHint();
});
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,
}));
}
}
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: CATEGORY_TEMPLATE_KEY,
label: "Ji Kategorî:Çavkanî şablonekê hilbijêre",
}));
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._sourceInput.on("change", function() {
self._updateReadyHint();
});
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. The Citoid fetch button sits right next to it (not in a separate box) -- see _urlRowWidget below.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
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, malûmatan 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));
this._sourceURLInput.on("change", function() {
self._updateReadyHint();
self._autofillVideoTimestamp();
});
// URL input + inline "auto-fill" button as one row (replaces the old separate framed Citoid box's
// button row) -- a plain OO.ui.Widget used purely as a flex-row container (same pattern as
// _loadingImage below: build it empty, then manually append its children's $elements). Disabling
// during submit() still goes through the individual _sourceURLInput/_citoidButton references, not
// through this wrapper.
this._urlRowWidget = new OO.ui.Widget({ classes: ["add-example-url-row"] });
this._urlRowWidget.$element.append(this._sourceURLInput.$element, this._citoidButton.$element);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, {
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;
// Shown right after a successful Citoid fetch (see _fillFromCitoid); hidden again on clear.
this._citoidSuccessMsg = $("<span class='add-example-citoid-success'>✓ Malûmat hatin dagirtin — li jêr kontrol bike.</span>").hide();
// 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("");
self._citoidSuccessMsg.hide();
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
// Plain div (not OO.ui.FieldsetLayout) so the grid CSS class applies directly to the field items.
this._jederFieldsFieldset = $("<div class='add-example-jeder-fields'>");
// "Malûmatên çavkaniyê" header (+ the "Vala bike" clear button) sitting right above the fields grid,
// replacing the old framed "Ji Citoid an bi destan tijî bike:" box -- like this only makes sense once
// a real jêder-* template is active (there's nothing here to show for the "citoid: not yet detected"
// placeholder or for free text), so the whole section toggles together in _setSourceType().
this._jederSection = $("<div class='add-example-jeder-section'>").append(
$("<div class='add-example-jeder-header'>")
.append($("<span class='add-example-jeder-header-label'>Malûmatên çavkaniyê</span>"))
.append(this._citoidClearButton.$element),
this._jederFieldsFieldset
);
// Kategorî:Çavkanî template search box: sits directly under the source-type dropdown in $topRight (not
// in the "Malûmatên çavkaniyê" section below, which is reserved for the picked template's own fields --
// see _setSourceType/_selectCategoryTemplate). Built once here, not rebuilt per _setSourceType call, so
// switching in and out of this dropdown mode doesn't lose its own DOM node/event handlers.
this._categoryTemplateInput = $("<input type='search' autocomplete='off' class='add-example-cat-tpl-input'>")
.attr("placeholder", "Li navê şablonê bigere…");
this._categoryTemplateResults = $("<ul class='add-example-cat-tpl-results'>").hide();
this._categoryTemplateStatus = $("<span class='add-example-cat-tpl-status'>Şablon tên barkirin…</span>");
this._categoryTemplateSearchRow = $("<div class='add-example-cat-tpl-search-row'>")
.append(this._categoryTemplateInput, this._categoryTemplateResults, this._categoryTemplateStatus)
.hide();
this._initCategoryTemplatePicker();
this._translationInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
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({ rows: 4 });
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Translîterasyona 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));
// Reactive "ready to submit" hint next to Biweşîne: no text yet, text but no source (still submittable
// as a bare {{nimûne}}), or fully ready -- kept in sync by _updateReadyHint(), wired to every field below.
this._readyHint = $("<span class='add-example-ready-hint'></span>").text("Metna nimûneyê lazim e.");
// True while a Citoid-eligible URL/DOI/ISBN is typed in but not yet fetched (or fetched then edited away) and no jêder field has been filled by hand -- the "looks done but isn't" trap this exists to catch. Not applicable in free-text mode, where the fetch button isn't even offered.
this._citoidPending = function() {
return self._currentJederKey !== "" &&
self._currentJederKey !== CATEGORY_TEMPLATE_KEY &&
!!self._sourceURLInput.getValue().trim() &&
!self._citoidSuccessMsg.is(":visible") &&
!Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
};
this._updateReadyHint = function() {
if (!self._textInput.getValue()) {
self._readyHint.text("Metna nimûneyê lazim e.");
return;
}
if (self._citoidPending()) {
self._readyHint.text("Pêşî 'Bi otomatîk tijî bike' bitikîne.");
return;
}
var hasSource = self._sourceInput.getValue().trim() || self._sourceURLInput.getValue().trim() ||
Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
self._readyHint.text(hasSource ? "Hazir e." : "Çavkanî nehatiye dayîn.");
};
// Prefills the Dem field from the typed URL's own "t=" (see wikihez.citoid.extractVideoTimestamp) once jêder-vîdeo is active -- never overwrites a value the user already entered by hand.
this._autofillVideoTimestamp = function() {
var demWidget = self._jederFieldWidgets.dem;
if (self._currentJederKey !== "jêder-vîdeo" || !demWidget || demWidget.getValue().trim()) {
return;
}
ensureCitoid().then(function() {
var dem = wikihez.citoid.extractVideoTimestamp(self._sourceURLInput.getValue().trim());
if (dem && !demWidget.getValue().trim()) {
demWidget.setValue(dem);
}
});
};
// framed:false (+ the "destructive" flag for the red text/hover) matches the mockup's borderless
// "Betal bike" -- a plain colored link rather than a boxed button, distinguishing it from Paqij bike.
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
framed: false,
});
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);
// Two-column top section (see "Form redesign for Kurdish example/Nimûne zêde bike.dc.html"): example
// text (+ translation/transliteration for non-ku, right after it, not after the source fields) on the
// left; source-type + link/Citoid on the right. Built as plain <div>s, not an OOUI layout -- OOUI has
// no CSS-grid container -- so .add-example-top-grid in the CSS can lay them out as a real responsive
// 7fr/5fr grid (collapsing to one column on narrow screens).
var $topLeft = $("<div class='add-example-top-col'>").append(textInputLayout.$element, this._titleBoldHint);
if (language !== "ku") {
$topLeft.append(translationInputLayout.$element);
}
if (!pageTitleIsLatin) {
$topLeft.append(transcriptionInputLayout.$element);
}
var $topRight = $("<div class='add-example-top-col'>").append(
sourceTypeLayout.$element,
this._categoryTemplateSearchRow,
this._sourceInputLayout.$element,
this._sourceURLInputLayout.$element,
this._citoidSuccessMsg
);
var $topGrid = $("<div class='add-example-top-grid'>").append($topLeft, $topRight);
// 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 (see the FieldLayout replaceWith() there).
this._fieldsLayout = $("<div class='add-example-fieldset'>").append($topGrid, this._jederSection);
// Bottom action row -- order/spacing matches the mockup: Biweşîne (+ spinner + ready hint), a spacer
// pushing the rest right, then Paqij bike (bordered/subtle) and Betal bike (borderless red text, via
// framed:false above). A plain flex <div>, not an OOUI HorizontalLayout, so the raw hint/spacer
// elements can sit alongside the real button widgets (same reasoning as the top grid above).
var $buttonsRow = $("<div class='add-example-main-buttons'>").append(
this._applyButton.$element,
this._loadingImage.$element,
this._readyHint,
$("<span class='add-example-buttons-spacer'></span>"),
this._clearButton.$element,
this._cancelButton.$element
);
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
});
this._frame.$element.append(this._fieldsLayout, $buttonsRow);
// 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");
initManualResize(this._frame.$element);
}
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 fetch button, and the "Malûmatên çavkaniyê" fields section toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateName = null;
this._categoryTemplateLangParamKey = null;
var isRealJederKey = jederKey && jederDefs[jederKey];
var isCategoryTemplateKey = jederKey === CATEGORY_TEMPLATE_KEY;
if (isRealJederKey) {
var def = jederDefs[jederKey];
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;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: ["add-example-field-span-" + (field.span || 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
}
// The search box itself is always in the DOM (see the constructor, it lives in $topRight) -- only
// shown in this one mode, and reset when leaving it so a stale query/selection doesn't linger for
// next time it's opened.
this._categoryTemplateSearchRow.toggle(isCategoryTemplateKey);
if (!isCategoryTemplateKey) {
this._categoryTemplateInput.val("");
this._categoryTemplateResults.hide();
}
// "Malûmatên çavkaniyê" header + fields grid: shown for a real jêder-* template (fields built above).
// For the Kategorî:Çavkanî picker it stays hidden here -- there's nothing to put in it until a
// template is actually picked, see _selectCategoryTemplate, which shows it once there is.
this._jederSection.toggle(!!isRealJederKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid fetch button: hidden for free text (nothing there for it to fill in) and for the
// Kategorî:Çavkanî picker (Citoid has no mapping for an arbitrary picked template), shown for
// "citoid" auto-detect and any real jêder-* key. The URL input itself next to it stays visible in
// every OTHER mode -- see the sourceURLInputLayout toggle below for the one exception.
this._citoidButton.toggle(jederKey !== "" && !isCategoryTemplateKey);
// URL field wording: plain "attach a link" phrasing for free text, 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 $oldLayout = this._sourceURLInputLayout.$element;
// Re-wraps the SAME _urlRowWidget (still holding _sourceURLInput + _citoidButton) in a new
// FieldLayout with the new label/help; the widget's $element moves along with it, same as the
// old addItems()/removeItems() swap did for the plain input before this redesign.
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, 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,
});
$oldLayout.replaceWith(this._sourceURLInputLayout.$element);
}
// The URL/Citoid row is normally always visible (see the constructor comment), but Citoid has no
// mapping for an arbitrary Kategorî:Çavkanî template, so it'd just be dead UI in that one mode.
this._sourceURLInputLayout.toggle(!isCategoryTemplateKey);
this._autofillVideoTimestamp();
this._updateReadyHint();
initManualResize(this._jederFieldsFieldset); // covers a freshly-rebuilt "sernav" field (jêder-*); the Kategorî:Çavkanî picker's own fields are resized separately once picked, see _renderCategoryTemplateFields
},
// Wires up the search box's own input/blur handlers and kicks off the template list fetch. Called once
// from the constructor -- the search box lives permanently in $topRight (see there), only shown/hidden
// by _setSourceType, so this only needs to run once, not every time the picker mode is entered.
_initCategoryTemplatePicker: function() {
var self = this;
function showResults(query) {
var q = query.trim().toLowerCase();
self._categoryTemplateResults.empty();
var list = catSrcTemplates || [];
var matched = q ? list.filter(function(entry) {
return entry.label.toLowerCase().indexOf(q) !== -1;
}) : list;
if (!matched.length) {
self._categoryTemplateResults.hide();
return;
}
matched.slice(0, 50).forEach(function(entry) {
var $li = $("<li>").text(entry.label);
// A redirect entry's label differs from its target -- mark where it actually resolves to.
if (entry.label !== entry.target) {
$li.append($("<span class='add-example-cat-tpl-redirect-arrow'>").text(" → " + entry.target));
}
$li.on("mousedown", function(e) {
e.preventDefault(); // keeps the input's blur (and the results-hiding it triggers) from firing before the click registers
self._selectCategoryTemplate(entry);
});
self._categoryTemplateResults.append($li);
});
self._categoryTemplateResults.show();
}
this._categoryTemplateInput.on("input focus", function() {
showResults($(this).val());
});
this._categoryTemplateInput.on("blur", function() {
setTimeout(function() { self._categoryTemplateResults.hide(); }, 200); // lets the mousedown handler above fire first
});
fetchCatSrcTemplates().then(function() {
self._categoryTemplateStatus.text("");
}, function() {
self._categoryTemplateStatus.text("Şablon nehatin barkirin.");
});
},
// Picks a template from the search results: records its canonical name -- a redirect entry resolves to
// its target, the output always uses that, never the redirect's own name (see fetchCatSrcTemplates) --
// and reveals/renders the "Malûmatên çavkaniyê" section for its parameter fields.
_selectCategoryTemplate: function(entry) {
this._categoryTemplateResults.hide();
// Left as the plain label (not "label → target") -- putting the arrow in the input's own value
// would get re-used as the search query if the box is focused again to pick something else.
this._categoryTemplateInput.val(entry.label);
this._categoryTemplateName = entry.target;
this._jederSection.toggle(true);
this._renderCategoryTemplateFields(entry.target);
},
// Builds one text input per TemplateData param of `name` into the shared "Malûmatên çavkaniyê" fields
// grid (_jederFieldsFieldset, the same one the jêder-* fields use), or a lone "Rûpel" fallback field if
// it has no TemplateData -- see the jêgirtin=/rûpel= example in the feature request this implements.
_renderCategoryTemplateFields: function(name) {
var self = this;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateLangParamKey = null;
fetchTemplateDataFor(name).then(function(params) {
// A param labeled exactly "koda zimanî" is filled from the language dropdown, not typed by hand
// -- find it (if any) before filtering, so it can be excluded from the rendered fields below
// and used by _doSubmit to emit "<key>=<language>" (see CATEGORY_TEMPLATE_LANG_LABEL).
(params || []).forEach(function(p) {
if ((p.label || "").trim().toLowerCase() === CATEGORY_TEMPLATE_LANG_LABEL) {
self._categoryTemplateLangParamKey = p.key;
}
});
var filtered = (params || []).filter(function(p) {
return CATEGORY_TEMPLATE_COVERED_PARAMS.indexOf(p.key) === -1 && p.key !== self._categoryTemplateLangParamKey;
});
var list = filtered.length ? filtered : [{ key: "rûpel", label: "Rûpel", required: false }];
list.forEach(function(p) {
// Reuse the jêder-* field's own width/multiline when this param's key matches one (see
// JEDER_FIELD_SIZE_BY_KEY) -- most Kategorî:Çavkanî templates share the same bibliographic
// param names, so e.g. "sernav" ends up full-width+multiline here too, not a generic box.
var sizeHint = JEDER_FIELD_SIZE_BY_KEY[p.key];
var widget = (sizeHint && sizeHint.multiline)
? new OO.ui.MultilineTextInputWidget({ rows: 2, autosize: false })
: new OO.ui.TextInputWidget();
self._jederFieldWidgets[p.key] = widget;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: p.label,
align: "top",
classes: ["add-example-field-span-" + (sizeHint ? sizeHint.span : 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
self._updateReadyHint();
initManualResize(self._jederFieldsFieldset); // matters now that a matched key like "sernav" can render multiline
});
},
// Fetches data via wikihez.citoid (loaded on demand by ensureCitoid() if needed), picks the matching jêder-* template, and fills its empty fields.
_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);
ensureCitoid().then(function() {
return wikihez.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 : wikihez.citoid.dataToJederFields(targetJederKey, result.raw, query);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
self._citoidSuccessMsg.show();
self._updateReadyHint();
mw.notify("Malûmat ji Citoid hatin barkirin.");
}, function(errorMsg) {
// wikihez.citoid may still be missing here if ensureCitoid() itself failed to load the script (e.g. network error) -- fall back to the bare error notice in that case.
if (!window.wikihez || !window.wikihez.citoid) {
mw.notify("Nekarî citoid-helper.js bar bike.");
return;
}
// Citoid can't fetch some sites at all (e.g. x.com/twitter.com) -- fall back to jêder-websîte with a website name guessed from the URL itself, rather than just a bare error.
var fallbackSite = wikihez.citoid.websiteNameForUrl(query);
if (fallbackSite) {
if (self._currentJederKey !== "jêder-websîte") {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData("jêder-websîte");
if (item) {
menu.chooseItem(item); // this calls _setSourceType("jêder-websîte") automatically
}
}
var websiteWidget = self._jederFieldWidgets["websîte"];
if (websiteWidget && !websiteWidget.getValue()) {
websiteWidget.setValue(fallbackSite);
}
mw.notify("Citoid nikare vê malperê bixwîne; şablona Websîte hate hilbijartin, ji kerema xwe mayî bi destan tijî bike.");
return;
}
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî malûmatan 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. The title text takes
// the button's place while open (see the "Form redesign for Kurdish example" mockup); the button
// itself stays put ready to reappear once the form is cancelled/closed.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._$title.toggle(visible);
this._frame.toggle(visible);
if (visible) {
alignFormToPage(this._frame.$element);
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._citoidSuccessMsg.hide();
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Warns before submitting if a Citoid URL/DOI/ISBN was typed but never successfully fetched, then defers
// to _doSubmit. The title-not-boldable case (see boldenPageTitle) is shown inline under the text box
// instead (_titleBoldHint) rather than blocking submission here.
submit: function() {
if (this._citoidPending() && !window.confirm("Te lînk, DOI an ISBN nivîsand lê hîn jê malûmat nehatine standin. Bêyî wan berdewam bikî?")) {
return;
}
this._doSubmit();
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
_doSubmit: 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; if a Kategorî:Çavkanî template was
// picked instead, collect its TemplateData-driven fields the same way, plus wekjêgirtin=1 for any
// "Ç:"-prefixed template (a quotation-equivalent, not a usage example -- see Modul:quote).
var jederParams = [];
var usingCategoryTemplate = this._currentJederKey === CATEGORY_TEMPLATE_KEY && !!this._categoryTemplateName;
if (usingCategoryTemplate) {
Object.keys(self._jederFieldWidgets).forEach(function(key) {
// A raw linebreak would break the single-line "#*" wikitext just like in the example text,
// but these are plain param values (not display text), so collapse to a space, not <br>.
var value = nlToSpace(self._jederFieldWidgets[key].getValue().trim());
if (value) {
jederParams.push(key + "=" + value);
}
});
// Only for a template whose own TemplateData actually names a "koda zimanî" param (see
// CATEGORY_TEMPLATE_LANG_LABEL) -- an arbitrary Kategorî:Çavkanî template has no guaranteed
// "param 1 = language" convention the way jêder-* does, so this isn't added unconditionally.
if (self._categoryTemplateLangParamKey) {
jederParams.push(self._categoryTemplateLangParamKey + "=" + self._language);
}
if (/^Ç:/.test(self._categoryTemplateName)) {
jederParams.push("wekjêgirtin=1");
}
} else if (this._currentJederKey && jederDefs[this._currentJederKey]) {
jederDefs[this._currentJederKey].fields.forEach(function(field) {
var widget = self._jederFieldWidgets[field.key];
var value = widget ? nlToSpace(widget.getValue().trim()) : "";
if (value) {
jederParams.push(field.key + "=" + value);
}
});
}
// A Kategorî:Çavkanî template is used as soon as it's picked, even with every field left blank
// (still submittable as a bare jêgirtin=); a jêder-* type only counts once a field is actually filled.
var usingJederTemplate = usingCategoryTemplate || (this._currentJederKey && jederParams.length > 0);
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-*/Kategorî:Çavkanî template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = usingCategoryTemplate ? this._categoryTemplateName : 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 -- only for jêder-*/jêder/nimûne, which are always designed with param 1 =
// language. A Kategorî:Çavkanî template only gets a language param when its own TemplateData
// names one ("koda zimanî") -- see the _categoryTemplateLangParamKey push above, already folded
// into jederParams with its own key, not assumed to be position 1.
if (!usingCategoryTemplate) {
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 (see boldenPageTitle), then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(boldenPageTitle(text, title).text);
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
if (translation) {
// Kategorî:Çavkanî templates route through Modul:quote directly and take its "t=" param name;
// the jêder-* templates use "tercime=" instead (see the jêder-* template docs).
code += "|" + (usingCategoryTemplate ? "t" : "tercime") + "=" + translation;
}
}
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
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)) {
// Match only the specific numbered section the button was clicked in (e.g. "Navdêr 2",
// not just the first "===Navdêr...===" heading found) -- both sides are "" when the
// section has no number at all (a single unnumbered "===Navdêr===").
var matchedSectionNumValue = matchedSectionNum ? parseInt(matchedSectionNum, 10) : "";
if (matchedSectionNumValue === sectionNum) {
// 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(code, result) {
error("Nekarî rûpelê xilas bike: " + apiErrorMessage(code, result));
});
}, function(code, result) {
error("Nekarî naveroka rûpelê bistîne: " + apiErrorMessage(code, result));
});
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>
qhq1h99zcka9qpj15w2r6inkcqc2flk
6342839
6342811
2026-08-27T07:08:01Z
Wikihez
7344
6342839
javascript
text/javascript
// <nowiki>
// dependencies (declared in MediaWiki:Gadgets-definition): oojs, oojs-ui, ext.gadget.citoid-helper (wikihez.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 = "2.0";
// 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 normally lives in MediaWiki:Gadget-citoid-helper.js as a registered gadget dependency; not
// currently editable, so ensureCitoid() (below) loads it from a user testing page on demand instead.
// Sentinel _currentJederKey value for the "pick a template from Kategorî:Çavkanî" dropdown option -- not a
// real jederDefs key, same convention as Wiki/start.js's own "__category__" picker.
var CATEGORY_TEMPLATE_KEY = "__category__";
// TemplateData params already covered by the form's own top-level text/translation/transliteration boxes --
// skipped when building a Kategorî:Çavkanî template's dynamic fields (see _renderCategoryTemplateFields) so
// they don't get a redundant duplicate inputbox.
var CATEGORY_TEMPLATE_COVERED_PARAMS = ["jêgirtin", "jg", "t", "tr"];
// A TemplateData param labeled exactly this (case/whitespace-insensitive) is auto-filled from the language
// dropdown instead of shown as its own inputbox -- see _renderCategoryTemplateFields/_doSubmit. Unlike
// jêder-*, an arbitrary Kategorî:Çavkanî template has no guaranteed "param 1 = language" convention, so this
// only applies when the template's own TemplateData actually declares such a param.
var CATEGORY_TEMPLATE_LANG_LABEL = "koda zimanî";
// "span" is the field's width in the 12-column grid the fields render in (see .add-example-jeder-fields
// in the CSS and _setSourceType below) -- field ORDER here is also the grid's reading order.
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "cih", "label": "Cih", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "sala-weşandinê", "label": "Sala weşandinê", "span": 2 },
{ "key": "çap", "label": "Çap", "span": 1 },
{ "key": "rûpel", "label": "Rûpel", "span": 1 },
{ "key": "isbn", "label": "ISBN", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "kovar", "label": "Kovar", "span": 4 },
{ "key": "cild", "label": "Cild", "span": 2 },
{ "key": "hejmar", "label": "Hejmar", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "rûpel", "label": "Rûpel", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 4 },
{ "key": "terciman", "label": "Terciman", "span": 4 },
{ "key": "websîte", "label": "Websîte", "span": 4 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "url", "label": "URL", "span": 5 },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "span": 5 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "tarîx", "label": "Tarîx", "span": 1 }
]
},
"jêder-vîdeo": {
"label": "Vîdeo",
"fields": [
{ "key": "hunermend", "label": "Hunermend", "span": 6 },
{ "key": "platform", "label": "Platform", "span": 6 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "tarîx", "label": "Tarîx", "span": 3 },
{ "key": "dem", "label": "Dem", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
}
};
// Field key -> {span, multiline}, from the FIRST jêder-* def (in jederDefs's own declaration order above)
// that defines it -- e.g. "sernav" ends up span 12 + multiline everywhere. Used to size a Kategorî:Çavkanî
// template's dynamic TemplateData fields the same way when a param key matches a known jêder-* field key,
// since most of these templates share the same handful of bibliographic param names (see
// _renderCategoryTemplateFields).
var JEDER_FIELD_SIZE_BY_KEY = {};
Object.keys(jederDefs).forEach(function(jederKey) {
jederDefs[jederKey].fields.forEach(function(field) {
if (!JEDER_FIELD_SIZE_BY_KEY[field.key]) {
JEDER_FIELD_SIZE_BY_KEY[field.key] = { span: field.span || 4, multiline: !!field.multiline };
}
});
});
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;
}
// Same problem as nlToBr (a raw newline breaks the single-line "#*" wikitext), but for jêder-*/Kategorî:Çavkanî
// param values (sernav, nivîskar, ...) a literal <br> would leak into the rendered citation text, so these get
// collapsed to a plain space instead.
function nlToSpace(text) {
return text ? text.replace(/\r\n|\r|\n/g, " ") : text;
}
// URL of a template's own wiki page, ported from Wiki/util.js's own tplPageUrl -- lets the user verify which
// template a Kategorî:Çavkanî search result actually is before picking it (see showResults below).
function tplPageUrl(name) {
var title = "Şablon:" + name;
return (window.mw && mw.util && typeof mw.util.getUrl === "function") ? mw.util.getUrl(title) : "/wiki/" + encodeURIComponent(title);
}
// Escapes str for safe interpolation into a RegExp -- page titles can contain regex metacharacters
// (parentheses for disambiguation, periods in abbreviation entries, etc.).
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
// Wraps the first occurrence of the page title (+ an optional glued-on suffix, e.g. a plural "-an") in the
// example text with wikitext bold markup, so the headword stands out in the rendered example. Skips it if
// the title is already bolded by hand, to avoid turning "'''reh'''" into "'''''reh'''''" (bold+italic).
// Returns {text, bolded}; bolded is false if the title wasn't found anywhere and nothing changed.
function boldenPageTitle(text, title) {
var escapedTitle = escapeRegExp(title);
var suffixPattern = "([^\\s.,;?!()']+)?";
if (new RegExp("'''" + escapedTitle + suffixPattern + "'''", "i").test(text)) {
return { text: text, bolded: true };
}
var bolded = text.replace(new RegExp("(" + escapedTitle + suffixPattern + ")", "ig"), "'''$1'''");
return { text: bolded, bolded: bolded !== text };
}
// Extracts a human-readable message from an mw.Api rejection (code, result).
function apiErrorMessage(code, result) {
return (result && result.error && result.error.info) || (typeof code === "string" ? code : "Xeletiyeke nenas");
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
// Custom drag-to-resize grip for textareas, ported from Wiki/start.js's wiktkuMakeManualResizable() -- Safari
// has no native corner resize handle on textareas at all, this is the fix start.js already uses for that.
// Inserted as a SIBLING within the textarea's existing OOUI wrapper (same reasoning as
// ensureLinebreakBackdrop above: wrapping the textarea in a NEW div risks disturbing OOUI's own layout),
// not by wrapping it in a new div like start.js's own version does. Unlike start.js's version, this doesn't
// persist the chosen height across page loads (start.js keys that off the textarea's own CSS class, but
// every textarea here is a plain OOUI MultilineTextInputWidget with no distinguishing class, so a direct
// port would have every field here share one save slot and overwrite each other's heights).
function makeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.data("addExampleResizableDone")) {
return;
}
textarea.data("addExampleResizableDone", true);
textarea.css("resize", "none"); // replaced by the custom grip below
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var grip = $("<div class='add-example-resize-grip'></div>");
textarea.after(grip);
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) { /* already released */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
}
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 makeManualResizable to every textarea in `context` (itself or its descendants).
function initManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function() {
makeManualResizable(this);
});
}
var api = new mw.Api();
// Loads wikihez.citoid if it isn't already loaded, from Wikihez's testing page (MediaWiki: isn't editable
// right now) -- self-contained rather than calling wikihez.citoidHelper.ensure() directly, since that
// function only exists once citoid-helper.js has already run once, which isn't guaranteed here.
function ensureCitoid() {
if (window.wikihez && window.wikihez.citoid) {
return $.Deferred().resolve().promise();
}
var url = mw.util.getUrl("Bikarhêner:Wikihez/skrîpt/js/Gadget-citoid-helper.js", {
action: "raw",
ctype: "text/javascript"
});
return mw.loader.getScript(mw.config.get("wgServer") + url);
}
// Kategorî:Çavkanî's template members plus their redirects (each redirect as its own searchable entry
// pointing at the same canonical target, so a template is findable by any of its names). Ported from
// Wiki/start.js's fetchCatSrcTemplates(), extended with prop=redirects. Cached after first fetch.
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) {
return catSrcTemplatesPromise;
}
catSrcTemplatesPromise = api.get({
action: "query",
generator: "categorymembers",
gcmtitle: "Kategorî:Çavkanî",
gcmnamespace: 10,
gcmlimit: "max",
prop: "redirects",
rdnamespace: 10,
rdlimit: "max",
formatversion: 2,
}).then(function(data) {
var pages = (data.query && data.query.pages) || [];
var list = [];
pages.forEach(function(page) {
var target = page.title.replace(/^[^:]+:/, "");
list.push({ label: target, target: target });
(page.redirects || []).forEach(function(redirect) {
list.push({ label: redirect.title.replace(/^[^:]+:/, ""), target: target });
});
});
list.sort(function(a, b) {
return a.label.localeCompare(b.label, mw.config.get("wgUserLanguage"));
});
catSrcTemplates = list;
return list;
}, function() {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
// TemplateData params for one template (name without the "Şablon:" prefix); redirects:1 so this also
// resolves if `name` is itself a redirect. Resolves to [] if the template has no TemplateData. Cached.
var tplDataCache = {};
function fetchTemplateDataFor(name) {
if (Object.prototype.hasOwnProperty.call(tplDataCache, name)) {
return $.Deferred().resolve(tplDataCache[name]).promise();
}
return api.get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2,
}).then(function(data) {
var pages = (data && data.pages) || {};
var first = null;
Object.keys(pages).forEach(function(id) {
if (!first) {
first = pages[id];
}
});
var params = [];
if (first && first.params) {
Object.keys(first.params).forEach(function(key) {
var p = first.params[key];
var label = p && p.label;
if (label && typeof label === "object") {
var userLang = mw.config.get("wgUserLanguage");
label = label[userLang] || label.en || label[Object.keys(label)[0]];
}
params.push({ key: key, label: label || key, required: !!(p && p.required) });
});
}
tplDataCache[name] = params;
return params;
}, function() {
tplDataCache[name] = [];
return [];
});
}
// Language display name, read from the matching section's .besazimani link text.
function languageNameForCode(code) {
var $mark = $(".besazimani[id='" + code + "']").first();
return $mark.length ? $mark.text().trim() : null;
}
// Whether the page title itself (accented Kurdish Latin letters included) is written in Latin script.
var pageTitleIsLatin = !/[^\x00-\x7FÀ-ɏḀ-ỿ‘’]/.test(mw.config.get("wgTitle") || "");
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex containers used directly by Şablon:nimûne; .citation-whole = Modul:quote's own wrapper, now used by jêder-* templates (Modul:quote nests .h-quotation inside .citation-whole > dl > dd instead of putting it directly under the <li>, so it needs its own entry here).
// Requiring "ul > li >" is what makes this only match an example that's grouped into its own <ul> -- a
// {{nimûne}} (or its "mk" redirect) with no jêder-family citation alongside it in the same definition
// renders straight under the definition's own content instead, with no such group; also reused below to
// tell whether the second pass still needs to handle a given definition.
var EXISTING_EXAMPLE_SELECTOR = "ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation, ul > li > .citation-whole";
$(EXISTING_EXAMPLE_SELECTOR).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.
// A jêder-* citation with no jêgirtin= (quotation text) yet renders no h-quotation/e-quotation at all
// (see get_quote() in Modul quote.lua) -- exactly the "bare citation" case this button exists to fill
// in, so this can't just crash: without the guard, [0] is undefined here and ".lang" throws, which
// (since $.each() has no try/catch) silently kills the button for every remaining match on the page.
var $langEl = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0];
if (!$langEl) {
console.warn("Gadget-wikt.add-examples: nikaribe zimanê vê nimûneyê bibîne, valakirî hate derbaskirin.", $item);
return;
}
var language = $langEl.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. $group is the citation-group <ul> itself (parent of $item);
// the form panel is inserted AFTER it (see click handler below), not inside it, so the panel isn't
// squeezed into that <ul>'s narrow hanging-indent width on mobile -- only the button/title stays
// there, matching the "Form redesign for Kurdish example" mockup (title inside the bullet list,
// full-width panel below it).
var $group = $item.parent();
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($item, $button, $title, language, definitionLevel);
$group.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem);
}
});
// Second pass: some definitions have no example the pass above could react to at all -- either genuinely
// zero examples, or one rendered via {{nimûne}} (or its "mk" redirect) with no jêder-family citation next
// to it, which (see the comment on EXISTING_EXAMPLE_SELECTOR above) renders with no "ul > li" group to
// match. This walks every recognized POS section's own definitions list directly instead of reacting to
// an existing example, and reads the language off the language section's own <h2> rather than off an
// example -- so it doesn't need one to already exist. Everything else (Form, submit()) is reused as-is.
// MediaWiki wraps each heading in a "mw-heading2"/"mw-heading3"/... div in current skin output; falls
// back to the bare heading element for older/other output that doesn't wrap it.
function headingOuter($h) {
var $wrap = $h.closest(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6");
return $wrap.length ? $wrap : $h;
}
// Section's language code: nearest preceding .besazimani[id] by document order (not sibling-walking, which mobile's per-section wrapping breaks).
function languageCodeForOl($ol) {
var $marks = $(".besazimani[id]").add($ol);
var ol = $ol.get(0);
var idx = $marks.index(ol);
for (var i = idx - 1; i >= 0; i--) {
var el = $marks.get(i);
if (el.id) {
return el.id;
}
}
return null;
}
// A <li> whose OWN direct content (not counting a nested <ol>) is wrapped in ".form-of-definition" is
// MediaWiki's "form of" template system marking that content as generated by a template -- e.g.
// {{ku-tewîna-nav}}'s "Formeke heval:" wrapper together with its "rewşa îzafeyî"/"rewşa çemandî"/...
// readings underneath. That whole nested block is normally the ENTIRE expansion of a single "#"
// wikitext line, with no separate "##" line behind any individual reading -- recursing into it would
// hand out one button per reading, each trying to match a "##" line that doesn't exist, and submit()
// would fail to find where to insert every one of them. A <li> without that class whose nested <ol>
// holds real hand-typed prose (e.g. sîno-koreyî/Navdêr's two genuinely separate "##" sub-senses) has
// no such problem -- those really are individually addressable wikitext lines.
function isFormOfWrapper($li) {
return $li.children(".form-of-definition").length > 0;
}
// Recurse into a <li>'s own nested <ol> UNLESS it's a form-of-template wrapper (see isFormOfWrapper) --
// a wrapper <li> with its own nested <ol> isn't itself a sense with content of its own, only its real
// (non-generated) leaves are.
function eachLeafDefinition($ol, fn) {
$ol.children("li").each(function() {
var $li = $(this);
var $childOl = $li.children("ol");
if ($childOl.length && !isFormOfWrapper($li)) {
$childOl.each(function() {
eachLeafDefinition($(this), fn);
});
} else {
fn($li);
}
});
}
$("h3").each(function() {
var sectionType = $(this).text().trim();
if (!sectionNames[sectionType]) {
return; // not a recognized word-sense section (Bilêvkirin, Etîmolojî, Çavkanî, ...)
}
var h3Id = $(this).attr("id");
// Forward-walk siblings to the definitions <ol>, skipping over a declension table/TemplateStyles/the
// headword line; stop (nothing to attach to in this section) if another heading comes first instead.
var $ol = null;
for (var $cursor = headingOuter($(this)).next(); $cursor.length; $cursor = $cursor.next()) {
if ($cursor.is("ol")) {
$ol = $cursor;
break;
}
if ($cursor.is(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6, h2, h3, h4, h5, h6")) {
break;
}
}
if (!$ol) {
return;
}
var language = languageCodeForOl($ol);
if (!language) {
console.warn("Gadget-wikt.add-examples: nikaribe koda zimanê vê beşê bibîne.", $ol);
return;
}
eachLeafDefinition($ol, function($li) {
// The pass above already added a button here (or will) -- an actual example already wrapped in
// its own "ul > li" group.
if ($li.find(EXISTING_EXAMPLE_SELECTOR).length) {
return;
}
var definitionLevel = [];
var $definitionItem = $li;
while ($definitionItem.prop("tagName") === "LI") {
// 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);
$definitionItem = $definitionItem.parent().parent();
}
definitionLevel.splice(0, 0, h3Id);
// A hidden, empty placeholder <li> so submit()'s existing "_$lastExample.after(newLi)" insertion
// (unchanged, same as the pass above) lands the first submitted example right before the button
// -- matching the existing convention of new examples going in before the button, not after it.
var $placeholder = $("<li style='display:none'></li>");
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
// A "ul" nested directly under a definition "li" starts hidden here (see the HQToggle-controlled
// jêder-citation-group "ul", which only ever renders with an explicit "style="display: block""
// set on it) -- this one has no HQToggle to unhide it, so it needs the same explicit override or
// the button (and the placeholder above) never becomes visible at all.
var $ul = $("<ul>").css("display", "block").append($placeholder).append($formItem);
// The form panel is inserted AFTER $ul (not inside it) once opened -- same reasoning as the first
// pass above: keeps the full-width panel out of the tight bulleted-list indentation on mobile.
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($placeholder, $button, $title, language, definitionLevel);
$ul.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$li.append($ul);
});
});
// Pulls the form panel flush with the page's own left/right edges, undoing whatever nested-list indent it inherited from sitting inside a deeply-nested definition.
function alignFormToPage($form) {
var $container = $form.closest(".mw-parser-output");
if (!$container.length) {
return;
}
var pad = parseFloat(window.getComputedStyle($container[0]).paddingLeft) || 0;
var containerLeft = $container.offset().left + pad;
var indent = $form.offset().left - containerLeft;
$form.css({
marginLeft: indent > 0 ? -indent : 0,
width: $container.width() + "px"
});
}
// Constructor for the edit form; lastExample/button/title/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, $title, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._$title = $title;
this._currentJederKey = "";
this._jederFieldWidgets = {};
// Set once a template is picked in the Kategorî:Çavkanî mode (see _selectCategoryTemplate); the
// canonical template title (without the "Şablon:" prefix), used as `sablon` in _doSubmit.
this._categoryTemplateName = null;
// Set by _renderCategoryTemplateFields if the picked template's TemplateData has a "koda zimanî" param;
// that param's own key, used to emit "<key>=<language>" in _doSubmit -- null if no such param exists.
this._categoryTemplateLangParamKey = null;
this._textInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
// Shown under the text box (see boldenPageTitle) when the page title can't be found in the example text
// as typed, so it won't get bolded; purely informational, doesn't block submitting.
this._titleBoldHint = $("<span class='add-example-title-bold-hint'></span>").hide();
this._updateTitleBoldHint = function() {
var text = self._textInput.getValue().trim();
var title = mw.config.get("wgTitle");
var show = !!text && !boldenPageTitle(text, title).bolded;
self._titleBoldHint.toggle(show).html(show ? "Sermade (" + escapeHtmlForBackdrop(title) + ") nehat dîtin; dê neyê <b>stûr</b>kirin." : "");
};
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
self._updateReadyHint();
self._updateTitleBoldHint();
});
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,
}));
}
}
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: CATEGORY_TEMPLATE_KEY,
label: "Ji Kategorî:Çavkanî şablonekê hilbijêre",
}));
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._sourceInput.on("change", function() {
self._updateReadyHint();
});
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. The Citoid fetch button sits right next to it (not in a separate box) -- see _urlRowWidget below.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
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, malûmatan 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));
this._sourceURLInput.on("change", function() {
self._updateReadyHint();
self._autofillVideoTimestamp();
});
// URL input + inline "auto-fill" button as one row (replaces the old separate framed Citoid box's
// button row) -- a plain OO.ui.Widget used purely as a flex-row container (same pattern as
// _loadingImage below: build it empty, then manually append its children's $elements). Disabling
// during submit() still goes through the individual _sourceURLInput/_citoidButton references, not
// through this wrapper.
this._urlRowWidget = new OO.ui.Widget({ classes: ["add-example-url-row"] });
this._urlRowWidget.$element.append(this._sourceURLInput.$element, this._citoidButton.$element);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, {
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;
// Shown right after a successful Citoid fetch (see _fillFromCitoid); hidden again on clear.
this._citoidSuccessMsg = $("<span class='add-example-citoid-success'>✓ Malûmat hatin dagirtin — li jêr kontrol bike.</span>").hide();
// 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("");
self._citoidSuccessMsg.hide();
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
// Plain div (not OO.ui.FieldsetLayout) so the grid CSS class applies directly to the field items.
this._jederFieldsFieldset = $("<div class='add-example-jeder-fields'>");
// "Malûmatên çavkaniyê" header (+ the "Vala bike" clear button) sitting right above the fields grid,
// replacing the old framed "Ji Citoid an bi destan tijî bike:" box -- like this only makes sense once
// a real jêder-* template is active (there's nothing here to show for the "citoid: not yet detected"
// placeholder or for free text), so the whole section toggles together in _setSourceType().
this._jederSection = $("<div class='add-example-jeder-section'>").append(
$("<div class='add-example-jeder-header'>")
.append($("<span class='add-example-jeder-header-label'>Malûmatên çavkaniyê</span>"))
.append(this._citoidClearButton.$element),
this._jederFieldsFieldset
);
// Kategorî:Çavkanî template search box: sits directly under the source-type dropdown in $topRight (not
// in the "Malûmatên çavkaniyê" section below, which is reserved for the picked template's own fields --
// see _setSourceType/_selectCategoryTemplate). Built once here, not rebuilt per _setSourceType call, so
// switching in and out of this dropdown mode doesn't lose its own DOM node/event handlers.
this._categoryTemplateInput = $("<input type='search' autocomplete='off' class='add-example-cat-tpl-input'>")
.attr("placeholder", "Li navê şablonê bigere…");
this._categoryTemplateResults = $("<ul class='add-example-cat-tpl-results'>").hide();
this._categoryTemplateStatus = $("<span class='add-example-cat-tpl-status'>Şablon tên barkirin…</span>");
this._categoryTemplateSearchRow = $("<div class='add-example-cat-tpl-search-row'>")
.append(this._categoryTemplateInput, this._categoryTemplateResults, this._categoryTemplateStatus)
.hide();
this._initCategoryTemplatePicker();
this._translationInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
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({ rows: 4 });
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Translîterasyona 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));
// Reactive "ready to submit" hint next to Biweşîne: no text yet, text but no source (still submittable
// as a bare {{nimûne}}), or fully ready -- kept in sync by _updateReadyHint(), wired to every field below.
this._readyHint = $("<span class='add-example-ready-hint'></span>").text("Metna nimûneyê lazim e.");
// True while a Citoid-eligible URL/DOI/ISBN is typed in but not yet fetched (or fetched then edited away) and no jêder field has been filled by hand -- the "looks done but isn't" trap this exists to catch. Not applicable in free-text mode, where the fetch button isn't even offered.
this._citoidPending = function() {
return self._currentJederKey !== "" &&
self._currentJederKey !== CATEGORY_TEMPLATE_KEY &&
!!self._sourceURLInput.getValue().trim() &&
!self._citoidSuccessMsg.is(":visible") &&
!Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
};
this._updateReadyHint = function() {
if (!self._textInput.getValue()) {
self._readyHint.text("Metna nimûneyê lazim e.");
return;
}
if (self._citoidPending()) {
self._readyHint.text("Pêşî 'Bi otomatîk tijî bike' bitikîne.");
return;
}
var hasSource = self._sourceInput.getValue().trim() || self._sourceURLInput.getValue().trim() ||
Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
self._readyHint.text(hasSource ? "Hazir e." : "Çavkanî nehatiye dayîn.");
};
// Prefills the Dem field from the typed URL's own "t=" (see wikihez.citoid.extractVideoTimestamp) once jêder-vîdeo is active -- never overwrites a value the user already entered by hand.
this._autofillVideoTimestamp = function() {
var demWidget = self._jederFieldWidgets.dem;
if (self._currentJederKey !== "jêder-vîdeo" || !demWidget || demWidget.getValue().trim()) {
return;
}
ensureCitoid().then(function() {
var dem = wikihez.citoid.extractVideoTimestamp(self._sourceURLInput.getValue().trim());
if (dem && !demWidget.getValue().trim()) {
demWidget.setValue(dem);
}
});
};
// framed:false (+ the "destructive" flag for the red text/hover) matches the mockup's borderless
// "Betal bike" -- a plain colored link rather than a boxed button, distinguishing it from Paqij bike.
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
framed: false,
});
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);
// Two-column top section (see "Form redesign for Kurdish example/Nimûne zêde bike.dc.html"): example
// text (+ translation/transliteration for non-ku, right after it, not after the source fields) on the
// left; source-type + link/Citoid on the right. Built as plain <div>s, not an OOUI layout -- OOUI has
// no CSS-grid container -- so .add-example-top-grid in the CSS can lay them out as a real responsive
// 7fr/5fr grid (collapsing to one column on narrow screens).
var $topLeft = $("<div class='add-example-top-col'>").append(textInputLayout.$element, this._titleBoldHint);
if (language !== "ku") {
$topLeft.append(translationInputLayout.$element);
}
if (!pageTitleIsLatin) {
$topLeft.append(transcriptionInputLayout.$element);
}
var $topRight = $("<div class='add-example-top-col'>").append(
sourceTypeLayout.$element,
this._categoryTemplateSearchRow,
this._sourceInputLayout.$element,
this._sourceURLInputLayout.$element,
this._citoidSuccessMsg
);
var $topGrid = $("<div class='add-example-top-grid'>").append($topLeft, $topRight);
// 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 (see the FieldLayout replaceWith() there).
this._fieldsLayout = $("<div class='add-example-fieldset'>").append($topGrid, this._jederSection);
// Bottom action row -- order/spacing matches the mockup: Biweşîne (+ spinner + ready hint), a spacer
// pushing the rest right, then Paqij bike (bordered/subtle) and Betal bike (borderless red text, via
// framed:false above). A plain flex <div>, not an OOUI HorizontalLayout, so the raw hint/spacer
// elements can sit alongside the real button widgets (same reasoning as the top grid above).
var $buttonsRow = $("<div class='add-example-main-buttons'>").append(
this._applyButton.$element,
this._loadingImage.$element,
this._readyHint,
$("<span class='add-example-buttons-spacer'></span>"),
this._clearButton.$element,
this._cancelButton.$element
);
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
});
this._frame.$element.append(this._fieldsLayout, $buttonsRow);
// 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");
initManualResize(this._frame.$element);
}
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 fetch button, and the "Malûmatên çavkaniyê" fields section toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateName = null;
this._categoryTemplateLangParamKey = null;
var isRealJederKey = jederKey && jederDefs[jederKey];
var isCategoryTemplateKey = jederKey === CATEGORY_TEMPLATE_KEY;
if (isRealJederKey) {
var def = jederDefs[jederKey];
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;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: ["add-example-field-span-" + (field.span || 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
}
// The search box itself is always in the DOM (see the constructor, it lives in $topRight) -- only
// shown in this one mode, and reset when leaving it so a stale query/selection doesn't linger for
// next time it's opened.
this._categoryTemplateSearchRow.toggle(isCategoryTemplateKey);
if (!isCategoryTemplateKey) {
this._categoryTemplateInput.val("");
this._categoryTemplateResults.hide();
}
// "Malûmatên çavkaniyê" header + fields grid: shown for a real jêder-* template (fields built above).
// For the Kategorî:Çavkanî picker it stays hidden here -- there's nothing to put in it until a
// template is actually picked, see _selectCategoryTemplate, which shows it once there is.
this._jederSection.toggle(!!isRealJederKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid fetch button: hidden for free text (nothing there for it to fill in) and for the
// Kategorî:Çavkanî picker (Citoid has no mapping for an arbitrary picked template), shown for
// "citoid" auto-detect and any real jêder-* key. The URL input itself next to it stays visible in
// every OTHER mode -- see the sourceURLInputLayout toggle below for the one exception.
this._citoidButton.toggle(jederKey !== "" && !isCategoryTemplateKey);
// URL field wording: plain "attach a link" phrasing for free text, 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 $oldLayout = this._sourceURLInputLayout.$element;
// Re-wraps the SAME _urlRowWidget (still holding _sourceURLInput + _citoidButton) in a new
// FieldLayout with the new label/help; the widget's $element moves along with it, same as the
// old addItems()/removeItems() swap did for the plain input before this redesign.
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, 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,
});
$oldLayout.replaceWith(this._sourceURLInputLayout.$element);
}
// The URL/Citoid row is normally always visible (see the constructor comment), but Citoid has no
// mapping for an arbitrary Kategorî:Çavkanî template, so it'd just be dead UI in that one mode.
this._sourceURLInputLayout.toggle(!isCategoryTemplateKey);
this._autofillVideoTimestamp();
this._updateReadyHint();
initManualResize(this._jederFieldsFieldset); // covers a freshly-rebuilt "sernav" field (jêder-*); the Kategorî:Çavkanî picker's own fields are resized separately once picked, see _renderCategoryTemplateFields
},
// Wires up the search box's own input/blur handlers and kicks off the template list fetch. Called once
// from the constructor -- the search box lives permanently in $topRight (see there), only shown/hidden
// by _setSourceType, so this only needs to run once, not every time the picker mode is entered.
_initCategoryTemplatePicker: function() {
var self = this;
function showResults(query) {
var q = query.trim().toLowerCase();
self._categoryTemplateResults.empty();
var list = catSrcTemplates || [];
var matched = q ? list.filter(function(entry) {
return entry.label.toLowerCase().indexOf(q) !== -1;
}) : list;
if (!matched.length) {
self._categoryTemplateResults.hide();
return;
}
matched.slice(0, 50).forEach(function(entry) {
var $li = $("<li class='add-example-cat-tpl-row'>");
var $text = $("<span class='add-example-cat-tpl-text'>").text(entry.label);
// A redirect entry's label differs from its target -- mark where it actually resolves to.
if (entry.label !== entry.target) {
$text.append($("<span class='add-example-cat-tpl-redirect-arrow'>").text(" → " + entry.target));
}
// Lets the user verify which template a result actually is before picking it, same "🔗
// opens the template's own page" affordance Wiki/start.js uses in its own searchable
// dropdowns -- always points at the canonical target, never a redirect's own page.
var $link = $("<a class='add-example-cat-tpl-link' target='_blank' rel='noopener'>🔗</a>")
.attr("title", "Rûpela şablonê veke")
.attr("href", tplPageUrl(entry.target));
// stopPropagation only -- preventDefault would stop the link from actually navigating, and
// this must not also select the row the way clicking elsewhere in it does (see below).
$link.on("mousedown click", function(e) { e.stopPropagation(); });
$li.append($text, $link);
$li.on("mousedown", function(e) {
e.preventDefault(); // keeps the input's blur (and the results-hiding it triggers) from firing before the click registers
self._selectCategoryTemplate(entry);
});
self._categoryTemplateResults.append($li);
});
self._categoryTemplateResults.show();
}
this._categoryTemplateInput.on("input focus", function() {
showResults($(this).val());
});
this._categoryTemplateInput.on("blur", function() {
setTimeout(function() { self._categoryTemplateResults.hide(); }, 200); // lets the mousedown handler above fire first
});
fetchCatSrcTemplates().then(function() {
self._categoryTemplateStatus.text("");
}, function() {
self._categoryTemplateStatus.text("Şablon nehatin barkirin.");
});
},
// Picks a template from the search results: records its canonical name -- a redirect entry resolves to
// its target, the output always uses that, never the redirect's own name (see fetchCatSrcTemplates) --
// and reveals/renders the "Malûmatên çavkaniyê" section for its parameter fields.
_selectCategoryTemplate: function(entry) {
this._categoryTemplateResults.hide();
// Left as the plain label (not "label → target") -- putting the arrow in the input's own value
// would get re-used as the search query if the box is focused again to pick something else.
this._categoryTemplateInput.val(entry.label);
this._categoryTemplateName = entry.target;
this._jederSection.toggle(true);
this._renderCategoryTemplateFields(entry.target);
},
// Builds one text input per TemplateData param of `name` into the shared "Malûmatên çavkaniyê" fields
// grid (_jederFieldsFieldset, the same one the jêder-* fields use), or a lone "Rûpel" fallback field if
// it has no TemplateData -- see the jêgirtin=/rûpel= example in the feature request this implements.
_renderCategoryTemplateFields: function(name) {
var self = this;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateLangParamKey = null;
fetchTemplateDataFor(name).then(function(params) {
// A param labeled exactly "koda zimanî" is filled from the language dropdown, not typed by hand
// -- find it (if any) before filtering, so it can be excluded from the rendered fields below
// and used by _doSubmit to emit "<key>=<language>" (see CATEGORY_TEMPLATE_LANG_LABEL).
(params || []).forEach(function(p) {
if ((p.label || "").trim().toLowerCase() === CATEGORY_TEMPLATE_LANG_LABEL) {
self._categoryTemplateLangParamKey = p.key;
}
});
var filtered = (params || []).filter(function(p) {
return CATEGORY_TEMPLATE_COVERED_PARAMS.indexOf(p.key) === -1 && p.key !== self._categoryTemplateLangParamKey;
});
var list = filtered.length ? filtered : [{ key: "rûpel", label: "Rûpel", required: false }];
list.forEach(function(p) {
// Reuse the jêder-* field's own width/multiline when this param's key matches one (see
// JEDER_FIELD_SIZE_BY_KEY) -- most Kategorî:Çavkanî templates share the same bibliographic
// param names, so e.g. "sernav" ends up full-width+multiline here too, not a generic box.
var sizeHint = JEDER_FIELD_SIZE_BY_KEY[p.key];
var widget = (sizeHint && sizeHint.multiline)
? new OO.ui.MultilineTextInputWidget({ rows: 2, autosize: false })
: new OO.ui.TextInputWidget();
self._jederFieldWidgets[p.key] = widget;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: p.label,
align: "top",
classes: ["add-example-field-span-" + (sizeHint ? sizeHint.span : 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
self._updateReadyHint();
initManualResize(self._jederFieldsFieldset); // matters now that a matched key like "sernav" can render multiline
});
},
// Fetches data via wikihez.citoid (loaded on demand by ensureCitoid() if needed), picks the matching jêder-* template, and fills its empty fields.
_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);
ensureCitoid().then(function() {
return wikihez.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 : wikihez.citoid.dataToJederFields(targetJederKey, result.raw, query);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
self._citoidSuccessMsg.show();
self._updateReadyHint();
mw.notify("Malûmat ji Citoid hatin barkirin.");
}, function(errorMsg) {
// wikihez.citoid may still be missing here if ensureCitoid() itself failed to load the script (e.g. network error) -- fall back to the bare error notice in that case.
if (!window.wikihez || !window.wikihez.citoid) {
mw.notify("Nekarî citoid-helper.js bar bike.");
return;
}
// Citoid can't fetch some sites at all (e.g. x.com/twitter.com) -- fall back to jêder-websîte with a website name guessed from the URL itself, rather than just a bare error.
var fallbackSite = wikihez.citoid.websiteNameForUrl(query);
if (fallbackSite) {
if (self._currentJederKey !== "jêder-websîte") {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData("jêder-websîte");
if (item) {
menu.chooseItem(item); // this calls _setSourceType("jêder-websîte") automatically
}
}
var websiteWidget = self._jederFieldWidgets["websîte"];
if (websiteWidget && !websiteWidget.getValue()) {
websiteWidget.setValue(fallbackSite);
}
mw.notify("Citoid nikare vê malperê bixwîne; şablona Websîte hate hilbijartin, ji kerema xwe mayî bi destan tijî bike.");
return;
}
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî malûmatan 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. The title text takes
// the button's place while open (see the "Form redesign for Kurdish example" mockup); the button
// itself stays put ready to reappear once the form is cancelled/closed.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._$title.toggle(visible);
this._frame.toggle(visible);
if (visible) {
alignFormToPage(this._frame.$element);
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._citoidSuccessMsg.hide();
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Warns before submitting if a Citoid URL/DOI/ISBN was typed but never successfully fetched, then defers
// to _doSubmit. The title-not-boldable case (see boldenPageTitle) is shown inline under the text box
// instead (_titleBoldHint) rather than blocking submission here.
submit: function() {
if (this._citoidPending() && !window.confirm("Te lînk, DOI an ISBN nivîsand lê hîn jê malûmat nehatine standin. Bêyî wan berdewam bikî?")) {
return;
}
this._doSubmit();
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
_doSubmit: 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; if a Kategorî:Çavkanî template was
// picked instead, collect its TemplateData-driven fields the same way, plus wekjêgirtin=1 for any
// "Ç:"-prefixed template (a quotation-equivalent, not a usage example -- see Modul:quote).
var jederParams = [];
var usingCategoryTemplate = this._currentJederKey === CATEGORY_TEMPLATE_KEY && !!this._categoryTemplateName;
if (usingCategoryTemplate) {
Object.keys(self._jederFieldWidgets).forEach(function(key) {
// A raw linebreak would break the single-line "#*" wikitext just like in the example text,
// but these are plain param values (not display text), so collapse to a space, not <br>.
var value = nlToSpace(self._jederFieldWidgets[key].getValue().trim());
if (value) {
jederParams.push(key + "=" + value);
}
});
// Only for a template whose own TemplateData actually names a "koda zimanî" param (see
// CATEGORY_TEMPLATE_LANG_LABEL) -- an arbitrary Kategorî:Çavkanî template has no guaranteed
// "param 1 = language" convention the way jêder-* does, so this isn't added unconditionally.
if (self._categoryTemplateLangParamKey) {
jederParams.push(self._categoryTemplateLangParamKey + "=" + self._language);
}
if (/^Ç:/.test(self._categoryTemplateName)) {
jederParams.push("wekjêgirtin=1");
}
} else if (this._currentJederKey && jederDefs[this._currentJederKey]) {
jederDefs[this._currentJederKey].fields.forEach(function(field) {
var widget = self._jederFieldWidgets[field.key];
var value = widget ? nlToSpace(widget.getValue().trim()) : "";
if (value) {
jederParams.push(field.key + "=" + value);
}
});
}
// A Kategorî:Çavkanî template is used as soon as it's picked, even with every field left blank
// (still submittable as a bare jêgirtin=); a jêder-* type only counts once a field is actually filled.
var usingJederTemplate = usingCategoryTemplate || (this._currentJederKey && jederParams.length > 0);
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-*/Kategorî:Çavkanî template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = usingCategoryTemplate ? this._categoryTemplateName : 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 -- only for jêder-*/jêder/nimûne, which are always designed with param 1 =
// language. A Kategorî:Çavkanî template only gets a language param when its own TemplateData
// names one ("koda zimanî") -- see the _categoryTemplateLangParamKey push above, already folded
// into jederParams with its own key, not assumed to be position 1.
if (!usingCategoryTemplate) {
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 (see boldenPageTitle), then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(boldenPageTitle(text, title).text);
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
if (translation) {
// Kategorî:Çavkanî templates route through Modul:quote directly and take its "t=" param name;
// the jêder-* templates use "tercime=" instead (see the jêder-* template docs).
code += "|" + (usingCategoryTemplate ? "t" : "tercime") + "=" + translation;
}
}
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
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)) {
// Match only the specific numbered section the button was clicked in (e.g. "Navdêr 2",
// not just the first "===Navdêr...===" heading found) -- both sides are "" when the
// section has no number at all (a single unnumbered "===Navdêr===").
var matchedSectionNumValue = matchedSectionNum ? parseInt(matchedSectionNum, 10) : "";
if (matchedSectionNumValue === sectionNum) {
// 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(code, result) {
error("Nekarî rûpelê xilas bike: " + apiErrorMessage(code, result));
});
}, function(code, result) {
error("Nekarî naveroka rûpelê bistîne: " + apiErrorMessage(code, result));
});
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>
58d6wa4uy35pn6y77y129yttsli3nlt
6342872
6342839
2026-08-27T09:11:35Z
Wikihez
7344
6342872
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 = "2.0";
// 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, loaded before this script via the
// ext.gadget.citoid-helper dependency (see the top of the file) -- wikt.citoid is guaranteed ready by the
// time any of this runs.
// Sentinel _currentJederKey value for the "pick a template from Kategorî:Çavkanî" dropdown option -- not a
// real jederDefs key, same convention as Wiki/start.js's own "__category__" picker.
var CATEGORY_TEMPLATE_KEY = "__category__";
// TemplateData params already covered by the form's own top-level text/translation/transliteration boxes --
// skipped when building a Kategorî:Çavkanî template's dynamic fields (see _renderCategoryTemplateFields) so
// they don't get a redundant duplicate inputbox.
var CATEGORY_TEMPLATE_COVERED_PARAMS = ["jêgirtin", "jg", "t", "tr"];
// A TemplateData param labeled exactly this (case/whitespace-insensitive) is auto-filled from the language
// dropdown instead of shown as its own inputbox -- see _renderCategoryTemplateFields/_doSubmit. Unlike
// jêder-*, an arbitrary Kategorî:Çavkanî template has no guaranteed "param 1 = language" convention, so this
// only applies when the template's own TemplateData actually declares such a param.
var CATEGORY_TEMPLATE_LANG_LABEL = "koda zimanî";
// "span" is the field's width in the 12-column grid the fields render in (see .add-example-jeder-fields
// in the CSS and _setSourceType below) -- field ORDER here is also the grid's reading order.
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "cih", "label": "Cih", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "sala-weşandinê", "label": "Sala weşandinê", "span": 2 },
{ "key": "çap", "label": "Çap", "span": 1 },
{ "key": "rûpel", "label": "Rûpel", "span": 1 },
{ "key": "isbn", "label": "ISBN", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "kovar", "label": "Kovar", "span": 4 },
{ "key": "cild", "label": "Cild", "span": 2 },
{ "key": "hejmar", "label": "Hejmar", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "rûpel", "label": "Rûpel", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 4 },
{ "key": "terciman", "label": "Terciman", "span": 4 },
{ "key": "websîte", "label": "Websîte", "span": 4 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "url", "label": "URL", "span": 5 },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "span": 5 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "tarîx", "label": "Tarîx", "span": 1 }
]
},
"jêder-vîdeo": {
"label": "Vîdeo",
"fields": [
{ "key": "hunermend", "label": "Hunermend", "span": 6 },
{ "key": "platform", "label": "Platform", "span": 6 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "tarîx", "label": "Tarîx", "span": 3 },
{ "key": "dem", "label": "Dem", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
}
};
// Field key -> {span, multiline}, from the FIRST jêder-* def (in jederDefs's own declaration order above)
// that defines it -- e.g. "sernav" ends up span 12 + multiline everywhere. Used to size a Kategorî:Çavkanî
// template's dynamic TemplateData fields the same way when a param key matches a known jêder-* field key,
// since most of these templates share the same handful of bibliographic param names (see
// _renderCategoryTemplateFields).
var JEDER_FIELD_SIZE_BY_KEY = {};
Object.keys(jederDefs).forEach(function(jederKey) {
jederDefs[jederKey].fields.forEach(function(field) {
if (!JEDER_FIELD_SIZE_BY_KEY[field.key]) {
JEDER_FIELD_SIZE_BY_KEY[field.key] = { span: field.span || 4, multiline: !!field.multiline };
}
});
});
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;
}
// Same problem as nlToBr (a raw newline breaks the single-line "#*" wikitext), but for jêder-*/Kategorî:Çavkanî
// param values (sernav, nivîskar, ...) a literal <br> would leak into the rendered citation text, so these get
// collapsed to a plain space instead.
function nlToSpace(text) {
return text ? text.replace(/\r\n|\r|\n/g, " ") : text;
}
// URL of a template's own wiki page, ported from Wiki/util.js's own tplPageUrl -- lets the user verify which
// template a Kategorî:Çavkanî search result actually is before picking it (see showResults below).
function tplPageUrl(name) {
var title = "Şablon:" + name;
return (window.mw && mw.util && typeof mw.util.getUrl === "function") ? mw.util.getUrl(title) : "/wiki/" + encodeURIComponent(title);
}
// Escapes str for safe interpolation into a RegExp -- page titles can contain regex metacharacters
// (parentheses for disambiguation, periods in abbreviation entries, etc.).
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
// Wraps the first occurrence of the page title (+ an optional glued-on suffix, e.g. a plural "-an") in the
// example text with wikitext bold markup, so the headword stands out in the rendered example. Skips it if
// the title is already bolded by hand, to avoid turning "'''reh'''" into "'''''reh'''''" (bold+italic).
// Returns {text, bolded}; bolded is false if the title wasn't found anywhere and nothing changed.
function boldenPageTitle(text, title) {
var escapedTitle = escapeRegExp(title);
var suffixPattern = "([^\\s.,;?!()']+)?";
if (new RegExp("'''" + escapedTitle + suffixPattern + "'''", "i").test(text)) {
return { text: text, bolded: true };
}
var bolded = text.replace(new RegExp("(" + escapedTitle + suffixPattern + ")", "ig"), "'''$1'''");
return { text: bolded, bolded: bolded !== text };
}
// Extracts a human-readable message from an mw.Api rejection (code, result).
function apiErrorMessage(code, result) {
return (result && result.error && result.error.info) || (typeof code === "string" ? code : "Xeletiyeke nenas");
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
// Custom drag-to-resize grip for textareas, ported from Wiki/start.js's wiktkuMakeManualResizable() -- Safari
// has no native corner resize handle on textareas at all, this is the fix start.js already uses for that.
// Inserted as a SIBLING within the textarea's existing OOUI wrapper (same reasoning as
// ensureLinebreakBackdrop above: wrapping the textarea in a NEW div risks disturbing OOUI's own layout),
// not by wrapping it in a new div like start.js's own version does. Unlike start.js's version, this doesn't
// persist the chosen height across page loads (start.js keys that off the textarea's own CSS class, but
// every textarea here is a plain OOUI MultilineTextInputWidget with no distinguishing class, so a direct
// port would have every field here share one save slot and overwrite each other's heights).
function makeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.data("addExampleResizableDone")) {
return;
}
textarea.data("addExampleResizableDone", true);
textarea.css("resize", "none"); // replaced by the custom grip below
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var grip = $("<div class='add-example-resize-grip'></div>");
textarea.after(grip);
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) { /* already released */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
}
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 makeManualResizable to every textarea in `context` (itself or its descendants).
function initManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function() {
makeManualResizable(this);
});
}
var api = new mw.Api();
// Kategorî:Çavkanî's template members plus their redirects (each redirect as its own searchable entry
// pointing at the same canonical target, so a template is findable by any of its names). Ported from
// Wiki/start.js's fetchCatSrcTemplates(), extended with prop=redirects. Cached after first fetch.
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) {
return catSrcTemplatesPromise;
}
catSrcTemplatesPromise = api.get({
action: "query",
generator: "categorymembers",
gcmtitle: "Kategorî:Çavkanî",
gcmnamespace: 10,
gcmlimit: "max",
prop: "redirects",
rdnamespace: 10,
rdlimit: "max",
formatversion: 2,
}).then(function(data) {
var pages = (data.query && data.query.pages) || [];
var list = [];
pages.forEach(function(page) {
var target = page.title.replace(/^[^:]+:/, "");
list.push({ label: target, target: target });
(page.redirects || []).forEach(function(redirect) {
list.push({ label: redirect.title.replace(/^[^:]+:/, ""), target: target });
});
});
list.sort(function(a, b) {
return a.label.localeCompare(b.label, mw.config.get("wgUserLanguage"));
});
catSrcTemplates = list;
return list;
}, function() {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
// TemplateData params for one template (name without the "Şablon:" prefix); redirects:1 so this also
// resolves if `name` is itself a redirect. Resolves to [] if the template has no TemplateData. Cached.
var tplDataCache = {};
function fetchTemplateDataFor(name) {
if (Object.prototype.hasOwnProperty.call(tplDataCache, name)) {
return $.Deferred().resolve(tplDataCache[name]).promise();
}
return api.get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2,
}).then(function(data) {
var pages = (data && data.pages) || {};
var first = null;
Object.keys(pages).forEach(function(id) {
if (!first) {
first = pages[id];
}
});
var params = [];
if (first && first.params) {
Object.keys(first.params).forEach(function(key) {
var p = first.params[key];
var label = p && p.label;
if (label && typeof label === "object") {
var userLang = mw.config.get("wgUserLanguage");
label = label[userLang] || label.en || label[Object.keys(label)[0]];
}
params.push({ key: key, label: label || key, required: !!(p && p.required) });
});
}
tplDataCache[name] = params;
return params;
}, function() {
tplDataCache[name] = [];
return [];
});
}
// Language display name, read from the matching section's .besazimani link text.
function languageNameForCode(code) {
var $mark = $(".besazimani[id='" + code + "']").first();
return $mark.length ? $mark.text().trim() : null;
}
// Whether the page title itself (accented Kurdish Latin letters included) is written in Latin script.
var pageTitleIsLatin = !/[^\x00-\x7FÀ-ɏḀ-ỿ‘’]/.test(mw.config.get("wgTitle") || "");
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex containers used directly by Şablon:nimûne; .citation-whole = Modul:quote's own wrapper, now used by jêder-* templates (Modul:quote nests .h-quotation inside .citation-whole > dl > dd instead of putting it directly under the <li>, so it needs its own entry here).
// Requiring "ul > li >" is what makes this only match an example that's grouped into its own <ul> -- a
// {{nimûne}} (or its "mk" redirect) with no jêder-family citation alongside it in the same definition
// renders straight under the definition's own content instead, with no such group; also reused below to
// tell whether the second pass still needs to handle a given definition.
var EXISTING_EXAMPLE_SELECTOR = "ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation, ul > li > .citation-whole";
$(EXISTING_EXAMPLE_SELECTOR).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.
// A jêder-* citation with no jêgirtin= (quotation text) yet renders no h-quotation/e-quotation at all
// (see get_quote() in Modul quote.lua) -- exactly the "bare citation" case this button exists to fill
// in, so this can't just crash: without the guard, [0] is undefined here and ".lang" throws, which
// (since $.each() has no try/catch) silently kills the button for every remaining match on the page.
var $langEl = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0];
if (!$langEl) {
console.warn("Gadget-wikt.add-examples: nikaribe zimanê vê nimûneyê bibîne, valakirî hate derbaskirin.", $item);
return;
}
var language = $langEl.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) {
// Encodes the section as "type|ordinal" -- the ordinal is this heading's own position
// among same-type headings WITHIN ITS LANGUAGE (see sectionOrdinalWithinLanguage), not
// MediaWiki's page-wide DOM id number, which can collide across unrelated language sections.
var $sectionH3 = $section.find("h3");
var sectionType = sectionTypeOf($sectionH3) || $sectionH3.text().trim();
definitionLevel.splice(0, 0, sectionType + "|" + sectionOrdinalWithinLanguage($sectionH3));
} 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. $group is the citation-group <ul> itself (parent of $item);
// the form panel is inserted AFTER it (see click handler below), not inside it, so the panel isn't
// squeezed into that <ul>'s narrow hanging-indent width on mobile -- only the button/title stays
// there, matching the "Form redesign for Kurdish example" mockup (title inside the bullet list,
// full-width panel below it).
var $group = $item.parent();
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($item, $button, $title, language, definitionLevel);
$group.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem);
}
});
// Second pass: some definitions have no example the pass above could react to at all -- either genuinely
// zero examples, or one rendered via {{nimûne}} (or its "mk" redirect) with no jêder-family citation next
// to it, which (see the comment on EXISTING_EXAMPLE_SELECTOR above) renders with no "ul > li" group to
// match. This walks every recognized POS section's own definitions list directly instead of reacting to
// an existing example, and reads the language off the language section's own <h2> rather than off an
// example -- so it doesn't need one to already exist. Everything else (Form, submit()) is reused as-is.
// MediaWiki wraps each heading in a "mw-heading2"/"mw-heading3"/... div in current skin output; falls
// back to the bare heading element for older/other output that doesn't wrap it.
function headingOuter($h) {
var $wrap = $h.closest(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6");
return $wrap.length ? $wrap : $h;
}
// Section's language code: nearest preceding .besazimani[id] by document order (not sibling-walking, which mobile's per-section wrapping breaks).
function languageCodeForOl($ol) {
var $marks = $(".besazimani[id]").add($ol);
var ol = $ol.get(0);
var idx = $marks.index(ol);
for (var i = idx - 1; i >= 0; i--) {
var el = $marks.get(i);
if (el.id) {
return el.id;
}
}
return null;
}
// The heading's own recognized section-type key (see sectionNames above), with a page author's own trailing
// disambiguating number (e.g. "Navdêr 2") stripped back to the canonical name ("Navdêr") -- returns null for
// a heading that isn't a recognized word-sense section at all (Bilêvkirin, Etîmolojî, Çavkanî, ...).
function sectionTypeOf($h3) {
var text = $h3.text().trim();
if (sectionNames[text]) {
return text;
}
var stripped = text.replace(/\s+\d+$/, "");
return sectionNames[stripped] ? stripped : null;
}
// This heading's own 1-based position among same-type headings (see sectionTypeOf) within its own language
// block -- reset at each .besazimani[id] marker, same document-order technique as languageCodeForOl above
// (not sibling-walking, which mobile's per-section wrapping breaks). Needed because MediaWiki's page-wide id
// uniquification can attach a number to an unnumbered heading purely from an unrelated same-named heading
// colliding elsewhere on the page (e.g. Tirkî's own unnumbered "Navdêr" landing on id="Navdêr_3" only
// because Kurmancî's own literal "Navdêr 2" heading already claimed "Navdêr_2") -- that number has nothing
// to do with this heading's actual position and can't be used to find it back in the wikitext.
function sectionOrdinalWithinLanguage($h3) {
var h3El = $h3.get(0);
var $all = $(".besazimani[id]").add($("h3"));
var counts = {};
var result = 1;
$all.each(function() {
if ($(this).is(".besazimani[id]")) {
counts = {};
return;
}
var type = sectionTypeOf($(this)) || $(this).text().trim();
counts[type] = (counts[type] || 0) + 1;
if (this === h3El) {
result = counts[type];
return false;
}
});
return result;
}
// A <li> whose OWN direct content (not counting a nested <ol>) is wrapped in ".form-of-definition" is
// MediaWiki's "form of" template system marking that content as generated by a template -- e.g.
// {{ku-tewîna-nav}}'s "Formeke heval:" wrapper together with its "rewşa îzafeyî"/"rewşa çemandî"/...
// readings underneath. That whole nested block is normally the ENTIRE expansion of a single "#"
// wikitext line, with no separate "##" line behind any individual reading -- recursing into it would
// hand out one button per reading, each trying to match a "##" line that doesn't exist, and submit()
// would fail to find where to insert every one of them. A <li> without that class whose nested <ol>
// holds real hand-typed prose (e.g. sîno-koreyî/Navdêr's two genuinely separate "##" sub-senses) has
// no such problem -- those really are individually addressable wikitext lines.
function isFormOfWrapper($li) {
return $li.children(".form-of-definition").length > 0;
}
// Recurse into a <li>'s own nested <ol> UNLESS it's a form-of-template wrapper (see isFormOfWrapper) --
// a wrapper <li> with its own nested <ol> isn't itself a sense with content of its own, only its real
// (non-generated) leaves are.
function eachLeafDefinition($ol, fn) {
$ol.children("li").each(function() {
var $li = $(this);
var $childOl = $li.children("ol");
if ($childOl.length && !isFormOfWrapper($li)) {
$childOl.each(function() {
eachLeafDefinition($(this), fn);
});
} else {
fn($li);
}
});
}
$("h3").each(function() {
var sectionType = sectionTypeOf($(this));
if (!sectionType) {
return; // not a recognized word-sense section (Bilêvkirin, Etîmolojî, Çavkanî, ...)
}
var sectionOrdinal = sectionOrdinalWithinLanguage($(this));
// Forward-walk siblings to the definitions <ol>, skipping over a declension table/TemplateStyles/the
// headword line; stop (nothing to attach to in this section) if another heading comes first instead.
var $ol = null;
for (var $cursor = headingOuter($(this)).next(); $cursor.length; $cursor = $cursor.next()) {
if ($cursor.is("ol")) {
$ol = $cursor;
break;
}
if ($cursor.is(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6, h2, h3, h4, h5, h6")) {
break;
}
}
if (!$ol) {
return;
}
var language = languageCodeForOl($ol);
if (!language) {
console.warn("Gadget-wikt.add-examples: nikaribe koda zimanê vê beşê bibîne.", $ol);
return;
}
eachLeafDefinition($ol, function($li) {
// The pass above already added a button here (or will) -- an actual example already wrapped in
// its own "ul > li" group.
if ($li.find(EXISTING_EXAMPLE_SELECTOR).length) {
return;
}
var definitionLevel = [];
var $definitionItem = $li;
while ($definitionItem.prop("tagName") === "LI") {
// 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);
$definitionItem = $definitionItem.parent().parent();
}
definitionLevel.splice(0, 0, sectionType + "|" + sectionOrdinal);
// A hidden, empty placeholder <li> so submit()'s existing "_$lastExample.after(newLi)" insertion
// (unchanged, same as the pass above) lands the first submitted example right before the button
// -- matching the existing convention of new examples going in before the button, not after it.
var $placeholder = $("<li style='display:none'></li>");
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
// A "ul" nested directly under a definition "li" starts hidden here (see the HQToggle-controlled
// jêder-citation-group "ul", which only ever renders with an explicit "style="display: block""
// set on it) -- this one has no HQToggle to unhide it, so it needs the same explicit override or
// the button (and the placeholder above) never becomes visible at all.
var $ul = $("<ul>").css("display", "block").append($placeholder).append($formItem);
// The form panel is inserted AFTER $ul (not inside it) once opened -- same reasoning as the first
// pass above: keeps the full-width panel out of the tight bulleted-list indentation on mobile.
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($placeholder, $button, $title, language, definitionLevel);
$ul.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$li.append($ul);
});
});
// Pulls the form panel flush with the page's own left/right edges, undoing whatever nested-list indent it inherited from sitting inside a deeply-nested definition.
function alignFormToPage($form) {
var $container = $form.closest(".mw-parser-output");
if (!$container.length) {
return;
}
var pad = parseFloat(window.getComputedStyle($container[0]).paddingLeft) || 0;
var containerLeft = $container.offset().left + pad;
var indent = $form.offset().left - containerLeft;
$form.css({
marginLeft: indent > 0 ? -indent : 0,
width: $container.width() + "px"
});
}
// Constructor for the edit form; lastExample/button/title/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, $title, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._$title = $title;
this._currentJederKey = "";
this._jederFieldWidgets = {};
// Set once a template is picked in the Kategorî:Çavkanî mode (see _selectCategoryTemplate); the
// canonical template title (without the "Şablon:" prefix), used as `sablon` in _doSubmit.
this._categoryTemplateName = null;
// Set by _renderCategoryTemplateFields if the picked template's TemplateData has a "koda zimanî" param;
// that param's own key, used to emit "<key>=<language>" in _doSubmit -- null if no such param exists.
this._categoryTemplateLangParamKey = null;
this._textInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
// Shown under the text box (see boldenPageTitle) when the page title can't be found in the example text
// as typed, so it won't get bolded; purely informational, doesn't block submitting.
this._titleBoldHint = $("<span class='add-example-title-bold-hint'></span>").hide();
this._updateTitleBoldHint = function() {
var text = self._textInput.getValue().trim();
var title = mw.config.get("wgTitle");
var show = !!text && !boldenPageTitle(text, title).bolded;
self._titleBoldHint.toggle(show).html(show ? "Sermade (" + escapeHtmlForBackdrop(title) + ") nehat dîtin; dê neyê <b>stûr</b>kirin." : "");
};
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
self._updateReadyHint();
self._updateTitleBoldHint();
});
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,
}));
}
}
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: CATEGORY_TEMPLATE_KEY,
label: "Ji Kategorî:Çavkanî şablonekê hilbijêre",
}));
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._sourceInput.on("change", function() {
self._updateReadyHint();
});
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. The Citoid fetch button sits right next to it (not in a separate box) -- see _urlRowWidget below.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
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, malûmatan 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));
this._sourceURLInput.on("change", function() {
self._updateReadyHint();
self._autofillVideoTimestamp();
});
// URL input + inline "auto-fill" button as one row (replaces the old separate framed Citoid box's
// button row) -- a plain OO.ui.Widget used purely as a flex-row container (same pattern as
// _loadingImage below: build it empty, then manually append its children's $elements). Disabling
// during submit() still goes through the individual _sourceURLInput/_citoidButton references, not
// through this wrapper.
this._urlRowWidget = new OO.ui.Widget({ classes: ["add-example-url-row"] });
this._urlRowWidget.$element.append(this._sourceURLInput.$element, this._citoidButton.$element);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, {
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;
// Shown right after a successful Citoid fetch (see _fillFromCitoid); hidden again on clear.
this._citoidSuccessMsg = $("<span class='add-example-citoid-success'>✓ Malûmat hatin dagirtin — li jêr kontrol bike.</span>").hide();
// 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("");
self._citoidSuccessMsg.hide();
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
// Plain div (not OO.ui.FieldsetLayout) so the grid CSS class applies directly to the field items.
this._jederFieldsFieldset = $("<div class='add-example-jeder-fields'>");
// "Malûmatên çavkaniyê" header (+ the "Vala bike" clear button) sitting right above the fields grid,
// replacing the old framed "Ji Citoid an bi destan tijî bike:" box -- like this only makes sense once
// a real jêder-* template is active (there's nothing here to show for the "citoid: not yet detected"
// placeholder or for free text), so the whole section toggles together in _setSourceType().
this._jederSection = $("<div class='add-example-jeder-section'>").append(
$("<div class='add-example-jeder-header'>")
.append($("<span class='add-example-jeder-header-label'>Malûmatên çavkaniyê</span>"))
.append(this._citoidClearButton.$element),
this._jederFieldsFieldset
);
// Kategorî:Çavkanî template search box: sits directly under the source-type dropdown in $topRight (not
// in the "Malûmatên çavkaniyê" section below, which is reserved for the picked template's own fields --
// see _setSourceType/_selectCategoryTemplate). Built once here, not rebuilt per _setSourceType call, so
// switching in and out of this dropdown mode doesn't lose its own DOM node/event handlers.
this._categoryTemplateInput = $("<input type='search' autocomplete='off' class='add-example-cat-tpl-input'>")
.attr("placeholder", "Li navê şablonê bigere…");
this._categoryTemplateResults = $("<ul class='add-example-cat-tpl-results'>").hide();
this._categoryTemplateStatus = $("<span class='add-example-cat-tpl-status'>Şablon tên barkirin…</span>");
this._categoryTemplateSearchRow = $("<div class='add-example-cat-tpl-search-row'>")
.append(this._categoryTemplateInput, this._categoryTemplateResults, this._categoryTemplateStatus)
.hide();
this._initCategoryTemplatePicker();
this._translationInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
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({ rows: 4 });
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Translîterasyona 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));
// Reactive "ready to submit" hint next to Biweşîne: no text yet, text but no source (still submittable
// as a bare {{nimûne}}), or fully ready -- kept in sync by _updateReadyHint(), wired to every field below.
this._readyHint = $("<span class='add-example-ready-hint'></span>").text("Metna nimûneyê lazim e.");
// True while a Citoid-eligible URL/DOI/ISBN is typed in but not yet fetched (or fetched then edited away) and no jêder field has been filled by hand -- the "looks done but isn't" trap this exists to catch. Not applicable in free-text mode, where the fetch button isn't even offered.
this._citoidPending = function() {
return self._currentJederKey !== "" &&
self._currentJederKey !== CATEGORY_TEMPLATE_KEY &&
!!self._sourceURLInput.getValue().trim() &&
!self._citoidSuccessMsg.is(":visible") &&
!Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
};
this._updateReadyHint = function() {
if (!self._textInput.getValue()) {
self._readyHint.text("Metna nimûneyê lazim e.");
return;
}
if (self._citoidPending()) {
self._readyHint.text("Pêşî 'Bi otomatîk tijî bike' bitikîne.");
return;
}
var hasSource = self._sourceInput.getValue().trim() || self._sourceURLInput.getValue().trim() ||
Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
self._readyHint.text(hasSource ? "Hazir e." : "Çavkanî nehatiye dayîn.");
};
// Prefills the Dem field from the typed URL's own "t=" (see wikt.citoid.extractVideoTimestamp) once jêder-vîdeo is active -- never overwrites a value the user already entered by hand.
this._autofillVideoTimestamp = function() {
var demWidget = self._jederFieldWidgets.dem;
if (self._currentJederKey !== "jêder-vîdeo" || !demWidget || demWidget.getValue().trim()) {
return;
}
var dem = wikt.citoid.extractVideoTimestamp(self._sourceURLInput.getValue().trim());
if (dem && !demWidget.getValue().trim()) {
demWidget.setValue(dem);
}
};
// framed:false (+ the "destructive" flag for the red text/hover) matches the mockup's borderless
// "Betal bike" -- a plain colored link rather than a boxed button, distinguishing it from Paqij bike.
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
framed: false,
});
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);
// Two-column top section (see "Form redesign for Kurdish example/Nimûne zêde bike.dc.html"): example
// text (+ translation/transliteration for non-ku, right after it, not after the source fields) on the
// left; source-type + link/Citoid on the right. Built as plain <div>s, not an OOUI layout -- OOUI has
// no CSS-grid container -- so .add-example-top-grid in the CSS can lay them out as a real responsive
// 7fr/5fr grid (collapsing to one column on narrow screens).
var $topLeft = $("<div class='add-example-top-col'>").append(textInputLayout.$element, this._titleBoldHint);
if (language !== "ku") {
$topLeft.append(translationInputLayout.$element);
}
if (!pageTitleIsLatin) {
$topLeft.append(transcriptionInputLayout.$element);
}
var $topRight = $("<div class='add-example-top-col'>").append(
sourceTypeLayout.$element,
this._categoryTemplateSearchRow,
this._sourceInputLayout.$element,
this._sourceURLInputLayout.$element,
this._citoidSuccessMsg
);
var $topGrid = $("<div class='add-example-top-grid'>").append($topLeft, $topRight);
// 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 (see the FieldLayout replaceWith() there).
this._fieldsLayout = $("<div class='add-example-fieldset'>").append($topGrid, this._jederSection);
// Bottom action row -- order/spacing matches the mockup: Biweşîne (+ spinner + ready hint), a spacer
// pushing the rest right, then Paqij bike (bordered/subtle) and Betal bike (borderless red text, via
// framed:false above). A plain flex <div>, not an OOUI HorizontalLayout, so the raw hint/spacer
// elements can sit alongside the real button widgets (same reasoning as the top grid above).
var $buttonsRow = $("<div class='add-example-main-buttons'>").append(
this._applyButton.$element,
this._loadingImage.$element,
this._readyHint,
$("<span class='add-example-buttons-spacer'></span>"),
this._clearButton.$element,
this._cancelButton.$element
);
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
});
this._frame.$element.append(this._fieldsLayout, $buttonsRow);
// 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");
initManualResize(this._frame.$element);
}
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 fetch button, and the "Malûmatên çavkaniyê" fields section toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateName = null;
this._categoryTemplateLangParamKey = null;
var isRealJederKey = jederKey && jederDefs[jederKey];
var isCategoryTemplateKey = jederKey === CATEGORY_TEMPLATE_KEY;
if (isRealJederKey) {
var def = jederDefs[jederKey];
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;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: ["add-example-field-span-" + (field.span || 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
}
// The search box itself is always in the DOM (see the constructor, it lives in $topRight) -- only
// shown in this one mode, and reset when leaving it so a stale query/selection doesn't linger for
// next time it's opened.
this._categoryTemplateSearchRow.toggle(isCategoryTemplateKey);
if (!isCategoryTemplateKey) {
this._categoryTemplateInput.val("");
this._categoryTemplateResults.hide();
}
// "Malûmatên çavkaniyê" header + fields grid: shown for a real jêder-* template (fields built above).
// For the Kategorî:Çavkanî picker it stays hidden here -- there's nothing to put in it until a
// template is actually picked, see _selectCategoryTemplate, which shows it once there is.
this._jederSection.toggle(!!isRealJederKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid fetch button: hidden for free text (nothing there for it to fill in) and for the
// Kategorî:Çavkanî picker (Citoid has no mapping for an arbitrary picked template), shown for
// "citoid" auto-detect and any real jêder-* key. The URL input itself next to it stays visible in
// every OTHER mode -- see the sourceURLInputLayout toggle below for the one exception.
this._citoidButton.toggle(jederKey !== "" && !isCategoryTemplateKey);
// URL field wording: plain "attach a link" phrasing for free text, 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 $oldLayout = this._sourceURLInputLayout.$element;
// Re-wraps the SAME _urlRowWidget (still holding _sourceURLInput + _citoidButton) in a new
// FieldLayout with the new label/help; the widget's $element moves along with it, same as the
// old addItems()/removeItems() swap did for the plain input before this redesign.
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, 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,
});
$oldLayout.replaceWith(this._sourceURLInputLayout.$element);
}
// The URL/Citoid row is normally always visible (see the constructor comment), but Citoid has no
// mapping for an arbitrary Kategorî:Çavkanî template, so it'd just be dead UI in that one mode.
this._sourceURLInputLayout.toggle(!isCategoryTemplateKey);
this._autofillVideoTimestamp();
this._updateReadyHint();
initManualResize(this._jederFieldsFieldset); // covers a freshly-rebuilt "sernav" field (jêder-*); the Kategorî:Çavkanî picker's own fields are resized separately once picked, see _renderCategoryTemplateFields
},
// Wires up the search box's own input/blur handlers and kicks off the template list fetch. Called once
// from the constructor -- the search box lives permanently in $topRight (see there), only shown/hidden
// by _setSourceType, so this only needs to run once, not every time the picker mode is entered.
_initCategoryTemplatePicker: function() {
var self = this;
function showResults(query) {
var q = query.trim().toLowerCase();
self._categoryTemplateResults.empty();
var list = catSrcTemplates || [];
var matched = q ? list.filter(function(entry) {
return entry.label.toLowerCase().indexOf(q) !== -1;
}) : list;
if (!matched.length) {
self._categoryTemplateResults.hide();
return;
}
matched.slice(0, 50).forEach(function(entry) {
var $li = $("<li class='add-example-cat-tpl-row'>");
var $text = $("<span class='add-example-cat-tpl-text'>").text(entry.label);
// A redirect entry's label differs from its target -- mark where it actually resolves to.
if (entry.label !== entry.target) {
$text.append($("<span class='add-example-cat-tpl-redirect-arrow'>").text(" → " + entry.target));
}
// Lets the user verify which template a result actually is before picking it, same "🔗
// opens the template's own page" affordance Wiki/start.js uses in its own searchable
// dropdowns -- always points at the canonical target, never a redirect's own page.
var $link = $("<a class='add-example-cat-tpl-link' target='_blank' rel='noopener'>🔗</a>")
.attr("title", "Rûpela şablonê veke")
.attr("href", tplPageUrl(entry.target));
// stopPropagation only -- preventDefault would stop the link from actually navigating, and
// this must not also select the row the way clicking elsewhere in it does (see below).
$link.on("mousedown click", function(e) { e.stopPropagation(); });
$li.append($text, $link);
$li.on("mousedown", function(e) {
e.preventDefault(); // keeps the input's blur (and the results-hiding it triggers) from firing before the click registers
self._selectCategoryTemplate(entry);
});
self._categoryTemplateResults.append($li);
});
self._categoryTemplateResults.show();
}
this._categoryTemplateInput.on("input focus", function() {
showResults($(this).val());
});
this._categoryTemplateInput.on("blur", function() {
setTimeout(function() { self._categoryTemplateResults.hide(); }, 200); // lets the mousedown handler above fire first
});
fetchCatSrcTemplates().then(function() {
self._categoryTemplateStatus.text("");
}, function() {
self._categoryTemplateStatus.text("Şablon nehatin barkirin.");
});
},
// Picks a template from the search results: records its canonical name -- a redirect entry resolves to
// its target, the output always uses that, never the redirect's own name (see fetchCatSrcTemplates) --
// and reveals/renders the "Malûmatên çavkaniyê" section for its parameter fields.
_selectCategoryTemplate: function(entry) {
this._categoryTemplateResults.hide();
// Left as the plain label (not "label → target") -- putting the arrow in the input's own value
// would get re-used as the search query if the box is focused again to pick something else.
this._categoryTemplateInput.val(entry.label);
this._categoryTemplateName = entry.target;
this._jederSection.toggle(true);
this._renderCategoryTemplateFields(entry.target);
},
// Builds one text input per TemplateData param of `name` into the shared "Malûmatên çavkaniyê" fields
// grid (_jederFieldsFieldset, the same one the jêder-* fields use), or a lone "Rûpel" fallback field if
// it has no TemplateData -- see the jêgirtin=/rûpel= example in the feature request this implements.
_renderCategoryTemplateFields: function(name) {
var self = this;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateLangParamKey = null;
fetchTemplateDataFor(name).then(function(params) {
// A param labeled exactly "koda zimanî" is filled from the language dropdown, not typed by hand
// -- find it (if any) before filtering, so it can be excluded from the rendered fields below
// and used by _doSubmit to emit "<key>=<language>" (see CATEGORY_TEMPLATE_LANG_LABEL).
(params || []).forEach(function(p) {
if ((p.label || "").trim().toLowerCase() === CATEGORY_TEMPLATE_LANG_LABEL) {
self._categoryTemplateLangParamKey = p.key;
}
});
var filtered = (params || []).filter(function(p) {
return CATEGORY_TEMPLATE_COVERED_PARAMS.indexOf(p.key) === -1 && p.key !== self._categoryTemplateLangParamKey;
});
var list = filtered.length ? filtered : [{ key: "rûpel", label: "Rûpel", required: false }];
list.forEach(function(p) {
// Reuse the jêder-* field's own width/multiline when this param's key matches one (see
// JEDER_FIELD_SIZE_BY_KEY) -- most Kategorî:Çavkanî templates share the same bibliographic
// param names, so e.g. "sernav" ends up full-width+multiline here too, not a generic box.
var sizeHint = JEDER_FIELD_SIZE_BY_KEY[p.key];
var widget = (sizeHint && sizeHint.multiline)
? new OO.ui.MultilineTextInputWidget({ rows: 2, autosize: false })
: new OO.ui.TextInputWidget();
self._jederFieldWidgets[p.key] = widget;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: p.label,
align: "top",
classes: ["add-example-field-span-" + (sizeHint ? sizeHint.span : 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
self._updateReadyHint();
initManualResize(self._jederFieldsFieldset); // matters now that a matched key like "sernav" can render multiline
});
},
// Fetches data via wikt.citoid, picks the matching jêder-* template, and fills its empty fields.
_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, query);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
self._citoidSuccessMsg.show();
self._updateReadyHint();
mw.notify("Malûmat ji Citoid hatin barkirin.");
}, function(errorMsg) {
// Citoid can't fetch some sites at all (e.g. x.com/twitter.com) -- fall back to jêder-websîte with a website name guessed from the URL itself, rather than just a bare error.
var fallbackSite = wikt.citoid.websiteNameForUrl(query);
if (fallbackSite) {
if (self._currentJederKey !== "jêder-websîte") {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData("jêder-websîte");
if (item) {
menu.chooseItem(item); // this calls _setSourceType("jêder-websîte") automatically
}
}
var websiteWidget = self._jederFieldWidgets["websîte"];
if (websiteWidget && !websiteWidget.getValue()) {
websiteWidget.setValue(fallbackSite);
}
mw.notify("Citoid nikare vê malperê bixwîne; şablona Websîte hate hilbijartin, ji kerema xwe mayî bi destan tijî bike.");
return;
}
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî malûmatan 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. The title text takes
// the button's place while open (see the "Form redesign for Kurdish example" mockup); the button
// itself stays put ready to reappear once the form is cancelled/closed.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._$title.toggle(visible);
this._frame.toggle(visible);
if (visible) {
alignFormToPage(this._frame.$element);
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._citoidSuccessMsg.hide();
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Warns before submitting if a Citoid URL/DOI/ISBN was typed but never successfully fetched, then defers
// to _doSubmit. The title-not-boldable case (see boldenPageTitle) is shown inline under the text box
// instead (_titleBoldHint) rather than blocking submission here.
submit: function() {
if (this._citoidPending() && !window.confirm("Te lînk, DOI an ISBN nivîsand lê hîn jê malûmat nehatine standin. Bêyî wan berdewam bikî?")) {
return;
}
this._doSubmit();
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
_doSubmit: 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; if a Kategorî:Çavkanî template was
// picked instead, collect its TemplateData-driven fields the same way, plus wekjêgirtin=1 for any
// "Ç:"-prefixed template (a quotation-equivalent, not a usage example -- see Modul:quote).
var jederParams = [];
var usingCategoryTemplate = this._currentJederKey === CATEGORY_TEMPLATE_KEY && !!this._categoryTemplateName;
if (usingCategoryTemplate) {
Object.keys(self._jederFieldWidgets).forEach(function(key) {
// A raw linebreak would break the single-line "#*" wikitext just like in the example text,
// but these are plain param values (not display text), so collapse to a space, not <br>.
var value = nlToSpace(self._jederFieldWidgets[key].getValue().trim());
if (value) {
jederParams.push(key + "=" + value);
}
});
// Only for a template whose own TemplateData actually names a "koda zimanî" param (see
// CATEGORY_TEMPLATE_LANG_LABEL) -- an arbitrary Kategorî:Çavkanî template has no guaranteed
// "param 1 = language" convention the way jêder-* does, so this isn't added unconditionally.
if (self._categoryTemplateLangParamKey) {
jederParams.push(self._categoryTemplateLangParamKey + "=" + self._language);
}
if (/^Ç:/.test(self._categoryTemplateName)) {
jederParams.push("wekjêgirtin=1");
}
} else if (this._currentJederKey && jederDefs[this._currentJederKey]) {
jederDefs[this._currentJederKey].fields.forEach(function(field) {
var widget = self._jederFieldWidgets[field.key];
var value = widget ? nlToSpace(widget.getValue().trim()) : "";
if (value) {
jederParams.push(field.key + "=" + value);
}
});
}
// A Kategorî:Çavkanî template is used as soon as it's picked, even with every field left blank
// (still submittable as a bare jêgirtin=); a jêder-* type only counts once a field is actually filled.
var usingJederTemplate = usingCategoryTemplate || (this._currentJederKey && jederParams.length > 0);
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-*/Kategorî:Çavkanî template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = usingCategoryTemplate ? this._categoryTemplateName : 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 -- only for jêder-*/jêder/nimûne, which are always designed with param 1 =
// language. A Kategorî:Çavkanî template only gets a language param when its own TemplateData
// names one ("koda zimanî") -- see the _categoryTemplateLangParamKey push above, already folded
// into jederParams with its own key, not assumed to be position 1.
if (!usingCategoryTemplate) {
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 (see boldenPageTitle), then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(boldenPageTitle(text, title).text);
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
if (translation) {
// Kategorî:Çavkanî templates route through Modul:quote directly and take its "t=" param name;
// the jêder-* templates use "tercime=" instead (see the jêder-* template docs).
code += "|" + (usingCategoryTemplate ? "t" : "tercime") + "=" + translation;
}
}
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
if (transcription) {
code += "|tr=" + transcription;
}
code += "}}";
// definitionLevel[0] is "type|ordinal" (see sectionOrdinalWithinLanguage) -- ordinal is this
// section's own position among same-type headings within its language, resolved client-side, not
// a number parsed out of a DOM id (MediaWiki's page-wide id-uniquification can attach a number to
// an unnumbered heading purely from an unrelated same-named heading colliding elsewhere on the
// page, with no relation to this heading's actual wikitext).
var sectionKeyParts = this._definitionLevel[0].split("|");
var sectionType = sectionKeyParts[0];
var sectionOrdinal = parseInt(sectionKeyParts[1], 10);
// 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 -- bounded to end at the NEXT top-level "==...=="
// heading (or end of page) so a later language's own same-named subsection can never be
// scanned into this one's search.
var langSectionRegex = new RegExp("==[ ]*{{ziman\\|{0}}}[ ]*==".format(self._language));
var langSectionIndex = pageContent.search(langSectionRegex);
if (langSectionIndex === -1) {
error("Xeletiyeke bi koda zimanî heye. Koda zimanî:" + self._language);
return;
}
var afterLangHeading = pageContent.indexOf("\n", langSectionIndex);
afterLangHeading = afterLangHeading === -1 ? pageContent.length : afterLangHeading + 1;
var nextLangSectionMatch = /\n==[^=\n][^\n]*==/.exec(pageContent.slice(afterLangHeading));
var langSectionEnd = nextLangSectionMatch ? afterLangHeading + nextLangSectionMatch.index : pageContent.length;
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;
}
// Look for the correct word type section: the sectionOrdinal-th heading (within this language)
// whose own name is a recognized variant of sectionType -- counted purely by position, not by
// any number written in the heading itself (see the definitionLevel[0] comment above).
var lines = pageContent.slice(langSectionIndex, langSectionEnd).split("\n");
var sectionNamesRegex = Object.keys(sectionNames).join('|');
var sectionRegex = new RegExp('^===[ ]*(' + sectionNamesRegex + ')\\s*(\\d+)?');
var targetLineIndex;
var sectionOccurrence = 0;
for (targetLineIndex = 0; targetLineIndex < lines.length; targetLineIndex++) {
var matchSection = sectionRegex.exec(lines[targetLineIndex]);
if (matchSection && sectionNames[sectionType].includes(matchSection[1])) {
sectionOccurrence++;
if (sectionOccurrence === sectionOrdinal) {
// Add more conditions if needed for inflection, e.g., (isInflection === line.includes("Formeke "))
break;
}
}
}
if (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(code, result) {
error("Nekarî rûpelê xilas bike: " + apiErrorMessage(code, result));
});
}, function(code, result) {
error("Nekarî naveroka rûpelê bistîne: " + apiErrorMessage(code, result));
});
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>
mhs6hf9rp4zatb5vvszknysr11s3ds3
6342878
6342872
2026-08-27T09:18:04Z
Wikihez
7344
6342878
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 = "2.0";
// 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, loaded before this script via the
// ext.gadget.citoid-helper dependency (see the top of the file) -- wikt.citoid is guaranteed ready by the
// time any of this runs.
// Sentinel _currentJederKey value for the "pick a template from Kategorî:Çavkanî" dropdown option -- not a
// real jederDefs key, same convention as Wiki/start.js's own "__category__" picker.
var CATEGORY_TEMPLATE_KEY = "__category__";
// TemplateData params already covered by the form's own top-level text/translation/transliteration boxes --
// skipped when building a Kategorî:Çavkanî template's dynamic fields (see _renderCategoryTemplateFields) so
// they don't get a redundant duplicate inputbox.
var CATEGORY_TEMPLATE_COVERED_PARAMS = ["jêgirtin", "jg", "t", "tr"];
// A TemplateData param labeled exactly this (case/whitespace-insensitive) is auto-filled from the language
// dropdown instead of shown as its own inputbox -- see _renderCategoryTemplateFields/_doSubmit. Unlike
// jêder-*, an arbitrary Kategorî:Çavkanî template has no guaranteed "param 1 = language" convention, so this
// only applies when the template's own TemplateData actually declares such a param.
var CATEGORY_TEMPLATE_LANG_LABEL = "koda zimanî";
// "span" is the field's width in the 12-column grid the fields render in (see .add-example-jeder-fields
// in the CSS and _setSourceType below) -- field ORDER here is also the grid's reading order.
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "cih", "label": "Cih", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "sala-weşandinê", "label": "Sala weşandinê", "span": 2 },
{ "key": "çap", "label": "Çap", "span": 1 },
{ "key": "rûpel", "label": "Rûpel", "span": 1 },
{ "key": "isbn", "label": "ISBN", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "kovar", "label": "Kovar", "span": 4 },
{ "key": "cild", "label": "Cild", "span": 2 },
{ "key": "hejmar", "label": "Hejmar", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "rûpel", "label": "Rûpel", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 4 },
{ "key": "terciman", "label": "Terciman", "span": 4 },
{ "key": "websîte", "label": "Websîte", "span": 4 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "url", "label": "URL", "span": 5 },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "span": 5 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "tarîx", "label": "Tarîx", "span": 1 }
]
},
"jêder-vîdeo": {
"label": "Vîdeo",
"fields": [
{ "key": "hunermend", "label": "Hunermend", "span": 6 },
{ "key": "platform", "label": "Platform", "span": 6 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "tarîx", "label": "Tarîx", "span": 3 },
{ "key": "dem", "label": "Dem", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
}
};
// Field key -> {span, multiline}, from the FIRST jêder-* def (in jederDefs's own declaration order above)
// that defines it -- e.g. "sernav" ends up span 12 + multiline everywhere. Used to size a Kategorî:Çavkanî
// template's dynamic TemplateData fields the same way when a param key matches a known jêder-* field key,
// since most of these templates share the same handful of bibliographic param names (see
// _renderCategoryTemplateFields).
var JEDER_FIELD_SIZE_BY_KEY = {};
Object.keys(jederDefs).forEach(function(jederKey) {
jederDefs[jederKey].fields.forEach(function(field) {
if (!JEDER_FIELD_SIZE_BY_KEY[field.key]) {
JEDER_FIELD_SIZE_BY_KEY[field.key] = { span: field.span || 4, multiline: !!field.multiline };
}
});
});
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;
}
// Same problem as nlToBr (a raw newline breaks the single-line "#*" wikitext), but for jêder-*/Kategorî:Çavkanî
// param values (sernav, nivîskar, ...) a literal <br> would leak into the rendered citation text, so these get
// collapsed to a plain space instead.
function nlToSpace(text) {
return text ? text.replace(/\r\n|\r|\n/g, " ") : text;
}
// URL of a template's own wiki page, ported from Wiki/util.js's own tplPageUrl -- lets the user verify which
// template a Kategorî:Çavkanî search result actually is before picking it (see showResults below).
function tplPageUrl(name) {
var title = "Şablon:" + name;
return (window.mw && mw.util && typeof mw.util.getUrl === "function") ? mw.util.getUrl(title) : "/wiki/" + encodeURIComponent(title);
}
// Escapes str for safe interpolation into a RegExp -- page titles can contain regex metacharacters
// (parentheses for disambiguation, periods in abbreviation entries, etc.).
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
// Wraps the first occurrence of the page title (+ an optional glued-on suffix, e.g. a plural "-an") in the
// example text with wikitext bold markup, so the headword stands out in the rendered example. Skips it if
// the title is already bolded by hand, to avoid turning "'''reh'''" into "'''''reh'''''" (bold+italic).
// Returns {text, bolded}; bolded is false if the title wasn't found anywhere and nothing changed.
function boldenPageTitle(text, title) {
var escapedTitle = escapeRegExp(title);
var suffixPattern = "([^\\s.,;?!()']+)?";
if (new RegExp("'''" + escapedTitle + suffixPattern + "'''", "i").test(text)) {
return { text: text, bolded: true };
}
var bolded = text.replace(new RegExp("(" + escapedTitle + suffixPattern + ")", "ig"), "'''$1'''");
return { text: bolded, bolded: bolded !== text };
}
// Extracts a human-readable message from an mw.Api rejection (code, result).
function apiErrorMessage(code, result) {
return (result && result.error && result.error.info) || (typeof code === "string" ? code : "Xeletiyeke nenas");
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
// Custom drag-to-resize grip for textareas, ported from Wiki/start.js's wiktkuMakeManualResizable() -- Safari
// has no native corner resize handle on textareas at all, this is the fix start.js already uses for that.
// Inserted as a SIBLING within the textarea's existing OOUI wrapper (same reasoning as
// ensureLinebreakBackdrop above: wrapping the textarea in a NEW div risks disturbing OOUI's own layout),
// not by wrapping it in a new div like start.js's own version does. Unlike start.js's version, this doesn't
// persist the chosen height across page loads (start.js keys that off the textarea's own CSS class, but
// every textarea here is a plain OOUI MultilineTextInputWidget with no distinguishing class, so a direct
// port would have every field here share one save slot and overwrite each other's heights).
function makeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.data("addExampleResizableDone")) {
return;
}
textarea.data("addExampleResizableDone", true);
textarea.css("resize", "none"); // replaced by the custom grip below
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var grip = $("<div class='add-example-resize-grip'></div>");
textarea.after(grip);
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) { /* already released */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
}
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 makeManualResizable to every textarea in `context` (itself or its descendants).
function initManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function() {
makeManualResizable(this);
});
}
var api = new mw.Api();
// Kategorî:Çavkanî's template members plus their redirects (each redirect as its own searchable entry
// pointing at the same canonical target, so a template is findable by any of its names). Ported from
// Wiki/start.js's fetchCatSrcTemplates(), extended with prop=redirects. Cached after first fetch.
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) {
return catSrcTemplatesPromise;
}
catSrcTemplatesPromise = api.get({
action: "query",
generator: "categorymembers",
gcmtitle: "Kategorî:Çavkanî",
gcmnamespace: 10,
gcmlimit: "max",
prop: "redirects",
rdnamespace: 10,
rdlimit: "max",
formatversion: 2,
}).then(function(data) {
var pages = (data.query && data.query.pages) || [];
var list = [];
pages.forEach(function(page) {
var target = page.title.replace(/^[^:]+:/, "");
list.push({ label: target, target: target });
(page.redirects || []).forEach(function(redirect) {
list.push({ label: redirect.title.replace(/^[^:]+:/, ""), target: target });
});
});
list.sort(function(a, b) {
return a.label.localeCompare(b.label, mw.config.get("wgUserLanguage"));
});
catSrcTemplates = list;
return list;
}, function() {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
// TemplateData params for one template (name without the "Şablon:" prefix); redirects:1 so this also
// resolves if `name` is itself a redirect. Resolves to [] if the template has no TemplateData. Cached.
var tplDataCache = {};
function fetchTemplateDataFor(name) {
if (Object.prototype.hasOwnProperty.call(tplDataCache, name)) {
return $.Deferred().resolve(tplDataCache[name]).promise();
}
return api.get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2,
}).then(function(data) {
var pages = (data && data.pages) || {};
var first = null;
Object.keys(pages).forEach(function(id) {
if (!first) {
first = pages[id];
}
});
var params = [];
if (first && first.params) {
Object.keys(first.params).forEach(function(key) {
var p = first.params[key];
var label = p && p.label;
if (label && typeof label === "object") {
var userLang = mw.config.get("wgUserLanguage");
label = label[userLang] || label.en || label[Object.keys(label)[0]];
}
params.push({ key: key, label: label || key, required: !!(p && p.required) });
});
}
tplDataCache[name] = params;
return params;
}, function() {
tplDataCache[name] = [];
return [];
});
}
// Language display name, read from the matching section's .besazimani link text.
function languageNameForCode(code) {
var $mark = $(".besazimani[id='" + code + "']").first();
return $mark.length ? $mark.text().trim() : null;
}
// Whether the page title itself (accented Kurdish Latin letters included) is written in Latin script.
var pageTitleIsLatin = !/[^\x00-\x7FÀ-ɏḀ-ỿ‘’]/.test(mw.config.get("wgTitle") || "");
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex containers used directly by Şablon:nimûne; .citation-whole = Modul:quote's own wrapper, now used by jêder-* templates (Modul:quote nests .h-quotation inside .citation-whole > dl > dd instead of putting it directly under the <li>, so it needs its own entry here).
// Requiring "ul > li >" is what makes this only match an example that's grouped into its own <ul> -- a
// {{nimûne}} (or its "mk" redirect) with no jêder-family citation alongside it in the same definition
// renders straight under the definition's own content instead, with no such group; also reused below to
// tell whether the second pass still needs to handle a given definition.
var EXISTING_EXAMPLE_SELECTOR = "ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation, ul > li > .citation-whole";
$(EXISTING_EXAMPLE_SELECTOR).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.
// A jêder-* citation with no jêgirtin= (quotation text) yet renders no h-quotation/e-quotation at all
// (see get_quote() in Modul quote.lua) -- exactly the "bare citation" case this button exists to fill
// in, so this can't just crash: without the guard, [0] is undefined here and ".lang" throws, which
// (since $.each() has no try/catch) silently kills the button for every remaining match on the page.
var $langEl = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0];
if (!$langEl) {
console.warn("Gadget-wikt.add-examples: nikaribe zimanê vê nimûneyê bibîne, valakirî hate derbaskirin.", $item);
return;
}
var language = $langEl.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) {
// Encodes the section as "type|ordinal" -- the ordinal is this heading's own position
// among same-type headings WITHIN ITS LANGUAGE (see sectionOrdinalWithinLanguage), not
// MediaWiki's page-wide DOM id number, which can collide across unrelated language sections.
var $sectionH3 = $section.find("h3");
var sectionType = sectionTypeOf($sectionH3) || $sectionH3.text().trim();
definitionLevel.splice(0, 0, sectionType + "|" + sectionOrdinalWithinLanguage($sectionH3));
} 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. $group is the citation-group <ul> itself (parent of $item);
// the form panel is inserted AFTER it (see click handler below), not inside it, so the panel isn't
// squeezed into that <ul>'s narrow hanging-indent width on mobile -- only the button/title stays
// there, matching the "Form redesign for Kurdish example" mockup (title inside the bullet list,
// full-width panel below it).
var $group = $item.parent();
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($item, $button, $title, language, definitionLevel);
$group.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem);
}
});
// Second pass: some definitions have no example the pass above could react to at all -- either genuinely
// zero examples, or one rendered via {{nimûne}} (or its "mk" redirect) with no jêder-family citation next
// to it, which (see the comment on EXISTING_EXAMPLE_SELECTOR above) renders with no "ul > li" group to
// match. This walks every recognized POS section's own definitions list directly instead of reacting to
// an existing example, and reads the language off the language section's own <h2> rather than off an
// example -- so it doesn't need one to already exist. Everything else (Form, submit()) is reused as-is.
// MediaWiki wraps each heading in a "mw-heading2"/"mw-heading3"/... div in current skin output; falls
// back to the bare heading element for older/other output that doesn't wrap it.
function headingOuter($h) {
var $wrap = $h.closest(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6");
return $wrap.length ? $wrap : $h;
}
// Section's language code: nearest preceding .besazimani[id] by document order (not sibling-walking, which mobile's per-section wrapping breaks).
function languageCodeForOl($ol) {
var $marks = $(".besazimani[id]").add($ol);
var ol = $ol.get(0);
var idx = $marks.index(ol);
for (var i = idx - 1; i >= 0; i--) {
var el = $marks.get(i);
if (el.id) {
return el.id;
}
}
return null;
}
// The heading's own recognized section-type key (see sectionNames above), with a page author's own trailing
// disambiguating number (e.g. "Navdêr 2") stripped back to the canonical name ("Navdêr") -- returns null for
// a heading that isn't a recognized word-sense section at all (Bilêvkirin, Etîmolojî, Çavkanî, ...).
function sectionTypeOf($h3) {
var text = $h3.text().trim();
if (sectionNames[text]) {
return text;
}
var stripped = text.replace(/\s+\d+$/, "");
return sectionNames[stripped] ? stripped : null;
}
// This heading's own 1-based position among same-type headings (see sectionTypeOf) within its own language
// block -- reset at each .besazimani[id] marker, same document-order technique as languageCodeForOl above
// (not sibling-walking, which mobile's per-section wrapping breaks). Needed because MediaWiki's page-wide id
// uniquification can attach a number to an unnumbered heading purely from an unrelated same-named heading
// colliding elsewhere on the page (e.g. Tirkî's own unnumbered "Navdêr" landing on id="Navdêr_3" only
// because Kurmancî's own literal "Navdêr 2" heading already claimed "Navdêr_2") -- that number has nothing
// to do with this heading's actual position and can't be used to find it back in the wikitext.
function sectionOrdinalWithinLanguage($h3) {
var h3El = $h3.get(0);
var $all = $(".besazimani[id]").add($("h3"));
var counts = {};
var result = 1;
$all.each(function() {
if ($(this).is(".besazimani[id]")) {
counts = {};
return;
}
var type = sectionTypeOf($(this)) || $(this).text().trim();
counts[type] = (counts[type] || 0) + 1;
if (this === h3El) {
result = counts[type];
return false;
}
});
return result;
}
// A <li> whose OWN direct content (not counting a nested <ol>) is wrapped in ".form-of-definition" is
// MediaWiki's "form of" template system marking that content as generated by a template -- e.g.
// {{ku-tewîna-nav}}'s "Formeke heval:" wrapper together with its "rewşa îzafeyî"/"rewşa çemandî"/...
// readings underneath. That whole nested block is normally the ENTIRE expansion of a single "#"
// wikitext line, with no separate "##" line behind any individual reading -- recursing into it would
// hand out one button per reading, each trying to match a "##" line that doesn't exist, and submit()
// would fail to find where to insert every one of them. A <li> without that class whose nested <ol>
// holds real hand-typed prose (e.g. sîno-koreyî/Navdêr's two genuinely separate "##" sub-senses) has
// no such problem -- those really are individually addressable wikitext lines.
function isFormOfWrapper($li) {
return $li.children(".form-of-definition").length > 0;
}
// Recurse into a <li>'s own nested <ol> UNLESS it's a form-of-template wrapper (see isFormOfWrapper) --
// a wrapper <li> with its own nested <ol> isn't itself a sense with content of its own, only its real
// (non-generated) leaves are.
function eachLeafDefinition($ol, fn) {
$ol.children("li").each(function() {
var $li = $(this);
var $childOl = $li.children("ol");
if ($childOl.length && !isFormOfWrapper($li)) {
$childOl.each(function() {
eachLeafDefinition($(this), fn);
});
} else {
fn($li);
}
});
}
$("h3").each(function() {
var sectionType = sectionTypeOf($(this));
if (!sectionType) {
return; // not a recognized word-sense section (Bilêvkirin, Etîmolojî, Çavkanî, ...)
}
var sectionOrdinal = sectionOrdinalWithinLanguage($(this));
// Forward-walk siblings to the definitions <ol>, skipping over a declension table/TemplateStyles/the
// headword line; stop (nothing to attach to in this section) if another heading comes first instead.
var $ol = null;
for (var $cursor = headingOuter($(this)).next(); $cursor.length; $cursor = $cursor.next()) {
if ($cursor.is("ol")) {
$ol = $cursor;
break;
}
if ($cursor.is(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6, h2, h3, h4, h5, h6")) {
break;
}
}
if (!$ol) {
return;
}
var language = languageCodeForOl($ol);
if (!language) {
console.warn("Gadget-wikt.add-examples: nikaribe koda zimanê vê beşê bibîne.", $ol);
return;
}
eachLeafDefinition($ol, function($li) {
// The pass above already added a button here (or will) -- an actual example already wrapped in
// its own "ul > li" group.
if ($li.find(EXISTING_EXAMPLE_SELECTOR).length) {
return;
}
var definitionLevel = [];
var $definitionItem = $li;
while ($definitionItem.prop("tagName") === "LI") {
// 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);
$definitionItem = $definitionItem.parent().parent();
}
definitionLevel.splice(0, 0, sectionType + "|" + sectionOrdinal);
// A hidden, empty placeholder <li> so submit()'s existing "_$lastExample.after(newLi)" insertion
// (unchanged, same as the pass above) lands the first submitted example right before the button
// -- matching the existing convention of new examples going in before the button, not after it.
var $placeholder = $("<li style='display:none'></li>");
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
// A "ul" nested directly under a definition "li" starts hidden here (see the HQToggle-controlled
// jêder-citation-group "ul", which only ever renders with an explicit "style="display: block""
// set on it) -- this one has no HQToggle to unhide it, so it needs the same explicit override or
// the button (and the placeholder above) never becomes visible at all.
var $ul = $("<ul>").css("display", "block").append($placeholder).append($formItem);
// The form panel is inserted AFTER $ul (not inside it) once opened -- same reasoning as the first
// pass above: keeps the full-width panel out of the tight bulleted-list indentation on mobile.
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($placeholder, $button, $title, language, definitionLevel);
$ul.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$li.append($ul);
});
});
// Pulls the form panel flush with the page's own left/right edges, undoing whatever nested-list indent it inherited from sitting inside a deeply-nested definition.
function alignFormToPage($form) {
var $container = $form.closest(".mw-parser-output");
if (!$container.length) {
return;
}
var pad = parseFloat(window.getComputedStyle($container[0]).paddingLeft) || 0;
var containerLeft = $container.offset().left + pad;
var indent = $form.offset().left - containerLeft;
$form.css({
marginLeft: indent > 0 ? -indent : 0,
width: $container.width() + "px"
});
}
// Constructor for the edit form; lastExample/button/title/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, $title, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._$title = $title;
this._currentJederKey = "";
this._jederFieldWidgets = {};
// Set once a template is picked in the Kategorî:Çavkanî mode (see _selectCategoryTemplate); the
// canonical template title (without the "Şablon:" prefix), used as `sablon` in _doSubmit.
this._categoryTemplateName = null;
// Set by _renderCategoryTemplateFields if the picked template's TemplateData has a "koda zimanî" param;
// that param's own key, used to emit "<key>=<language>" in _doSubmit -- null if no such param exists.
this._categoryTemplateLangParamKey = null;
this._textInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
// Shown under the text box (see boldenPageTitle) when the page title can't be found in the example text
// as typed, so it won't get bolded; purely informational, doesn't block submitting.
this._titleBoldHint = $("<span class='add-example-title-bold-hint'></span>").hide();
this._updateTitleBoldHint = function() {
var text = self._textInput.getValue().trim();
var title = mw.config.get("wgTitle");
var show = !!text && !boldenPageTitle(text, title).bolded;
self._titleBoldHint.toggle(show).html(show ? "Sermade (" + escapeHtmlForBackdrop(title) + ") nehat dîtin; dê neyê <b>stûr</b>kirin." : "");
};
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
self._updateReadyHint();
self._updateTitleBoldHint();
});
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,
}));
}
}
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: CATEGORY_TEMPLATE_KEY,
label: "Ji Kategorî:Çavkanî şablonekê hilbijêre",
}));
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._sourceInput.on("change", function() {
self._updateReadyHint();
});
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. The Citoid fetch button sits right next to it (not in a separate box) -- see _urlRowWidget below.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
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, malûmatan 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));
this._sourceURLInput.on("change", function() {
self._updateReadyHint();
self._autofillVideoTimestamp();
});
// URL input + inline "auto-fill" button as one row (replaces the old separate framed Citoid box's
// button row) -- a plain OO.ui.Widget used purely as a flex-row container (same pattern as
// _loadingImage below: build it empty, then manually append its children's $elements). Disabling
// during submit() still goes through the individual _sourceURLInput/_citoidButton references, not
// through this wrapper.
this._urlRowWidget = new OO.ui.Widget({ classes: ["add-example-url-row"] });
this._urlRowWidget.$element.append(this._sourceURLInput.$element, this._citoidButton.$element);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, {
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;
// Shown right after a successful Citoid fetch (see _fillFromCitoid); hidden again on clear.
this._citoidSuccessMsg = $("<span class='add-example-citoid-success'>✓ Malûmat hatin dagirtin — li jêr kontrol bike.</span>").hide();
// 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("");
self._citoidSuccessMsg.hide();
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
// Plain div (not OO.ui.FieldsetLayout) so the grid CSS class applies directly to the field items.
this._jederFieldsFieldset = $("<div class='add-example-jeder-fields'>");
// "Malûmatên çavkaniyê" header (+ the "Vala bike" clear button) sitting right above the fields grid,
// replacing the old framed "Ji Citoid an bi destan tijî bike:" box -- like this only makes sense once
// a real jêder-* template is active (there's nothing here to show for the "citoid: not yet detected"
// placeholder or for free text), so the whole section toggles together in _setSourceType().
this._jederSection = $("<div class='add-example-jeder-section'>").append(
$("<div class='add-example-jeder-header'>")
.append($("<span class='add-example-jeder-header-label'>Malûmatên çavkaniyê</span>"))
.append(this._citoidClearButton.$element),
this._jederFieldsFieldset
);
// Kategorî:Çavkanî template search box: sits directly under the source-type dropdown in $topRight (not
// in the "Malûmatên çavkaniyê" section below, which is reserved for the picked template's own fields --
// see _setSourceType/_selectCategoryTemplate). Built once here, not rebuilt per _setSourceType call, so
// switching in and out of this dropdown mode doesn't lose its own DOM node/event handlers.
this._categoryTemplateInput = $("<input type='search' autocomplete='off' class='add-example-cat-tpl-input'>")
.attr("placeholder", "Li navê şablonê bigere…");
this._categoryTemplateResults = $("<ul class='add-example-cat-tpl-results'>").hide();
this._categoryTemplateStatus = $("<span class='add-example-cat-tpl-status'>Şablon tên barkirin…</span>");
this._categoryTemplateSearchRow = $("<div class='add-example-cat-tpl-search-row'>")
.append(this._categoryTemplateInput, this._categoryTemplateResults, this._categoryTemplateStatus)
.hide();
this._initCategoryTemplatePicker();
this._translationInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
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({ rows: 4 });
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Translîterasyona 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));
// Reactive "ready to submit" hint next to Biweşîne: no text yet, text but no source (still submittable
// as a bare {{nimûne}}), or fully ready -- kept in sync by _updateReadyHint(), wired to every field below.
this._readyHint = $("<span class='add-example-ready-hint'></span>").text("Metna nimûneyê lazim e.");
// True while a Citoid-eligible URL/DOI/ISBN is typed in but not yet fetched (or fetched then edited away) and no jêder field has been filled by hand -- the "looks done but isn't" trap this exists to catch. Not applicable in free-text mode, where the fetch button isn't even offered.
this._citoidPending = function() {
return self._currentJederKey !== "" &&
self._currentJederKey !== CATEGORY_TEMPLATE_KEY &&
!!self._sourceURLInput.getValue().trim() &&
!self._citoidSuccessMsg.is(":visible") &&
!Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
};
this._updateReadyHint = function() {
if (!self._textInput.getValue()) {
self._readyHint.text("Metna nimûneyê lazim e.");
return;
}
if (self._citoidPending()) {
self._readyHint.text("Pêşî 'Bi otomatîk tijî bike' bitikîne.");
return;
}
var hasSource = self._sourceInput.getValue().trim() || self._sourceURLInput.getValue().trim() ||
Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
self._readyHint.text(hasSource ? "Hazir e." : "Çavkanî nehatiye dayîn.");
};
// Prefills the Dem field from the typed URL's own "t=" (see wikt.citoid.extractVideoTimestamp) once jêder-vîdeo is active -- never overwrites a value the user already entered by hand.
this._autofillVideoTimestamp = function() {
var demWidget = self._jederFieldWidgets.dem;
if (self._currentJederKey !== "jêder-vîdeo" || !demWidget || demWidget.getValue().trim()) {
return;
}
var dem = wikt.citoid.extractVideoTimestamp(self._sourceURLInput.getValue().trim());
if (dem && !demWidget.getValue().trim()) {
demWidget.setValue(dem);
}
};
// framed:false (+ the "destructive" flag for the red text/hover) matches the mockup's borderless
// "Betal bike" -- a plain colored link rather than a boxed button, distinguishing it from Paqij bike.
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
framed: false,
});
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);
// Two-column top section (see "Form redesign for Kurdish example/Nimûne zêde bike.dc.html"): example
// text (+ translation/transliteration for non-ku, right after it, not after the source fields) on the
// left; source-type + link/Citoid on the right. Built as plain <div>s, not an OOUI layout -- OOUI has
// no CSS-grid container -- so .add-example-top-grid in the CSS can lay them out as a real responsive
// 7fr/5fr grid (collapsing to one column on narrow screens).
var $topLeft = $("<div class='add-example-top-col'>").append(textInputLayout.$element, this._titleBoldHint);
if (language !== "ku") {
$topLeft.append(translationInputLayout.$element);
}
if (!pageTitleIsLatin) {
$topLeft.append(transcriptionInputLayout.$element);
}
var $topRight = $("<div class='add-example-top-col'>").append(
sourceTypeLayout.$element,
this._categoryTemplateSearchRow,
this._sourceInputLayout.$element,
this._sourceURLInputLayout.$element,
this._citoidSuccessMsg
);
var $topGrid = $("<div class='add-example-top-grid'>").append($topLeft, $topRight);
// 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 (see the FieldLayout replaceWith() there).
this._fieldsLayout = $("<div class='add-example-fieldset'>").append($topGrid, this._jederSection);
// Bottom action row -- order/spacing matches the mockup: Biweşîne (+ spinner + ready hint), a spacer
// pushing the rest right, then Paqij bike (bordered/subtle) and Betal bike (borderless red text, via
// framed:false above). A plain flex <div>, not an OOUI HorizontalLayout, so the raw hint/spacer
// elements can sit alongside the real button widgets (same reasoning as the top grid above).
var $buttonsRow = $("<div class='add-example-main-buttons'>").append(
this._applyButton.$element,
this._loadingImage.$element,
this._readyHint,
$("<span class='add-example-buttons-spacer'></span>"),
this._clearButton.$element,
this._cancelButton.$element
);
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
});
this._frame.$element.append(this._fieldsLayout, $buttonsRow);
// 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");
initManualResize(this._frame.$element);
}
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 fetch button, and the "Malûmatên çavkaniyê" fields section toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateName = null;
this._categoryTemplateLangParamKey = null;
var isRealJederKey = jederKey && jederDefs[jederKey];
var isCategoryTemplateKey = jederKey === CATEGORY_TEMPLATE_KEY;
if (isRealJederKey) {
var def = jederDefs[jederKey];
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;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: ["add-example-field-span-" + (field.span || 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
}
// The search box itself is always in the DOM (see the constructor, it lives in $topRight) -- only
// shown in this one mode, and reset when leaving it so a stale query/selection doesn't linger for
// next time it's opened.
this._categoryTemplateSearchRow.toggle(isCategoryTemplateKey);
if (!isCategoryTemplateKey) {
this._categoryTemplateInput.val("");
this._categoryTemplateResults.hide();
}
// "Malûmatên çavkaniyê" header + fields grid: shown for a real jêder-* template (fields built above).
// For the Kategorî:Çavkanî picker it stays hidden here -- there's nothing to put in it until a
// template is actually picked, see _selectCategoryTemplate, which shows it once there is.
this._jederSection.toggle(!!isRealJederKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid fetch button: hidden for free text (nothing there for it to fill in) and for the
// Kategorî:Çavkanî picker (Citoid has no mapping for an arbitrary picked template), shown for
// "citoid" auto-detect and any real jêder-* key. The URL input itself next to it stays visible in
// every OTHER mode -- see the sourceURLInputLayout toggle below for the one exception.
this._citoidButton.toggle(jederKey !== "" && !isCategoryTemplateKey);
// URL field wording: plain "attach a link" phrasing for free text, 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 $oldLayout = this._sourceURLInputLayout.$element;
// Re-wraps the SAME _urlRowWidget (still holding _sourceURLInput + _citoidButton) in a new
// FieldLayout with the new label/help; the widget's $element moves along with it, same as the
// old addItems()/removeItems() swap did for the plain input before this redesign.
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, 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,
});
$oldLayout.replaceWith(this._sourceURLInputLayout.$element);
}
// The URL/Citoid row is normally always visible (see the constructor comment), but Citoid has no
// mapping for an arbitrary Kategorî:Çavkanî template, so it'd just be dead UI in that one mode.
this._sourceURLInputLayout.toggle(!isCategoryTemplateKey);
this._autofillVideoTimestamp();
this._updateReadyHint();
initManualResize(this._jederFieldsFieldset); // covers a freshly-rebuilt "sernav" field (jêder-*); the Kategorî:Çavkanî picker's own fields are resized separately once picked, see _renderCategoryTemplateFields
},
// Wires up the search box's own input/blur handlers and kicks off the template list fetch. Called once
// from the constructor -- the search box lives permanently in $topRight (see there), only shown/hidden
// by _setSourceType, so this only needs to run once, not every time the picker mode is entered.
_initCategoryTemplatePicker: function() {
var self = this;
function showResults(query) {
var q = query.trim().toLowerCase();
self._categoryTemplateResults.empty();
var list = catSrcTemplates || [];
var matched = q ? list.filter(function(entry) {
return entry.label.toLowerCase().indexOf(q) !== -1;
}) : list;
if (!matched.length) {
self._categoryTemplateResults.hide();
return;
}
matched.slice(0, 50).forEach(function(entry) {
var $li = $("<li class='add-example-cat-tpl-row'>");
var $text = $("<span class='add-example-cat-tpl-text'>").text(entry.label);
// A redirect entry's label differs from its target -- mark where it actually resolves to.
if (entry.label !== entry.target) {
$text.append($("<span class='add-example-cat-tpl-redirect-arrow'>").text(" → " + entry.target));
}
// Lets the user verify which template a result actually is before picking it, same "🔗
// opens the template's own page" affordance Wiki/start.js uses in its own searchable
// dropdowns -- always points at the canonical target, never a redirect's own page.
var $link = $("<a class='add-example-cat-tpl-link' target='_blank' rel='noopener'>🔗</a>")
.attr("title", "Rûpela şablonê veke")
.attr("href", tplPageUrl(entry.target));
// stopPropagation only -- preventDefault would stop the link from actually navigating, and
// this must not also select the row the way clicking elsewhere in it does (see below).
$link.on("mousedown click", function(e) { e.stopPropagation(); });
$li.append($text, $link);
$li.on("mousedown", function(e) {
e.preventDefault(); // keeps the input's blur (and the results-hiding it triggers) from firing before the click registers
self._selectCategoryTemplate(entry);
});
self._categoryTemplateResults.append($li);
});
self._categoryTemplateResults.show();
}
this._categoryTemplateInput.on("input focus", function() {
showResults($(this).val());
});
this._categoryTemplateInput.on("blur", function() {
setTimeout(function() { self._categoryTemplateResults.hide(); }, 200); // lets the mousedown handler above fire first
});
fetchCatSrcTemplates().then(function() {
self._categoryTemplateStatus.text("");
}, function() {
self._categoryTemplateStatus.text("Şablon nehatin barkirin.");
});
},
// Picks a template from the search results: records its canonical name -- a redirect entry resolves to
// its target, the output always uses that, never the redirect's own name (see fetchCatSrcTemplates) --
// and reveals/renders the "Malûmatên çavkaniyê" section for its parameter fields.
_selectCategoryTemplate: function(entry) {
this._categoryTemplateResults.hide();
// Left as the plain label (not "label → target") -- putting the arrow in the input's own value
// would get re-used as the search query if the box is focused again to pick something else.
this._categoryTemplateInput.val(entry.label);
this._categoryTemplateName = entry.target;
this._jederSection.toggle(true);
this._renderCategoryTemplateFields(entry.target);
},
// Builds one text input per TemplateData param of `name` into the shared "Malûmatên çavkaniyê" fields
// grid (_jederFieldsFieldset, the same one the jêder-* fields use), or a lone "Rûpel" fallback field if
// it has no TemplateData -- see the jêgirtin=/rûpel= example in the feature request this implements.
_renderCategoryTemplateFields: function(name) {
var self = this;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateLangParamKey = null;
fetchTemplateDataFor(name).then(function(params) {
// A param labeled exactly "koda zimanî" is filled from the language dropdown, not typed by hand
// -- find it (if any) before filtering, so it can be excluded from the rendered fields below
// and used by _doSubmit to emit "<key>=<language>" (see CATEGORY_TEMPLATE_LANG_LABEL).
(params || []).forEach(function(p) {
if ((p.label || "").trim().toLowerCase() === CATEGORY_TEMPLATE_LANG_LABEL) {
self._categoryTemplateLangParamKey = p.key;
}
});
var filtered = (params || []).filter(function(p) {
return CATEGORY_TEMPLATE_COVERED_PARAMS.indexOf(p.key) === -1 && p.key !== self._categoryTemplateLangParamKey;
});
var list = filtered.length ? filtered : [{ key: "rûpel", label: "Rûpel", required: false }];
list.forEach(function(p) {
// Reuse the jêder-* field's own width/multiline when this param's key matches one (see
// JEDER_FIELD_SIZE_BY_KEY) -- most Kategorî:Çavkanî templates share the same bibliographic
// param names, so e.g. "sernav" ends up full-width+multiline here too, not a generic box.
var sizeHint = JEDER_FIELD_SIZE_BY_KEY[p.key];
var widget = (sizeHint && sizeHint.multiline)
? new OO.ui.MultilineTextInputWidget({ rows: 2, autosize: false })
: new OO.ui.TextInputWidget();
self._jederFieldWidgets[p.key] = widget;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: p.label,
align: "top",
classes: ["add-example-field-span-" + (sizeHint ? sizeHint.span : 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
self._updateReadyHint();
initManualResize(self._jederFieldsFieldset); // matters now that a matched key like "sernav" can render multiline
});
},
// Fetches data via wikt.citoid, picks the matching jêder-* template, and fills its empty fields.
_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, query);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
self._citoidSuccessMsg.show();
self._updateReadyHint();
mw.notify("Malûmat ji Citoid hatin barkirin.");
}, function(errorMsg) {
// Citoid can't fetch some sites at all (e.g. x.com/twitter.com) -- fall back to jêder-websîte with a website name guessed from the URL itself, rather than just a bare error.
var fallbackSite = wikt.citoid.websiteNameForUrl(query);
if (fallbackSite) {
if (self._currentJederKey !== "jêder-websîte") {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData("jêder-websîte");
if (item) {
menu.chooseItem(item); // this calls _setSourceType("jêder-websîte") automatically
}
}
var websiteWidget = self._jederFieldWidgets["websîte"];
if (websiteWidget && !websiteWidget.getValue()) {
websiteWidget.setValue(fallbackSite);
}
mw.notify("Citoid nikare vê malperê bixwîne; şablona Websîte hate hilbijartin, ji kerema xwe mayî bi destan tijî bike.");
return;
}
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî malûmatan 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. The title text takes
// the button's place while open (see the "Form redesign for Kurdish example" mockup); the button
// itself stays put ready to reappear once the form is cancelled/closed.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._$title.toggle(visible);
this._frame.toggle(visible);
if (visible) {
alignFormToPage(this._frame.$element);
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._citoidSuccessMsg.hide();
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Warns before submitting if a Citoid URL/DOI/ISBN was typed but never successfully fetched, then defers
// to _doSubmit. The title-not-boldable case (see boldenPageTitle) is shown inline under the text box
// instead (_titleBoldHint) rather than blocking submission here.
submit: function() {
if (this._citoidPending() && !window.confirm("Te lînk, DOI an ISBN nivîsand lê hîn jê malûmat nehatine standin. Bêyî wan berdewam bikî?")) {
return;
}
this._doSubmit();
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
_doSubmit: 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; if a Kategorî:Çavkanî template was
// picked instead, collect its TemplateData-driven fields the same way, plus wekjêgirtin=1 for any
// "Ç:"-prefixed template (a quotation-equivalent, not a usage example -- see Modul:quote).
var jederParams = [];
var usingCategoryTemplate = this._currentJederKey === CATEGORY_TEMPLATE_KEY && !!this._categoryTemplateName;
if (usingCategoryTemplate) {
Object.keys(self._jederFieldWidgets).forEach(function(key) {
// A raw linebreak would break the single-line "#*" wikitext just like in the example text,
// but these are plain param values (not display text), so collapse to a space, not <br>.
var value = nlToSpace(self._jederFieldWidgets[key].getValue().trim());
if (value) {
jederParams.push(key + "=" + value);
}
});
// Only for a template whose own TemplateData actually names a "koda zimanî" param (see
// CATEGORY_TEMPLATE_LANG_LABEL) -- an arbitrary Kategorî:Çavkanî template has no guaranteed
// "param 1 = language" convention the way jêder-* does, so this isn't added unconditionally.
if (self._categoryTemplateLangParamKey) {
jederParams.push(self._categoryTemplateLangParamKey + "=" + self._language);
}
if (/^Ç:/.test(self._categoryTemplateName)) {
jederParams.push("wekjêgirtin=1");
}
} else if (this._currentJederKey && jederDefs[this._currentJederKey]) {
jederDefs[this._currentJederKey].fields.forEach(function(field) {
var widget = self._jederFieldWidgets[field.key];
var value = widget ? nlToSpace(widget.getValue().trim()) : "";
if (value) {
jederParams.push(field.key + "=" + value);
}
});
}
// A Kategorî:Çavkanî template is used as soon as it's picked, even with every field left blank
// (still submittable as a bare jêgirtin=); a jêder-* type only counts once a field is actually filled.
var usingJederTemplate = usingCategoryTemplate || (this._currentJederKey && jederParams.length > 0);
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-*/Kategorî:Çavkanî template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = usingCategoryTemplate ? this._categoryTemplateName : 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 -- only for jêder-*/jêder/nimûne, which are always designed with param 1 =
// language. A Kategorî:Çavkanî template only gets a language param when its own TemplateData
// names one ("koda zimanî") -- see the _categoryTemplateLangParamKey push above, already folded
// into jederParams with its own key, not assumed to be position 1.
if (!usingCategoryTemplate) {
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 (see boldenPageTitle), then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(boldenPageTitle(text, title).text);
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
if (translation) {
// Kategorî:Çavkanî templates route through Modul:quote directly and take its "t=" param name;
// the jêder-* templates use "tercime=" instead (see the jêder-* template docs).
code += "|" + (usingCategoryTemplate ? "t" : "tercime") + "=" + translation;
}
}
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
if (transcription) {
code += "|tr=" + transcription;
}
code += "}}";
// definitionLevel[0] is "type|ordinal" (see sectionOrdinalWithinLanguage) -- ordinal is this
// section's own position among same-type headings within its language, resolved client-side, not
// a number parsed out of a DOM id (MediaWiki's page-wide id-uniquification can attach a number to
// an unnumbered heading purely from an unrelated same-named heading colliding elsewhere on the
// page, with no relation to this heading's actual wikitext).
var sectionKeyParts = this._definitionLevel[0].split("|");
var sectionType = sectionKeyParts[0];
var sectionOrdinal = parseInt(sectionKeyParts[1], 10);
// 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 -- bounded to end at the NEXT top-level "==...=="
// heading (or end of page) so a later language's own same-named subsection can never be
// scanned into this one's search.
var langSectionRegex = new RegExp("==[ ]*{{ziman\\|{0}}}[ ]*==".format(self._language));
var langSectionIndex = pageContent.search(langSectionRegex);
if (langSectionIndex === -1) {
error("Xeletiyeke bi koda zimanî heye. Koda zimanî:" + self._language);
return;
}
var afterLangHeading = pageContent.indexOf("\n", langSectionIndex);
afterLangHeading = afterLangHeading === -1 ? pageContent.length : afterLangHeading + 1;
var nextLangSectionMatch = /\n==[^=\n][^\n]*==/.exec(pageContent.slice(afterLangHeading));
var langSectionEnd = nextLangSectionMatch ? afterLangHeading + nextLangSectionMatch.index : pageContent.length;
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;
}
// `lines` covers the WHOLE rest of the page from this language's heading onward -- not just this
// language's own section -- because it gets reused below (see "text:") to rebuild the entire
// saved page; truncating it here would silently drop every later language section on save.
// Only the section-heading search itself is bounded, via sectionSearchEndLine, to stop at the
// next language, so a same-named heading over there can never be matched by mistake.
var lines = pageContent.slice(langSectionIndex).split("\n");
var sectionSearchEndLine = pageContent.slice(langSectionIndex, langSectionEnd).split("\n").length;
var sectionNamesRegex = Object.keys(sectionNames).join('|');
var sectionRegex = new RegExp('^===[ ]*(' + sectionNamesRegex + ')\\s*(\\d+)?');
var targetLineIndex;
var sectionOccurrence = 0;
for (targetLineIndex = 0; targetLineIndex < sectionSearchEndLine; targetLineIndex++) {
var matchSection = sectionRegex.exec(lines[targetLineIndex]);
if (matchSection && sectionNames[sectionType].includes(matchSection[1])) {
sectionOccurrence++;
if (sectionOccurrence === sectionOrdinal) {
// Add more conditions if needed for inflection, e.g., (isInflection === line.includes("Formeke "))
break;
}
}
}
if (targetLineIndex === sectionSearchEndLine) {
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(code, result) {
error("Nekarî rûpelê xilas bike: " + apiErrorMessage(code, result));
});
}, function(code, result) {
error("Nekarî naveroka rûpelê bistîne: " + apiErrorMessage(code, result));
});
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>
6zd9s46ymbe700cs0ir0ta09y0kxqcp
6342882
6342878
2026-08-27T09:42:57Z
Wikihez
7344
6342882
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 = "2.0";
// 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, loaded before this script via the
// ext.gadget.citoid-helper dependency (see the top of the file) -- wikt.citoid is guaranteed ready by the
// time any of this runs.
// Sentinel _currentJederKey value for the "pick a template from Kategorî:Çavkanî" dropdown option -- not a
// real jederDefs key, same convention as Wiki/start.js's own "__category__" picker.
var CATEGORY_TEMPLATE_KEY = "__category__";
// TemplateData params already covered by the form's own top-level text/translation/transliteration boxes --
// skipped when building a Kategorî:Çavkanî template's dynamic fields (see _renderCategoryTemplateFields) so
// they don't get a redundant duplicate inputbox.
var CATEGORY_TEMPLATE_COVERED_PARAMS = ["jêgirtin", "jg", "t", "tr"];
// A TemplateData param labeled exactly this (case/whitespace-insensitive) is auto-filled from the language
// dropdown instead of shown as its own inputbox -- see _renderCategoryTemplateFields/_doSubmit. Unlike
// jêder-*, an arbitrary Kategorî:Çavkanî template has no guaranteed "param 1 = language" convention, so this
// only applies when the template's own TemplateData actually declares such a param.
var CATEGORY_TEMPLATE_LANG_LABEL = "koda zimanî";
// "span" is the field's width in the 12-column grid the fields render in (see .add-example-jeder-fields
// in the CSS and _setSourceType below) -- field ORDER here is also the grid's reading order.
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "cih", "label": "Cih", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "sala-weşandinê", "label": "Sala weşandinê", "span": 2 },
{ "key": "çap", "label": "Çap", "span": 1 },
{ "key": "rûpel", "label": "Rûpel", "span": 1 },
{ "key": "isbn", "label": "ISBN", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "kovar", "label": "Kovar", "span": 4 },
{ "key": "cild", "label": "Cild", "span": 2 },
{ "key": "hejmar", "label": "Hejmar", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "rûpel", "label": "Rûpel", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 4 },
{ "key": "terciman", "label": "Terciman", "span": 4 },
{ "key": "websîte", "label": "Websîte", "span": 4 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "url", "label": "URL", "span": 5 },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "span": 5 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "tarîx", "label": "Tarîx", "span": 1 }
]
},
"jêder-vîdeo": {
"label": "Vîdeo",
"fields": [
{ "key": "hunermend", "label": "Hunermend", "span": 6 },
{ "key": "platform", "label": "Platform", "span": 6 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "tarîx", "label": "Tarîx", "span": 3 },
{ "key": "dem", "label": "Dem", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
}
};
// Field key -> {span, multiline}, from the FIRST jêder-* def (in jederDefs's own declaration order above)
// that defines it -- e.g. "sernav" ends up span 12 + multiline everywhere. Used to size a Kategorî:Çavkanî
// template's dynamic TemplateData fields the same way when a param key matches a known jêder-* field key,
// since most of these templates share the same handful of bibliographic param names (see
// _renderCategoryTemplateFields).
var JEDER_FIELD_SIZE_BY_KEY = {};
Object.keys(jederDefs).forEach(function(jederKey) {
jederDefs[jederKey].fields.forEach(function(field) {
if (!JEDER_FIELD_SIZE_BY_KEY[field.key]) {
JEDER_FIELD_SIZE_BY_KEY[field.key] = { span: field.span || 4, multiline: !!field.multiline };
}
});
});
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;
}
// Same problem as nlToBr (a raw newline breaks the single-line "#*" wikitext), but for jêder-*/Kategorî:Çavkanî
// param values (sernav, nivîskar, ...) a literal <br> would leak into the rendered citation text, so these get
// collapsed to a plain space instead.
function nlToSpace(text) {
return text ? text.replace(/\r\n|\r|\n/g, " ") : text;
}
// URL of a template's own wiki page, ported from Wiki/util.js's own tplPageUrl -- lets the user verify which
// template a Kategorî:Çavkanî search result actually is before picking it (see showResults below).
function tplPageUrl(name) {
var title = "Şablon:" + name;
return (window.mw && mw.util && typeof mw.util.getUrl === "function") ? mw.util.getUrl(title) : "/wiki/" + encodeURIComponent(title);
}
// Escapes str for safe interpolation into a RegExp -- page titles can contain regex metacharacters
// (parentheses for disambiguation, periods in abbreviation entries, etc.).
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
// Wraps the first occurrence of the page title (+ an optional glued-on suffix, e.g. a plural "-an") in the
// example text with wikitext bold markup, so the headword stands out in the rendered example. Skips it if
// the title is already bolded by hand, to avoid turning "'''reh'''" into "'''''reh'''''" (bold+italic).
// Returns {text, bolded}; bolded is false if the title wasn't found anywhere and nothing changed.
function boldenPageTitle(text, title) {
var escapedTitle = escapeRegExp(title);
var suffixPattern = "([^\\s.,;?!()']+)?";
if (new RegExp("'''" + escapedTitle + suffixPattern + "'''", "i").test(text)) {
return { text: text, bolded: true };
}
var bolded = text.replace(new RegExp("(" + escapedTitle + suffixPattern + ")", "ig"), "'''$1'''");
return { text: bolded, bolded: bolded !== text };
}
// Extracts a human-readable message from an mw.Api rejection (code, result).
function apiErrorMessage(code, result) {
return (result && result.error && result.error.info) || (typeof code === "string" ? code : "Xeletiyeke nenas");
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
// Custom drag-to-resize grip for textareas, ported from Wiki/start.js's wiktkuMakeManualResizable() -- Safari
// has no native corner resize handle on textareas at all, this is the fix start.js already uses for that.
// Inserted as a SIBLING within the textarea's existing OOUI wrapper (same reasoning as
// ensureLinebreakBackdrop above: wrapping the textarea in a NEW div risks disturbing OOUI's own layout),
// not by wrapping it in a new div like start.js's own version does. Unlike start.js's version, this doesn't
// persist the chosen height across page loads (start.js keys that off the textarea's own CSS class, but
// every textarea here is a plain OOUI MultilineTextInputWidget with no distinguishing class, so a direct
// port would have every field here share one save slot and overwrite each other's heights).
function makeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.data("addExampleResizableDone")) {
return;
}
textarea.data("addExampleResizableDone", true);
textarea.css("resize", "none"); // replaced by the custom grip below
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var grip = $("<div class='add-example-resize-grip'></div>");
textarea.after(grip);
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) { /* already released */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
}
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 makeManualResizable to every textarea in `context` (itself or its descendants).
function initManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function() {
makeManualResizable(this);
});
}
var api = new mw.Api();
// Kategorî:Çavkanî's template members plus their redirects (each redirect as its own searchable entry
// pointing at the same canonical target, so a template is findable by any of its names). Ported from
// Wiki/start.js's fetchCatSrcTemplates(), extended with prop=redirects. Cached after first fetch.
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) {
return catSrcTemplatesPromise;
}
catSrcTemplatesPromise = api.get({
action: "query",
generator: "categorymembers",
gcmtitle: "Kategorî:Çavkanî",
gcmnamespace: 10,
gcmlimit: "max",
prop: "redirects",
rdnamespace: 10,
rdlimit: "max",
formatversion: 2,
}).then(function(data) {
var pages = (data.query && data.query.pages) || [];
var list = [];
pages.forEach(function(page) {
var target = page.title.replace(/^[^:]+:/, "");
list.push({ label: target, target: target });
(page.redirects || []).forEach(function(redirect) {
list.push({ label: redirect.title.replace(/^[^:]+:/, ""), target: target });
});
});
list.sort(function(a, b) {
return a.label.localeCompare(b.label, mw.config.get("wgUserLanguage"));
});
catSrcTemplates = list;
return list;
}, function() {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
// TemplateData params for one template (name without the "Şablon:" prefix); redirects:1 so this also
// resolves if `name` is itself a redirect. Resolves to [] if the template has no TemplateData. Cached.
var tplDataCache = {};
function fetchTemplateDataFor(name) {
if (Object.prototype.hasOwnProperty.call(tplDataCache, name)) {
return $.Deferred().resolve(tplDataCache[name]).promise();
}
return api.get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2,
}).then(function(data) {
var pages = (data && data.pages) || {};
var first = null;
Object.keys(pages).forEach(function(id) {
if (!first) {
first = pages[id];
}
});
var params = [];
if (first && first.params) {
Object.keys(first.params).forEach(function(key) {
var p = first.params[key];
var label = p && p.label;
if (label && typeof label === "object") {
var userLang = mw.config.get("wgUserLanguage");
label = label[userLang] || label.en || label[Object.keys(label)[0]];
}
params.push({ key: key, label: label || key, required: !!(p && p.required) });
});
}
tplDataCache[name] = params;
return params;
}, function() {
tplDataCache[name] = [];
return [];
});
}
// Language display name, read from the matching section's .besazimani link text.
function languageNameForCode(code) {
var $mark = $(".besazimani[id='" + code + "']").first();
return $mark.length ? $mark.text().trim() : null;
}
// Whether the page title itself (accented Kurdish Latin letters included) is written in Latin script.
var pageTitleIsLatin = !/[^\x00-\x7FÀ-ɏḀ-ỿ‘’]/.test(mw.config.get("wgTitle") || "");
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex containers used directly by Şablon:nimûne; .citation-whole = Modul:quote's own wrapper, now used by jêder-* templates (Modul:quote nests .h-quotation inside .citation-whole > dl > dd instead of putting it directly under the <li>, so it needs its own entry here).
// Requiring "ul > li >" is what makes this only match an example that's grouped into its own <ul> -- a
// {{nimûne}} (or its "mk" redirect) with no jêder-family citation alongside it in the same definition
// renders straight under the definition's own content instead, with no such group; also reused below to
// tell whether the second pass still needs to handle a given definition.
var EXISTING_EXAMPLE_SELECTOR = "ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation, ul > li > .citation-whole";
$(EXISTING_EXAMPLE_SELECTOR).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.
// A jêder-* citation with no jêgirtin= (quotation text) yet renders no h-quotation/e-quotation at all
// (see get_quote() in Modul quote.lua) -- exactly the "bare citation" case this button exists to fill
// in, so this can't just crash: without the guard, [0] is undefined here and ".lang" throws, which
// (since $.each() has no try/catch) silently kills the button for every remaining match on the page.
var $langEl = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0];
if (!$langEl) {
console.warn("Gadget-wikt.add-examples: nikaribe zimanê vê nimûneyê bibîne, valakirî hate derbaskirin.", $item);
return;
}
var language = $langEl.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) {
// Encodes the section as "type|ordinal" -- the ordinal is this heading's own position
// among same-type headings WITHIN ITS LANGUAGE (see sectionOrdinalWithinLanguage), not
// MediaWiki's page-wide DOM id number, which can collide across unrelated language sections.
var $sectionH3 = $section.find("h3");
var sectionType = sectionTypeOf($sectionH3) || $sectionH3.text().trim();
definitionLevel.splice(0, 0, sectionType + "|" + sectionOrdinalWithinLanguage($sectionH3));
} 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. $group is the citation-group <ul> itself (parent of $item);
// the form panel is inserted AFTER it (see click handler below), not inside it, so the panel isn't
// squeezed into that <ul>'s narrow hanging-indent width on mobile -- only the button/title stays
// there, matching the "Form redesign for Kurdish example" mockup (title inside the bullet list,
// full-width panel below it).
var $group = $item.parent();
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($item, $button, $title, language, definitionLevel);
$group.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem);
}
});
// Second pass: some definitions have no example the pass above could react to at all -- either genuinely
// zero examples, or one rendered via {{nimûne}} (or its "mk" redirect) with no jêder-family citation next
// to it, which (see the comment on EXISTING_EXAMPLE_SELECTOR above) renders with no "ul > li" group to
// match. This walks every recognized POS section's own definitions list directly instead of reacting to
// an existing example, and reads the language off the language section's own <h2> rather than off an
// example -- so it doesn't need one to already exist. Everything else (Form, submit()) is reused as-is.
// MediaWiki wraps each heading in a "mw-heading2"/"mw-heading3"/... div in current skin output; falls
// back to the bare heading element for older/other output that doesn't wrap it.
function headingOuter($h) {
var $wrap = $h.closest(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6");
return $wrap.length ? $wrap : $h;
}
// Section's language code: nearest preceding .besazimani[id] by document order (not sibling-walking, which mobile's per-section wrapping breaks).
function languageCodeForOl($ol) {
var $marks = $(".besazimani[id]").add($ol);
var ol = $ol.get(0);
var idx = $marks.index(ol);
for (var i = idx - 1; i >= 0; i--) {
var el = $marks.get(i);
if (el.id) {
return el.id;
}
}
return null;
}
// The heading's own recognized section-type key (see sectionNames above), with a page author's own trailing
// disambiguating number (e.g. "Navdêr 2") stripped back to the canonical name ("Navdêr") -- returns null for
// a heading that isn't a recognized word-sense section at all (Bilêvkirin, Etîmolojî, Çavkanî, ...).
function sectionTypeOf($h3) {
var text = $h3.text().trim();
if (sectionNames[text]) {
return text;
}
var stripped = text.replace(/\s+\d+$/, "");
return sectionNames[stripped] ? stripped : null;
}
// This heading's own 1-based position among same-type headings (see sectionTypeOf) within its own language
// block -- reset at each .besazimani[id] marker, same document-order technique as languageCodeForOl above
// (not sibling-walking, which mobile's per-section wrapping breaks). Needed because MediaWiki's page-wide id
// uniquification can attach a number to an unnumbered heading purely from an unrelated same-named heading
// colliding elsewhere on the page (e.g. Tirkî's own unnumbered "Navdêr" landing on id="Navdêr_3" only
// because Kurmancî's own literal "Navdêr 2" heading already claimed "Navdêr_2") -- that number has nothing
// to do with this heading's actual position and can't be used to find it back in the wikitext.
function sectionOrdinalWithinLanguage($h3) {
var h3El = $h3.get(0);
var $all = $(".besazimani[id]").add($("h3"));
var counts = {};
var result = 1;
$all.each(function() {
if ($(this).is(".besazimani[id]")) {
counts = {};
return;
}
var type = sectionTypeOf($(this)) || $(this).text().trim();
counts[type] = (counts[type] || 0) + 1;
if (this === h3El) {
result = counts[type];
return false;
}
});
return result;
}
// A <li> whose OWN direct content (not counting a nested <ol>) is wrapped in ".form-of-definition" is
// MediaWiki's "form of" template system marking that content as generated by a template -- e.g.
// {{ku-tewîna-nav}}'s "Formeke heval:" wrapper together with its "rewşa îzafeyî"/"rewşa çemandî"/...
// readings underneath. That whole nested block is normally the ENTIRE expansion of a single "#"
// wikitext line, with no separate "##" line behind any individual reading -- recursing into it would
// hand out one button per reading, each trying to match a "##" line that doesn't exist, and submit()
// would fail to find where to insert every one of them. A <li> without that class whose nested <ol>
// holds real hand-typed prose (e.g. sîno-koreyî/Navdêr's two genuinely separate "##" sub-senses) has
// no such problem -- those really are individually addressable wikitext lines.
function isFormOfWrapper($li) {
return $li.children(".form-of-definition").length > 0;
}
// Recurse into a <li>'s own nested <ol> UNLESS it's a form-of-template wrapper (see isFormOfWrapper) --
// a wrapper <li> with its own nested <ol> isn't itself a sense with content of its own, only its real
// (non-generated) leaves are.
function eachLeafDefinition($ol, fn) {
$ol.children("li").each(function() {
var $li = $(this);
var $childOl = $li.children("ol");
if ($childOl.length && !isFormOfWrapper($li)) {
$childOl.each(function() {
eachLeafDefinition($(this), fn);
});
} else {
fn($li);
}
});
}
$("h3").each(function() {
var sectionType = sectionTypeOf($(this));
if (!sectionType) {
return; // not a recognized word-sense section (Bilêvkirin, Etîmolojî, Çavkanî, ...)
}
var sectionOrdinal = sectionOrdinalWithinLanguage($(this));
// Forward-walk siblings to the definitions <ol>, skipping over a declension table/TemplateStyles/the
// headword line; stop (nothing to attach to in this section) if another heading comes first instead.
var $ol = null;
for (var $cursor = headingOuter($(this)).next(); $cursor.length; $cursor = $cursor.next()) {
if ($cursor.is("ol")) {
$ol = $cursor;
break;
}
if ($cursor.is(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6, h2, h3, h4, h5, h6")) {
break;
}
}
if (!$ol) {
return;
}
var language = languageCodeForOl($ol);
if (!language) {
console.warn("Gadget-wikt.add-examples: nikaribe koda zimanê vê beşê bibîne.", $ol);
return;
}
eachLeafDefinition($ol, function($li) {
// The pass above already added a button here (or will) -- an actual example already wrapped in
// its own "ul > li" group.
if ($li.find(EXISTING_EXAMPLE_SELECTOR).length) {
return;
}
var definitionLevel = [];
var $definitionItem = $li;
while ($definitionItem.prop("tagName") === "LI") {
// 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);
$definitionItem = $definitionItem.parent().parent();
}
definitionLevel.splice(0, 0, sectionType + "|" + sectionOrdinal);
// A hidden, empty placeholder <li> so submit()'s existing "_$lastExample.after(newLi)" insertion
// (unchanged, same as the pass above) lands the first submitted example right before the button
// -- matching the existing convention of new examples going in before the button, not after it.
var $placeholder = $("<li style='display:none'></li>");
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
// A "ul" nested directly under a definition "li" starts hidden here (see the HQToggle-controlled
// jêder-citation-group "ul", which only ever renders with an explicit "style="display: block""
// set on it) -- this one has no HQToggle to unhide it, so it needs the same explicit override or
// the button (and the placeholder above) never becomes visible at all.
var $ul = $("<ul>").css("display", "block").append($placeholder).append($formItem);
// The form panel is inserted AFTER $ul (not inside it) once opened -- same reasoning as the first
// pass above: keeps the full-width panel out of the tight bulleted-list indentation on mobile.
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($placeholder, $button, $title, language, definitionLevel);
$ul.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$li.append($ul);
});
});
// Pulls the form panel flush with the page's own left/right edges, undoing whatever nested-list indent it inherited from sitting inside a deeply-nested definition.
function alignFormToPage($form) {
var $container = $form.closest(".mw-parser-output");
if (!$container.length) {
return;
}
var pad = parseFloat(window.getComputedStyle($container[0]).paddingLeft) || 0;
var containerLeft = $container.offset().left + pad;
var indent = $form.offset().left - containerLeft;
$form.css({
marginLeft: indent > 0 ? -indent : 0,
width: $container.width() + "px"
});
}
// Constructor for the edit form; lastExample/button/title/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, $title, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._$title = $title;
this._currentJederKey = "";
this._jederFieldWidgets = {};
// Set once a template is picked in the Kategorî:Çavkanî mode (see _selectCategoryTemplate); the
// canonical template title (without the "Şablon:" prefix), used as `sablon` in _doSubmit.
this._categoryTemplateName = null;
// Set by _renderCategoryTemplateFields if the picked template's TemplateData has a "koda zimanî" param;
// that param's own key, used to emit "<key>=<language>" in _doSubmit -- null if no such param exists.
this._categoryTemplateLangParamKey = null;
this._textInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
// Shown under the text box (see boldenPageTitle) when the page title can't be found in the example text
// as typed, so it won't get bolded; purely informational, doesn't block submitting.
this._titleBoldHint = $("<span class='add-example-title-bold-hint'></span>").hide();
this._updateTitleBoldHint = function() {
var text = self._textInput.getValue().trim();
var title = mw.config.get("wgTitle");
var show = !!text && !boldenPageTitle(text, title).bolded;
self._titleBoldHint.toggle(show).html(show ? "Sermade (" + escapeHtmlForBackdrop(title) + ") nehat dîtin; dê neyê <b>stûr</b>kirin." : "");
};
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
self._updateReadyHint();
self._updateTitleBoldHint();
});
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,
}));
}
}
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: CATEGORY_TEMPLATE_KEY,
label: "Ji Kategorî:Çavkanî şablonekê hilbijêre",
}));
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._sourceInput.on("change", function() {
self._updateReadyHint();
});
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. The Citoid fetch button sits right next to it (not in a separate box) -- see _urlRowWidget below.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
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, malûmatan 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));
this._sourceURLInput.on("change", function() {
self._updateReadyHint();
self._autofillVideoTimestamp();
});
// URL input + inline "auto-fill" button as one row (replaces the old separate framed Citoid box's
// button row) -- a plain OO.ui.Widget used purely as a flex-row container (same pattern as
// _loadingImage below: build it empty, then manually append its children's $elements). Disabling
// during submit() still goes through the individual _sourceURLInput/_citoidButton references, not
// through this wrapper.
this._urlRowWidget = new OO.ui.Widget({ classes: ["add-example-url-row"] });
this._urlRowWidget.$element.append(this._sourceURLInput.$element, this._citoidButton.$element);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, {
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;
// Shown right after a successful Citoid fetch (see _fillFromCitoid); hidden again on clear.
this._citoidSuccessMsg = $("<span class='add-example-citoid-success'>✓ Malûmat hatin dagirtin — li jêr kontrol bike.</span>").hide();
// 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("");
self._citoidSuccessMsg.hide();
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
// Plain div (not OO.ui.FieldsetLayout) so the grid CSS class applies directly to the field items.
this._jederFieldsFieldset = $("<div class='add-example-jeder-fields'>");
// "Malûmatên çavkaniyê" header (+ the "Vala bike" clear button) sitting right above the fields grid,
// replacing the old framed "Ji Citoid an bi destan tijî bike:" box -- like this only makes sense once
// a real jêder-* template is active (there's nothing here to show for the "citoid: not yet detected"
// placeholder or for free text), so the whole section toggles together in _setSourceType().
this._jederSection = $("<div class='add-example-jeder-section'>").append(
$("<div class='add-example-jeder-header'>")
.append($("<span class='add-example-jeder-header-label'>Malûmatên çavkaniyê</span>"))
.append(this._citoidClearButton.$element),
this._jederFieldsFieldset
);
// Kategorî:Çavkanî template search box: sits directly under the source-type dropdown in $topRight (not
// in the "Malûmatên çavkaniyê" section below, which is reserved for the picked template's own fields --
// see _setSourceType/_selectCategoryTemplate). Built once here, not rebuilt per _setSourceType call, so
// switching in and out of this dropdown mode doesn't lose its own DOM node/event handlers.
this._categoryTemplateInput = $("<input type='search' autocomplete='off' class='add-example-cat-tpl-input'>")
.attr("placeholder", "Li navê şablonê bigere…");
this._categoryTemplateResults = $("<ul class='add-example-cat-tpl-results'>").hide();
this._categoryTemplateStatus = $("<span class='add-example-cat-tpl-status'>Şablon tên barkirin…</span>");
this._categoryTemplateSearchRow = $("<div class='add-example-cat-tpl-search-row'>")
.append(this._categoryTemplateInput, this._categoryTemplateResults, this._categoryTemplateStatus)
.hide();
this._initCategoryTemplatePicker();
this._translationInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
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({ rows: 4 });
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Translîterasyona 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));
// Reactive "ready to submit" hint next to Biweşîne: no text yet, text but no source (still submittable
// as a bare {{nimûne}}), or fully ready -- kept in sync by _updateReadyHint(), wired to every field below.
this._readyHint = $("<span class='add-example-ready-hint'></span>").text("Metna nimûneyê lazim e.");
// True while a Citoid-eligible URL/DOI/ISBN is typed in but not yet fetched (or fetched then edited away) and no jêder field has been filled by hand -- the "looks done but isn't" trap this exists to catch. Not applicable in free-text mode, where the fetch button isn't even offered.
this._citoidPending = function() {
return self._currentJederKey !== "" &&
self._currentJederKey !== CATEGORY_TEMPLATE_KEY &&
!!self._sourceURLInput.getValue().trim() &&
!self._citoidSuccessMsg.is(":visible") &&
!Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
};
this._updateReadyHint = function() {
if (!self._textInput.getValue()) {
self._readyHint.text("Metna nimûneyê lazim e.");
return;
}
if (self._citoidPending()) {
self._readyHint.text("Pêşî 'Bi otomatîk tijî bike' bitikîne.");
return;
}
var hasSource = self._sourceInput.getValue().trim() || self._sourceURLInput.getValue().trim() ||
Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
self._readyHint.text(hasSource ? "Hazir e." : "Çavkanî nehatiye dayîn.");
};
// Prefills the Dem field from the typed URL's own "t=" (see wikt.citoid.extractVideoTimestamp) once jêder-vîdeo is active -- never overwrites a value the user already entered by hand.
this._autofillVideoTimestamp = function() {
var demWidget = self._jederFieldWidgets.dem;
if (self._currentJederKey !== "jêder-vîdeo" || !demWidget || demWidget.getValue().trim()) {
return;
}
var dem = wikt.citoid.extractVideoTimestamp(self._sourceURLInput.getValue().trim());
if (dem && !demWidget.getValue().trim()) {
demWidget.setValue(dem);
}
};
// framed:false (+ the "destructive" flag for the red text/hover) matches the mockup's borderless
// "Betal bike" -- a plain colored link rather than a boxed button, distinguishing it from Paqij bike.
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
framed: false,
});
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);
// Two-column top section (see "Form redesign for Kurdish example/Nimûne zêde bike.dc.html"): example
// text (+ translation/transliteration for non-ku, right after it, not after the source fields) on the
// left; source-type + link/Citoid on the right. Built as plain <div>s, not an OOUI layout -- OOUI has
// no CSS-grid container -- so .add-example-top-grid in the CSS can lay them out as a real responsive
// 7fr/5fr grid (collapsing to one column on narrow screens).
var $topLeft = $("<div class='add-example-top-col'>").append(textInputLayout.$element, this._titleBoldHint);
if (language !== "ku") {
$topLeft.append(translationInputLayout.$element);
}
if (!pageTitleIsLatin) {
$topLeft.append(transcriptionInputLayout.$element);
}
var $topRight = $("<div class='add-example-top-col'>").append(
sourceTypeLayout.$element,
this._categoryTemplateSearchRow,
this._sourceInputLayout.$element,
this._sourceURLInputLayout.$element,
this._citoidSuccessMsg
);
var $topGrid = $("<div class='add-example-top-grid'>").append($topLeft, $topRight);
// 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 (see the FieldLayout replaceWith() there).
this._fieldsLayout = $("<div class='add-example-fieldset'>").append($topGrid, this._jederSection);
// Bottom action row -- order/spacing matches the mockup: Biweşîne (+ spinner + ready hint), a spacer
// pushing the rest right, then Paqij bike (bordered/subtle) and Betal bike (borderless red text, via
// framed:false above). A plain flex <div>, not an OOUI HorizontalLayout, so the raw hint/spacer
// elements can sit alongside the real button widgets (same reasoning as the top grid above).
var $buttonsRow = $("<div class='add-example-main-buttons'>").append(
this._applyButton.$element,
this._loadingImage.$element,
this._readyHint,
$("<span class='add-example-buttons-spacer'></span>"),
this._clearButton.$element,
this._cancelButton.$element
);
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
});
this._frame.$element.append(this._fieldsLayout, $buttonsRow);
// 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");
initManualResize(this._frame.$element);
}
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 fetch button, and the "Malûmatên çavkaniyê" fields section toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateName = null;
this._categoryTemplateLangParamKey = null;
var isRealJederKey = jederKey && jederDefs[jederKey];
var isCategoryTemplateKey = jederKey === CATEGORY_TEMPLATE_KEY;
if (isRealJederKey) {
var def = jederDefs[jederKey];
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;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: ["add-example-field-span-" + (field.span || 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
}
// The search box itself is always in the DOM (see the constructor, it lives in $topRight) -- only
// shown in this one mode, and reset when leaving it so a stale query/selection doesn't linger for
// next time it's opened.
this._categoryTemplateSearchRow.toggle(isCategoryTemplateKey);
if (!isCategoryTemplateKey) {
this._categoryTemplateInput.val("");
this._categoryTemplateResults.hide();
}
// "Malûmatên çavkaniyê" header + fields grid: shown for a real jêder-* template (fields built above).
// For the Kategorî:Çavkanî picker it stays hidden here -- there's nothing to put in it until a
// template is actually picked, see _selectCategoryTemplate, which shows it once there is.
this._jederSection.toggle(!!isRealJederKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid fetch button: hidden for free text (nothing there for it to fill in) and for the
// Kategorî:Çavkanî picker (Citoid has no mapping for an arbitrary picked template), shown for
// "citoid" auto-detect and any real jêder-* key. The URL input itself next to it stays visible in
// every OTHER mode -- see the sourceURLInputLayout toggle below for the one exception.
this._citoidButton.toggle(jederKey !== "" && !isCategoryTemplateKey);
// URL field wording: plain "attach a link" phrasing for free text, 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 $oldLayout = this._sourceURLInputLayout.$element;
// Re-wraps the SAME _urlRowWidget (still holding _sourceURLInput + _citoidButton) in a new
// FieldLayout with the new label/help; the widget's $element moves along with it, same as the
// old addItems()/removeItems() swap did for the plain input before this redesign.
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, 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,
});
$oldLayout.replaceWith(this._sourceURLInputLayout.$element);
}
// The URL/Citoid row is normally always visible (see the constructor comment), but Citoid has no
// mapping for an arbitrary Kategorî:Çavkanî template, so it'd just be dead UI in that one mode.
this._sourceURLInputLayout.toggle(!isCategoryTemplateKey);
this._autofillVideoTimestamp();
this._updateReadyHint();
initManualResize(this._jederFieldsFieldset); // covers a freshly-rebuilt "sernav" field (jêder-*); the Kategorî:Çavkanî picker's own fields are resized separately once picked, see _renderCategoryTemplateFields
},
// Wires up the search box's own input/blur handlers and kicks off the template list fetch. Called once
// from the constructor -- the search box lives permanently in $topRight (see there), only shown/hidden
// by _setSourceType, so this only needs to run once, not every time the picker mode is entered.
_initCategoryTemplatePicker: function() {
var self = this;
function showResults(query) {
var q = query.trim().toLowerCase();
self._categoryTemplateResults.empty();
var list = catSrcTemplates || [];
var matched = q ? list.filter(function(entry) {
return entry.label.toLowerCase().indexOf(q) !== -1;
}) : list;
if (!matched.length) {
self._categoryTemplateResults.hide();
return;
}
matched.slice(0, 50).forEach(function(entry) {
var $li = $("<li class='add-example-cat-tpl-row'>");
var $text = $("<span class='add-example-cat-tpl-text'>").text(entry.label);
// A redirect entry's label differs from its target -- mark where it actually resolves to.
if (entry.label !== entry.target) {
$text.append($("<span class='add-example-cat-tpl-redirect-arrow'>").text(" → " + entry.target));
}
// Lets the user verify which template a result actually is before picking it, same "🔗
// opens the template's own page" affordance Wiki/start.js uses in its own searchable
// dropdowns -- always points at the canonical target, never a redirect's own page.
var $link = $("<a class='add-example-cat-tpl-link' target='_blank' rel='noopener'>🔗</a>")
.attr("title", "Rûpela şablonê veke")
.attr("href", tplPageUrl(entry.target));
// stopPropagation only -- preventDefault would stop the link from actually navigating, and
// this must not also select the row the way clicking elsewhere in it does (see below).
$link.on("mousedown click", function(e) { e.stopPropagation(); });
$li.append($text, $link);
$li.on("mousedown", function(e) {
e.preventDefault(); // keeps the input's blur (and the results-hiding it triggers) from firing before the click registers
self._selectCategoryTemplate(entry);
});
self._categoryTemplateResults.append($li);
});
self._categoryTemplateResults.show();
}
this._categoryTemplateInput.on("input focus", function() {
showResults($(this).val());
});
this._categoryTemplateInput.on("blur", function() {
setTimeout(function() { self._categoryTemplateResults.hide(); }, 200); // lets the mousedown handler above fire first
});
fetchCatSrcTemplates().then(function() {
self._categoryTemplateStatus.text("");
}, function() {
self._categoryTemplateStatus.text("Şablon nehatin barkirin.");
});
},
// Picks a template from the search results: records its canonical name -- a redirect entry resolves to
// its target, the output always uses that, never the redirect's own name (see fetchCatSrcTemplates) --
// and reveals/renders the "Malûmatên çavkaniyê" section for its parameter fields.
_selectCategoryTemplate: function(entry) {
this._categoryTemplateResults.hide();
// Left as the plain label (not "label → target") -- putting the arrow in the input's own value
// would get re-used as the search query if the box is focused again to pick something else.
this._categoryTemplateInput.val(entry.label);
this._categoryTemplateName = entry.target;
this._jederSection.toggle(true);
this._renderCategoryTemplateFields(entry.target);
},
// Builds one text input per TemplateData param of `name` into the shared "Malûmatên çavkaniyê" fields
// grid (_jederFieldsFieldset, the same one the jêder-* fields use), or a lone "Rûpel" fallback field if
// it has no TemplateData -- see the jêgirtin=/rûpel= example in the feature request this implements.
_renderCategoryTemplateFields: function(name) {
var self = this;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateLangParamKey = null;
fetchTemplateDataFor(name).then(function(params) {
// A param labeled exactly "koda zimanî" is filled from the language dropdown, not typed by hand
// -- find it (if any) before filtering, so it can be excluded from the rendered fields below
// and used by _doSubmit to emit "<key>=<language>" (see CATEGORY_TEMPLATE_LANG_LABEL).
(params || []).forEach(function(p) {
if ((p.label || "").trim().toLowerCase() === CATEGORY_TEMPLATE_LANG_LABEL) {
self._categoryTemplateLangParamKey = p.key;
}
});
var filtered = (params || []).filter(function(p) {
return CATEGORY_TEMPLATE_COVERED_PARAMS.indexOf(p.key) === -1 && p.key !== self._categoryTemplateLangParamKey;
});
var list = filtered.length ? filtered : [{ key: "rûpel", label: "Rûpel", required: false }];
list.forEach(function(p) {
// Reuse the jêder-* field's own width/multiline when this param's key matches one (see
// JEDER_FIELD_SIZE_BY_KEY) -- most Kategorî:Çavkanî templates share the same bibliographic
// param names, so e.g. "sernav" ends up full-width+multiline here too, not a generic box.
var sizeHint = JEDER_FIELD_SIZE_BY_KEY[p.key];
var widget = (sizeHint && sizeHint.multiline)
? new OO.ui.MultilineTextInputWidget({ rows: 2, autosize: false })
: new OO.ui.TextInputWidget();
self._jederFieldWidgets[p.key] = widget;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: p.label,
align: "top",
classes: ["add-example-field-span-" + (sizeHint ? sizeHint.span : 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
self._updateReadyHint();
initManualResize(self._jederFieldsFieldset); // matters now that a matched key like "sernav" can render multiline
});
},
// Fetches data via wikt.citoid, picks the matching jêder-* template, and fills its empty fields.
_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, query);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
self._citoidSuccessMsg.show();
self._updateReadyHint();
mw.notify("Malûmat ji Citoid hatin barkirin.");
}, function(errorMsg) {
// Citoid can't fetch some sites at all (e.g. x.com/twitter.com) -- fall back to jêder-websîte with a website name guessed from the URL itself, rather than just a bare error.
var fallbackSite = wikt.citoid.websiteNameForUrl(query);
if (fallbackSite) {
if (self._currentJederKey !== "jêder-websîte") {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData("jêder-websîte");
if (item) {
menu.chooseItem(item); // this calls _setSourceType("jêder-websîte") automatically
}
}
var websiteWidget = self._jederFieldWidgets["websîte"];
if (websiteWidget && !websiteWidget.getValue()) {
websiteWidget.setValue(fallbackSite);
}
mw.notify("Citoid nikare vê malperê bixwîne; şablona Websîte hate hilbijartin, ji kerema xwe mayî bi destan tijî bike.");
return;
}
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî malûmatan 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. The title text takes
// the button's place while open (see the "Form redesign for Kurdish example" mockup); the button
// itself stays put ready to reappear once the form is cancelled/closed.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._$title.toggle(visible);
this._frame.toggle(visible);
if (visible) {
alignFormToPage(this._frame.$element);
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._citoidSuccessMsg.hide();
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Warns before submitting if a Citoid URL/DOI/ISBN was typed but never successfully fetched, then defers
// to _doSubmit. The title-not-boldable case (see boldenPageTitle) is shown inline under the text box
// instead (_titleBoldHint) rather than blocking submission here.
submit: function() {
if (this._citoidPending() && !window.confirm("Te lînk, DOI an ISBN nivîsand lê hîn jê malûmat nehatine standin. Bêyî wan berdewam bikî?")) {
return;
}
this._doSubmit();
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
_doSubmit: 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; if a Kategorî:Çavkanî template was
// picked instead, collect its TemplateData-driven fields the same way, plus wekjêgirtin=1 for any
// "Ç:"-prefixed template (a quotation-equivalent, not a usage example -- see Modul:quote).
var jederParams = [];
var usingCategoryTemplate = this._currentJederKey === CATEGORY_TEMPLATE_KEY && !!this._categoryTemplateName;
if (usingCategoryTemplate) {
Object.keys(self._jederFieldWidgets).forEach(function(key) {
// A raw linebreak would break the single-line "#*" wikitext just like in the example text,
// but these are plain param values (not display text), so collapse to a space, not <br>.
var value = nlToSpace(self._jederFieldWidgets[key].getValue().trim());
if (value) {
jederParams.push(key + "=" + value);
}
});
// Only for a template whose own TemplateData actually names a "koda zimanî" param (see
// CATEGORY_TEMPLATE_LANG_LABEL) -- an arbitrary Kategorî:Çavkanî template has no guaranteed
// "param 1 = language" convention the way jêder-* does, so this isn't added unconditionally.
if (self._categoryTemplateLangParamKey) {
jederParams.push(self._categoryTemplateLangParamKey + "=" + self._language);
}
if (/^Ç:/.test(self._categoryTemplateName)) {
jederParams.push("wekjêgirtin=1");
}
} else if (this._currentJederKey && jederDefs[this._currentJederKey]) {
jederDefs[this._currentJederKey].fields.forEach(function(field) {
var widget = self._jederFieldWidgets[field.key];
var value = widget ? nlToSpace(widget.getValue().trim()) : "";
if (value) {
jederParams.push(field.key + "=" + value);
}
});
}
// A Kategorî:Çavkanî template is used as soon as it's picked, even with every field left blank
// (still submittable as a bare jêgirtin=); a jêder-* type only counts once a field is actually filled.
var usingJederTemplate = usingCategoryTemplate || (this._currentJederKey && jederParams.length > 0);
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-*/Kategorî:Çavkanî template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = usingCategoryTemplate ? this._categoryTemplateName : 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 -- only for jêder-*/jêder/nimûne, which are always designed with param 1 =
// language. A Kategorî:Çavkanî template only gets a language param when its own TemplateData
// names one ("koda zimanî") -- see the _categoryTemplateLangParamKey push above, already folded
// into jederParams with its own key, not assumed to be position 1.
if (!usingCategoryTemplate) {
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 (see boldenPageTitle), then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(boldenPageTitle(text, title).text);
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
if (translation) {
// Kategorî:Çavkanî templates route through Modul:quote directly and take its "t=" param name;
// the jêder-* templates use "tercime=" instead (see the jêder-* template docs).
code += "|" + (usingCategoryTemplate ? "t" : "tercime") + "=" + translation;
}
}
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
if (transcription) {
code += "|tr=" + transcription;
}
code += "}}";
// definitionLevel[0] is "type|ordinal" (see sectionOrdinalWithinLanguage) -- ordinal is this
// section's own position among same-type headings within its language, resolved client-side, not
// a number parsed out of a DOM id (MediaWiki's page-wide id-uniquification can attach a number to
// an unnumbered heading purely from an unrelated same-named heading colliding elsewhere on the
// page, with no relation to this heading's actual wikitext).
var sectionKeyParts = this._definitionLevel[0].split("|");
var sectionType = sectionKeyParts[0];
var sectionOrdinal = parseInt(sectionKeyParts[1], 10);
// Shared with the success handler attached to api.edit() below (see emptyTemplate use there) --
// declared here, not inside the transform callback, since that callback and the success handler
// are sibling functions, not nested, so a `var` inside the transform wouldn't be visible there.
var emptyTemplate = false;
// Thrown from inside api.edit()'s transform callback below to bail out with one of the specific
// messages already used for a bad language/section, without it being mistaken for a real API
// failure (network error, edit conflict, ...) by the failure handler further down.
function SubmitAbort(message) {
this.message = message;
}
// Insert new example into page's code. api.edit() does its own action=query fetch internally (for
// basetimestamp/curtimestamp, which MediaWiki uses to detect edit conflicts) and hands that same
// revision straight to this callback -- so the insertion logic below runs against the exact
// content MediaWiki checks the conflict against, instead of a separate api.get() done beforehand
// (which used to leave a window for someone else's edit to land in between the two fetches and
// get silently overwritten, since the conflict check would already be based on the newer content
// while the saved text was still built from the older one).
api.edit(mw.config.get("wgPageName"), function(revision) {
var pageContent = revision.content;
// Look for correct language section -- bounded to end at the NEXT top-level "==...=="
// heading (or end of page) so a later language's own same-named subsection can never be
// scanned into this one's search.
var langSectionRegex = new RegExp("==[ ]*{{ziman\\|{0}}}[ ]*==".format(self._language));
var langSectionIndex = pageContent.search(langSectionRegex);
if (langSectionIndex === -1) {
throw new SubmitAbort("Xeletiyeke bi koda zimanî heye. Koda zimanî:" + self._language);
}
var afterLangHeading = pageContent.indexOf("\n", langSectionIndex);
afterLangHeading = afterLangHeading === -1 ? pageContent.length : afterLangHeading + 1;
var nextLangSectionMatch = /\n==[^=\n][^\n]*==/.exec(pageContent.slice(afterLangHeading));
var langSectionEnd = nextLangSectionMatch ? afterLangHeading + nextLangSectionMatch.index : pageContent.length;
if (!sectionNames[sectionType]) {
throw new SubmitAbort('Navê beşê xelet e. Di beşên "Ji wêjêyê" û "Ji wêjêya klasîk" ev amûr nayê bikaranîn.');
}
// `lines` covers the WHOLE rest of the page from this language's heading onward -- not just this
// language's own section -- because it gets reused below (see "text:") to rebuild the entire
// saved page; truncating it here would silently drop every later language section on save.
// Only the section-heading search itself is bounded, via sectionSearchEndLine, to stop at the
// next language, so a same-named heading over there can never be matched by mistake.
var lines = pageContent.slice(langSectionIndex).split("\n");
var sectionSearchEndLine = pageContent.slice(langSectionIndex, langSectionEnd).split("\n").length;
var sectionNamesRegex = Object.keys(sectionNames).join('|');
var sectionRegex = new RegExp('^===[ ]*(' + sectionNamesRegex + ')\\s*(\\d+)?');
var targetLineIndex;
var sectionOccurrence = 0;
for (targetLineIndex = 0; targetLineIndex < sectionSearchEndLine; targetLineIndex++) {
var matchSection = sectionRegex.exec(lines[targetLineIndex]);
if (matchSection && sectionNames[sectionType].includes(matchSection[1])) {
sectionOccurrence++;
if (sectionOccurrence === sectionOrdinal) {
// Add more conditions if needed for inflection, e.g., (isInflection === line.includes("Formeke "))
break;
}
}
}
if (targetLineIndex === sectionSearchEndLine) {
throw new SubmitAbort("Di navê beşê de xeletî heye. Îhtimalen bi vî navê beşê çend heb hene.");
}
// 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;
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);
}
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(codeOrAbort, result) {
if (codeOrAbort instanceof SubmitAbort) {
error(codeOrAbort.message);
} else {
error("Nekarî rûpelê xilas bike: " + apiErrorMessage(codeOrAbort, result));
}
});
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>
hgx2uer08enjc2cop0a4dswtf7rlpfn
6342884
6342882
2026-08-27T09:55:09Z
Wikihez
7344
6342884
javascript
text/javascript
// <nowiki>
//li ser [[fr:Mediawiki:Gadget-wikt.add-examples.js]] hatiye refaktorkirin.
// 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 = "2.0";
// 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, loaded before this script via the
// ext.gadget.citoid-helper dependency (see the top of the file) -- wikt.citoid is guaranteed ready by the
// time any of this runs.
// Sentinel _currentJederKey value for the "pick a template from Kategorî:Çavkanî" dropdown option -- not a
// real jederDefs key, same convention as Wiki/start.js's own "__category__" picker.
var CATEGORY_TEMPLATE_KEY = "__category__";
// TemplateData params already covered by the form's own top-level text/translation/transliteration boxes --
// skipped when building a Kategorî:Çavkanî template's dynamic fields (see _renderCategoryTemplateFields) so
// they don't get a redundant duplicate inputbox.
var CATEGORY_TEMPLATE_COVERED_PARAMS = ["jêgirtin", "jg", "t", "tr"];
// A TemplateData param labeled exactly this (case/whitespace-insensitive) is auto-filled from the language
// dropdown instead of shown as its own inputbox -- see _renderCategoryTemplateFields/_doSubmit. Unlike
// jêder-*, an arbitrary Kategorî:Çavkanî template has no guaranteed "param 1 = language" convention, so this
// only applies when the template's own TemplateData actually declares such a param.
var CATEGORY_TEMPLATE_LANG_LABEL = "koda zimanî";
// "span" is the field's width in the 12-column grid the fields render in (see .add-example-jeder-fields
// in the CSS and _setSourceType below) -- field ORDER here is also the grid's reading order.
var jederDefs = {
"jêder-kitêb": {
"label": "Kitêb",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "cih", "label": "Cih", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "sala-weşandinê", "label": "Sala weşandinê", "span": 2 },
{ "key": "çap", "label": "Çap", "span": 1 },
{ "key": "rûpel", "label": "Rûpel", "span": 1 },
{ "key": "isbn", "label": "ISBN", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-kovar": {
"label": "Kovar",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 3 },
{ "key": "terciman", "label": "Terciman", "span": 3 },
{ "key": "amadekar", "label": "Amadekar", "span": 3 },
{ "key": "weşanxane", "label": "Weşanxane", "span": 3 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "kovar", "label": "Kovar", "span": 4 },
{ "key": "cild", "label": "Cild", "span": 2 },
{ "key": "hejmar", "label": "Hejmar", "span": 2 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "rûpel", "label": "Rûpel", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
},
"jêder-websîte": {
"label": "Websîte",
"fields": [
{ "key": "nivîskar", "label": "Nivîskar", "span": 4 },
{ "key": "terciman", "label": "Terciman", "span": 4 },
{ "key": "websîte", "label": "Websîte", "span": 4 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "url", "label": "URL", "span": 5 },
{ "key": "urlya-arşîvê", "label": "URLya Arşîvê", "span": 5 },
{ "key": "sal", "label": "Sal", "span": 1 },
{ "key": "tarîx", "label": "Tarîx", "span": 1 }
]
},
"jêder-vîdeo": {
"label": "Vîdeo",
"fields": [
{ "key": "hunermend", "label": "Hunermend", "span": 6 },
{ "key": "platform", "label": "Platform", "span": 6 },
{ "key": "sernav", "label": "Sernav", "multiline": true, "span": 12 },
{ "key": "sal", "label": "Sal", "span": 2 },
{ "key": "tarîx", "label": "Tarîx", "span": 3 },
{ "key": "dem", "label": "Dem", "span": 2 },
{ "key": "url", "label": "URL", "span": 12 }
]
}
};
// Field key -> {span, multiline}, from the FIRST jêder-* def (in jederDefs's own declaration order above)
// that defines it -- e.g. "sernav" ends up span 12 + multiline everywhere. Used to size a Kategorî:Çavkanî
// template's dynamic TemplateData fields the same way when a param key matches a known jêder-* field key,
// since most of these templates share the same handful of bibliographic param names (see
// _renderCategoryTemplateFields).
var JEDER_FIELD_SIZE_BY_KEY = {};
Object.keys(jederDefs).forEach(function(jederKey) {
jederDefs[jederKey].fields.forEach(function(field) {
if (!JEDER_FIELD_SIZE_BY_KEY[field.key]) {
JEDER_FIELD_SIZE_BY_KEY[field.key] = { span: field.span || 4, multiline: !!field.multiline };
}
});
});
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;
}
// Same problem as nlToBr (a raw newline breaks the single-line "#*" wikitext), but for jêder-*/Kategorî:Çavkanî
// param values (sernav, nivîskar, ...) a literal <br> would leak into the rendered citation text, so these get
// collapsed to a plain space instead.
function nlToSpace(text) {
return text ? text.replace(/\r\n|\r|\n/g, " ") : text;
}
// URL of a template's own wiki page, ported from Wiki/util.js's own tplPageUrl -- lets the user verify which
// template a Kategorî:Çavkanî search result actually is before picking it (see showResults below).
function tplPageUrl(name) {
var title = "Şablon:" + name;
return (window.mw && mw.util && typeof mw.util.getUrl === "function") ? mw.util.getUrl(title) : "/wiki/" + encodeURIComponent(title);
}
// Escapes str for safe interpolation into a RegExp -- page titles can contain regex metacharacters
// (parentheses for disambiguation, periods in abbreviation entries, etc.).
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
// Wraps the first occurrence of the page title (+ an optional glued-on suffix, e.g. a plural "-an") in the
// example text with wikitext bold markup, so the headword stands out in the rendered example. Skips it if
// the title is already bolded by hand, to avoid turning "'''reh'''" into "'''''reh'''''" (bold+italic).
// Returns {text, bolded}; bolded is false if the title wasn't found anywhere and nothing changed.
function boldenPageTitle(text, title) {
var escapedTitle = escapeRegExp(title);
var suffixPattern = "([^\\s.,;?!()']+)?";
if (new RegExp("'''" + escapedTitle + suffixPattern + "'''", "i").test(text)) {
return { text: text, bolded: true };
}
var bolded = text.replace(new RegExp("(" + escapedTitle + suffixPattern + ")", "ig"), "'''$1'''");
return { text: bolded, bolded: bolded !== text };
}
// Extracts a human-readable message from an mw.Api rejection (code, result).
function apiErrorMessage(code, result) {
return (result && result.error && result.error.info) || (typeof code === "string" ? code : "Xeletiyeke nenas");
}
function escapeHtmlForBackdrop(str) {
return String(str)
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
}
// Mirrors a textarea's text with a small marker after each line that's followed by an actual typed/pasted linebreak, rendered into a transparent backdrop behind the textarea (see ensureLinebreakBackdrop()).
function buildLinebreakBackdropHtml(text) {
var lines = text.split(/\r\n|\r|\n/);
return $.map(lines, function(line, i) {
var isLast = i === lines.length - 1;
return escapeHtmlForBackdrop(line) +
(isLast ? "" : "<mark class='add-example-linebreak-mark'>↵</mark>\n");
}).join("");
}
// Copies the metrics that affect where text wraps/lands (font, line height, padding, border) from the real textarea onto its backdrop via computed style, since the backdrop is a plain <div>, not a themed OOUI input.
function syncLinebreakBackdropMetrics(textarea, backdrop) {
var cs = window.getComputedStyle(textarea[0]);
backdrop.css({
"box-sizing": cs.boxSizing,
"padding-top": cs.paddingTop,
"padding-right": cs.paddingRight,
"padding-bottom": cs.paddingBottom,
"padding-left": cs.paddingLeft,
"border-width": cs.borderWidth,
"border-style": "solid",
"font-family": cs.fontFamily,
"font-size": cs.fontSize,
"font-weight": cs.fontWeight,
"line-height": cs.lineHeight,
"letter-spacing": cs.letterSpacing
});
}
// Lazily inserts the transparent backdrop layer used to mark linebreaks, as a sibling of the textarea inside its existing OOUI input wrapper (which OOUI already positions relatively for icon overlays), rather than start.js's approach of wrapping the textarea in a new div — that would risk disturbing OOUI's own layout of the input. Safe to call more than once; the backdrop is cached.
function ensureLinebreakBackdrop(textarea) {
var existing = textarea.data("addExampleLinebreakBackdrop");
if (existing) {
return existing;
}
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var backdrop = $("<div aria-hidden='true'></div>").addClass("add-example-linebreak-backdrop");
textarea.before(backdrop);
textarea.data("addExampleLinebreakBackdrop", backdrop);
textarea.on("scroll.addExampleLinebreak", function() {
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
});
return backdrop;
}
// Flags a textarea (via CSS class, for the border tint + tooltip) while it contains a typed/pasted linebreak, so the user notices before it's silently turned into <br> on submit; marks only the exact point of the break via the mirrored backdrop.
function highlightLinebreak(el) {
var textarea = $(el);
var text = textarea.val();
var hasBreak = /\r|\n/.test(text);
textarea
.toggleClass("add-example-has-linebreak", hasBreak)
.attr("title", hasBreak ? "Xeta nû dê wek <br> bê nivîsandin" : "");
if (!hasBreak) {
var cached = textarea.data("addExampleLinebreakBackdrop");
if (cached) {
cached.hide();
}
textarea.removeClass("add-example-has-linebreak-source");
return;
}
var backdrop = ensureLinebreakBackdrop(textarea);
textarea.addClass("add-example-has-linebreak-source");
syncLinebreakBackdropMetrics(textarea, backdrop);
backdrop.html(buildLinebreakBackdropHtml(text)).show();
backdrop.scrollTop(textarea.scrollTop()).scrollLeft(textarea.scrollLeft());
}
// Wires linebreak detection onto an OOUI multiline widget, matching start.js's scope: only the quote/example text and its translation/transcription, not bibliographic fields. Uses OOUI's own "change" event rather than the raw <textarea> "input" event start.js listens to, since our fields can also be set programmatically (Clear button, draft restore) via setValue(), which doesn't fire a native DOM input event.
function watchForLinebreaks(widget) {
widget.on("change", function() {
highlightLinebreak(widget.$input[0]);
});
}
// Custom drag-to-resize grip for textareas, ported from Wiki/start.js's wiktkuMakeManualResizable() -- Safari
// has no native corner resize handle on textareas at all, this is the fix start.js already uses for that.
// Inserted as a SIBLING within the textarea's existing OOUI wrapper (same reasoning as
// ensureLinebreakBackdrop above: wrapping the textarea in a NEW div risks disturbing OOUI's own layout),
// not by wrapping it in a new div like start.js's own version does. Unlike start.js's version, this doesn't
// persist the chosen height across page loads (start.js keys that off the textarea's own CSS class, but
// every textarea here is a plain OOUI MultilineTextInputWidget with no distinguishing class, so a direct
// port would have every field here share one save slot and overwrite each other's heights).
function makeManualResizable(textarea) {
textarea = $(textarea);
if (!textarea.is("textarea") || textarea.data("addExampleResizableDone")) {
return;
}
textarea.data("addExampleResizableDone", true);
textarea.css("resize", "none"); // replaced by the custom grip below
var $parent = textarea.parent();
if ($parent.css("position") === "static") {
$parent.css("position", "relative");
}
var grip = $("<div class='add-example-resize-grip'></div>");
textarea.after(grip);
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) { /* already released */ }
$(document).off("pointermove", onPointerMove);
$(document).off("pointerup pointercancel", onPointerUp);
}
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 makeManualResizable to every textarea in `context` (itself or its descendants).
function initManualResize(context) {
var $context = $(context);
var $textareas = $context.is("textarea") ? $context : $context.find("textarea");
$textareas.each(function() {
makeManualResizable(this);
});
}
var api = new mw.Api();
// Kategorî:Çavkanî's template members plus their redirects (each redirect as its own searchable entry
// pointing at the same canonical target, so a template is findable by any of its names). Ported from
// Wiki/start.js's fetchCatSrcTemplates(), extended with prop=redirects. Cached after first fetch.
var catSrcTemplates = null;
var catSrcTemplatesPromise = null;
function fetchCatSrcTemplates() {
if (catSrcTemplatesPromise) {
return catSrcTemplatesPromise;
}
catSrcTemplatesPromise = api.get({
action: "query",
generator: "categorymembers",
gcmtitle: "Kategorî:Çavkanî",
gcmnamespace: 10,
gcmlimit: "max",
prop: "redirects",
rdnamespace: 10,
rdlimit: "max",
formatversion: 2,
}).then(function(data) {
var pages = (data.query && data.query.pages) || [];
var list = [];
pages.forEach(function(page) {
var target = page.title.replace(/^[^:]+:/, "");
list.push({ label: target, target: target });
(page.redirects || []).forEach(function(redirect) {
list.push({ label: redirect.title.replace(/^[^:]+:/, ""), target: target });
});
});
list.sort(function(a, b) {
return a.label.localeCompare(b.label, mw.config.get("wgUserLanguage"));
});
catSrcTemplates = list;
return list;
}, function() {
catSrcTemplates = [];
return catSrcTemplates;
});
return catSrcTemplatesPromise;
}
// TemplateData params for one template (name without the "Şablon:" prefix); redirects:1 so this also
// resolves if `name` is itself a redirect. Resolves to [] if the template has no TemplateData. Cached.
var tplDataCache = {};
function fetchTemplateDataFor(name) {
if (Object.prototype.hasOwnProperty.call(tplDataCache, name)) {
return $.Deferred().resolve(tplDataCache[name]).promise();
}
return api.get({
action: "templatedata",
titles: "Şablon:" + name,
redirects: 1,
formatversion: 2,
}).then(function(data) {
var pages = (data && data.pages) || {};
var first = null;
Object.keys(pages).forEach(function(id) {
if (!first) {
first = pages[id];
}
});
var params = [];
if (first && first.params) {
Object.keys(first.params).forEach(function(key) {
var p = first.params[key];
var label = p && p.label;
if (label && typeof label === "object") {
var userLang = mw.config.get("wgUserLanguage");
label = label[userLang] || label.en || label[Object.keys(label)[0]];
}
params.push({ key: key, label: label || key, required: !!(p && p.required) });
});
}
tplDataCache[name] = params;
return params;
}, function() {
tplDataCache[name] = [];
return [];
});
}
// Language display name, read from the matching section's .besazimani link text.
function languageNameForCode(code) {
var $mark = $(".besazimani[id='" + code + "']").first();
return $mark.length ? $mark.text().trim() : null;
}
// Whether the page title itself (accented Kurdish Latin letters included) is written in Latin script.
var pageTitleIsLatin = !/[^\x00-\x7FÀ-ɏḀ-ỿ‘’]/.test(mw.config.get("wgTitle") || "");
// .example/.benimune = old Şablon:jêder hidden marker; .h-usage-example/.h-quotation = Modul:usex containers used directly by Şablon:nimûne; .citation-whole = Modul:quote's own wrapper, now used by jêder-* templates (Modul:quote nests .h-quotation inside .citation-whole > dl > dd instead of putting it directly under the <li>, so it needs its own entry here).
// Requiring "ul > li >" is what makes this only match an example that's grouped into its own <ul> -- a
// {{nimûne}} (or its "mk" redirect) with no jêder-family citation alongside it in the same definition
// renders straight under the definition's own content instead, with no such group; also reused below to
// tell whether the second pass still needs to handle a given definition.
var EXISTING_EXAMPLE_SELECTOR = "ul > li > .example, ul > li > .benimune, ul > li > .h-usage-example, ul > li > .h-quotation, ul > li > .citation-whole";
$(EXISTING_EXAMPLE_SELECTOR).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.
// A jêder-* citation with no jêgirtin= (quotation text) yet renders no h-quotation/e-quotation at all
// (see get_quote() in Modul quote.lua) -- exactly the "bare citation" case this button exists to fill
// in, so this can't just crash: without the guard, [0] is undefined here and ".lang" throws, which
// (since $.each() has no try/catch) silently kills the button for every remaining match on the page.
var $langEl = $item.find(".e-example[lang], .e-quotation[lang], bdi[lang]")[0];
if (!$langEl) {
console.warn("Gadget-wikt.add-examples: nikaribe zimanê vê nimûneyê bibîne, valakirî hate derbaskirin.", $item);
return;
}
var language = $langEl.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) {
// Encodes the section as "type|ordinal" -- the ordinal is this heading's own position
// among same-type headings WITHIN ITS LANGUAGE (see sectionOrdinalWithinLanguage), not
// MediaWiki's page-wide DOM id number, which can collide across unrelated language sections.
var $sectionH3 = $section.find("h3");
var sectionType = sectionTypeOf($sectionH3) || $sectionH3.text().trim();
definitionLevel.splice(0, 0, sectionType + "|" + sectionOrdinalWithinLanguage($sectionH3));
} 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. $group is the citation-group <ul> itself (parent of $item);
// the form panel is inserted AFTER it (see click handler below), not inside it, so the panel isn't
// squeezed into that <ul>'s narrow hanging-indent width on mobile -- only the button/title stays
// there, matching the "Form redesign for Kurdish example" mockup (title inside the bullet list,
// full-width panel below it).
var $group = $item.parent();
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($item, $button, $title, language, definitionLevel);
$group.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$item.after($formItem);
}
});
// Second pass: some definitions have no example the pass above could react to at all -- either genuinely
// zero examples, or one rendered via {{nimûne}} (or its "mk" redirect) with no jêder-family citation next
// to it, which (see the comment on EXISTING_EXAMPLE_SELECTOR above) renders with no "ul > li" group to
// match. This walks every recognized POS section's own definitions list directly instead of reacting to
// an existing example, and reads the language off the language section's own <h2> rather than off an
// example -- so it doesn't need one to already exist. Everything else (Form, submit()) is reused as-is.
// MediaWiki wraps each heading in a "mw-heading2"/"mw-heading3"/... div in current skin output; falls
// back to the bare heading element for older/other output that doesn't wrap it.
function headingOuter($h) {
var $wrap = $h.closest(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6");
return $wrap.length ? $wrap : $h;
}
// Section's language code: nearest preceding .besazimani[id] by document order (not sibling-walking, which mobile's per-section wrapping breaks).
function languageCodeForOl($ol) {
var $marks = $(".besazimani[id]").add($ol);
var ol = $ol.get(0);
var idx = $marks.index(ol);
for (var i = idx - 1; i >= 0; i--) {
var el = $marks.get(i);
if (el.id) {
return el.id;
}
}
return null;
}
// The heading's own recognized section-type key (see sectionNames above), with a page author's own trailing
// disambiguating number (e.g. "Navdêr 2") stripped back to the canonical name ("Navdêr") -- returns null for
// a heading that isn't a recognized word-sense section at all (Bilêvkirin, Etîmolojî, Çavkanî, ...).
function sectionTypeOf($h3) {
var text = $h3.text().trim();
if (sectionNames[text]) {
return text;
}
var stripped = text.replace(/\s+\d+$/, "");
return sectionNames[stripped] ? stripped : null;
}
// This heading's own 1-based position among same-type headings (see sectionTypeOf) within its own language
// block -- reset at each .besazimani[id] marker, same document-order technique as languageCodeForOl above
// (not sibling-walking, which mobile's per-section wrapping breaks). Needed because MediaWiki's page-wide id
// uniquification can attach a number to an unnumbered heading purely from an unrelated same-named heading
// colliding elsewhere on the page (e.g. Tirkî's own unnumbered "Navdêr" landing on id="Navdêr_3" only
// because Kurmancî's own literal "Navdêr 2" heading already claimed "Navdêr_2") -- that number has nothing
// to do with this heading's actual position and can't be used to find it back in the wikitext.
function sectionOrdinalWithinLanguage($h3) {
var h3El = $h3.get(0);
var $all = $(".besazimani[id]").add($("h3"));
var counts = {};
var result = 1;
$all.each(function() {
if ($(this).is(".besazimani[id]")) {
counts = {};
return;
}
var type = sectionTypeOf($(this)) || $(this).text().trim();
counts[type] = (counts[type] || 0) + 1;
if (this === h3El) {
result = counts[type];
return false;
}
});
return result;
}
// A <li> whose OWN direct content (not counting a nested <ol>) is wrapped in ".form-of-definition" is
// MediaWiki's "form of" template system marking that content as generated by a template -- e.g.
// {{ku-tewîna-nav}}'s "Formeke heval:" wrapper together with its "rewşa îzafeyî"/"rewşa çemandî"/...
// readings underneath. That whole nested block is normally the ENTIRE expansion of a single "#"
// wikitext line, with no separate "##" line behind any individual reading -- recursing into it would
// hand out one button per reading, each trying to match a "##" line that doesn't exist, and submit()
// would fail to find where to insert every one of them. A <li> without that class whose nested <ol>
// holds real hand-typed prose (e.g. sîno-koreyî/Navdêr's two genuinely separate "##" sub-senses) has
// no such problem -- those really are individually addressable wikitext lines.
function isFormOfWrapper($li) {
return $li.children(".form-of-definition").length > 0;
}
// Recurse into a <li>'s own nested <ol> UNLESS it's a form-of-template wrapper (see isFormOfWrapper) --
// a wrapper <li> with its own nested <ol> isn't itself a sense with content of its own, only its real
// (non-generated) leaves are.
function eachLeafDefinition($ol, fn) {
$ol.children("li").each(function() {
var $li = $(this);
var $childOl = $li.children("ol");
if ($childOl.length && !isFormOfWrapper($li)) {
$childOl.each(function() {
eachLeafDefinition($(this), fn);
});
} else {
fn($li);
}
});
}
$("h3").each(function() {
var sectionType = sectionTypeOf($(this));
if (!sectionType) {
return; // not a recognized word-sense section (Bilêvkirin, Etîmolojî, Çavkanî, ...)
}
var sectionOrdinal = sectionOrdinalWithinLanguage($(this));
// Forward-walk siblings to the definitions <ol>, skipping over a declension table/TemplateStyles/the
// headword line; stop (nothing to attach to in this section) if another heading comes first instead.
var $ol = null;
for (var $cursor = headingOuter($(this)).next(); $cursor.length; $cursor = $cursor.next()) {
if ($cursor.is("ol")) {
$ol = $cursor;
break;
}
if ($cursor.is(".mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6, h2, h3, h4, h5, h6")) {
break;
}
}
if (!$ol) {
return;
}
var language = languageCodeForOl($ol);
if (!language) {
console.warn("Gadget-wikt.add-examples: nikaribe koda zimanê vê beşê bibîne.", $ol);
return;
}
eachLeafDefinition($ol, function($li) {
// The pass above already added a button here (or will) -- an actual example already wrapped in
// its own "ul > li" group.
if ($li.find(EXISTING_EXAMPLE_SELECTOR).length) {
return;
}
var definitionLevel = [];
var $definitionItem = $li;
while ($definitionItem.prop("tagName") === "LI") {
// 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);
$definitionItem = $definitionItem.parent().parent();
}
definitionLevel.splice(0, 0, sectionType + "|" + sectionOrdinal);
// A hidden, empty placeholder <li> so submit()'s existing "_$lastExample.after(newLi)" insertion
// (unchanged, same as the pass above) lands the first submitted example right before the button
// -- matching the existing convention of new examples going in before the button, not after it.
var $placeholder = $("<li style='display:none'></li>");
var $formItem = $("<li>");
var $button = $("<a href='#'>Nimûneyeke bikaranînê lê zêde bike</a>");
$button.css("color", "var( --color-subtle, #777777 )");
// Shown in the button's place once the form is open (see Form#setVisible).
var $title = $("<span class='add-example-form-title'></span>").hide();
$formItem.append($button).append($title);
// A "ul" nested directly under a definition "li" starts hidden here (see the HQToggle-controlled
// jêder-citation-group "ul", which only ever renders with an explicit "style="display: block""
// set on it) -- this one has no HQToggle to unhide it, so it needs the same explicit override or
// the button (and the placeholder above) never becomes visible at all.
var $ul = $("<ul>").css("display", "block").append($placeholder).append($formItem);
// The form panel is inserted AFTER $ul (not inside it) once opened -- same reasoning as the first
// pass above: keeps the full-width panel out of the tight bulleted-list indentation on mobile.
$button.on("click", function() {
if (!$button.form) {
$title.text("Nimûneyeke bi " + (languageNameForCode(language) || "zimanekî nenas").toLowerCase() + " lê zêde dikî.");
var form = new Form($placeholder, $button, $title, language, definitionLevel);
$ul.after(form.$element);
}
$button.form.setVisible(true);
return false;
});
$li.append($ul);
});
});
// Pulls the form panel flush with the page's own left/right edges, undoing whatever nested-list indent it inherited from sitting inside a deeply-nested definition.
function alignFormToPage($form) {
var $container = $form.closest(".mw-parser-output");
if (!$container.length) {
return;
}
var pad = parseFloat(window.getComputedStyle($container[0]).paddingLeft) || 0;
var containerLeft = $container.offset().left + pad;
var indent = $form.offset().left - containerLeft;
$form.css({
marginLeft: indent > 0 ? -indent : 0,
width: $container.width() + "px"
});
}
// Constructor for the edit form; lastExample/button/title/language/definitionLevel identify where the form attaches and what it edits.
function Form($lastExample, $button, $title, language, definitionLevel) {
var self = this;
this._language = language;
this._definitionLevel = definitionLevel;
this._$lastExample = $lastExample;
this._$button = $button;
this._$button.form = this;
this._$title = $title;
this._currentJederKey = "";
this._jederFieldWidgets = {};
// Set once a template is picked in the Kategorî:Çavkanî mode (see _selectCategoryTemplate); the
// canonical template title (without the "Şablon:" prefix), used as `sablon` in _doSubmit.
this._categoryTemplateName = null;
// Set by _renderCategoryTemplateFields if the picked template's TemplateData has a "koda zimanî" param;
// that param's own key, used to emit "<key>=<language>" in _doSubmit -- null if no such param exists.
this._categoryTemplateLangParamKey = null;
this._textInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
var textInputLayout = new OO.ui.FieldLayout(this._textInput, {
label: "Metna nimûneyê",
align: "top",
});
// Shown under the text box (see boldenPageTitle) when the page title can't be found in the example text
// as typed, so it won't get bolded; purely informational, doesn't block submitting.
this._titleBoldHint = $("<span class='add-example-title-bold-hint'></span>").hide();
this._updateTitleBoldHint = function() {
var text = self._textInput.getValue().trim();
var title = mw.config.get("wgTitle");
var show = !!text && !boldenPageTitle(text, title).bolded;
self._titleBoldHint.toggle(show).html(show ? "Sermade (" + escapeHtmlForBackdrop(title) + ") nehat dîtin; dê neyê <b>stûr</b>kirin." : "");
};
this._textInput.on("change", function(value) {
self._applyButton.setDisabled(!value);
self._updateReadyHint();
self._updateTitleBoldHint();
});
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,
}));
}
}
sourceTypeMenuItems.push(new OO.ui.MenuOptionWidget({
data: CATEGORY_TEMPLATE_KEY,
label: "Ji Kategorî:Çavkanî şablonekê hilbijêre",
}));
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._sourceInput.on("change", function() {
self._updateReadyHint();
});
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. The Citoid fetch button sits right next to it (not in a separate box) -- see _urlRowWidget below.
this._sourceURLInput = new OO.ui.TextInputWidget({
icon: "link",
placeholder: "https://… an jî DOI/ISBN",
});
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, malûmatan 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));
this._sourceURLInput.on("change", function() {
self._updateReadyHint();
self._autofillVideoTimestamp();
});
// URL input + inline "auto-fill" button as one row (replaces the old separate framed Citoid box's
// button row) -- a plain OO.ui.Widget used purely as a flex-row container (same pattern as
// _loadingImage below: build it empty, then manually append its children's $elements). Disabling
// during submit() still goes through the individual _sourceURLInput/_citoidButton references, not
// through this wrapper.
this._urlRowWidget = new OO.ui.Widget({ classes: ["add-example-url-row"] });
this._urlRowWidget.$element.append(this._sourceURLInput.$element, this._citoidButton.$element);
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, {
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;
// Shown right after a successful Citoid fetch (see _fillFromCitoid); hidden again on clear.
this._citoidSuccessMsg = $("<span class='add-example-citoid-success'>✓ Malûmat hatin dagirtin — li jêr kontrol bike.</span>").hide();
// 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("");
self._citoidSuccessMsg.hide();
Object.keys(self._jederFieldWidgets).forEach(function(key) {
self._jederFieldWidgets[key].setValue("");
});
});
// Plain div (not OO.ui.FieldsetLayout) so the grid CSS class applies directly to the field items.
this._jederFieldsFieldset = $("<div class='add-example-jeder-fields'>");
// "Malûmatên çavkaniyê" header (+ the "Vala bike" clear button) sitting right above the fields grid,
// replacing the old framed "Ji Citoid an bi destan tijî bike:" box -- like this only makes sense once
// a real jêder-* template is active (there's nothing here to show for the "citoid: not yet detected"
// placeholder or for free text), so the whole section toggles together in _setSourceType().
this._jederSection = $("<div class='add-example-jeder-section'>").append(
$("<div class='add-example-jeder-header'>")
.append($("<span class='add-example-jeder-header-label'>Malûmatên çavkaniyê</span>"))
.append(this._citoidClearButton.$element),
this._jederFieldsFieldset
);
// Kategorî:Çavkanî template search box: sits directly under the source-type dropdown in $topRight (not
// in the "Malûmatên çavkaniyê" section below, which is reserved for the picked template's own fields --
// see _setSourceType/_selectCategoryTemplate). Built once here, not rebuilt per _setSourceType call, so
// switching in and out of this dropdown mode doesn't lose its own DOM node/event handlers.
this._categoryTemplateInput = $("<input type='search' autocomplete='off' class='add-example-cat-tpl-input'>")
.attr("placeholder", "Li navê şablonê bigere…");
this._categoryTemplateResults = $("<ul class='add-example-cat-tpl-results'>").hide();
this._categoryTemplateStatus = $("<span class='add-example-cat-tpl-status'>Şablon tên barkirin…</span>");
this._categoryTemplateSearchRow = $("<div class='add-example-cat-tpl-search-row'>")
.append(this._categoryTemplateInput, this._categoryTemplateResults, this._categoryTemplateStatus)
.hide();
this._initCategoryTemplatePicker();
this._translationInput = new OO.ui.MultilineTextInputWidget({ rows: 4 });
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({ rows: 4 });
var transcriptionInputLayout = new OO.ui.FieldLayout(this._transcriptionInput, {
label: "Translîterasyona 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));
// Reactive "ready to submit" hint next to Biweşîne: no text yet, text but no source (still submittable
// as a bare {{nimûne}}), or fully ready -- kept in sync by _updateReadyHint(), wired to every field below.
this._readyHint = $("<span class='add-example-ready-hint'></span>").text("Metna nimûneyê lazim e.");
// True while a Citoid-eligible URL/DOI/ISBN is typed in but not yet fetched (or fetched then edited away) and no jêder field has been filled by hand -- the "looks done but isn't" trap this exists to catch. Not applicable in free-text mode, where the fetch button isn't even offered.
this._citoidPending = function() {
return self._currentJederKey !== "" &&
self._currentJederKey !== CATEGORY_TEMPLATE_KEY &&
!!self._sourceURLInput.getValue().trim() &&
!self._citoidSuccessMsg.is(":visible") &&
!Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
};
this._updateReadyHint = function() {
if (!self._textInput.getValue()) {
self._readyHint.text("Metna nimûneyê lazim e.");
return;
}
if (self._citoidPending()) {
self._readyHint.text("Pêşî 'Bi otomatîk tijî bike' bitikîne.");
return;
}
var hasSource = self._sourceInput.getValue().trim() || self._sourceURLInput.getValue().trim() ||
Object.keys(self._jederFieldWidgets).some(function(key) {
return self._jederFieldWidgets[key].getValue().trim();
});
self._readyHint.text(hasSource ? "Hazir e." : "Çavkanî nehatiye dayîn.");
};
// Prefills the Dem field from the typed URL's own "t=" (see wikt.citoid.extractVideoTimestamp) once jêder-vîdeo is active -- never overwrites a value the user already entered by hand.
this._autofillVideoTimestamp = function() {
var demWidget = self._jederFieldWidgets.dem;
if (self._currentJederKey !== "jêder-vîdeo" || !demWidget || demWidget.getValue().trim()) {
return;
}
var dem = wikt.citoid.extractVideoTimestamp(self._sourceURLInput.getValue().trim());
if (dem && !demWidget.getValue().trim()) {
demWidget.setValue(dem);
}
};
// framed:false (+ the "destructive" flag for the red text/hover) matches the mockup's borderless
// "Betal bike" -- a plain colored link rather than a boxed button, distinguishing it from Paqij bike.
this._cancelButton = new OO.ui.ButtonWidget({
label: "Betal bike",
icon: "close",
title: "Formê bigire",
flags: ["destructive"],
framed: false,
});
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);
// Two-column top section (see "Form redesign for Kurdish example/Nimûne zêde bike.dc.html"): example
// text (+ translation/transliteration for non-ku, right after it, not after the source fields) on the
// left; source-type + link/Citoid on the right. Built as plain <div>s, not an OOUI layout -- OOUI has
// no CSS-grid container -- so .add-example-top-grid in the CSS can lay them out as a real responsive
// 7fr/5fr grid (collapsing to one column on narrow screens).
var $topLeft = $("<div class='add-example-top-col'>").append(textInputLayout.$element, this._titleBoldHint);
if (language !== "ku") {
$topLeft.append(translationInputLayout.$element);
}
if (!pageTitleIsLatin) {
$topLeft.append(transcriptionInputLayout.$element);
}
var $topRight = $("<div class='add-example-top-col'>").append(
sourceTypeLayout.$element,
this._categoryTemplateSearchRow,
this._sourceInputLayout.$element,
this._sourceURLInputLayout.$element,
this._citoidSuccessMsg
);
var $topGrid = $("<div class='add-example-top-grid'>").append($topLeft, $topRight);
// 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 (see the FieldLayout replaceWith() there).
this._fieldsLayout = $("<div class='add-example-fieldset'>").append($topGrid, this._jederSection);
// Bottom action row -- order/spacing matches the mockup: Biweşîne (+ spinner + ready hint), a spacer
// pushing the rest right, then Paqij bike (bordered/subtle) and Betal bike (borderless red text, via
// framed:false above). A plain flex <div>, not an OOUI HorizontalLayout, so the raw hint/spacer
// elements can sit alongside the real button widgets (same reasoning as the top grid above).
var $buttonsRow = $("<div class='add-example-main-buttons'>").append(
this._applyButton.$element,
this._loadingImage.$element,
this._readyHint,
$("<span class='add-example-buttons-spacer'></span>"),
this._clearButton.$element,
this._cancelButton.$element
);
this._frame = new OO.ui.PanelLayout({
id: "add-example-definition-{0}-form".format(this._definitionLevel.join("-")),
classes: ["add-example-form"],
expanded: false,
});
this._frame.$element.append(this._fieldsLayout, $buttonsRow);
// 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");
initManualResize(this._frame.$element);
}
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 fetch button, and the "Malûmatên çavkaniyê" fields section toggle here.
_setSourceType: function(jederKey) {
var self = this;
this._currentJederKey = jederKey;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateName = null;
this._categoryTemplateLangParamKey = null;
var isRealJederKey = jederKey && jederDefs[jederKey];
var isCategoryTemplateKey = jederKey === CATEGORY_TEMPLATE_KEY;
if (isRealJederKey) {
var def = jederDefs[jederKey];
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;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: field.label,
align: "top",
classes: ["add-example-field-span-" + (field.span || 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
}
// The search box itself is always in the DOM (see the constructor, it lives in $topRight) -- only
// shown in this one mode, and reset when leaving it so a stale query/selection doesn't linger for
// next time it's opened.
this._categoryTemplateSearchRow.toggle(isCategoryTemplateKey);
if (!isCategoryTemplateKey) {
this._categoryTemplateInput.val("");
this._categoryTemplateResults.hide();
}
// "Malûmatên çavkaniyê" header + fields grid: shown for a real jêder-* template (fields built above).
// For the Kategorî:Çavkanî picker it stays hidden here -- there's nothing to put in it until a
// template is actually picked, see _selectCategoryTemplate, which shows it once there is.
this._jederSection.toggle(!!isRealJederKey);
// Free text textarea only for "" (free text); hidden for "citoid" and any real jêder-* key.
this._sourceInputLayout.toggle(jederKey === "");
// Citoid fetch button: hidden for free text (nothing there for it to fill in) and for the
// Kategorî:Çavkanî picker (Citoid has no mapping for an arbitrary picked template), shown for
// "citoid" auto-detect and any real jêder-* key. The URL input itself next to it stays visible in
// every OTHER mode -- see the sourceURLInputLayout toggle below for the one exception.
this._citoidButton.toggle(jederKey !== "" && !isCategoryTemplateKey);
// URL field wording: plain "attach a link" phrasing for free text, 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 $oldLayout = this._sourceURLInputLayout.$element;
// Re-wraps the SAME _urlRowWidget (still holding _sourceURLInput + _citoidButton) in a new
// FieldLayout with the new label/help; the widget's $element moves along with it, same as the
// old addItems()/removeItems() swap did for the plain input before this redesign.
this._sourceURLInputLayout = new OO.ui.FieldLayout(this._urlRowWidget, 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,
});
$oldLayout.replaceWith(this._sourceURLInputLayout.$element);
}
// The URL/Citoid row is normally always visible (see the constructor comment), but Citoid has no
// mapping for an arbitrary Kategorî:Çavkanî template, so it'd just be dead UI in that one mode.
this._sourceURLInputLayout.toggle(!isCategoryTemplateKey);
this._autofillVideoTimestamp();
this._updateReadyHint();
initManualResize(this._jederFieldsFieldset); // covers a freshly-rebuilt "sernav" field (jêder-*); the Kategorî:Çavkanî picker's own fields are resized separately once picked, see _renderCategoryTemplateFields
},
// Wires up the search box's own input/blur handlers and kicks off the template list fetch. Called once
// from the constructor -- the search box lives permanently in $topRight (see there), only shown/hidden
// by _setSourceType, so this only needs to run once, not every time the picker mode is entered.
_initCategoryTemplatePicker: function() {
var self = this;
function showResults(query) {
var q = query.trim().toLowerCase();
self._categoryTemplateResults.empty();
var list = catSrcTemplates || [];
var matched = q ? list.filter(function(entry) {
return entry.label.toLowerCase().indexOf(q) !== -1;
}) : list;
if (!matched.length) {
self._categoryTemplateResults.hide();
return;
}
matched.slice(0, 50).forEach(function(entry) {
var $li = $("<li class='add-example-cat-tpl-row'>");
var $text = $("<span class='add-example-cat-tpl-text'>").text(entry.label);
// A redirect entry's label differs from its target -- mark where it actually resolves to.
if (entry.label !== entry.target) {
$text.append($("<span class='add-example-cat-tpl-redirect-arrow'>").text(" → " + entry.target));
}
// Lets the user verify which template a result actually is before picking it, same "🔗
// opens the template's own page" affordance Wiki/start.js uses in its own searchable
// dropdowns -- always points at the canonical target, never a redirect's own page.
var $link = $("<a class='add-example-cat-tpl-link' target='_blank' rel='noopener'>🔗</a>")
.attr("title", "Rûpela şablonê veke")
.attr("href", tplPageUrl(entry.target));
// stopPropagation only -- preventDefault would stop the link from actually navigating, and
// this must not also select the row the way clicking elsewhere in it does (see below).
$link.on("mousedown click", function(e) { e.stopPropagation(); });
$li.append($text, $link);
$li.on("mousedown", function(e) {
e.preventDefault(); // keeps the input's blur (and the results-hiding it triggers) from firing before the click registers
self._selectCategoryTemplate(entry);
});
self._categoryTemplateResults.append($li);
});
self._categoryTemplateResults.show();
}
this._categoryTemplateInput.on("input focus", function() {
showResults($(this).val());
});
this._categoryTemplateInput.on("blur", function() {
setTimeout(function() { self._categoryTemplateResults.hide(); }, 200); // lets the mousedown handler above fire first
});
fetchCatSrcTemplates().then(function() {
self._categoryTemplateStatus.text("");
}, function() {
self._categoryTemplateStatus.text("Şablon nehatin barkirin.");
});
},
// Picks a template from the search results: records its canonical name -- a redirect entry resolves to
// its target, the output always uses that, never the redirect's own name (see fetchCatSrcTemplates) --
// and reveals/renders the "Malûmatên çavkaniyê" section for its parameter fields.
_selectCategoryTemplate: function(entry) {
this._categoryTemplateResults.hide();
// Left as the plain label (not "label → target") -- putting the arrow in the input's own value
// would get re-used as the search query if the box is focused again to pick something else.
this._categoryTemplateInput.val(entry.label);
this._categoryTemplateName = entry.target;
this._jederSection.toggle(true);
this._renderCategoryTemplateFields(entry.target);
},
// Builds one text input per TemplateData param of `name` into the shared "Malûmatên çavkaniyê" fields
// grid (_jederFieldsFieldset, the same one the jêder-* fields use), or a lone "Rûpel" fallback field if
// it has no TemplateData -- see the jêgirtin=/rûpel= example in the feature request this implements.
_renderCategoryTemplateFields: function(name) {
var self = this;
this._jederFieldsFieldset.empty();
this._jederFieldWidgets = {};
this._categoryTemplateLangParamKey = null;
fetchTemplateDataFor(name).then(function(params) {
// A param labeled exactly "koda zimanî" is filled from the language dropdown, not typed by hand
// -- find it (if any) before filtering, so it can be excluded from the rendered fields below
// and used by _doSubmit to emit "<key>=<language>" (see CATEGORY_TEMPLATE_LANG_LABEL).
(params || []).forEach(function(p) {
if ((p.label || "").trim().toLowerCase() === CATEGORY_TEMPLATE_LANG_LABEL) {
self._categoryTemplateLangParamKey = p.key;
}
});
var filtered = (params || []).filter(function(p) {
return CATEGORY_TEMPLATE_COVERED_PARAMS.indexOf(p.key) === -1 && p.key !== self._categoryTemplateLangParamKey;
});
var list = filtered.length ? filtered : [{ key: "rûpel", label: "Rûpel", required: false }];
list.forEach(function(p) {
// Reuse the jêder-* field's own width/multiline when this param's key matches one (see
// JEDER_FIELD_SIZE_BY_KEY) -- most Kategorî:Çavkanî templates share the same bibliographic
// param names, so e.g. "sernav" ends up full-width+multiline here too, not a generic box.
var sizeHint = JEDER_FIELD_SIZE_BY_KEY[p.key];
var widget = (sizeHint && sizeHint.multiline)
? new OO.ui.MultilineTextInputWidget({ rows: 2, autosize: false })
: new OO.ui.TextInputWidget();
self._jederFieldWidgets[p.key] = widget;
widget.on("change", function() {
self._updateReadyHint();
});
var layout = new OO.ui.FieldLayout(widget, {
label: p.label,
align: "top",
classes: ["add-example-field-span-" + (sizeHint ? sizeHint.span : 4)],
});
self._jederFieldsFieldset.append(layout.$element);
});
self._updateReadyHint();
initManualResize(self._jederFieldsFieldset); // matters now that a matched key like "sernav" can render multiline
});
},
// Fetches data via wikt.citoid, picks the matching jêder-* template, and fills its empty fields.
_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, query);
Object.keys(fields).forEach(function(key) {
var widget = self._jederFieldWidgets[key];
if (widget && !widget.getValue()) {
widget.setValue(fields[key]);
}
});
self._citoidSuccessMsg.show();
self._updateReadyHint();
mw.notify("Malûmat ji Citoid hatin barkirin.");
}, function(errorMsg) {
// Citoid can't fetch some sites at all (e.g. x.com/twitter.com) -- fall back to jêder-websîte with a website name guessed from the URL itself, rather than just a bare error.
var fallbackSite = wikt.citoid.websiteNameForUrl(query);
if (fallbackSite) {
if (self._currentJederKey !== "jêder-websîte") {
var menu = self._sourceTypeDropdown.getMenu();
var item = menu.findItemFromData("jêder-websîte");
if (item) {
menu.chooseItem(item); // this calls _setSourceType("jêder-websîte") automatically
}
}
var websiteWidget = self._jederFieldWidgets["websîte"];
if (websiteWidget && !websiteWidget.getValue()) {
websiteWidget.setValue(fallbackSite);
}
mw.notify("Citoid nikare vê malperê bixwîne; şablona Websîte hate hilbijartin, ji kerema xwe mayî bi destan tijî bike.");
return;
}
mw.notify(typeof errorMsg === "string" ? errorMsg : "Nekarî malûmatan 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. The title text takes
// the button's place while open (see the "Form redesign for Kurdish example" mockup); the button
// itself stays put ready to reappear once the form is cancelled/closed.
setVisible: function(visible) {
this._$button.toggle(!visible);
this._$title.toggle(visible);
this._frame.toggle(visible);
if (visible) {
alignFormToPage(this._frame.$element);
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._citoidSuccessMsg.hide();
this._sourceTypeDropdown.getMenu().selectItemByData("citoid");
this._setSourceType("citoid");
},
// Warns before submitting if a Citoid URL/DOI/ISBN was typed but never successfully fetched, then defers
// to _doSubmit. The title-not-boldable case (see boldenPageTitle) is shown inline under the text box
// instead (_titleBoldHint) rather than blocking submission here.
submit: function() {
if (this._citoidPending() && !window.confirm("Te lînk, DOI an ISBN nivîsand lê hîn jê malûmat nehatine standin. Bêyî wan berdewam bikî?")) {
return;
}
this._doSubmit();
},
// Generates and submits the wikicode, then inserts the resulting HTML element if no errors occurred.
_doSubmit: 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; if a Kategorî:Çavkanî template was
// picked instead, collect its TemplateData-driven fields the same way, plus wekjêgirtin=1 for any
// "Ç:"-prefixed template (a quotation-equivalent, not a usage example -- see Modul:quote).
var jederParams = [];
var usingCategoryTemplate = this._currentJederKey === CATEGORY_TEMPLATE_KEY && !!this._categoryTemplateName;
if (usingCategoryTemplate) {
Object.keys(self._jederFieldWidgets).forEach(function(key) {
// A raw linebreak would break the single-line "#*" wikitext just like in the example text,
// but these are plain param values (not display text), so collapse to a space, not <br>.
var value = nlToSpace(self._jederFieldWidgets[key].getValue().trim());
if (value) {
jederParams.push(key + "=" + value);
}
});
// Only for a template whose own TemplateData actually names a "koda zimanî" param (see
// CATEGORY_TEMPLATE_LANG_LABEL) -- an arbitrary Kategorî:Çavkanî template has no guaranteed
// "param 1 = language" convention the way jêder-* does, so this isn't added unconditionally.
if (self._categoryTemplateLangParamKey) {
jederParams.push(self._categoryTemplateLangParamKey + "=" + self._language);
}
if (/^Ç:/.test(self._categoryTemplateName)) {
jederParams.push("wekjêgirtin=1");
}
} else if (this._currentJederKey && jederDefs[this._currentJederKey]) {
jederDefs[this._currentJederKey].fields.forEach(function(field) {
var widget = self._jederFieldWidgets[field.key];
var value = widget ? nlToSpace(widget.getValue().trim()) : "";
if (value) {
jederParams.push(field.key + "=" + value);
}
});
}
// A Kategorî:Çavkanî template is used as soon as it's picked, even with every field left blank
// (still submittable as a bare jêgirtin=); a jêder-* type only counts once a field is actually filled.
var usingJederTemplate = usingCategoryTemplate || (this._currentJederKey && jederParams.length > 0);
var minakAnNa, sablon;
if (usingJederTemplate) {
// The jêder-*/Kategorî:Çavkanî template itself is used as the template, not as the "2=" content.
minakAnNa = "*";
sablon = usingCategoryTemplate ? this._categoryTemplateName : 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 -- only for jêder-*/jêder/nimûne, which are always designed with param 1 =
// language. A Kategorî:Çavkanî template only gets a language param when its own TemplateData
// names one ("koda zimanî") -- see the _categoryTemplateLangParamKey push above, already folded
// into jederParams with its own key, not assumed to be position 1.
if (!usingCategoryTemplate) {
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 (see boldenPageTitle), then convert any literal linebreak in the example text to <br> (see nlToBr) so it can't break the single-line "#*" wikitext
code += nlToBr(boldenPageTitle(text, title).text);
if (this._language !== "ku") {
var translation = nlToBr(this._translationInput.getValue().trim());
if (translation) {
// Kategorî:Çavkanî templates route through Modul:quote directly and take its "t=" param name;
// the jêder-* templates use "tercime=" instead (see the jêder-* template docs).
code += "|" + (usingCategoryTemplate ? "t" : "tercime") + "=" + translation;
}
}
var transcription = nlToBr(this._transcriptionInput.getValue().trim());
if (transcription) {
code += "|tr=" + transcription;
}
code += "}}";
// definitionLevel[0] is "type|ordinal" (see sectionOrdinalWithinLanguage) -- ordinal is this
// section's own position among same-type headings within its language, resolved client-side, not
// a number parsed out of a DOM id (MediaWiki's page-wide id-uniquification can attach a number to
// an unnumbered heading purely from an unrelated same-named heading colliding elsewhere on the
// page, with no relation to this heading's actual wikitext).
var sectionKeyParts = this._definitionLevel[0].split("|");
var sectionType = sectionKeyParts[0];
var sectionOrdinal = parseInt(sectionKeyParts[1], 10);
// Shared with the success handler attached to api.edit() below (see emptyTemplate use there) --
// declared here, not inside the transform callback, since that callback and the success handler
// are sibling functions, not nested, so a `var` inside the transform wouldn't be visible there.
var emptyTemplate = false;
// Thrown from inside api.edit()'s transform callback below to bail out with one of the specific
// messages already used for a bad language/section, without it being mistaken for a real API
// failure (network error, edit conflict, ...) by the failure handler further down.
function SubmitAbort(message) {
this.message = message;
}
// Insert new example into page's code. api.edit() does its own action=query fetch internally (for
// basetimestamp/curtimestamp, which MediaWiki uses to detect edit conflicts) and hands that same
// revision straight to this callback -- so the insertion logic below runs against the exact
// content MediaWiki checks the conflict against, instead of a separate api.get() done beforehand
// (which used to leave a window for someone else's edit to land in between the two fetches and
// get silently overwritten, since the conflict check would already be based on the newer content
// while the saved text was still built from the older one).
api.edit(mw.config.get("wgPageName"), function(revision) {
var pageContent = revision.content;
// Look for correct language section -- bounded to end at the NEXT top-level "==...=="
// heading (or end of page) so a later language's own same-named subsection can never be
// scanned into this one's search.
var langSectionRegex = new RegExp("==[ ]*{{ziman\\|{0}}}[ ]*==".format(self._language));
var langSectionIndex = pageContent.search(langSectionRegex);
if (langSectionIndex === -1) {
throw new SubmitAbort("Xeletiyeke bi koda zimanî heye. Koda zimanî:" + self._language);
}
var afterLangHeading = pageContent.indexOf("\n", langSectionIndex);
afterLangHeading = afterLangHeading === -1 ? pageContent.length : afterLangHeading + 1;
var nextLangSectionMatch = /\n==[^=\n][^\n]*==/.exec(pageContent.slice(afterLangHeading));
var langSectionEnd = nextLangSectionMatch ? afterLangHeading + nextLangSectionMatch.index : pageContent.length;
if (!sectionNames[sectionType]) {
throw new SubmitAbort('Navê beşê xelet e. Di beşên "Ji wêjêyê" û "Ji wêjêya klasîk" ev amûr nayê bikaranîn.');
}
// `lines` covers the WHOLE rest of the page from this language's heading onward -- not just this
// language's own section -- because it gets reused below (see "text:") to rebuild the entire
// saved page; truncating it here would silently drop every later language section on save.
// Only the section-heading search itself is bounded, via sectionSearchEndLine, to stop at the
// next language, so a same-named heading over there can never be matched by mistake.
var lines = pageContent.slice(langSectionIndex).split("\n");
var sectionSearchEndLine = pageContent.slice(langSectionIndex, langSectionEnd).split("\n").length;
var sectionNamesRegex = Object.keys(sectionNames).join('|');
var sectionRegex = new RegExp('^===[ ]*(' + sectionNamesRegex + ')\\s*(\\d+)?');
var targetLineIndex;
var sectionOccurrence = 0;
for (targetLineIndex = 0; targetLineIndex < sectionSearchEndLine; targetLineIndex++) {
var matchSection = sectionRegex.exec(lines[targetLineIndex]);
if (matchSection && sectionNames[sectionType].includes(matchSection[1])) {
sectionOccurrence++;
if (sectionOccurrence === sectionOrdinal) {
// Add more conditions if needed for inflection, e.g., (isInflection === line.includes("Formeke "))
break;
}
}
}
if (targetLineIndex === sectionSearchEndLine) {
throw new SubmitAbort("Di navê beşê de xeletî heye. Îhtimalen bi vî navê beşê çend heb hene.");
}
// 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;
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);
}
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(codeOrAbort, result) {
if (codeOrAbort instanceof SubmitAbort) {
error(codeOrAbort.message);
} else {
error("Nekarî rûpelê xilas bike: " + apiErrorMessage(codeOrAbort, result));
}
});
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>
48qhkii35s6de9ybaqvh6a6u86munpq
Bikarhêner:Wikihez/Gadget-wikt.add-examples.css
2
1357894
6342717
6342679
2026-08-26T17:19:35Z
Wikihez
7344
6342717
css
text/css
/* Design tokens shared with the "Entry wizard" redesign, so gadgets read as one site: warm parchment card
palette, Spectral/IBM Plex Sans/IBM Plex Mono type, no drop shadows, pill-shaped action buttons. */
@import url('https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,300;0,400;0,600;1,400&family=IBM+Plex+Sans:ital,wght@0,400;0,500;0,600;1,400&family=IBM+Plex+Mono:wght@400;500&display=swap');
:root {
--wikt-ae-font-sans: 'IBM Plex Sans', system-ui, sans-serif;
--wikt-ae-font-mono: 'IBM Plex Mono', monospace;
--wikt-ae-card-bg: #fffdf8;
--wikt-ae-card-border: #e6dfd2;
--wikt-ae-divider: #efe8db;
--wikt-ae-input-border: #cfc7b8;
--wikt-ae-input-bg: #fff;
--wikt-ae-text: #1c1a17;
--wikt-ae-text-body: #4a453d;
--wikt-ae-text-label: #3d3830;
--wikt-ae-text-muted: #8a8378;
--wikt-ae-text-placeholder: #b3ab9e;
--wikt-ae-accent: #2a5db0;
--wikt-ae-accent-hover: #1c4685;
--wikt-ae-accent-bg: #eef2fa;
--wikt-ae-accent-border: #d5def0;
--wikt-ae-destructive: #9c3a28;
--wikt-ae-section-bg: #fbf8f1;
}
html.skin-theme-clientpref-night {
--wikt-ae-card-bg: var(--background-color-base, #101418);
--wikt-ae-card-border: rgba(255, 255, 255, 0.08);
--wikt-ae-divider: rgba(255, 255, 255, 0.06);
--wikt-ae-input-border: rgba(255, 255, 255, 0.2);
--wikt-ae-input-bg: rgba(255, 255, 255, 0.04);
--wikt-ae-text: #f0ece4;
--wikt-ae-text-body: #cfc7b8;
--wikt-ae-text-label: #e4ddd0;
--wikt-ae-text-muted: #a89f8f;
--wikt-ae-text-placeholder: #6b6459;
--wikt-ae-accent: #6ea1e0;
--wikt-ae-accent-hover: #8fb6e8;
--wikt-ae-accent-bg: rgba(110, 161, 224, 0.15);
--wikt-ae-accent-border: rgba(110, 161, 224, 0.35);
--wikt-ae-destructive: #d97a63;
--wikt-ae-section-bg: rgba(255, 255, 255, 0.03);
}
/* {{bênimûne}}'s own "Nimûneyekê bide" prompt is redundant once this gadget's own button renders in its place */
.mw-parser-output li:has(> .benimune) {
display: none;
}
.add-example-form .oo-ui-inputWidget-input {
font-family: var(--wikt-ae-font-sans) !important;
}
.add-example-form .add-example-fieldset {
margin-bottom: 1em;
}
/* Form panel: card with border and radius, no shadow (matches the Entry wizard "no shadows" rule) */
.add-example-form {
width: 100%;
box-sizing: border-box;
margin-top: 0.5em;
padding: 1.25em;
font-family: var(--wikt-ae-font-sans);
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-card-border);
border-radius: 14px;
background-color: var(--wikt-ae-card-bg);
}
/* Title shown in place of the "add example" link while its form is open */
.add-example-form-title {
font-family: var(--wikt-ae-font-sans);
font-weight: 600;
font-size: 13.5px;
color: var(--wikt-ae-text-label);
}
/* Field labels: consistent weight/size/color across all OOUI FieldLayouts in the form */
.add-example-form .oo-ui-fieldLayout-header label {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
font-weight: 500;
color: var(--wikt-ae-text-label);
}
/* Text inputs: shared border/radius/background, focus ring instead of OOUI's default */
.add-example-form .oo-ui-textInputWidget input,
.add-example-form .oo-ui-textInputWidget textarea {
border-color: var(--wikt-ae-input-border) !important;
border-radius: 10px !important;
background-color: var(--wikt-ae-input-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input:focus,
.add-example-form .oo-ui-textInputWidget textarea:focus {
border-color: var(--wikt-ae-accent) !important;
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input {
min-height: 44px;
}
/* Action buttons: pill-shaped, accent-colored to match the Entry wizard's Bişîne/secondary buttons */
.add-example-form .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
border-radius: 999px !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent) !important;
border-color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary:hover .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-hover) !important;
border-color: var(--wikt-ae-accent-hover) !important;
}
.add-example-form .oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive:not(.oo-ui-flaggedElement-primary) .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-bg) !important;
border-color: var(--wikt-ae-accent-border) !important;
color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
color: var(--wikt-ae-destructive) !important;
}
/* Two-column top section: example text left, source type/link right; collapses to one column below 640px */
.add-example-top-grid {
display: grid;
grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
gap: 16px 20px;
align-items: start;
}
.add-example-top-col {
display: flex;
flex-direction: column;
gap: 12px;
min-width: 0; /* lets long unbreakable text shrink instead of overflowing */
}
/* URL input and Citoid fetch button, each on its own line */
.add-example-url-row {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 8px;
}
.add-example-url-row .oo-ui-textInputWidget {
width: 100%;
}
.add-example-url-row .add-example-citoid-fetch {
align-self: flex-start;
}
.add-example-citoid-success {
font-size: 0.92em;
color: var(--wikt-palette-green6, #14866d);
}
/* Source-info section: "Malûmatên çavkaniyê" header + the jêder-* fields grid */
.add-example-jeder-section {
border-top: 1px solid var(--wikt-ae-divider);
background-color: var(--wikt-ae-section-bg);
padding: 1em 1.25em;
margin: 0.75em -1.25em 0; /* bleeds tint to the panel's side edges only */
}
.add-example-jeder-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 0.6em;
}
/* Section eyebrow style, matching the Entry wizard's small-caps section labels */
.add-example-jeder-header-label {
font-family: var(--wikt-ae-font-mono);
font-size: 11px;
letter-spacing: 0.12em;
color: var(--wikt-ae-text-muted);
}
.add-example-jeder-header .add-example-citoid-clear {
font-size: 12px;
}
.add-example-jeder-header .add-example-citoid-clear .oo-ui-iconElement-icon {
min-width: 14px;
min-height: 14px;
background-size: 14px;
}
/* jêder-* template fields: 12-column grid, each field spans its own jederDefs[key].span columns */
.add-example-jeder-fields {
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: 4px 12px;
align-items: start;
}
.add-example-jeder-fields .oo-ui-fieldLayout {
min-width: 0; /* lets a field shrink below its content's natural width */
margin-top: 0 !important; /* overrides OOUI's own stacking margin, not wanted between fields sharing a grid row */
}
.add-example-field-span-1 { grid-column: span 1; }
.add-example-field-span-2 { grid-column: span 2; }
.add-example-field-span-3 { grid-column: span 3; }
.add-example-field-span-4 { grid-column: span 4; }
.add-example-field-span-5 { grid-column: span 5; }
.add-example-field-span-6 { grid-column: span 6; }
.add-example-field-span-12 { grid-column: span 12; }
.add-example-jeder-fields .oo-ui-fieldLayout-header label {
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget {
max-width: 100%;
width: 100%;
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget input,
.add-example-jeder-fields .oo-ui-textInputWidget textarea {
font-size: 0.95em;
padding: 4px 8px;
min-height: 2.2em;
line-height: 1.4;
resize: vertical;
}
/* Kategorî:Çavkanî template search picker (search/filter interaction ported from Wiki/start.js's own
"__category__" picker); its result fields reuse .add-example-jeder-fields (see above) for the grid. */
.add-example-cat-tpl-picker {
position: relative;
}
.add-example-cat-tpl-input {
display: block;
width: 100%;
box-sizing: border-box;
padding: 6px 10px;
font-family: var(--wikt-ae-font-sans);
font-size: 0.95em;
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-input-border);
border-radius: 10px;
background-color: var(--wikt-ae-input-bg);
}
.add-example-cat-tpl-input:focus {
outline: none;
border-color: var(--wikt-ae-accent);
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg);
}
.add-example-cat-tpl-results {
position: absolute;
z-index: 10;
top: 100%;
left: 0;
right: 0;
margin: 4px 0 0;
padding: 4px 0;
list-style: none;
max-height: 16em;
overflow-y: auto;
border: 1px solid var(--wikt-ae-card-border);
border-radius: 10px;
background-color: var(--wikt-ae-card-bg);
}
.add-example-cat-tpl-results li {
margin: 0;
padding: 5px 10px;
font-size: 0.92em;
cursor: pointer;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.add-example-cat-tpl-results li:hover {
background-color: var(--wikt-ae-accent-bg);
}
.add-example-cat-tpl-status {
display: block;
font-size: 0.82em;
color: var(--wikt-ae-text-muted);
margin-top: 4px;
}
.add-example-cat-tpl-fields {
margin-top: 0.75em;
}
/* Larger font for the top-section textareas than the bibliographic sub-fields below */
.add-example-top-col textarea {
font-size: 1.05em;
}
/* Bottom action row: Biweşîne + hint, spacer, Paqij bike, Betal bike */
.add-example-main-buttons {
display: flex;
align-items: center;
margin-top: 0.75em;
padding-top: 0.75em;
border-top: 1px solid var(--wikt-ae-divider);
gap: 0.5em;
flex-wrap: wrap; /* keep buttons from overflowing on narrow screens */
}
.add-example-ready-hint {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-text-muted);
}
.add-example-title-bold-hint {
display: block;
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-destructive);
margin-top: 0.35em;
}
.add-example-buttons-spacer {
flex: 1 1 auto;
}
/* CSS-only loading spinner, matches dark/light mode */
.add-example-spinner {
display: inline-block;
width: 1.2em;
height: 1.2em;
vertical-align: middle;
border: 2px solid var(--wikt-ae-input-border);
border-top-color: var(--wikt-ae-accent);
border-radius: 50%;
animation: add-example-spin 0.8s linear infinite;
}
@keyframes add-example-spin {
to { transform: rotate(360deg); }
}
/* Narrow screens: collapse the top grid to one column */
@media (max-width: 640px) {
.add-example-top-grid {
grid-template-columns: 1fr;
}
}
/* Small screens: tighter padding, jêder-fields grid drops to 2 columns */
@media (max-width: 480px) {
.add-example-form {
padding: 0.75em;
}
.add-example-jeder-section {
margin-left: -0.75em;
margin-right: -0.75em;
}
.add-example-jeder-fields {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.add-example-jeder-fields [class*="add-example-field-span-"] {
grid-column: span 1;
}
.add-example-jeder-fields .add-example-field-span-12 {
grid-column: span 2;
}
}
/* Warns when the example/translation/transcription text has a literal linebreak */
.add-example-form textarea.add-example-has-linebreak {
border-color: var(--wikt-palette-yellow6, #ac6600) !important;
}
/* Backdrop mirrors the textarea's text with a marker at each linebreak; metrics synced from the textarea via JS */
.add-example-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;
display: none;
}
/* Textarea sits above its backdrop with a transparent background so the marker shows through */
.add-example-form textarea.add-example-has-linebreak-source {
position: relative;
z-index: 1;
background-color: transparent !important;
}
/* The ↵ marker itself, placed after each line followed by a linebreak */
.add-example-linebreak-mark {
background-color: var(--wikt-palette-yellow6, #ac6600);
color: var(--wikt-palette-white, #fff);
border-radius: 2px;
}
562j1n43jdakrppa5c3k3j3vcdpa8mp
6342719
6342717
2026-08-26T17:23:12Z
Wikihez
7344
6342719
css
text/css
/* Design tokens shared with the "Entry wizard" redesign, so gadgets read as one site: warm parchment card
palette, Spectral/IBM Plex Sans/IBM Plex Mono type, no drop shadows, pill-shaped action buttons. */
@import url('https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,300;0,400;0,600;1,400&family=IBM+Plex+Sans:ital,wght@0,400;0,500;0,600;1,400&family=IBM+Plex+Mono:wght@400;500&display=swap');
:root {
--wikt-ae-font-sans: 'IBM Plex Sans', system-ui, sans-serif;
--wikt-ae-font-mono: 'IBM Plex Mono', monospace;
--wikt-ae-card-bg: #fffdf8;
--wikt-ae-card-border: #e6dfd2;
--wikt-ae-divider: #efe8db;
--wikt-ae-input-border: #cfc7b8;
--wikt-ae-input-bg: #fff;
--wikt-ae-text: #1c1a17;
--wikt-ae-text-body: #4a453d;
--wikt-ae-text-label: #3d3830;
--wikt-ae-text-muted: #8a8378;
--wikt-ae-text-placeholder: #b3ab9e;
--wikt-ae-accent: #2a5db0;
--wikt-ae-accent-hover: #1c4685;
--wikt-ae-accent-bg: #eef2fa;
--wikt-ae-accent-border: #d5def0;
--wikt-ae-destructive: #9c3a28;
--wikt-ae-section-bg: #fbf8f1;
}
html.skin-theme-clientpref-night {
--wikt-ae-card-bg: var(--background-color-base, #101418);
--wikt-ae-card-border: rgba(255, 255, 255, 0.08);
--wikt-ae-divider: rgba(255, 255, 255, 0.06);
--wikt-ae-input-border: rgba(255, 255, 255, 0.2);
--wikt-ae-input-bg: rgba(255, 255, 255, 0.04);
--wikt-ae-text: #f0ece4;
--wikt-ae-text-body: #cfc7b8;
--wikt-ae-text-label: #e4ddd0;
--wikt-ae-text-muted: #a89f8f;
--wikt-ae-text-placeholder: #6b6459;
--wikt-ae-accent: #6ea1e0;
--wikt-ae-accent-hover: #8fb6e8;
--wikt-ae-accent-bg: rgba(110, 161, 224, 0.15);
--wikt-ae-accent-border: rgba(110, 161, 224, 0.35);
--wikt-ae-destructive: #d97a63;
--wikt-ae-section-bg: rgba(255, 255, 255, 0.03);
}
/* {{bênimûne}}'s own "Nimûneyekê bide" prompt is redundant once this gadget's own button renders in its place */
.mw-parser-output li:has(> .benimune) {
display: none;
}
.add-example-form .oo-ui-inputWidget-input {
font-family: var(--wikt-ae-font-sans) !important;
}
.add-example-form .add-example-fieldset {
margin-bottom: 1em;
}
/* Form panel: card with border and radius, no shadow (matches the Entry wizard "no shadows" rule) */
.add-example-form {
width: 100%;
box-sizing: border-box;
margin-top: 0.5em;
padding: 1.25em;
font-family: var(--wikt-ae-font-sans);
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-card-border);
border-radius: 14px;
background-color: var(--wikt-ae-card-bg);
}
/* Title shown in place of the "add example" link while its form is open */
.add-example-form-title {
font-family: var(--wikt-ae-font-sans);
font-weight: 600;
font-size: 13.5px;
color: var(--wikt-ae-text-label);
}
/* Field labels: consistent weight/size/color across all OOUI FieldLayouts in the form */
.add-example-form .oo-ui-fieldLayout-header label {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
font-weight: 500;
color: var(--wikt-ae-text-label);
}
/* Text inputs: shared border/radius/background, focus ring instead of OOUI's default */
.add-example-form .oo-ui-textInputWidget input,
.add-example-form .oo-ui-textInputWidget textarea {
border-color: var(--wikt-ae-input-border) !important;
border-radius: 10px !important;
background-color: var(--wikt-ae-input-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input:focus,
.add-example-form .oo-ui-textInputWidget textarea:focus {
border-color: var(--wikt-ae-accent) !important;
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input {
min-height: 44px;
}
/* Action buttons: pill-shaped, accent-colored to match the Entry wizard's Bişîne/secondary buttons */
.add-example-form .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
border-radius: 999px !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent) !important;
border-color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary:hover .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-hover) !important;
border-color: var(--wikt-ae-accent-hover) !important;
}
.add-example-form .oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive:not(.oo-ui-flaggedElement-primary) .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-bg) !important;
border-color: var(--wikt-ae-accent-border) !important;
color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
color: var(--wikt-ae-destructive) !important;
}
/* Two-column top section: example text left, source type/link right; collapses to one column below 640px */
.add-example-top-grid {
display: grid;
grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
gap: 16px 20px;
align-items: start;
}
.add-example-top-col {
display: flex;
flex-direction: column;
gap: 12px;
min-width: 0; /* lets long unbreakable text shrink instead of overflowing */
}
/* URL input and Citoid fetch button, each on its own line */
.add-example-url-row {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 8px;
}
.add-example-url-row .oo-ui-textInputWidget {
width: 100%;
}
.add-example-url-row .add-example-citoid-fetch {
align-self: flex-start;
}
.add-example-citoid-success {
font-size: 0.92em;
color: var(--wikt-palette-green6, #14866d);
}
/* Source-info section: "Malûmatên çavkaniyê" header + the jêder-* fields grid */
.add-example-jeder-section {
border-top: 1px solid var(--wikt-ae-divider);
background-color: var(--wikt-ae-section-bg);
padding: 1em 1.25em;
margin: 0.75em -1.25em 0; /* bleeds tint to the panel's side edges only */
}
.add-example-jeder-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 0.6em;
}
/* Section eyebrow style, matching the Entry wizard's small-caps section labels */
.add-example-jeder-header-label {
font-family: var(--wikt-ae-font-mono);
font-size: 11px;
letter-spacing: 0.12em;
color: var(--wikt-ae-text-muted);
}
.add-example-jeder-header .add-example-citoid-clear {
font-size: 12px;
}
.add-example-jeder-header .add-example-citoid-clear .oo-ui-iconElement-icon {
min-width: 14px;
min-height: 14px;
background-size: 14px;
}
/* jêder-* template fields: 12-column grid, each field spans its own jederDefs[key].span columns */
.add-example-jeder-fields {
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: 4px 12px;
align-items: start;
}
.add-example-jeder-fields .oo-ui-fieldLayout {
min-width: 0; /* lets a field shrink below its content's natural width */
margin-top: 0 !important; /* overrides OOUI's own stacking margin, not wanted between fields sharing a grid row */
}
.add-example-field-span-1 { grid-column: span 1; }
.add-example-field-span-2 { grid-column: span 2; }
.add-example-field-span-3 { grid-column: span 3; }
.add-example-field-span-4 { grid-column: span 4; }
.add-example-field-span-5 { grid-column: span 5; }
.add-example-field-span-6 { grid-column: span 6; }
.add-example-field-span-12 { grid-column: span 12; }
.add-example-jeder-fields .oo-ui-fieldLayout-header label {
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget {
max-width: 100%;
width: 100%;
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget input,
.add-example-jeder-fields .oo-ui-textInputWidget textarea {
font-size: 0.95em;
padding: 4px 8px;
min-height: 2.2em;
line-height: 1.4;
resize: vertical;
}
/* Kategorî:Çavkanî template search picker (search/filter interaction ported from Wiki/start.js's own
"__category__" picker); its result fields reuse .add-example-jeder-fields (see above) for the grid. */
.add-example-cat-tpl-picker {
/* Without this it's a bare 1-column item in the parent's 12-col grid -- see _renderCategoryTemplatePicker. */
grid-column: span 12;
}
.add-example-cat-tpl-search-row {
position: relative;
}
.add-example-cat-tpl-input {
display: block;
width: 100%;
box-sizing: border-box;
padding: 6px 10px;
font-family: var(--wikt-ae-font-sans);
font-size: 0.95em;
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-input-border);
border-radius: 10px;
background-color: var(--wikt-ae-input-bg);
}
.add-example-cat-tpl-input:focus {
outline: none;
border-color: var(--wikt-ae-accent);
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg);
}
.add-example-cat-tpl-results {
position: absolute;
z-index: 10;
top: 100%;
left: 0;
right: 0;
margin: 4px 0 0;
padding: 4px 0;
list-style: none;
max-height: 16em;
overflow-y: auto;
border: 1px solid var(--wikt-ae-card-border);
border-radius: 10px;
background-color: var(--wikt-ae-card-bg);
}
.add-example-cat-tpl-results li {
margin: 0;
padding: 5px 10px;
font-size: 0.92em;
cursor: pointer;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.add-example-cat-tpl-results li:hover {
background-color: var(--wikt-ae-accent-bg);
}
.add-example-cat-tpl-status {
display: block;
font-size: 0.82em;
color: var(--wikt-ae-text-muted);
margin-top: 4px;
}
.add-example-cat-tpl-fields {
margin-top: 0.75em;
}
/* Larger font for the top-section textareas than the bibliographic sub-fields below */
.add-example-top-col textarea {
font-size: 1.05em;
}
/* Bottom action row: Biweşîne + hint, spacer, Paqij bike, Betal bike */
.add-example-main-buttons {
display: flex;
align-items: center;
margin-top: 0.75em;
padding-top: 0.75em;
border-top: 1px solid var(--wikt-ae-divider);
gap: 0.5em;
flex-wrap: wrap; /* keep buttons from overflowing on narrow screens */
}
.add-example-ready-hint {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-text-muted);
}
.add-example-title-bold-hint {
display: block;
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-destructive);
margin-top: 0.35em;
}
.add-example-buttons-spacer {
flex: 1 1 auto;
}
/* CSS-only loading spinner, matches dark/light mode */
.add-example-spinner {
display: inline-block;
width: 1.2em;
height: 1.2em;
vertical-align: middle;
border: 2px solid var(--wikt-ae-input-border);
border-top-color: var(--wikt-ae-accent);
border-radius: 50%;
animation: add-example-spin 0.8s linear infinite;
}
@keyframes add-example-spin {
to { transform: rotate(360deg); }
}
/* Narrow screens: collapse the top grid to one column */
@media (max-width: 640px) {
.add-example-top-grid {
grid-template-columns: 1fr;
}
}
/* Small screens: tighter padding, jêder-fields grid drops to 2 columns */
@media (max-width: 480px) {
.add-example-form {
padding: 0.75em;
}
.add-example-jeder-section {
margin-left: -0.75em;
margin-right: -0.75em;
}
.add-example-jeder-fields {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.add-example-jeder-fields [class*="add-example-field-span-"] {
grid-column: span 1;
}
.add-example-jeder-fields .add-example-field-span-12,
.add-example-jeder-fields .add-example-cat-tpl-picker {
grid-column: span 2;
}
}
/* Warns when the example/translation/transcription text has a literal linebreak */
.add-example-form textarea.add-example-has-linebreak {
border-color: var(--wikt-palette-yellow6, #ac6600) !important;
}
/* Backdrop mirrors the textarea's text with a marker at each linebreak; metrics synced from the textarea via JS */
.add-example-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;
display: none;
}
/* Textarea sits above its backdrop with a transparent background so the marker shows through */
.add-example-form textarea.add-example-has-linebreak-source {
position: relative;
z-index: 1;
background-color: transparent !important;
}
/* The ↵ marker itself, placed after each line followed by a linebreak */
.add-example-linebreak-mark {
background-color: var(--wikt-palette-yellow6, #ac6600);
color: var(--wikt-palette-white, #fff);
border-radius: 2px;
}
pgxwsot4ygfkhi8df1yi317ql8w7lud
6342722
6342719
2026-08-26T17:29:09Z
Wikihez
7344
6342722
css
text/css
/* Design tokens shared with the "Entry wizard" redesign, so gadgets read as one site: warm parchment card
palette, Spectral/IBM Plex Sans/IBM Plex Mono type, no drop shadows, pill-shaped action buttons. */
@import url('https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,300;0,400;0,600;1,400&family=IBM+Plex+Sans:ital,wght@0,400;0,500;0,600;1,400&family=IBM+Plex+Mono:wght@400;500&display=swap');
:root {
--wikt-ae-font-sans: 'IBM Plex Sans', system-ui, sans-serif;
--wikt-ae-font-mono: 'IBM Plex Mono', monospace;
--wikt-ae-card-bg: #fffdf8;
--wikt-ae-card-border: #e6dfd2;
--wikt-ae-divider: #efe8db;
--wikt-ae-input-border: #cfc7b8;
--wikt-ae-input-bg: #fff;
--wikt-ae-text: #1c1a17;
--wikt-ae-text-body: #4a453d;
--wikt-ae-text-label: #3d3830;
--wikt-ae-text-muted: #8a8378;
--wikt-ae-text-placeholder: #b3ab9e;
--wikt-ae-accent: #2a5db0;
--wikt-ae-accent-hover: #1c4685;
--wikt-ae-accent-bg: #eef2fa;
--wikt-ae-accent-border: #d5def0;
--wikt-ae-destructive: #9c3a28;
--wikt-ae-section-bg: #fbf8f1;
}
html.skin-theme-clientpref-night {
--wikt-ae-card-bg: var(--background-color-base, #101418);
--wikt-ae-card-border: rgba(255, 255, 255, 0.08);
--wikt-ae-divider: rgba(255, 255, 255, 0.06);
--wikt-ae-input-border: rgba(255, 255, 255, 0.2);
--wikt-ae-input-bg: rgba(255, 255, 255, 0.04);
--wikt-ae-text: #f0ece4;
--wikt-ae-text-body: #cfc7b8;
--wikt-ae-text-label: #e4ddd0;
--wikt-ae-text-muted: #a89f8f;
--wikt-ae-text-placeholder: #6b6459;
--wikt-ae-accent: #6ea1e0;
--wikt-ae-accent-hover: #8fb6e8;
--wikt-ae-accent-bg: rgba(110, 161, 224, 0.15);
--wikt-ae-accent-border: rgba(110, 161, 224, 0.35);
--wikt-ae-destructive: #d97a63;
--wikt-ae-section-bg: rgba(255, 255, 255, 0.03);
}
/* {{bênimûne}}'s own "Nimûneyekê bide" prompt is redundant once this gadget's own button renders in its place */
.mw-parser-output li:has(> .benimune) {
display: none;
}
.add-example-form .oo-ui-inputWidget-input {
font-family: var(--wikt-ae-font-sans) !important;
}
.add-example-form .add-example-fieldset {
margin-bottom: 1em;
}
/* Form panel: card with border and radius, no shadow (matches the Entry wizard "no shadows" rule) */
.add-example-form {
width: 100%;
box-sizing: border-box;
margin-top: 0.5em;
padding: 1.25em;
font-family: var(--wikt-ae-font-sans);
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-card-border);
border-radius: 14px;
background-color: var(--wikt-ae-card-bg);
}
/* Title shown in place of the "add example" link while its form is open */
.add-example-form-title {
font-family: var(--wikt-ae-font-sans);
font-weight: 600;
font-size: 13.5px;
color: var(--wikt-ae-text-label);
}
/* Field labels: consistent weight/size/color across all OOUI FieldLayouts in the form */
.add-example-form .oo-ui-fieldLayout-header label {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
font-weight: 500;
color: var(--wikt-ae-text-label);
}
/* Text inputs: shared border/radius/background, focus ring instead of OOUI's default */
.add-example-form .oo-ui-textInputWidget input,
.add-example-form .oo-ui-textInputWidget textarea {
border-color: var(--wikt-ae-input-border) !important;
border-radius: 10px !important;
background-color: var(--wikt-ae-input-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input:focus,
.add-example-form .oo-ui-textInputWidget textarea:focus {
border-color: var(--wikt-ae-accent) !important;
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input {
min-height: 44px;
}
/* Action buttons: pill-shaped, accent-colored to match the Entry wizard's Bişîne/secondary buttons */
.add-example-form .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
border-radius: 999px !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent) !important;
border-color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary:hover .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-hover) !important;
border-color: var(--wikt-ae-accent-hover) !important;
}
.add-example-form .oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive:not(.oo-ui-flaggedElement-primary) .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-bg) !important;
border-color: var(--wikt-ae-accent-border) !important;
color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
color: var(--wikt-ae-destructive) !important;
}
/* Two-column top section: example text left, source type/link right; collapses to one column below 640px */
.add-example-top-grid {
display: grid;
grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
gap: 16px 20px;
align-items: start;
}
.add-example-top-col {
display: flex;
flex-direction: column;
gap: 12px;
min-width: 0; /* lets long unbreakable text shrink instead of overflowing */
}
/* URL input and Citoid fetch button, each on its own line */
.add-example-url-row {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 8px;
}
.add-example-url-row .oo-ui-textInputWidget {
width: 100%;
}
.add-example-url-row .add-example-citoid-fetch {
align-self: flex-start;
}
.add-example-citoid-success {
font-size: 0.92em;
color: var(--wikt-palette-green6, #14866d);
}
/* Source-info section: "Malûmatên çavkaniyê" header + the jêder-* fields grid */
.add-example-jeder-section {
border-top: 1px solid var(--wikt-ae-divider);
background-color: var(--wikt-ae-section-bg);
padding: 1em 1.25em;
margin: 0.75em -1.25em 0; /* bleeds tint to the panel's side edges only */
}
.add-example-jeder-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 0.6em;
}
/* Section eyebrow style, matching the Entry wizard's small-caps section labels */
.add-example-jeder-header-label {
font-family: var(--wikt-ae-font-mono);
font-size: 11px;
letter-spacing: 0.12em;
color: var(--wikt-ae-text-muted);
}
.add-example-jeder-header .add-example-citoid-clear {
font-size: 12px;
}
.add-example-jeder-header .add-example-citoid-clear .oo-ui-iconElement-icon {
min-width: 14px;
min-height: 14px;
background-size: 14px;
}
/* jêder-* template fields: 12-column grid, each field spans its own jederDefs[key].span columns */
.add-example-jeder-fields {
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: 4px 12px;
align-items: start;
}
.add-example-jeder-fields .oo-ui-fieldLayout {
min-width: 0; /* lets a field shrink below its content's natural width */
margin-top: 0 !important; /* overrides OOUI's own stacking margin, not wanted between fields sharing a grid row */
}
.add-example-field-span-1 { grid-column: span 1; }
.add-example-field-span-2 { grid-column: span 2; }
.add-example-field-span-3 { grid-column: span 3; }
.add-example-field-span-4 { grid-column: span 4; }
.add-example-field-span-5 { grid-column: span 5; }
.add-example-field-span-6 { grid-column: span 6; }
.add-example-field-span-12 { grid-column: span 12; }
.add-example-jeder-fields .oo-ui-fieldLayout-header label {
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget {
max-width: 100%;
width: 100%;
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget input,
.add-example-jeder-fields .oo-ui-textInputWidget textarea {
font-size: 0.95em;
padding: 4px 8px;
min-height: 2.2em;
line-height: 1.4;
resize: vertical;
}
/* Kategorî:Çavkanî template search picker (search/filter interaction ported from Wiki/start.js's own
"__category__" picker); its result fields reuse .add-example-jeder-fields (see above) for the grid. */
.add-example-cat-tpl-picker {
/* Without this it's a bare 1-column item in the parent's 12-col grid -- see _renderCategoryTemplatePicker. */
grid-column: span 12;
}
.add-example-cat-tpl-search-row {
position: relative;
}
.add-example-cat-tpl-input {
display: block;
width: 100%;
box-sizing: border-box;
padding: 6px 10px;
font-family: var(--wikt-ae-font-sans);
font-size: 0.95em;
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-input-border);
border-radius: 10px;
background-color: var(--wikt-ae-input-bg);
}
.add-example-cat-tpl-input:focus {
outline: none;
border-color: var(--wikt-ae-accent);
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg);
}
.add-example-cat-tpl-results {
position: absolute;
z-index: 10;
top: 100%;
left: 0;
right: 0;
margin: 4px 0 0;
padding: 4px 0;
list-style: none;
max-height: 16em;
overflow-y: auto;
border: 1px solid var(--wikt-ae-card-border);
border-radius: 10px;
background-color: var(--wikt-ae-card-bg);
}
.add-example-cat-tpl-results li {
margin: 0;
padding: 5px 10px;
font-size: 0.92em;
cursor: pointer;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.add-example-cat-tpl-results li:hover {
background-color: var(--wikt-ae-accent-bg);
}
/* Marks a redirect entry with where it actually resolves to (see showResults() in the JS) */
.add-example-cat-tpl-redirect-arrow {
color: var(--wikt-ae-text-muted);
font-size: 0.9em;
}
.add-example-cat-tpl-status {
display: block;
font-size: 0.82em;
color: var(--wikt-ae-text-muted);
margin-top: 4px;
}
.add-example-cat-tpl-fields {
margin-top: 0.75em;
}
/* Larger font for the top-section textareas than the bibliographic sub-fields below */
.add-example-top-col textarea {
font-size: 1.05em;
}
/* Bottom action row: Biweşîne + hint, spacer, Paqij bike, Betal bike */
.add-example-main-buttons {
display: flex;
align-items: center;
margin-top: 0.75em;
padding-top: 0.75em;
border-top: 1px solid var(--wikt-ae-divider);
gap: 0.5em;
flex-wrap: wrap; /* keep buttons from overflowing on narrow screens */
}
.add-example-ready-hint {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-text-muted);
}
.add-example-title-bold-hint {
display: block;
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-destructive);
margin-top: 0.35em;
}
.add-example-buttons-spacer {
flex: 1 1 auto;
}
/* CSS-only loading spinner, matches dark/light mode */
.add-example-spinner {
display: inline-block;
width: 1.2em;
height: 1.2em;
vertical-align: middle;
border: 2px solid var(--wikt-ae-input-border);
border-top-color: var(--wikt-ae-accent);
border-radius: 50%;
animation: add-example-spin 0.8s linear infinite;
}
@keyframes add-example-spin {
to { transform: rotate(360deg); }
}
/* Narrow screens: collapse the top grid to one column */
@media (max-width: 640px) {
.add-example-top-grid {
grid-template-columns: 1fr;
}
}
/* Small screens: tighter padding, jêder-fields grid drops to 2 columns */
@media (max-width: 480px) {
.add-example-form {
padding: 0.75em;
}
.add-example-jeder-section {
margin-left: -0.75em;
margin-right: -0.75em;
}
.add-example-jeder-fields {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.add-example-jeder-fields [class*="add-example-field-span-"] {
grid-column: span 1;
}
.add-example-jeder-fields .add-example-field-span-12,
.add-example-jeder-fields .add-example-cat-tpl-picker {
grid-column: span 2;
}
}
/* Warns when the example/translation/transcription text has a literal linebreak */
.add-example-form textarea.add-example-has-linebreak {
border-color: var(--wikt-palette-yellow6, #ac6600) !important;
}
/* Backdrop mirrors the textarea's text with a marker at each linebreak; metrics synced from the textarea via JS */
.add-example-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;
display: none;
}
/* Textarea sits above its backdrop with a transparent background so the marker shows through */
.add-example-form textarea.add-example-has-linebreak-source {
position: relative;
z-index: 1;
background-color: transparent !important;
}
/* The ↵ marker itself, placed after each line followed by a linebreak */
.add-example-linebreak-mark {
background-color: var(--wikt-palette-yellow6, #ac6600);
color: var(--wikt-palette-white, #fff);
border-radius: 2px;
}
6txv8mfmxz2eyhfyrayyburvbv411kh
6342724
6342722
2026-08-26T17:45:19Z
Wikihez
7344
6342724
css
text/css
/* Design tokens shared with the "Entry wizard" redesign, so gadgets read as one site: warm parchment card
palette, Spectral/IBM Plex Sans/IBM Plex Mono type, no drop shadows, pill-shaped action buttons. */
@import url('https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,300;0,400;0,600;1,400&family=IBM+Plex+Sans:ital,wght@0,400;0,500;0,600;1,400&family=IBM+Plex+Mono:wght@400;500&display=swap');
:root {
--wikt-ae-font-sans: 'IBM Plex Sans', system-ui, sans-serif;
--wikt-ae-font-mono: 'IBM Plex Mono', monospace;
--wikt-ae-card-bg: #fffdf8;
--wikt-ae-card-border: #e6dfd2;
--wikt-ae-divider: #efe8db;
--wikt-ae-input-border: #cfc7b8;
--wikt-ae-input-bg: #fff;
--wikt-ae-text: #1c1a17;
--wikt-ae-text-body: #4a453d;
--wikt-ae-text-label: #3d3830;
--wikt-ae-text-muted: #8a8378;
--wikt-ae-text-placeholder: #b3ab9e;
--wikt-ae-accent: #2a5db0;
--wikt-ae-accent-hover: #1c4685;
--wikt-ae-accent-bg: #eef2fa;
--wikt-ae-accent-border: #d5def0;
--wikt-ae-destructive: #9c3a28;
--wikt-ae-section-bg: #fbf8f1;
}
html.skin-theme-clientpref-night {
--wikt-ae-card-bg: var(--background-color-base, #101418);
--wikt-ae-card-border: rgba(255, 255, 255, 0.08);
--wikt-ae-divider: rgba(255, 255, 255, 0.06);
--wikt-ae-input-border: rgba(255, 255, 255, 0.2);
--wikt-ae-input-bg: rgba(255, 255, 255, 0.04);
--wikt-ae-text: #f0ece4;
--wikt-ae-text-body: #cfc7b8;
--wikt-ae-text-label: #e4ddd0;
--wikt-ae-text-muted: #a89f8f;
--wikt-ae-text-placeholder: #6b6459;
--wikt-ae-accent: #6ea1e0;
--wikt-ae-accent-hover: #8fb6e8;
--wikt-ae-accent-bg: rgba(110, 161, 224, 0.15);
--wikt-ae-accent-border: rgba(110, 161, 224, 0.35);
--wikt-ae-destructive: #d97a63;
--wikt-ae-section-bg: rgba(255, 255, 255, 0.03);
}
/* {{bênimûne}}'s own "Nimûneyekê bide" prompt is redundant once this gadget's own button renders in its place */
.mw-parser-output li:has(> .benimune) {
display: none;
}
.add-example-form .oo-ui-inputWidget-input {
font-family: var(--wikt-ae-font-sans) !important;
}
.add-example-form .add-example-fieldset {
margin-bottom: 1em;
}
/* Form panel: card with border and radius, no shadow (matches the Entry wizard "no shadows" rule) */
.add-example-form {
width: 100%;
box-sizing: border-box;
margin-top: 0.5em;
padding: 1.25em;
font-family: var(--wikt-ae-font-sans);
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-card-border);
border-radius: 14px;
background-color: var(--wikt-ae-card-bg);
}
/* Title shown in place of the "add example" link while its form is open */
.add-example-form-title {
font-family: var(--wikt-ae-font-sans);
font-weight: 600;
font-size: 13.5px;
color: var(--wikt-ae-text-label);
}
/* Field labels: consistent weight/size/color across all OOUI FieldLayouts in the form */
.add-example-form .oo-ui-fieldLayout-header label {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
font-weight: 500;
color: var(--wikt-ae-text-label);
}
/* Text inputs: shared border/radius/background, focus ring instead of OOUI's default */
.add-example-form .oo-ui-textInputWidget input,
.add-example-form .oo-ui-textInputWidget textarea {
border-color: var(--wikt-ae-input-border) !important;
border-radius: 10px !important;
background-color: var(--wikt-ae-input-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input:focus,
.add-example-form .oo-ui-textInputWidget textarea:focus {
border-color: var(--wikt-ae-accent) !important;
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input {
min-height: 44px;
}
/* Action buttons: pill-shaped, accent-colored to match the Entry wizard's Bişîne/secondary buttons */
.add-example-form .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
border-radius: 999px !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent) !important;
border-color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary:hover .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-hover) !important;
border-color: var(--wikt-ae-accent-hover) !important;
}
.add-example-form .oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive:not(.oo-ui-flaggedElement-primary) .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-bg) !important;
border-color: var(--wikt-ae-accent-border) !important;
color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
color: var(--wikt-ae-destructive) !important;
}
/* Two-column top section: example text left, source type/link right; collapses to one column below 640px */
.add-example-top-grid {
display: grid;
grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
gap: 16px 20px;
align-items: start;
}
.add-example-top-col {
display: flex;
flex-direction: column;
gap: 12px;
min-width: 0; /* lets long unbreakable text shrink instead of overflowing */
}
/* URL input and Citoid fetch button, each on its own line */
.add-example-url-row {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 8px;
}
.add-example-url-row .oo-ui-textInputWidget {
width: 100%;
}
.add-example-url-row .add-example-citoid-fetch {
align-self: flex-start;
}
.add-example-citoid-success {
font-size: 0.92em;
color: var(--wikt-palette-green6, #14866d);
}
/* Source-info section: "Malûmatên çavkaniyê" header + the jêder-* fields grid */
.add-example-jeder-section {
border-top: 1px solid var(--wikt-ae-divider);
background-color: var(--wikt-ae-section-bg);
padding: 1em 1.25em;
margin: 0.75em -1.25em 0; /* bleeds tint to the panel's side edges only */
}
.add-example-jeder-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 0.6em;
}
/* Section eyebrow style, matching the Entry wizard's small-caps section labels */
.add-example-jeder-header-label {
font-family: var(--wikt-ae-font-mono);
font-size: 11px;
letter-spacing: 0.12em;
color: var(--wikt-ae-text-muted);
}
.add-example-jeder-header .add-example-citoid-clear {
font-size: 12px;
}
.add-example-jeder-header .add-example-citoid-clear .oo-ui-iconElement-icon {
min-width: 14px;
min-height: 14px;
background-size: 14px;
}
/* jêder-* template fields: 12-column grid, each field spans its own jederDefs[key].span columns */
.add-example-jeder-fields {
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: 4px 12px;
align-items: start;
}
.add-example-jeder-fields .oo-ui-fieldLayout {
min-width: 0; /* lets a field shrink below its content's natural width */
margin-top: 0 !important; /* overrides OOUI's own stacking margin, not wanted between fields sharing a grid row */
}
.add-example-field-span-1 { grid-column: span 1; }
.add-example-field-span-2 { grid-column: span 2; }
.add-example-field-span-3 { grid-column: span 3; }
.add-example-field-span-4 { grid-column: span 4; }
.add-example-field-span-5 { grid-column: span 5; }
.add-example-field-span-6 { grid-column: span 6; }
.add-example-field-span-12 { grid-column: span 12; }
.add-example-jeder-fields .oo-ui-fieldLayout-header label {
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget {
max-width: 100%;
width: 100%;
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget input,
.add-example-jeder-fields .oo-ui-textInputWidget textarea {
font-size: 0.95em;
padding: 4px 8px;
min-height: 2.2em;
line-height: 1.4;
resize: vertical;
}
/* Kategorî:Çavkanî template search picker (search/filter interaction ported from Wiki/start.js's own
"__category__" picker); its result fields reuse .add-example-jeder-fields (see above) for the grid. */
.add-example-cat-tpl-picker {
/* Without this it's a bare 1-column item in the parent's 12-col grid -- see _renderCategoryTemplatePicker. */
grid-column: span 12;
}
.add-example-cat-tpl-search-row {
position: relative;
}
.add-example-cat-tpl-input {
display: block;
width: 100%;
box-sizing: border-box;
padding: 6px 10px;
font-family: var(--wikt-ae-font-sans);
font-size: 0.95em;
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-input-border);
border-radius: 10px;
background-color: var(--wikt-ae-input-bg);
}
.add-example-cat-tpl-input:focus {
outline: none;
border-color: var(--wikt-ae-accent);
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg);
}
.add-example-cat-tpl-results {
position: absolute;
z-index: 10;
top: 100%;
left: 0;
right: 0;
margin: 4px 0 0;
padding: 4px 0;
list-style: none;
max-height: 16em;
overflow-y: auto;
border: 1px solid var(--wikt-ae-card-border);
border-radius: 10px;
background-color: var(--wikt-ae-card-bg);
}
.add-example-cat-tpl-results li {
margin: 0;
padding: 5px 10px;
font-size: 0.92em;
cursor: pointer;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.add-example-cat-tpl-results li:hover {
background-color: var(--wikt-ae-accent-bg);
}
/* Marks a redirect entry with where it actually resolves to (see showResults() in the JS) */
.add-example-cat-tpl-redirect-arrow {
color: var(--wikt-ae-text-muted);
font-size: 0.9em;
}
.add-example-cat-tpl-status {
display: block;
font-size: 0.82em;
color: var(--wikt-ae-text-muted);
margin-top: 4px;
}
.add-example-cat-tpl-fields {
margin-top: 0.75em;
}
/* Larger font for the top-section textareas than the bibliographic sub-fields below */
.add-example-top-col textarea {
font-size: 1.05em;
}
/* Bottom action row: Biweşîne + hint, spacer, Paqij bike, Betal bike */
.add-example-main-buttons {
display: flex;
align-items: center;
margin-top: 0.75em;
padding-top: 0.75em;
border-top: 1px solid var(--wikt-ae-divider);
gap: 0.5em;
flex-wrap: wrap; /* keep buttons from overflowing on narrow screens */
}
.add-example-ready-hint {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-text-muted);
}
.add-example-title-bold-hint {
display: block;
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-destructive);
margin-top: 0.35em;
}
.add-example-buttons-spacer {
flex: 1 1 auto;
}
/* CSS-only loading spinner, matches dark/light mode */
.add-example-spinner {
display: inline-block;
width: 1.2em;
height: 1.2em;
vertical-align: middle;
border: 2px solid var(--wikt-ae-input-border);
border-top-color: var(--wikt-ae-accent);
border-radius: 50%;
animation: add-example-spin 0.8s linear infinite;
}
@keyframes add-example-spin {
to { transform: rotate(360deg); }
}
/* Narrow screens: collapse the top grid to one column */
@media (max-width: 640px) {
.add-example-top-grid {
grid-template-columns: 1fr;
}
}
/* Small screens: tighter padding, jêder-fields grid drops to 2 columns */
@media (max-width: 480px) {
.add-example-form {
padding: 0.75em;
}
.add-example-jeder-section {
margin-left: -0.75em;
margin-right: -0.75em;
}
.add-example-jeder-fields {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.add-example-jeder-fields [class*="add-example-field-span-"] {
grid-column: span 1;
}
.add-example-jeder-fields .add-example-field-span-12,
.add-example-jeder-fields .add-example-cat-tpl-picker {
grid-column: span 2;
}
}
/* Custom drag-to-resize grip for textareas (see makeManualResizable in the JS, ported from Wiki/start.js) --
Safari has no native corner resize handle on textareas at all, this is the fix for that. */
.add-example-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-ae-text-muted) 50% 100%);
background-repeat: no-repeat;
}
.add-example-resize-grip:hover,
.add-example-resize-grip:active {
opacity: 0.9;
}
/* Warns when the example/translation/transcription text has a literal linebreak */
.add-example-form textarea.add-example-has-linebreak {
border-color: var(--wikt-palette-yellow6, #ac6600) !important;
}
/* Backdrop mirrors the textarea's text with a marker at each linebreak; metrics synced from the textarea via JS */
.add-example-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;
display: none;
}
/* Textarea sits above its backdrop with a transparent background so the marker shows through */
.add-example-form textarea.add-example-has-linebreak-source {
position: relative;
z-index: 1;
background-color: transparent !important;
}
/* The ↵ marker itself, placed after each line followed by a linebreak */
.add-example-linebreak-mark {
background-color: var(--wikt-palette-yellow6, #ac6600);
color: var(--wikt-palette-white, #fff);
border-radius: 2px;
}
4omqiceksjxgsi9c67vx3x9lpb30n8i
6342727
6342724
2026-08-26T17:58:41Z
Wikihez
7344
6342727
css
text/css
/* Design tokens shared with the "Entry wizard" redesign, so gadgets read as one site: warm parchment card
palette, Spectral/IBM Plex Sans/IBM Plex Mono type, no drop shadows, pill-shaped action buttons. */
@import url('https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,300;0,400;0,600;1,400&family=IBM+Plex+Sans:ital,wght@0,400;0,500;0,600;1,400&family=IBM+Plex+Mono:wght@400;500&display=swap');
:root {
--wikt-ae-font-sans: 'IBM Plex Sans', system-ui, sans-serif;
--wikt-ae-font-mono: 'IBM Plex Mono', monospace;
--wikt-ae-card-bg: #fffdf8;
--wikt-ae-card-border: #e6dfd2;
--wikt-ae-divider: #efe8db;
--wikt-ae-input-border: #cfc7b8;
--wikt-ae-input-bg: #fff;
--wikt-ae-text: #1c1a17;
--wikt-ae-text-body: #4a453d;
--wikt-ae-text-label: #3d3830;
--wikt-ae-text-muted: #8a8378;
--wikt-ae-text-placeholder: #b3ab9e;
--wikt-ae-accent: #2a5db0;
--wikt-ae-accent-hover: #1c4685;
--wikt-ae-accent-bg: #eef2fa;
--wikt-ae-accent-border: #d5def0;
--wikt-ae-destructive: #9c3a28;
--wikt-ae-section-bg: #fbf8f1;
}
html.skin-theme-clientpref-night {
--wikt-ae-card-bg: var(--background-color-base, #101418);
--wikt-ae-card-border: rgba(255, 255, 255, 0.08);
--wikt-ae-divider: rgba(255, 255, 255, 0.06);
--wikt-ae-input-border: rgba(255, 255, 255, 0.2);
--wikt-ae-input-bg: rgba(255, 255, 255, 0.04);
--wikt-ae-text: #f0ece4;
--wikt-ae-text-body: #cfc7b8;
--wikt-ae-text-label: #e4ddd0;
--wikt-ae-text-muted: #a89f8f;
--wikt-ae-text-placeholder: #6b6459;
--wikt-ae-accent: #6ea1e0;
--wikt-ae-accent-hover: #8fb6e8;
--wikt-ae-accent-bg: rgba(110, 161, 224, 0.15);
--wikt-ae-accent-border: rgba(110, 161, 224, 0.35);
--wikt-ae-destructive: #d97a63;
--wikt-ae-section-bg: rgba(255, 255, 255, 0.03);
}
/* {{bênimûne}}'s own "Nimûneyekê bide" prompt is redundant once this gadget's own button renders in its place */
.mw-parser-output li:has(> .benimune) {
display: none;
}
.add-example-form .oo-ui-inputWidget-input {
font-family: var(--wikt-ae-font-sans) !important;
}
.add-example-form .add-example-fieldset {
margin-bottom: 1em;
}
/* Form panel: card with border and radius, no shadow (matches the Entry wizard "no shadows" rule) */
.add-example-form {
width: 100%;
box-sizing: border-box;
margin-top: 0.5em;
padding: 1.25em;
font-family: var(--wikt-ae-font-sans);
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-card-border);
border-radius: 14px;
background-color: var(--wikt-ae-card-bg);
}
/* Title shown in place of the "add example" link while its form is open */
.add-example-form-title {
font-family: var(--wikt-ae-font-sans);
font-weight: 600;
font-size: 13.5px;
color: var(--wikt-ae-text-label);
}
/* Field labels: consistent weight/size/color across all OOUI FieldLayouts in the form */
.add-example-form .oo-ui-fieldLayout-header label {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
font-weight: 500;
color: var(--wikt-ae-text-label);
}
/* Text inputs: shared border/radius/background, focus ring instead of OOUI's default */
.add-example-form .oo-ui-textInputWidget input,
.add-example-form .oo-ui-textInputWidget textarea {
border-color: var(--wikt-ae-input-border) !important;
border-radius: 10px !important;
background-color: var(--wikt-ae-input-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input:focus,
.add-example-form .oo-ui-textInputWidget textarea:focus {
border-color: var(--wikt-ae-accent) !important;
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input {
min-height: 44px;
}
/* Action buttons: pill-shaped, accent-colored to match the Entry wizard's Bişîne/secondary buttons */
.add-example-form .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
border-radius: 999px !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent) !important;
border-color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary:hover .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-hover) !important;
border-color: var(--wikt-ae-accent-hover) !important;
}
.add-example-form .oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive:not(.oo-ui-flaggedElement-primary) .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-bg) !important;
border-color: var(--wikt-ae-accent-border) !important;
color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
color: var(--wikt-ae-destructive) !important;
}
/* Two-column top section: example text left, source type/link right; collapses to one column below 640px */
.add-example-top-grid {
display: grid;
grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
gap: 16px 20px;
align-items: start;
}
.add-example-top-col {
display: flex;
flex-direction: column;
gap: 12px;
min-width: 0; /* lets long unbreakable text shrink instead of overflowing */
}
/* URL input and Citoid fetch button, each on its own line */
.add-example-url-row {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 8px;
}
.add-example-url-row .oo-ui-textInputWidget {
width: 100%;
}
.add-example-url-row .add-example-citoid-fetch {
align-self: flex-start;
}
.add-example-citoid-success {
font-size: 0.92em;
color: var(--wikt-palette-green6, #14866d);
}
/* Source-info section: "Malûmatên çavkaniyê" header + the jêder-* fields grid */
.add-example-jeder-section {
border-top: 1px solid var(--wikt-ae-divider);
background-color: var(--wikt-ae-section-bg);
padding: 1em 1.25em;
margin: 0.75em -1.25em 0; /* bleeds tint to the panel's side edges only */
}
.add-example-jeder-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 0.6em;
}
/* Section eyebrow style, matching the Entry wizard's small-caps section labels */
.add-example-jeder-header-label {
font-family: var(--wikt-ae-font-mono);
font-size: 11px;
letter-spacing: 0.12em;
color: var(--wikt-ae-text-muted);
}
.add-example-jeder-header .add-example-citoid-clear {
font-size: 12px;
}
.add-example-jeder-header .add-example-citoid-clear .oo-ui-iconElement-icon {
min-width: 14px;
min-height: 14px;
background-size: 14px;
}
/* jêder-* template fields: 12-column grid, each field spans its own jederDefs[key].span columns */
.add-example-jeder-fields {
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: 4px 12px;
align-items: start;
}
.add-example-jeder-fields .oo-ui-fieldLayout {
min-width: 0; /* lets a field shrink below its content's natural width */
margin-top: 0 !important; /* overrides OOUI's own stacking margin, not wanted between fields sharing a grid row */
}
.add-example-field-span-1 { grid-column: span 1; }
.add-example-field-span-2 { grid-column: span 2; }
.add-example-field-span-3 { grid-column: span 3; }
.add-example-field-span-4 { grid-column: span 4; }
.add-example-field-span-5 { grid-column: span 5; }
.add-example-field-span-6 { grid-column: span 6; }
.add-example-field-span-12 { grid-column: span 12; }
.add-example-jeder-fields .oo-ui-fieldLayout-header label {
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget {
max-width: 100%;
width: 100%;
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget input,
.add-example-jeder-fields .oo-ui-textInputWidget textarea {
font-size: 0.95em;
padding: 4px 8px;
min-height: 2.2em;
line-height: 1.4;
resize: vertical;
}
/* Kategorî:Çavkanî template search box (search/filter interaction ported from Wiki/start.js's own "__category__"
picker) -- sits in the top-right column directly under the source-type dropdown, not in the jêder-fields grid;
its picked template's own fields append into .add-example-jeder-fields (see above) like any other template. */
.add-example-cat-tpl-search-row {
position: relative; /* anchors .add-example-cat-tpl-results directly under the input */
}
.add-example-cat-tpl-input {
display: block;
width: 100%;
box-sizing: border-box;
padding: 6px 10px;
font-family: var(--wikt-ae-font-sans);
font-size: 0.95em;
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-input-border);
border-radius: 10px;
background-color: var(--wikt-ae-input-bg);
}
.add-example-cat-tpl-input:focus {
outline: none;
border-color: var(--wikt-ae-accent);
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg);
}
.add-example-cat-tpl-results {
position: absolute;
z-index: 10;
top: 100%;
left: 0;
right: 0;
margin: 4px 0 0;
padding: 4px 0;
list-style: none;
max-height: 16em;
overflow-y: auto;
border: 1px solid var(--wikt-ae-card-border);
border-radius: 10px;
background-color: var(--wikt-ae-card-bg);
}
.add-example-cat-tpl-results li {
margin: 0;
padding: 5px 10px;
font-size: 0.92em;
cursor: pointer;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.add-example-cat-tpl-results li:hover {
background-color: var(--wikt-ae-accent-bg);
}
/* Marks a redirect entry with where it actually resolves to (see showResults() in the JS) */
.add-example-cat-tpl-redirect-arrow {
color: var(--wikt-ae-text-muted);
font-size: 0.9em;
}
.add-example-cat-tpl-status {
display: block;
font-size: 0.82em;
color: var(--wikt-ae-text-muted);
margin-top: 4px;
}
/* Larger font for the top-section textareas than the bibliographic sub-fields below */
.add-example-top-col textarea {
font-size: 1.05em;
}
/* Bottom action row: Biweşîne + hint, spacer, Paqij bike, Betal bike */
.add-example-main-buttons {
display: flex;
align-items: center;
margin-top: 0.75em;
padding-top: 0.75em;
border-top: 1px solid var(--wikt-ae-divider);
gap: 0.5em;
flex-wrap: wrap; /* keep buttons from overflowing on narrow screens */
}
.add-example-ready-hint {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-text-muted);
}
.add-example-title-bold-hint {
display: block;
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-destructive);
margin-top: 0.35em;
}
.add-example-buttons-spacer {
flex: 1 1 auto;
}
/* CSS-only loading spinner, matches dark/light mode */
.add-example-spinner {
display: inline-block;
width: 1.2em;
height: 1.2em;
vertical-align: middle;
border: 2px solid var(--wikt-ae-input-border);
border-top-color: var(--wikt-ae-accent);
border-radius: 50%;
animation: add-example-spin 0.8s linear infinite;
}
@keyframes add-example-spin {
to { transform: rotate(360deg); }
}
/* Narrow screens: collapse the top grid to one column */
@media (max-width: 640px) {
.add-example-top-grid {
grid-template-columns: 1fr;
}
}
/* Small screens: tighter padding, jêder-fields grid drops to 2 columns */
@media (max-width: 480px) {
.add-example-form {
padding: 0.75em;
}
.add-example-jeder-section {
margin-left: -0.75em;
margin-right: -0.75em;
}
.add-example-jeder-fields {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.add-example-jeder-fields [class*="add-example-field-span-"] {
grid-column: span 1;
}
.add-example-jeder-fields .add-example-field-span-12 {
grid-column: span 2;
}
}
/* Custom drag-to-resize grip for textareas (see makeManualResizable in the JS, ported from Wiki/start.js) --
Safari has no native corner resize handle on textareas at all, this is the fix for that. */
.add-example-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-ae-text-muted) 50% 100%);
background-repeat: no-repeat;
}
.add-example-resize-grip:hover,
.add-example-resize-grip:active {
opacity: 0.9;
}
/* Warns when the example/translation/transcription text has a literal linebreak */
.add-example-form textarea.add-example-has-linebreak {
border-color: var(--wikt-palette-yellow6, #ac6600) !important;
}
/* Backdrop mirrors the textarea's text with a marker at each linebreak; metrics synced from the textarea via JS */
.add-example-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;
display: none;
}
/* Textarea sits above its backdrop with a transparent background so the marker shows through */
.add-example-form textarea.add-example-has-linebreak-source {
position: relative;
z-index: 1;
background-color: transparent !important;
}
/* The ↵ marker itself, placed after each line followed by a linebreak */
.add-example-linebreak-mark {
background-color: var(--wikt-palette-yellow6, #ac6600);
color: var(--wikt-palette-white, #fff);
border-radius: 2px;
}
aah8o5ly8o0b47dixgnexeyv07c6ebd
6342838
6342727
2026-08-27T07:07:45Z
Wikihez
7344
6342838
css
text/css
/* Design tokens shared with the "Entry wizard" redesign, so gadgets read as one site: warm parchment card
palette, Spectral/IBM Plex Sans/IBM Plex Mono type, no drop shadows, pill-shaped action buttons. */
@import url('https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,300;0,400;0,600;1,400&family=IBM+Plex+Sans:ital,wght@0,400;0,500;0,600;1,400&family=IBM+Plex+Mono:wght@400;500&display=swap');
:root {
--wikt-ae-font-sans: 'IBM Plex Sans', system-ui, sans-serif;
--wikt-ae-font-mono: 'IBM Plex Mono', monospace;
--wikt-ae-card-bg: #fffdf8;
--wikt-ae-card-border: #e6dfd2;
--wikt-ae-divider: #efe8db;
--wikt-ae-input-border: #cfc7b8;
--wikt-ae-input-bg: #fff;
--wikt-ae-text: #1c1a17;
--wikt-ae-text-body: #4a453d;
--wikt-ae-text-label: #3d3830;
--wikt-ae-text-muted: #8a8378;
--wikt-ae-text-placeholder: #b3ab9e;
--wikt-ae-accent: #2a5db0;
--wikt-ae-accent-hover: #1c4685;
--wikt-ae-accent-bg: #eef2fa;
--wikt-ae-accent-border: #d5def0;
--wikt-ae-destructive: #9c3a28;
--wikt-ae-section-bg: #fbf8f1;
}
html.skin-theme-clientpref-night {
--wikt-ae-card-bg: var(--background-color-base, #101418);
--wikt-ae-card-border: rgba(255, 255, 255, 0.08);
--wikt-ae-divider: rgba(255, 255, 255, 0.06);
--wikt-ae-input-border: rgba(255, 255, 255, 0.2);
--wikt-ae-input-bg: rgba(255, 255, 255, 0.04);
--wikt-ae-text: #f0ece4;
--wikt-ae-text-body: #cfc7b8;
--wikt-ae-text-label: #e4ddd0;
--wikt-ae-text-muted: #a89f8f;
--wikt-ae-text-placeholder: #6b6459;
--wikt-ae-accent: #6ea1e0;
--wikt-ae-accent-hover: #8fb6e8;
--wikt-ae-accent-bg: rgba(110, 161, 224, 0.15);
--wikt-ae-accent-border: rgba(110, 161, 224, 0.35);
--wikt-ae-destructive: #d97a63;
--wikt-ae-section-bg: rgba(255, 255, 255, 0.03);
}
/* {{bênimûne}}'s own "Nimûneyekê bide" prompt is redundant once this gadget's own button renders in its place */
.mw-parser-output li:has(> .benimune) {
display: none;
}
.add-example-form .oo-ui-inputWidget-input {
font-family: var(--wikt-ae-font-sans) !important;
}
.add-example-form .add-example-fieldset {
margin-bottom: 1em;
}
/* Form panel: card with border and radius, no shadow (matches the Entry wizard "no shadows" rule) */
.add-example-form {
width: 100%;
box-sizing: border-box;
margin-top: 0.5em;
padding: 1.25em;
font-family: var(--wikt-ae-font-sans);
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-card-border);
border-radius: 14px;
background-color: var(--wikt-ae-card-bg);
}
/* Title shown in place of the "add example" link while its form is open */
.add-example-form-title {
font-family: var(--wikt-ae-font-sans);
font-weight: 600;
font-size: 13.5px;
color: var(--wikt-ae-text-label);
}
/* Field labels: consistent weight/size/color across all OOUI FieldLayouts in the form */
.add-example-form .oo-ui-fieldLayout-header label {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
font-weight: 500;
color: var(--wikt-ae-text-label);
}
/* Text inputs: shared border/radius/background, focus ring instead of OOUI's default */
.add-example-form .oo-ui-textInputWidget input,
.add-example-form .oo-ui-textInputWidget textarea {
border-color: var(--wikt-ae-input-border) !important;
border-radius: 10px !important;
background-color: var(--wikt-ae-input-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input:focus,
.add-example-form .oo-ui-textInputWidget textarea:focus {
border-color: var(--wikt-ae-accent) !important;
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg) !important;
}
.add-example-form .oo-ui-textInputWidget input {
min-height: 44px;
}
/* Action buttons: pill-shaped, accent-colored to match the Entry wizard's Bişîne/secondary buttons */
.add-example-form .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
border-radius: 999px !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent) !important;
border-color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-progressive.oo-ui-flaggedElement-primary:hover .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-hover) !important;
border-color: var(--wikt-ae-accent-hover) !important;
}
.add-example-form .oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive:not(.oo-ui-flaggedElement-primary) .oo-ui-buttonElement-button {
background-color: var(--wikt-ae-accent-bg) !important;
border-color: var(--wikt-ae-accent-border) !important;
color: var(--wikt-ae-accent) !important;
}
.add-example-form .oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
color: var(--wikt-ae-destructive) !important;
}
/* Two-column top section: example text left, source type/link right; collapses to one column below 640px */
.add-example-top-grid {
display: grid;
grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
gap: 16px 20px;
align-items: start;
}
.add-example-top-col {
display: flex;
flex-direction: column;
gap: 12px;
min-width: 0; /* lets long unbreakable text shrink instead of overflowing */
}
/* URL input and Citoid fetch button, each on its own line */
.add-example-url-row {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 8px;
}
.add-example-url-row .oo-ui-textInputWidget {
width: 100%;
}
.add-example-url-row .add-example-citoid-fetch {
align-self: flex-start;
}
.add-example-citoid-success {
font-size: 0.92em;
color: var(--wikt-palette-green6, #14866d);
}
/* Source-info section: "Malûmatên çavkaniyê" header + the jêder-* fields grid */
.add-example-jeder-section {
border-top: 1px solid var(--wikt-ae-divider);
background-color: var(--wikt-ae-section-bg);
padding: 1em 1.25em;
margin: 0.75em -1.25em 0; /* bleeds tint to the panel's side edges only */
}
.add-example-jeder-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 0.6em;
}
/* Section eyebrow style, matching the Entry wizard's small-caps section labels */
.add-example-jeder-header-label {
font-family: var(--wikt-ae-font-mono);
font-size: 11px;
letter-spacing: 0.12em;
color: var(--wikt-ae-text-muted);
}
.add-example-jeder-header .add-example-citoid-clear {
font-size: 12px;
}
.add-example-jeder-header .add-example-citoid-clear .oo-ui-iconElement-icon {
min-width: 14px;
min-height: 14px;
background-size: 14px;
}
/* jêder-* template fields: 12-column grid, each field spans its own jederDefs[key].span columns */
.add-example-jeder-fields {
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: 4px 12px;
align-items: start;
}
.add-example-jeder-fields .oo-ui-fieldLayout {
min-width: 0; /* lets a field shrink below its content's natural width */
margin-top: 0 !important; /* overrides OOUI's own stacking margin, not wanted between fields sharing a grid row */
}
.add-example-field-span-1 { grid-column: span 1; }
.add-example-field-span-2 { grid-column: span 2; }
.add-example-field-span-3 { grid-column: span 3; }
.add-example-field-span-4 { grid-column: span 4; }
.add-example-field-span-5 { grid-column: span 5; }
.add-example-field-span-6 { grid-column: span 6; }
.add-example-field-span-12 { grid-column: span 12; }
.add-example-jeder-fields .oo-ui-fieldLayout-header label {
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget {
max-width: 100%;
width: 100%;
font-size: 0.95em;
}
.add-example-jeder-fields .oo-ui-textInputWidget input,
.add-example-jeder-fields .oo-ui-textInputWidget textarea {
font-size: 0.95em;
padding: 4px 8px;
min-height: 2.2em;
line-height: 1.4;
resize: vertical;
}
/* Kategorî:Çavkanî template search box (search/filter interaction ported from Wiki/start.js's own "__category__"
picker) -- sits in the top-right column directly under the source-type dropdown, not in the jêder-fields grid;
its picked template's own fields append into .add-example-jeder-fields (see above) like any other template. */
.add-example-cat-tpl-search-row {
position: relative; /* anchors .add-example-cat-tpl-results directly under the input */
}
.add-example-cat-tpl-input {
display: block;
width: 100%;
box-sizing: border-box;
padding: 6px 10px;
font-family: var(--wikt-ae-font-sans);
font-size: 0.95em;
color: var(--wikt-ae-text);
border: 1px solid var(--wikt-ae-input-border);
border-radius: 10px;
background-color: var(--wikt-ae-input-bg);
}
.add-example-cat-tpl-input:focus {
outline: none;
border-color: var(--wikt-ae-accent);
box-shadow: 0 0 0 3px var(--wikt-ae-accent-bg);
}
.add-example-cat-tpl-results {
position: absolute;
z-index: 10;
top: 100%;
left: 0;
right: 0;
margin: 4px 0 0;
padding: 4px 0;
list-style: none;
max-height: 16em;
overflow-y: auto;
border: 1px solid var(--wikt-ae-card-border);
border-radius: 10px;
background-color: var(--wikt-ae-card-bg);
}
.add-example-cat-tpl-results li {
display: flex;
align-items: center;
gap: 6px;
margin: 0;
padding: 5px 8px 5px 10px;
font-size: 0.92em;
cursor: pointer;
}
.add-example-cat-tpl-results li:hover {
background-color: var(--wikt-ae-accent-bg);
}
.add-example-cat-tpl-text {
flex: 1 1 auto;
min-width: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
/* Marks a redirect entry with where it actually resolves to (see showResults() in the JS) */
.add-example-cat-tpl-redirect-arrow {
color: var(--wikt-ae-text-muted);
font-size: 0.9em;
}
/* "Verify the template" link -- opens the template's own wiki page in a new tab, same 🔗 affordance
Wiki/start.js/util.js use in their own searchable dropdowns (see tplPageUrl in the JS). */
.add-example-cat-tpl-link {
flex: 0 0 auto;
display: grid;
place-items: center;
width: 22px;
height: 22px;
border-radius: 6px;
font-size: 11px;
line-height: 1;
text-decoration: none;
border: 1px solid var(--wikt-ae-accent-border);
background-color: var(--wikt-ae-accent-bg);
color: var(--wikt-ae-accent);
}
.add-example-cat-tpl-link:hover {
border-color: var(--wikt-ae-accent);
}
.add-example-cat-tpl-status {
display: block;
font-size: 0.82em;
color: var(--wikt-ae-text-muted);
margin-top: 4px;
}
/* Larger font for the top-section textareas than the bibliographic sub-fields below */
.add-example-top-col textarea {
font-size: 1.05em;
}
/* Bottom action row: Biweşîne + hint, spacer, Paqij bike, Betal bike */
.add-example-main-buttons {
display: flex;
align-items: center;
margin-top: 0.75em;
padding-top: 0.75em;
border-top: 1px solid var(--wikt-ae-divider);
gap: 0.5em;
flex-wrap: wrap; /* keep buttons from overflowing on narrow screens */
}
.add-example-ready-hint {
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-text-muted);
}
.add-example-title-bold-hint {
display: block;
font-family: var(--wikt-ae-font-sans);
font-size: 12.5px;
color: var(--wikt-ae-destructive);
margin-top: 0.35em;
}
.add-example-buttons-spacer {
flex: 1 1 auto;
}
/* CSS-only loading spinner, matches dark/light mode */
.add-example-spinner {
display: inline-block;
width: 1.2em;
height: 1.2em;
vertical-align: middle;
border: 2px solid var(--wikt-ae-input-border);
border-top-color: var(--wikt-ae-accent);
border-radius: 50%;
animation: add-example-spin 0.8s linear infinite;
}
@keyframes add-example-spin {
to { transform: rotate(360deg); }
}
/* Narrow screens: collapse the top grid to one column */
@media (max-width: 640px) {
.add-example-top-grid {
grid-template-columns: 1fr;
}
}
/* Small screens: tighter padding, jêder-fields grid drops to 2 columns */
@media (max-width: 480px) {
.add-example-form {
padding: 0.75em;
}
.add-example-jeder-section {
margin-left: -0.75em;
margin-right: -0.75em;
}
.add-example-jeder-fields {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.add-example-jeder-fields [class*="add-example-field-span-"] {
grid-column: span 1;
}
.add-example-jeder-fields .add-example-field-span-12 {
grid-column: span 2;
}
}
/* Custom drag-to-resize grip for textareas (see makeManualResizable in the JS, ported from Wiki/start.js) --
Safari has no native corner resize handle on textareas at all, this is the fix for that. */
.add-example-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-ae-text-muted) 50% 100%);
background-repeat: no-repeat;
}
.add-example-resize-grip:hover,
.add-example-resize-grip:active {
opacity: 0.9;
}
/* Warns when the example/translation/transcription text has a literal linebreak */
.add-example-form textarea.add-example-has-linebreak {
border-color: var(--wikt-palette-yellow6, #ac6600) !important;
}
/* Backdrop mirrors the textarea's text with a marker at each linebreak; metrics synced from the textarea via JS */
.add-example-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;
display: none;
}
/* Textarea sits above its backdrop with a transparent background so the marker shows through */
.add-example-form textarea.add-example-has-linebreak-source {
position: relative;
z-index: 1;
background-color: transparent !important;
}
/* The ↵ marker itself, placed after each line followed by a linebreak */
.add-example-linebreak-mark {
background-color: var(--wikt-palette-yellow6, #ac6600);
color: var(--wikt-palette-white, #fff);
border-radius: 2px;
}
rs8xami625sp4cqxd8h4llafqn8t14v
Şablon:J:Shamdinani Stories I:2026
10
1357905
6342864
6334495
2026-08-27T07:58:12Z
Wikihez
7344
6342864
wikitext
text/x-wiki
{{{{#if:{{{jêgirtin|{{{jg|}}}}}}|jêder-}}kitêb|ku<!--
-->|jêgirtin={{{jêgirtin|{{{jg|}}}}}}<!--
-->|rûpel={{{rûpel|{{{r|}}}}}}<!--
-->|nivîskar=Mela Seîd Şemdînanî|amadekar={{zim|en|{{w|David N. MacKenzie}}}}; {{w|Ergin Öpengin}}|sernav=en:Shamdinani Stories I|weşanxane=en:Brill|cih=en:Leiden|sal=~1915|serî=en:Brill Kurdish Studies|cild=3|sala weşandinê=2026|çap=|isbn=978-90-04-75443-0|url=https://brill.com/edcollbook-oa/title/74006?language=en}}<noinclude>{{jgcat|ku}}<templatedata>
{
"params": {
"rûpel": {
"aliases": [
"r"
]
}
},
"description": "Mela Seîd Şemdînanî, Amadekar: David N. MacKenzie; Ergin Öpengin Shamdinani Stories I"
}
</templatedata></noinclude>
abs1gctzi26opdln2r13g5rt4lpomzf
Şablon:Jêgirtin/Celadet Alî Bedirxan/HAWAR Cild 1 Hejmar 1-23 (1932-1933)/1998
10
1358633
6342774
6334455
2026-08-26T20:29:09Z
Wikihez
7344
Hedefa beralîkirinê ji [[Şablon:J:Hawar:1998:1]] ber bi [[Şablon:J:Hawar:1:1998]] ve guhart
6342774
wikitext
text/x-wiki
#BERALÎKIRIN [[Şablon:J:Hawar:1:1998]]
k1a0pb01s4zfnasml1ih91dpfs5flya
Şablon:Jêgirtin/Celadet Alî Bedirxan/HAWAR Cild 2 Hejmar 24-57 (1934-1943)/1998
10
1358634
6342776
6334461
2026-08-26T20:29:47Z
Wikihez
7344
Hedefa beralîkirinê ji [[Şablon:J:Hawar:1998:2]] ber bi [[Şablon:J:Hawar:2:1998]] ve guhart
6342776
wikitext
text/x-wiki
#BERALÎKIRIN [[Şablon:J:Hawar:2:1998]]
7a9u26knin03q05wxs47042jz9na0y6
Şablon:Hawar:1998:2
10
1358635
6342777
6334460
2026-08-26T20:29:56Z
Wikihez
7344
Hedefa beralîkirinê ji [[Şablon:J:Hawar:1998:2]] ber bi [[Şablon:J:Hawar:2:1998]] ve guhart
6342777
wikitext
text/x-wiki
#BERALÎKIRIN [[Şablon:J:Hawar:2:1998]]
7a9u26knin03q05wxs47042jz9na0y6
Şablon:Ferhenga Destî
10
1358847
6342702
2026-08-26T14:12:12Z
Wikihez
7344
Wikihezî/ê navê [[Şablon:Ferhenga Destî]] weke [[Şablon:Ç:Demîrhan:Ferhenga Destî]] guhart
6342702
wikitext
text/x-wiki
#BERALÎKIRIN [[Şablon:Ç:Demîrhan:Ferhenga Destî]]
0ruvjoe0zumefrvhjkkzgf2rjagbzam
Gotûbêja şablonê:Ferhenga Destî
11
1358848
6342704
2026-08-26T14:12:12Z
Wikihez
7344
Wikihezî/ê navê [[Gotûbêja şablonê:Ferhenga Destî]] weke [[Gotûbêja şablonê:Ç:Demîrhan:Ferhenga Destî]] guhart
6342704
wikitext
text/x-wiki
#BERALÎKIRIN [[Gotûbêja şablonê:Ç:Demîrhan:Ferhenga Destî]]
ju6f636ef7joe1qaunvxl10kv6j7bjj
دڵسۆز
0
1358849
6342707
2026-08-26T14:22:51Z
Rûpel bi "== {{ziman|ckb}} == === Rengdêr === {{rengdêr|ckb}} # [[dilsoz]], [[wefadar]], [[dilgerm]] (kesê ku di kar, hevaltî an baweriya xwe de dilpak, pêbawer e) #: {{mînak|ckb|ئەو کارمەندێکی زۆر دڵسۆز و چالاکە.|tr=Ew karmendêkî zor dillsoz u çalake.|werger=Ew karmendekî pir dilsoz û çalak e.}} #: {{mînak|ckb|هاوڕێی دڵسۆز گەنجینەیەکی گەورەی ژیانە.|tr=Hawrêy dillsoz gencîneyekî gewrey jiyane.|werg..." hat çêkirin
6342707
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Rengdêr ===
{{rengdêr|ckb}}
# [[dilsoz]], [[wefadar]], [[dilgerm]] (kesê ku di kar, hevaltî an baweriya xwe de dilpak, pêbawer e)
#: {{mînak|ckb|ئەو کارمەندێکی زۆر دڵسۆز و چالاکە.|tr=Ew karmendêkî zor dillsoz u çalake.|werger=Ew karmendekî pir dilsoz û çalak e.}}
#: {{mînak|ckb|هاوڕێی دڵسۆز گەنجینەیەکی گەورەی ژیانە.|tr=Hawrêy dillsoz gencîneyekî gewrey jiyane.|werger=Hevalê dilsoz xezîneyeke mezin a jiyanê ye.}}
==== Dijmane ====
* {{g|ckb|بێوەفا}}
* {{g|ckb|دووڕوو}}
* {{g|ckb|ناپاک}}
==== Hevmane ====
* {{g|ckb|وەفادار}}
* {{g|ckb|پاکدڵ}}
* {{g|ckb|ئەمین}}
==== Têkildar ====
* {{g|ckb|دڵسۆزی}}
* {{g|ckb|وەفا}}
* {{g|ckb|دڵ}}
kmmvqmfnrw3do1cmzy75udav2vu112o
6342708
6342707
2026-08-26T14:41:09Z
Balyozbot
7867
[[Special:PermanentLink/6298023|Bot]]: rêzkirina beşan
6342708
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Rengdêr ===
{{rengdêr|ckb}}
# [[dilsoz]], [[wefadar]], [[dilgerm]] (kesê ku di kar, hevaltî an baweriya xwe de dilpak, pêbawer e)
#: {{mînak|ckb|ئەو کارمەندێکی زۆر دڵسۆز و چالاکە.|tr=Ew karmendêkî zor dillsoz u çalake.|werger=Ew karmendekî pir dilsoz û çalak e.}}
#: {{mînak|ckb|هاوڕێی دڵسۆز گەنجینەیەکی گەورەی ژیانە.|tr=Hawrêy dillsoz gencîneyekî gewrey jiyane.|werger=Hevalê dilsoz xezîneyeke mezin a jiyanê ye.}}
==== Hevmane ====
* {{g|ckb|وەفادار}}
* {{g|ckb|پاکدڵ}}
* {{g|ckb|ئەمین}}
==== Dijmane ====
* {{g|ckb|بێوەفا}}
* {{g|ckb|دووڕوو}}
* {{g|ckb|ناپاک}}
==== Têkildar ====
* {{g|ckb|دڵسۆزی}}
* {{g|ckb|وەفا}}
* {{g|ckb|دڵ}}
a5bbpnkrpx0dt9j8z2n6exa3vjpzw70
کاریگەری
0
1358850
6342711
2026-08-26T16:08:49Z
Rûpel bi "== {{ziman|ckb}} == === Navdêr === {{navdêr|ckb}} # [[bandor]], [[tesîr]] (hêz an şiyana guherandina reftar, nêrîn an rewşa kesekî an tiştekî din) #: {{mînak|ckb|تۆڕە کۆمەڵایەتییەکان کاریگەرییەکی گەورەیان لەسەر گەنجان هەیە.|tr=Torre komellayetîyekan karîgerîyekî gewreyan leser gencan heye.|werger=Torên civakî bandoreke mezin li ser ciwanan dikin.}} # [[şop]], [[encam]] (encam an guherîna ku..." hat çêkirin
6342711
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb}}
# [[bandor]], [[tesîr]] (hêz an şiyana guherandina reftar, nêrîn an rewşa kesekî an tiştekî din)
#: {{mînak|ckb|تۆڕە کۆمەڵایەتییەکان کاریگەرییەکی گەورەیان لەسەر گەنجان هەیە.|tr=Torre komellayetîyekan karîgerîyekî gewreyan leser gencan heye.|werger=Torên civakî bandoreke mezin li ser ciwanan dikin.}}
# [[şop]], [[encam]] (encam an guherîna ku piştî rûdan, derman an bûyerekê derdikeve holê)
#: {{mînak|ckb|پزیشکەکە لەبارەی کاریگەرییە لاوەکییەکانی دەرمانەکە هۆشداری دا.|tr=Pizîşkeke lebarey karîgerîye lawekyekanî dermaneke hoşdarî da.|werger=Bijîşk li ser bandorên neyînî (lawekî) yên dermanê hişyarî da.}}
==== Dijmane ====
* {{g|ckb|بێکاریگەری}}
* {{g|ckb|بێسوودی}}
* {{g|ckb|بێدەسەڵاتی}}
==== Hevmane ====
* {{g|ckb|باندۆر}}
* {{g|ckb|تەئسیر}}
* {{g|ckb|شوێنەوار}}
* {{g|ckb|دەسەڵات}}
==== Têkildar ====
* {{g|ckb|کاریگەر}}
* {{g|ckb|بێکاریگەر}}
* {{g|ckb|کارلێک}}
* {{g|ckb|کارلێککردن}}
96n3q4e5oma998yu84d7djsfapkjaef
6342713
6342711
2026-08-26T16:41:12Z
Balyozbot
7867
[[Special:PermanentLink/6298023|Bot]]: rêzkirina beşan
6342713
wikitext
text/x-wiki
== {{ziman|ckb}} ==
=== Navdêr ===
{{navdêr|ckb}}
# [[bandor]], [[tesîr]] (hêz an şiyana guherandina reftar, nêrîn an rewşa kesekî an tiştekî din)
#: {{mînak|ckb|تۆڕە کۆمەڵایەتییەکان کاریگەرییەکی گەورەیان لەسەر گەنجان هەیە.|tr=Torre komellayetîyekan karîgerîyekî gewreyan leser gencan heye.|werger=Torên civakî bandoreke mezin li ser ciwanan dikin.}}
# [[şop]], [[encam]] (encam an guherîna ku piştî rûdan, derman an bûyerekê derdikeve holê)
#: {{mînak|ckb|پزیشکەکە لەبارەی کاریگەرییە لاوەکییەکانی دەرمانەکە هۆشداری دا.|tr=Pizîşkeke lebarey karîgerîye lawekyekanî dermaneke hoşdarî da.|werger=Bijîşk li ser bandorên neyînî (lawekî) yên dermanê hişyarî da.}}
==== Hevmane ====
* {{g|ckb|باندۆر}}
* {{g|ckb|تەئسیر}}
* {{g|ckb|شوێنەوار}}
* {{g|ckb|دەسەڵات}}
==== Dijmane ====
* {{g|ckb|بێکاریگەری}}
* {{g|ckb|بێسوودی}}
* {{g|ckb|بێدەسەڵاتی}}
==== Têkildar ====
* {{g|ckb|کاریگەر}}
* {{g|ckb|بێکاریگەر}}
* {{g|ckb|کارلێک}}
* {{g|ckb|کارلێککردن}}
bxsuvq2iky0kpqmenm652ykoonce12r
Şablon:J:Hawar:1998:2
10
1358851
6342769
2026-08-26T20:28:16Z
Wikihez
7344
Wikihezî/ê navê [[Şablon:J:Hawar:1998:2]] weke [[Şablon:J:Hawar:2:1998]] guhart
6342769
wikitext
text/x-wiki
#BERALÎKIRIN [[Şablon:J:Hawar:2:1998]]
7a9u26knin03q05wxs47042jz9na0y6
Şablon:J:Hawar:1998:1
10
1358852
6342771
2026-08-26T20:28:33Z
Wikihez
7344
Wikihezî/ê navê [[Şablon:J:Hawar:1998:1]] weke [[Şablon:J:Hawar:1:1998]] guhart
6342771
wikitext
text/x-wiki
#BERALÎKIRIN [[Şablon:J:Hawar:1:1998]]
k1a0pb01s4zfnasml1ih91dpfs5flya
Şablon:Hawar/nivîskar-switch
10
1358853
6342827
2026-08-27T06:44:42Z
Wikihez
7344
Rûpel bi "{{#switch: {{{1}}} | Herekol Ezîzan | Seydayê Gerok | Mamosteyê Gerok | Cemşîd | Rastedar | Nêrevan | Evîn Cîwelek | Pirsyarkerê Kurdan | Bavê Cemşîd û Sînemxan | Stranvanê Jêliyan | Paşlavjok | Farisîxwîn | Xeberguhêz | C.A.B | Koçerê Botan | Çîrokbêj | Stranvan | Stranvanê Hawarê | Bijarê Segman | Xwedîyê Hawarê = {{w|Celadet Alî Bedirxan|{{{1}}}}} |Osman Sebrî = w:Osman Sebrî | #default = {{{1}}} }}<noinclude>{{belgekirin}}Kat..." hat çêkirin
6342827
wikitext
text/x-wiki
{{#switch: {{{1}}}
| Herekol Ezîzan
| Seydayê Gerok
| Mamosteyê Gerok
| Cemşîd
| Rastedar
| Nêrevan
| Evîn Cîwelek
| Pirsyarkerê Kurdan
| Bavê Cemşîd û Sînemxan
| Stranvanê Jêliyan
| Paşlavjok
| Farisîxwîn
| Xeberguhêz
| C.A.B
| Koçerê Botan
| Çîrokbêj
| Stranvan
| Stranvanê Hawarê
| Bijarê Segman
| Xwedîyê Hawarê
= {{w|Celadet Alî Bedirxan|{{{1}}}}}
|Osman Sebrî = w:Osman Sebrî
| #default = {{{1}}}
}}<noinclude>{{belgekirin}}[[Kategorî:Şablon]]</noinclude>
cruwqhiikfgbywyuegi0of1lnan7712
6342828
6342827
2026-08-27T06:46:16Z
Wikihez
7344
6342828
wikitext
text/x-wiki
{{#switch: {{{1}}}
| Celadet Alî Bedirxan
| Herekol Ezîzan
| Seydayê Gerok
| Mamosteyê Gerok
| Cemşîd
| Rastedar
| Nêrevan
| Evîn Cîwelek
| Pirsyarkerê Kurdan
| Bavê Cemşîd û Sînemxan
| Stranvanê Jêliyan
| Paşlavjok
| Farisîxwîn
| Xeberguhêz
| C.A.B
| Koçerê Botan
| Çîrokbêj
| Stranvan
| Stranvanê Hawarê
| Bijarê Segman
| Xwedîyê Hawarê
= {{w|Celadet Alî Bedirxan|{{{1}}}}}
|Osman Sebrî = w:Osman Sebrî
| #default = {{{1}}}
}}<noinclude>{{belgekirin}}[[Kategorî:Şablon]]</noinclude>
q8v36u9qjb0qvrbt9ye05ugtzj2s3qh
6342830
6342828
2026-08-27T06:55:28Z
Wikihez
7344
6342830
wikitext
text/x-wiki
{{#switch:{{{1}}}
| Celadet Alî Bedirxan
| Herekol Ezîzan
| Seydayê Gerok
| Mamosteyê Gerok
| Cemşîd
| Rastedar
| Nêrevan
| Evîn Cîwelek
| Pirsyarkerê Kurdan
| Bavê Cemşîd û Sînemxan
| Stranvanê Jêliyan
| Paşlavjok
| Farisîxwîn
| Xeberguhêz
|C.A.B
| Koçerê Botan
| Çîrokbêj
| Stranvan
| Stranvanê Hawarê
| Bijarê Segman
| Xwedîyê Hawarê = {{w|Celadet Alî Bedirxan|{{{1}}}}}
|Osman Sebrî = w:Osman Sebrî
| #default = {{{1}}}
}}<noinclude>{{belgekirin}}[[Kategorî:Şablon]]</noinclude>
gbz3uevbiwc74qctfbcn7rw54r08y5d
6342836
6342830
2026-08-27T07:01:43Z
Wikihez
7344
6342836
wikitext
text/x-wiki
{{#switch:{{{1}}}
| Celadet Alî Bedirxan
| Herekol Ezîzan
| Seydayê Gerok
| Mamosteyê Gerok
| Cemşîd
| Rastedar
| Nêrevan
| Evîn Cîwelek
| Pirsyarkerê Kurdan
| Bavê Cemşîd û Sînemxan
| Stranvanê Jêliyan
| Paşlavjok
| Farisîxwîn
| Xeberguhêz
|C.A.B
| Koçerê Botan
| Çîrokbêj
| Stranvan
| Stranvanê Hawarê
| Bijarê Segman
| Xwediyê Hawarê = {{w|Celadet Alî Bedirxan|{{{1}}}}}
|Osman Sebrî = w:Osman Sebrî
| #default = {{{1}}}
}}<noinclude>{{belgekirin}}[[Kategorî:Şablon]]</noinclude>
5izyph8t05v0b2r3doia97a37j90moj
Gotûbêj:firvan
1
1358854
6342853
2026-08-27T07:19:38Z
Wikihez
7344
[[MediaWiki:Gadget-aWa.js/belgekirin|aWa]]: Arşîvkirina nîqaşê ji rûpela [[Wîkîferheng:Daxwazên peyitandinê]]
6342853
wikitext
text/x-wiki
== Nîqaşa [[Wîkîferheng:Daxwazên peyitandinê|peyitandinê]] ==
{{arşîv-ser|dp|failed|link=Taybet:PermanentLink/6340785#firvan}}
{{fake==|1= <s>[[firvan]]</s> }}
Bnr. [[Wîkîferheng:Pîvekên tevlîkirinê|Krîterên tevlîkirinê]] —[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 17:43, 7 tebax 2026 (UTC)
:Ji xeynî Sadallah (ku min xwestibû bû were yasaxkirin [https://ku.wiktionary.org/wiki/W%C3%AEk%C3%AEferheng:D%C3%AEwan/2025#Yasaxkirina_hin_ferhengan] lê me ev tişt nekiribû standardek) û ferhengeke Husein Muhammad ti bikaranîna vê kelîmeyê nîne. Ji ber ku ev made ji hêla @[[Bikarhêner:Ferhengvan|Ferhengvan]] ve hatiye çêkirin, nabe ku em Husein Muhammed ji bo vê madeyê wekî çavkanî bi kar bînin. Loma tenê yek çavkanî heye. [[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 19:11, 7 tebax 2026 (UTC)
:{{nepeyitandî}}--[[Bikarhêner:Wikihez|Wikihez]] ([[Gotûbêja bikarhêner:Wikihez|gotûbêj]]) 21:49, 13 tebax 2026 (UTC)
{{arşîv-bin}}
mtydd97buewfas0gn9tb827sollcoht
ewwelen
0
1358855
6342855
2026-08-27T07:48:40Z
Wikihez
7344
([[Mediawiki:Gadget-start.js|WF:NÛ]] v.2.0) +ku:hoker:
6342855
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Hoker ===
{{hoker|ku}}
# {{mane?|ku}}
#* {{jêder-websîte|ku|jêgirtin=Weke ku Xanî berî niha bi sê qernan îfade kiriye, ji bo qedr û qiymeta ‘ilm û hunerê, kîtab û dîwanê bê zanîn '''ewwelen''' lazim e ku “xudanek” me hebe.|nivîskar=Cihan Turan|sernav=XEMA HEVPAR A XANÎ Û AQTEPÎ: BÊXWEDÎBÛN|websîte=Bangaheq|url=https://bangaheq.comxema-hevpar-a-xan-aqtep-bxwedbn-tr-1226.html/|tarîx=16.03.2024}}
==== Etîmolojî ====
{{ji?|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|en}}: {{W|en|first of all}}
* {{Z|tr}}: {{W|tr|evvelen}}, {{W|tr|öncelikle}}
{{werger-bin}}
7t39pvvcsiid5zqxzthfnoohg9s2n8g
6342856
6342855
2026-08-27T07:49:11Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342856
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Hoker ===
{{hoker|ku}}
# {{mane?|ku}}
#* {{jêder-websîte|ku|jêgirtin=Weke ku Xanî berî niha bi sê qernan îfade kiriye, ji bo qedr û qiymeta ‘ilm û hunerê, kîtab û dîwanê bê zanîn '''ewwelen''' lazim e ku “xudanek” me hebe.|nivîskar=Cihan Turan|sernav=XEMA HEVPAR A XANÎ Û AQTEPÎ: BÊXWEDÎBÛN|websîte=Bangaheq|url=https://bangaheq.comxema-hevpar-a-xan-aqtep-bxwedbn-tr-1226.html/|tarîx=16.03.2024}}
#* {{J:Shamdinani Stories I:2026|rûpel=40|jêgirtin={{...}}şola min '''ewwelen''' saxîya serê cenabê mam rîwî ye.}}
==== Etîmolojî ====
{{ji?|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|en}}: {{W|en|first of all}}
* {{Z|tr}}: {{W|tr|evvelen}}, {{W|tr|öncelikle}}
{{werger-bin}}
1gso2o0rm9l6a280sko6xxv30oz3re6
6342857
6342856
2026-08-27T07:51:35Z
Wikihez
7344
+nimûneya bikaranînê bi amûra « [[Mediawiki:Gadget-wikt.add-examples|Nimûne zêde bike]] » (v2.0).
6342857
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Hoker ===
{{hoker|ku}}
# {{mane?|ku}}
#* {{jêder-websîte|ku|jêgirtin=Weke ku Xanî berî niha bi sê qernan îfade kiriye, ji bo qedr û qiymeta ‘ilm û hunerê, kîtab û dîwanê bê zanîn '''ewwelen''' lazim e ku “xudanek” me hebe.|nivîskar=Cihan Turan|sernav=XEMA HEVPAR A XANÎ Û AQTEPÎ: BÊXWEDÎBÛN|websîte=Bangaheq|url=https://bangaheq.comxema-hevpar-a-xan-aqtep-bxwedbn-tr-1226.html/|tarîx=16.03.2024}}
#* {{J:Shamdinani Stories I:2026|rûpel=40|jêgirtin={{...}}şola min '''ewwelen''' saxîya serê cenabê mam rîwî ye.}}
#* {{jêder-websîte|ku|nivîskar=Yazar Osman SADIKOĞLU|websîte=tevhiddergisi.org.tr|sernav=Bı Mane û Bı Şert û Bı Bergaha Wê ve Lâîlaheîllallâh Taybetîyên Taxut|url=https://tevhiddergisi.org.tr/bi-mane-bi-sert-bi-bergaha-w-ve-l-lahe-llall-h-taybet-y-n-taxut/|tarîx=2020-07-22|jêgirtin='''Ewwelen''', tekfîra taxûtan; di mûcadeleya dijî wan de pêgava yekemîn û îtîraza pergala jêxwarin û marastinê û şîrk û zilma wan e.}}
==== Etîmolojî ====
{{ji?|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|en}}: {{W|en|first of all}}
* {{Z|tr}}: {{W|tr|evvelen}}, {{W|tr|öncelikle}}
{{werger-bin}}
mwey793ahmf4vq0sz64tayjf0jbe0ja
6342858
6342857
2026-08-27T07:54:23Z
Wikihez
7344
/* Hoker */
6342858
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Hoker ===
{{hoker|ku}}
# [[berî|Berî]] her [[tişt|tiştî]].
#* {{jêder-websîte|ku|jêgirtin=Weke ku Xanî berî niha bi sê qernan îfade kiriye, ji bo qedr û qiymeta ‘ilm û hunerê, kîtab û dîwanê bê zanîn '''ewwelen''' lazim e ku “xudanek” me hebe.|nivîskar=Cihan Turan|sernav=Xema Hevpar a Xanî û Aqtepî: Bêxwedîbûn|websîte=Bangaheq|url=https://bangaheq.comxema-hevpar-a-xan-aqtep-bxwedbn-tr-1226.html/|tarîx=16.03.2024}}
#* {{J:Shamdinani Stories I:2026|rûpel=40|jêgirtin={{...}}şola min '''ewwelen''' saxîya serê cenabê mam rîwî ye.}}
#* {{jêder-websîte|ku|nivîskar=Yazar Osman SADIKOĞLU|websîte=tevhiddergisi.org.tr|sernav=Bı Mane û Bı Şert û Bı Bergaha Wê ve Lâîlaheîllallâh Taybetîyên Taxut|url=https://tevhiddergisi.org.tr/bi-mane-bi-sert-bi-bergaha-w-ve-l-lahe-llall-h-taybet-y-n-taxut/|tarîx=2020-07-22|jêgirtin='''Ewwelen''', tekfîra taxûtan; di mûcadeleya dijî wan de pêgava yekemîn û îtîraza pergala jêxwarin û marastinê û şîrk û zilma wan e.}}
==== Etîmolojî ====
{{ji?|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|en}}: {{W|en|first of all}}
* {{Z|tr}}: {{W|tr|evvelen}}, {{W|tr|öncelikle}}
{{werger-bin}}
f4wd047wtawjz6bqumw83i7u1suus8b
6342859
6342858
2026-08-27T07:54:36Z
Wikihez
7344
/* Hoker */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342859
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Hoker ===
{{hoker|ku}}
# [[berî|Berî]] her [[tişt|tiştî]].
#* {{J:Shamdinani Stories I:2026|rûpel=40|jêgirtin={{...}}şola min '''ewwelen''' saxîya serê cenabê mam rîwî ye.}}
#* {{jêder-websîte|ku|jêgirtin=Weke ku Xanî berî niha bi sê qernan îfade kiriye, ji bo qedr û qiymeta ‘ilm û hunerê, kîtab û dîwanê bê zanîn '''ewwelen''' lazim e ku “xudanek” me hebe.|nivîskar=Cihan Turan|sernav=Xema Hevpar a Xanî û Aqtepî: Bêxwedîbûn|websîte=Bangaheq|url=https://bangaheq.comxema-hevpar-a-xan-aqtep-bxwedbn-tr-1226.html/|tarîx=16.03.2024}}
#* {{jêder-websîte|ku|nivîskar=Yazar Osman SADIKOĞLU|websîte=tevhiddergisi.org.tr|sernav=Bı Mane û Bı Şert û Bı Bergaha Wê ve Lâîlaheîllallâh Taybetîyên Taxut|url=https://tevhiddergisi.org.tr/bi-mane-bi-sert-bi-bergaha-w-ve-l-lahe-llall-h-taybet-y-n-taxut/|tarîx=2020-07-22|jêgirtin='''Ewwelen''', tekfîra taxûtan; di mûcadeleya dijî wan de pêgava yekemîn û îtîraza pergala jêxwarin û marastinê û şîrk û zilma wan e.}}
==== Etîmolojî ====
{{ji?|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|en}}: {{W|en|first of all}}
* {{Z|tr}}: {{W|tr|evvelen}}, {{W|tr|öncelikle}}
{{werger-bin}}
3ga5h5r50sttvx2ww2ytpd1ckrrxl42
6342860
6342859
2026-08-27T07:54:44Z
Wikihez
7344
/* Hoker */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342860
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Hoker ===
{{hoker|ku}}
# [[berî|Berî]] her [[tişt|tiştî]].
#* {{J:Shamdinani Stories I:2026|rûpel=40|jêgirtin={{...}}şola min '''ewwelen''' saxîya serê cenabê mam rîwî ye.}}
#* {{jêder-websîte|ku|nivîskar=Yazar Osman SADIKOĞLU|websîte=tevhiddergisi.org.tr|sernav=Bı Mane û Bı Şert û Bı Bergaha Wê ve Lâîlaheîllallâh Taybetîyên Taxut|url=https://tevhiddergisi.org.tr/bi-mane-bi-sert-bi-bergaha-w-ve-l-lahe-llall-h-taybet-y-n-taxut/|tarîx=2020-07-22|jêgirtin='''Ewwelen''', tekfîra taxûtan; di mûcadeleya dijî wan de pêgava yekemîn û îtîraza pergala jêxwarin û marastinê û şîrk û zilma wan e.}}
#* {{jêder-websîte|ku|jêgirtin=Weke ku Xanî berî niha bi sê qernan îfade kiriye, ji bo qedr û qiymeta ‘ilm û hunerê, kîtab û dîwanê bê zanîn '''ewwelen''' lazim e ku “xudanek” me hebe.|nivîskar=Cihan Turan|sernav=Xema Hevpar a Xanî û Aqtepî: Bêxwedîbûn|websîte=Bangaheq|url=https://bangaheq.comxema-hevpar-a-xan-aqtep-bxwedbn-tr-1226.html/|tarîx=16.03.2024}}
==== Etîmolojî ====
{{ji?|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|en}}: {{W|en|first of all}}
* {{Z|tr}}: {{W|tr|evvelen}}, {{W|tr|öncelikle}}
{{werger-bin}}
qzj0kvw1ex0ky90qnx9gz13fly0rlpz
6342861
6342860
2026-08-27T07:55:02Z
Wikihez
7344
6342861
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Hoker ===
{{hoker|ku}}
# [[berî|Berî]] her [[tişt|tiştî]].
#* {{J:Shamdinani Stories I:2026|rûpel=40|jêgirtin={{...}}şola min '''ewwelen''' saxîya serê cenabê mam rîwî ye.}}
#* {{jêder-websîte|ku|nivîskar=Osman Sadikoğlu|websîte=tevhiddergisi.org.tr|sernav=Bı Mane û Bı Şert û Bı Bergaha Wê ve Lâîlaheîllallâh Taybetîyên Taxut|url=https://tevhiddergisi.org.tr/bi-mane-bi-sert-bi-bergaha-w-ve-l-lahe-llall-h-taybet-y-n-taxut/|tarîx=2020-07-22|jêgirtin='''Ewwelen''', tekfîra taxûtan; di mûcadeleya dijî wan de pêgava yekemîn û îtîraza pergala jêxwarin û marastinê û şîrk û zilma wan e.}}
#* {{jêder-websîte|ku|jêgirtin=Weke ku Xanî berî niha bi sê qernan îfade kiriye, ji bo qedr û qiymeta ‘ilm û hunerê, kîtab û dîwanê bê zanîn '''ewwelen''' lazim e ku “xudanek” me hebe.|nivîskar=Cihan Turan|sernav=Xema Hevpar a Xanî û Aqtepî: Bêxwedîbûn|websîte=Bangaheq|url=https://bangaheq.comxema-hevpar-a-xan-aqtep-bxwedbn-tr-1226.html/|tarîx=16.03.2024}}
==== Etîmolojî ====
{{ji?|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|en}}: {{W|en|first of all}}
* {{Z|tr}}: {{W|tr|evvelen}}, {{W|tr|öncelikle}}
{{werger-bin}}
7i0r3b6mf472d6v6gdxc0aczpvepty0
6342862
6342861
2026-08-27T07:55:56Z
Wikihez
7344
/* Hoker */ (bi [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]]ê re)
6342862
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Hoker ===
{{hoker|ku}}
# [[berî|Berî]] her [[tişt|tiştî]].
#* {{J:Shamdinani Stories I:2026|rûpel=40|jêgirtin={{...}}şola min '''ewwelen''' saxîya serê cenabê mam rîwî ye.}}
#* {{jêder-websîte|ku|nivîskar=Osman Sadikoğlu|websîte=tevhiddergisi.org.tr|sernav=Bı Mane û Bı Şert û Bı Bergaha Wê ve Lâîlaheîllallâh Taybetîyên Taxut|url=https://tevhiddergisi.org.tr/bi-mane-bi-sert-bi-bergaha-w-ve-l-lahe-llall-h-taybet-y-n-taxut/|tarîx=2020-07-22|jêgirtin='''Ewwelen''', tekfîra taxûtan; di mûcadeleya dijî wan de pêgava yekemîn û îtîraza pergala jêxwarin û marastinê û şîrk û zilma wan e.}}
#* {{jêder-websîte|ku|jêgirtin=Weke ku Xanî berî niha bi sê qernan îfade kiriye, ji bo qedr û qiymeta ‘ilm û hunerê, kîtab û dîwanê bê zanîn '''ewwelen''' lazim e ku “xudanek” me hebe.|nivîskar=Cihan Turan|sernav=Xema Hevpar a Xanî û Aqtepî: Bêxwedîbûn|websîte=Bangaheq|url=https://bangaheq.com/xema-hevpar-a-xan-aqtep-bxwedbn-tr-1226.html|tarîx=16.03.2024}}
==== Etîmolojî ====
{{ji?|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|en}}: {{W|en|first of all}}
* {{Z|tr}}: {{W|tr|evvelen}}, {{W|tr|öncelikle}}
{{werger-bin}}
64b83zozbbo6ch36m9mqj5138hhh8fs
6342873
6342862
2026-08-27T09:12:20Z
Balyozbot
7867
Bot: Paqijiyên kozmetîk (Lînk paqij kir.)
6342873
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Hoker ===
{{hoker|ku}}
# [[berî|Berî]] her [[tişt]]î.
#* {{J:Shamdinani Stories I:2026|rûpel=40|jêgirtin={{...}}şola min '''ewwelen''' saxîya serê cenabê mam rîwî ye.}}
#* {{jêder-websîte|ku|nivîskar=Osman Sadikoğlu|websîte=tevhiddergisi.org.tr|sernav=Bı Mane û Bı Şert û Bı Bergaha Wê ve Lâîlaheîllallâh Taybetîyên Taxut|url=https://tevhiddergisi.org.tr/bi-mane-bi-sert-bi-bergaha-w-ve-l-lahe-llall-h-taybet-y-n-taxut/|tarîx=2020-07-22|jêgirtin='''Ewwelen''', tekfîra taxûtan; di mûcadeleya dijî wan de pêgava yekemîn û îtîraza pergala jêxwarin û marastinê û şîrk û zilma wan e.}}
#* {{jêder-websîte|ku|jêgirtin=Weke ku Xanî berî niha bi sê qernan îfade kiriye, ji bo qedr û qiymeta ‘ilm û hunerê, kîtab û dîwanê bê zanîn '''ewwelen''' lazim e ku “xudanek” me hebe.|nivîskar=Cihan Turan|sernav=Xema Hevpar a Xanî û Aqtepî: Bêxwedîbûn|websîte=Bangaheq|url=https://bangaheq.com/xema-hevpar-a-xan-aqtep-bxwedbn-tr-1226.html|tarîx=16.03.2024}}
==== Etîmolojî ====
{{ji?|ku}}
==== Werger ====
{{werger-ser}}
* {{Z|en}}: {{W|en|first of all}}
* {{Z|tr}}: {{W|tr|evvelen}}, {{W|tr|öncelikle}}
{{werger-bin}}
a4ab126x3guy08i4y4whvtxkqgp4mxi
demografîk
0
1358856
6342871
2026-08-27T09:08:40Z
Wikihez
7344
([[Mediawiki:Gadget-start.js|WF:NÛ]] v.2.0) +ku:rengdêr:Ya/yê eleqedarî demografiyê
6342871
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Rengdêr ===
{{rengdêr|ku|form=-}}
# {{K|ku|demografî}} Ya/yê [[eleqedarî|eleqedarî]] [[demografî|demografiyê]].
#* {{jêder-kitêb|ku|jêgirtin=Her di wê kitêbê de V.A.Gordlevskî, rastîyek girîng di derbarê rewşa '''demografîk''' û netewî ya Asya Biçûk ya dema Selçukîyan weşandîye.|nivîskar=Kamāl Muẓhar Aḥmad|sernav=C̜end rûpel ji dîroka gelê Kurd|terciman=w:Elîşêr|weşanxane=w:Apec|cih=w:Stockholm|sal=1991|rûpel=44|isbn=978-91-87730-11-5|url=https://www.worldcat.org/title/222682509}}
==== Têkildar ====
{{kol3|ku|cure=Têkildar
|demografî
}}
==== Etîmolojî ====
Ji {{ji|fr|ku|démographique}}.
==== Bi zaravayên din ====
{{werger-ser|ya/yê eleqedarî demografiyê|1}}
{{werger-bin}}
==== Werger ====
{{werger-ser|ya/yê eleqedarî demografiyê|1}}
* {{Z|en}}: {{W|en|demographic}}
* {{Z|tr}}: {{W|tr|demografik}}
{{werger-bin}}
gft6ifb484qzgqamqedbudkip9zgizc
6342885
6342871
2026-08-27T10:12:12Z
Balyozbot
7867
Bot: Paqijiyên kozmetîk (Lînk paqij kir.)
6342885
wikitext
text/x-wiki
== {{ziman|ku}} ==
=== Rengdêr ===
{{rengdêr|ku|form=-}}
# {{K|ku|demografî}} Ya/yê [[eleqedarî]] [[demografî|demografiyê]].
#* {{jêder-kitêb|ku|jêgirtin=Her di wê kitêbê de V.A.Gordlevskî, rastîyek girîng di derbarê rewşa '''demografîk''' û netewî ya Asya Biçûk ya dema Selçukîyan weşandîye.|nivîskar=Kamāl Muẓhar Aḥmad|sernav=C̜end rûpel ji dîroka gelê Kurd|terciman=w:Elîşêr|weşanxane=w:Apec|cih=w:Stockholm|sal=1991|rûpel=44|isbn=978-91-87730-11-5|url=https://www.worldcat.org/title/222682509}}
==== Têkildar ====
{{kol3|ku|cure=Têkildar
|demografî
}}
==== Etîmolojî ====
Ji {{ji|fr|ku|démographique}}.
==== Bi zaravayên din ====
{{werger-ser|ya/yê eleqedarî demografiyê|1}}
{{werger-bin}}
==== Werger ====
{{werger-ser|ya/yê eleqedarî demografiyê|1}}
* {{Z|en}}: {{W|en|demographic}}
* {{Z|tr}}: {{W|tr|demografik}}
{{werger-bin}}
6vc46w1scax32rxijao88haxj03m37e
demographic
0
1358857
6342880
2026-08-27T09:38:23Z
Wikihez
7344
[[Bikarhêner:Wikihez/templateScript2.js|TS]]: Ji [[en:demographic|en.wikt]]
6342880
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Etîmolojî ===
Ji {{paş|en|demography|-ic}}.
=== Bilêvkirin ===
* {{IPA|en|/ˌdɛm.əˈɡɹæf.ɪk/|dever=QY,GA,CA}}
** {{deng|en|LL-Q1860 (eng)-Vealhurl-demographic.wav|dever=Îngilistana başûr}}
** {{deng|en|LL-Q1860 (eng)-Wodencafe-demographic.wav|dever=Texas}}
* {{IPA|en|/ˌdem.əˈɡɹæf.ɪk/|dever=Awistralya}}
=== Rengdêr ===
{{en-rengdêr}}
# [[demografîk]]
==== Jê ====
{{col|en|biodemographic|clinicodemographic|demogrant|ethnodemographic|geodemographic|isodemographic|palaeodemographic|paleodemographic|phylodemographic|phytodemographic|socio-demographic|subdemographic
|demographic dividend|demographic tax|demographic transition|sociodemographic}}
=== Navdêr ===
{{en-navdêr}}
# {{e|en|bi giştî|di şiklê pirjimar de}} [[demografî]]
==== Têkildar ====
* {{g|en|demographer}}
* {{g|en|demographical}}
* {{g|en|demographically}}
* {{g|en|demography}}
ms34q3jdg56zk1kkwkcuyw1rzdnu8o2
demographics
0
1358858
6342881
2026-08-27T09:38:37Z
Wikihez
7344
Çêkirina formên [[demographic]] ([[WF:BILEZ|Bi lez]])
6342881
wikitext
text/x-wiki
== {{ziman|en}} ==
=== Formeke navdêrê ===
{{navdêr|en|form=erê}}
# {{pirjimar|en|demographic}}
rfo8s6ds5ytwxnj2fprwx0168n0744y