ویکیفەرھەنگ
ckbwiktionary
https://ckb.wiktionary.org/wiki/%D9%88%DB%8C%DA%A9%DB%8C%D9%81%DB%95%D8%B1%DA%BE%DB%95%D9%86%DA%AF:%D8%AF%DB%95%D8%B3%D8%AA%D9%BE%DB%8E%DA%A9
MediaWiki 1.47.0-wmf.24
case-sensitive
میدیا
تایبەت
وتووێژ
بەکارھێنەر
لێدوانی بەکارھێنەر
ویکیفەرھەنگ
لێدوانی ویکیفەرھەنگ
پەڕگە
وتووێژی پەڕگە
میدیاویکی
وتووێژی میدیاویکی
داڕێژە
وتووێژی داڕێژە
یارمەتی
وتووێژی یارمەتی
پۆل
وتووێژی پۆل
TimedText
TimedText talk
مۆدیوول
لێدوانی مۆدیوول
Event
Event talk
پەسەندکردن
0
6638
47389
46585
2026-10-15T15:02:49Z
Ghybu
12
47389
wikitext
text/x-wiki
== کوردیی ناوەندی ==
=== وشەڕەتناسی ===
{{واڵا}}
=== ناو ===
{{ckb-noun}}
# مۆرکردن، ڕەزامەندی
# بەدڵبوون، پەسەندکردن
# ئافەرین
==== وەرگێڕانەکان ====
{{وەرگێڕان-سەر|}}
* ئینگلیزی: {{t+|en|approval}}
{{وەرگێڕان-بن}}
=== سەرچاوە ===
* [https://web.archive.org/web/20210424204928/http://zkurd.org/aras/download/it-dictionary_zkurd.pdf فەرهەنگی زانستپەروەرانی کورد]
* [https://web.archive.org/web/20190910201253/http://www.zkurd.org/proje/en-ku.pl فەرهەنگی ئینگلیزی - كوردی (كوردی - ئینگلیزی) - زانستپەروەرانی کورد]
o8aalzk1rpqfuz3d3ssz9bt00g4fkhe
47390
47389
2026-10-15T15:04:37Z
Ghybu
12
/* ناو */
47390
wikitext
text/x-wiki
== کوردیی ناوەندی ==
=== وشەڕەتناسی ===
{{واڵا}}
=== کار ===
{{ckb-verb}}
# مۆرکردن، ڕەزامەندی
# بەدڵبوون، پەسەندکردن
# ئافەرین
==== وەرگێڕانەکان ====
{{وەرگێڕان-سەر|}}
* ئینگلیزی: {{t+|en|approval}}
{{وەرگێڕان-بن}}
=== سەرچاوە ===
* [https://web.archive.org/web/20210424204928/http://zkurd.org/aras/download/it-dictionary_zkurd.pdf فەرهەنگی زانستپەروەرانی کورد]
* [https://web.archive.org/web/20190910201253/http://www.zkurd.org/proje/en-ku.pl فەرهەنگی ئینگلیزی - كوردی (كوردی - ئینگلیزی) - زانستپەروەرانی کورد]
f2ggdrzg6ky7e95mznx8xyxa8w5moi2
47395
47390
2026-10-15T15:47:03Z
-Haryad
34
+شائەمراز
47395
wikitext
text/x-wiki
== کوردیی ناوەندی ==
=== وشەڕەتناسی ===
{{واڵا}}
=== کار ===
{{ckb-verb}}
# مۆرکردن، ڕەزامەندی
# بەدڵبوون، پەسەندکردن
# ئافەرین
==== وەرگێڕانەکان ====
{{وەرگێڕان-سەر|}}
* ئینگلیزی: {{t+|en|approval}}
{{وەرگێڕان-بن}}
=== سەرچاوەکان ===
* [https://web.archive.org/web/20210424204928/http://zkurd.org/aras/download/it-dictionary_zkurd.pdf فەرھەنگی زانستپەروەرانی کورد]
* [https://web.archive.org/web/20190910201253/http://www.zkurd.org/proje/en-ku.pl فەرھەنگی ئینگلیزی - کوردی (کوردی - ئینگلیزی) - زانستپەروەرانی کورد]
jaiys8fo3rtezr513m849evoko3d3de
میدیاویکی:Common.css
8
7829
47386
47349
2026-10-15T13:42:56Z
Sakura emad
13
fix
47386
css
text/css
/* ----------
<nowiki>
CSS Style
* Indent with tab characters
* One line space between each declaration
* One selector per line
* Opening brace on the same line as the last selector
* Don't omit optional semicolons
* Closing brace on its own line
* Closing brace indented to match the preceding style declarations
* Alternatively, very short style rules may be all on one line
* If changing e.g. rules for displaying scripts, consider also updating [[MediaWiki:Mobile.css]]
* Single quotes around font-family values that do not consist of ASCII lowercase
letters and hyphens.
---------- */
/* csslint adjoining-classes:false */
/* See also [[Special:Mypage/vector.css]], [[MediaWiki:Vector.css]] */
/* make headers include contained floats, so they don't wander around (yes, is
magic, it tells the browser the tag is a container) */
h1,
h2,
h3,
h4,
h5,
h6 {
width: auto;
}
sup,
sub { /* prevent odd line-height for raised and lowered characters */
line-height: 1em;
}
/* and keep links at normal font size/weight, else they inherit the header
attributes */
.editsection {
font-size: 100%;
font-weight: normal;
}
pre code, code code {
border: none;
padding: 0;
}
pre var, code var {
color: #777;
}
/* Convenience column count classes for list templates and such */
.column-count-2 { -moz-column-count: 2; -ms-column-count: 2; -webkit-column-count: 2; column-count: 2; }
.column-count-3 { -moz-column-count: 3; -ms-column-count: 3; -webkit-column-count: 3; column-count: 3; }
/* This fixes a bug where certain Tibetan terms are cut off at the bottom... */
#firstHeading { overflow: visible; }
.ns-0 .timed-text {
display: none;
}
.client-js .audiometa {
display: none;
}
.client-nojs .audiofile {
display: none;
}
.translations-columm {
background-color: #FFFFE0;
width: 48%;
text-align: left;
vertical-align: top;
}
/* wikitable is part of core. prettytable is deprecated but still used in some
places, until fully replaced: */
table.prettytable {
margin: 1em 1em 1em 0;
background: #f9f9f9;
border: 1px #aaaaaa solid;
border-collapse: collapse;
}
table.prettytable th,
table.prettytable td {
border: 1px #aaaaaa solid;
padding: 0.2em;
}
table.prettytable th {
background: #f2f2f2;
text-align: center;
}
table.prettytable caption {
margin-left: inherit;
margin-right: inherit;
}
/* main page-style boxes */
table.bluebox {
background: #f9f9ff;
border: 1px solid #aaaaaa;
margin-bottom: 0.5em;
width: 100%;
}
table.bluebox td {
padding: 0.5em;
}
table.bluebox th {
background-color: #006699;
color: #ffffff;
padding: 0.5em;
}
/* default setting for {{qualifier}} and {{sense}}.
(Related classes that can be overridden: .qualifier-comma,
.qualifier-content, .ib-brac, .qualifier-brac, .sense-qualifier-colon.) */
.ib-comma {
font-style: normal;
}
.ib-content {
font-style: italic;
}
.ib-content i,
.ib-content em {
font-style: normal;
}
.context-qualifier-colon {
display: none;
}
/* default setting for {{seeCites}} */
.see-cites { }
/* default style for indented "see also" */
.disambig-see-also,
.disambig-see-also-2 {
text-indent: 2em;
}
.mention-tr {
font-style: italic;
}
/* add left-to-right mark */
.mention-gloss-paren::before,
.mention-tr-paren::before {
content: "";
}
/* non-italic and non-bold gloss */
.mention-gloss-double-quote,
.mention-gloss-paren,
.mention-tr-gloss-separator-comma,
.mention-tr-paren,
.mention-tr-gloss-separator-comma,
.mention-gloss {
font-style: normal;
font-weight: normal;
}
/*
* highlight Arabic, Hebrew, cuneiform (Sumero-Akkadian and Ugaritic and Old Persian)
* in usage examples, as it is not bolded
*/
.Arab.e-example b, .Arab.e-quotation b,
.Hebr.e-example b, .Hebr.e-quotation b,
.Xsux.e-example b, .Xsux.e-quotation b,
.Ugar.e-example b, .Ugar.e-quotation b,
.Xpeo.e-example b, .Xpeo.e-quotation b {
background-color: #FFF0F5;
font-size: inherit;
}
/* default style for "form of" definitions */
.use-with-mention,
.form-of-definition {
font-style: italic;
}
.use-with-mention i {
font-style: normal;
}
.form-of-definition-link {
font-style: normal;
}
.use-with-mention .mention,
.form-of-definition-link .mention {
font-style: normal;
font-weight: bold;
}
/* Inflection tables
----------------------------- */
/* To colour links in inflection tables (currently done with
{{notred}}) black without using #ifexist and allowing for user
override */
.inflection-table a.new { color: inherit; }
/* fill a parent NavContent collapsing box */
.NavContent table.inflection {
width: 100%;
}
/* basic inflection table styles */
table.inflection {
border-collapse: collapse;
border: 1px solid;
background: #ffffff;
}
table.inflection caption {
caption-side: bottom;
padding: 0.33em 1em;
text-align: left;
font-size: smaller;
}
/* subtle grey for alternate row backgrounds */
table.inflection tr:nth-child(odd) {
background: #fcfcfc;
}
/* and for row headers */
table.inflection tr:nth-child(odd):not(.rowgroup) th {
background: #f6f6f6;
}
table.inflection td,
table.inflection th {
padding: 0.33em 1em;
vertical-align: baseline;
}
/* but vertically center multi-row cells */
table.inflection td[rowspan] {
vertical-align: middle;
}
table.inflection td {
text-align: center;
}
/* regular row headers, in the left column */
table.inflection th {
background: #f9f9f9;
text-align: left;
}
/* rowgroup header rows */
table.inflection tr.rowgroup th {
background: #eeeeee;
text-align: center;
}
/* first-of-several rowgroup header cells is aligned left */
table.inflection tr.rowgroup th:first-child { text-align: left; }
table.inflection tr.rowgroup th:first-child:only-child { text-align: center; }
/* rows with dividers above */
table.inflection tr.divider th {
border-top: 3px solid #999999;
}
/* transliterations */
table.inflection .translit {
color: #888;
}
/* header links aren’t coloured until hover/active */
table.inflection th a:link,
table.inflection th a:visited {
color: inherit;
text-decoration: inherit;
}
table.inflection th a:hover {
color: #0645ad;
text-decoration: underline;
}
table.inflection th a:active {
color: #faa700;
text-decoration: underline;
}
/* Russian verb tables */
table.inflection-ru.inflection-verb {
background: #ffffff;
}
/* and for row headers */
table.inflection-ru.inflection-verb tr:nth-child(odd):not(.rowgroup) th {
background: #fcfcda;
}
table.inflection-ru.inflection-verb th {
background: #ffffe0;
}
table.inflection-ru.inflection-verb tr.rowgroup th {
background: #e0e0ff;
}
table.inflection-ru.inflection-verb tr.divider th {
border-top-color: #9090d0;
}
/* ----
end of Inflection tables */
/* InterProject */
.interProject {
display: none;
clear: both;
border-top: 2px dotted #AAAAAA;
margin-top: 2em;
}
/* CSS moved from various templates */
.checktrans { background-color: #f0fff0; }
.rfc-trans { background-color: #f0fff0; }
.trreq { background-color: #f0fff0; }
.ttbc { background-color: #f0fff0; }
/* t+ t t- templates: */
.tneg { vertical-align: 20%; font-size: 80%; }
.tneg a { color: #cc2200 !important; } /* monobook redlink colour, standard #ba0000 */
.tneg a:visited { color: #a55858 !important; } /* standard visited redlink colour */
.tpos { vertical-align: 20%; font-size: 80%; }
.tpos a { color: #002bb8 !important; } /* standard bluelink colour */
.tpos a:visited { color: #5a3696 !important; } /* standard visited bluelink colour */
.tpos a:active { color: #faa700 !important; } /* standard bluelink colour */
.tunk { vertical-align: 20%; font-size: 80%; }
.tunk a { color: #3366BB !important; } /* standard external interwiki colour */
.tunk a:active { color: #3366BB !important; } /* redundant */
/* for parentheses, we use .tlc and .tlcp, the latter has no definition here
(display:inline) */
.tlc { display: none; }
/* Main Page heading removal */
.page-Main_Page #footer-info-lastmod,
.page-Main_Page #siteSub,
.page-Main_Page #contentSub,
.page-Main_Page #firstHeading,
.page-Main_Page #catlinks {
display: none; /* NOT important */
}
/* live ajax link checking support */
/* #002bb8 for (unvisited) blue, #ba0000 for red; so #5d155c for unknown */
a.dunno,
#p-personal a.dunno {
color: #5d155c;
}
/* #5a3696 for (visited) blue, #a55858 for red; so #744777 for unknown */
a.dunno:visited,
#p-personal a.dunno:visited {
color: #744777;
}
/* for pages which exist but lack the section we're looking for */
.partlynew:link,
#p-personal :link.partlynew,
.partlynew :link {
color: #B88D00;
}
.partlynew:visited,
#p-personal .partlynew:visited,
.partlynew :visited {
color: #826F34;
}
/* partlynew should have lower precedence than red-links... */
.partlynew .new:link {
color: #BA0000;
}
.partlynew .new:visited {
color: #a55858;
}
.accelerated:link {
color: #1fba00;
}
.accelerated:visited {
color: #66a759;
}
/* Try to make search results more obviously links */
.mw-special-Search #bodyContent li a {
font-weight: bold;
}
.mw-special-Search .searchmatch {
font-weight: normal;
color: #000000;
background-color: #FFEE77;
}
/* To give a flexible column like structure to manual indices
[[User:Conrad.Irwin]] */
ol.index,
div.index ol {
margin: 0.2em;
}
ol.index li,
div.index ol li,
div.index h3 {
float: left;
width: 20em;
list-style-type: none;
margin-left: 0;
margin-right: 0;
overflow: hidden;
}
div.index h3 {
font-size: 160%;
width: 12.5em;
margin-right: 0.2em;
}
/* [[WT:FEED]] */
#p-feedback a { cursor: pointer; }
/* Old version */
#mw-revision-info {
border: 2px solid #8888FF;
border-left: 0px;
border-right: 0px;
font-size: 110%;
margin: 5px;
margin-left: 0px;
}
#mw-editingold {
margin-left: 15px;
margin: 5px;
padding: 5px;
border: 2px solid #CC0000;
border-width: 2px 0px;
}
/* Make Recent changes look nice again */
span.newpage,
span.minor,
span.searchmatch,
span.bot,
span.unpatrolled {
font-family: sans-serif !important;
}
/* NavFrames */
div.Boxmerge,
div.NavFrame,
details.NavFrame {
margin: 0px 0px -1px 0px;
padding: 2px;
border: 1px solid #aaaaaa;
text-align: center;
border-collapse: collapse;
font-size: 95%;
overflow: auto;
width: auto;
}
div.Boxmerge div.NavFrame {
border-style: none;
border-style: hidden;
}
div.NavPic {
background-color: #ffffff;
margin: 0px;
padding: 2px;
float: left;
}
div.NavFrame div.NavHead,
details.NavFrame summary.NavHead {
min-height: 1.6em;
font-weight: bold;
font-size: 100%;
text-align: left;
background-color: #efefef;
padding: 0 10px;
background-image: -webkit-gradient(linear, left top, left bottom, from(#EFEFEF), to(#DFDFDF), color-stop(0.6, #E3E3E3));
background-image: -moz-linear-gradient(top, #EFEFEF, #E3E3E3 60%, #DFDFDF);
background-image: -o-linear-gradient(top, #EFEFEF, #E3E3E3 60%, #DFDFDF);
}
div.NavFrame div.NavHead:hover,
details.NavFrame summary.NavHead:hover {
background-color: #F6F6F6;
background-image: -webkit-gradient(linear, left top, left bottom, from(#EFEFEF), to(#F3F3F3), color-stop(0.6, #EAEAEA));
background-image: -moz-linear-gradient(top, #EFEFEF, #EAEAEA 60%, #F3F3F3);
background-image: -o-linear-gradient(top, #EFEFEF, #EAEAEA 60%, #F3F3F3);
}
div.NavFrame div.NavHead:active,
details.NavFrame summary.NavHead:active {
background-color: #E3E3E3;
background-image: -webkit-gradient(linear, left top, left bottom, from(#E3E3E3), to(#DFDFDF), color-stop(0.6, #D3D3D3));
background-image: -moz-linear-gradient(top, #E3E3E3, #D3D3D3 60%, #DFDFDF);
background-image: -o-linear-gradient(top, #E3E3E3, #D3D3D3 60%, #DFDFDF);
}
div.pseudo div.NavHead:hover { background-color: #EFEFEF; }
div.pseudo div.NavHeadpseudo:active { background-color: #EFEFEF; }
div.NavFrame p {
font-size: 100%;
}
div.NavFrame div.NavContent,
details.NavFrame div.NavContent {
font-size: 100%;
}
div.NavFrame div.NavContent p,
details.NavFrame div.NavContent p {
font-size: 100%;
}
div.NavEnd {
margin: 0px;
padding: 0px;
line-height: 1px;
clear: both;
}
span.NavToggle {
cursor: pointer;
float: left;
font-weight: normal;
font-size: smaller;
}
.list-switcher-element {
text-align: center;
}
.list-switcher-element .NavToggle {
float: none;
}
.term-list-header {
font-style: italic;
font-weight: inherit;
}
.term-list-header:before {
content: "(";
}
.term-list-header:after {
content: "):";
}
/* Main page fixes */
#interwiki-completelist {
font-weight: bold;
}
/* Style for horizontal UL lists */
.horizontal p,
.horizontal ul,
.horizontal li { display: inline; }
.horizontal ul { padding: 0 0 0 .2em; margin: 0; }
.horizontal li { padding: 0 0.1em 0 0.1em; }
/* Syle for generic inline lists */
.inline p,
.inline dd,
.inline dt,
.inline ul,
.inline li {
margin: 0;
display: inline;
}
/* [[w:CSS filter#Negation pseudo-class hack]] since IE <8 doesn't support pseudo
elements and IE 8 doesn't support :last-child pseudo-class. */
html:not([dummyparam]) .horizontal li:after { content: ","; }
html:not([dummyparam]) .horizontal li:last-child:after { content: "."; }
/* stuff visible when previewing an edit only */
.previewonly { display: none; }
#wikiPreview .previewonly { display: inline !important; }
/* senseids */
.senseid:target { background-color: #DEF; }
/* show the "serial and" in the disambiguation see also */
.serial-and { display: inline; }
/* hide the serial commas */
.serial-comma { display: none; }
/* Gender and number templates */
.gender,
.number,
.noun-class { font-style: italic; }
abbr { border-bottom-width: 0; }
/* hide "did you mean" on Noarticletext self-links */
.did-you-mean strong {
display: none;
}
/* make script/module errors smaller */
.scribunto-error {
font-size: 75%;
}
/* allow inline hieroglyphs */
.mw-hiero-outer {
display: inline-table;
vertical-align: middle;
font-size: 11px;
}
/* formats derived terms */
.derivedterms { background: #F8F8FF; }
.derivedterms .CategoryTreeChildren { column-count: 3; -moz-column-count: 3; -webkit-column-count: 3; }
/* softer highlighting of 'updated since last visit' */
span.updatedmarker { background-color:#D0F0C0; }
/* {{side box}} */
table.mbox-small { /* For the "small=yes" option. */
clear: right;
float: right;
margin: 4px 0 4px 1em;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
table.mbox-small-left { /* For the "small=left" option. */
margin: 4px 1em 4px 0;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
.HQToggle, .nyms-toggle, .usex-toggle {
font-size: smaller;
position: relative;
bottom: 1px;
left: 5px;
}
/* {{TOC limit}} */
/* Allow limiting of which header levels are shown in a TOC;
<div class="toclimit-3">, for instance, will limit to showing ==headings==
and ===headings=== but no further (as long as there are no =headings= on the
page, which there shouldn't be according to the MoS). */
.toclimit-2 .toclevel-1 ul,
.toclimit-3 .toclevel-2 ul,
.toclimit-4 .toclevel-3 ul,
.toclimit-5 .toclevel-4 ul,
.toclimit-6 .toclevel-5 ul,
.toclimit-7 .toclevel-6 ul {
display: none;
}
/*
Support for scripts. See [[Wiktionary:Scripts]].
*/
/* Default style for headwords. */
strong.headword { }
/* Default style for mentions outside of "form of" definitions.
See [[Wiktionary:Votes/2007-10/style for mentioned terms]] */
.mention {
font-style: italic;
}
.mention i, i .mention {
font-style: normal;
}
/* "Empty" script, used for languages with no script set.
This is the same as Latn in practice, but allows tagging and formatting of
such cases. */
.None,
.Imag,
.Morse,
.Semap,
.Zyyy { }
/* Latin
This is the default script, so it has no definitions. */
.Latn { }
/* This is needed to overcome the "smartness" of certain web browsers */
.Latn[lang=ja],
.Latn[lang=ko],
.Latn[lang=zh] {
font-family: inherit;
}
/* Latin Fraktur */
.Latf {
font-family: UnifrakturMaguntia, UnifrakturCook, Unifraktur, 'Code2001', Tahoma, 'Arial Unicode MS', sans-serif;
font-size: 125%;
}
/* Navajo */
.nv-Latn {
font-family: Calibri, 'Aboriginal Sans', 'DejaVu Sans', 'Arial Unicode MS', sans-serif !important;
}
/* Pitjantjatjara (ḻ ṉ ṟ ṯ and capitals) */
.pjt-Latn {
font-family: 'Microsoft Sans Serif', Tahoma, 'Code2000', sans-serif;
}
/* Latin extended */
/* no styles for .Latinx, .unicode, .Unicode */
/* Aghwan */
.Aghb {
font-family: OptimaModoki, sans-serif;
}
.Aghb, .Aghb * {
font-style: normal;
}
/* Ahom */
.Ahom {
font-family: AhomUnicode, 'Noto Serif Ahom', 'Unifont Upper', sans-serif;
}
.Ahom, .Ahom * {
font-style: normal;
}
/* Arabic */
.Arab,
.fa-Arab,
.glk-Arab,
.kk-Arab,
.ks-Arab,
.ku-Arab,
.mzn-Arab,
.ota-Arab,
.pa-Arab,
.ps-Arab,
.sd-Arab,
.tt-Arab,
.ug-Arab,
.ur-Arab,
.ms-Arab {
font-family: 'Iranian Sans', 'Segoe UI', Tahoma, 'Microsoft Sans Serif', 'Arial Unicode MS', sans-serif;
font-size: 133%;
direction: rtl;
unicode-bidi: embed;
}
/* no italics, no bold */
.Arab, .Arab *,
.fa-Arab, .fa-Arab *,
.glk-Arab, .glk-Arab *,
.kk-Arab, .kk-Arab *,
.ks-Arab, .ks-Arab *,
.ku-Arab, .ku-Arab *,
.mzn-Arab, .mzn-Arab *,
.ota-Arab, .ota-Arab *,
.pa-Arab, .pa-Arab *,
.ps-Arab, .ps-Arab *,
.sd-Arab, .sd-Arab *,
.tt-Arab, .tt-Arab *,
.ug-Arab, .ug-Arab *,
.ur-Arab, .ur-Arab *,
.ms-Arab, .ms-Arab * {
font-style: normal;
font-weight: normal;
}
/* Persian, Ottoman Turkish */
.fa-Arab,
.ota-Arab {
font-family: 'Iranian Sans', 'Geeza Pro', Tahoma, sans-serif;
}
/* Kashmiri */
.ks-Arab {
font-family: 'Noto Naskh Arabic', Amiri, Mirza, 'Scheherazade New', Scheherazade, 'Geeza Pro', Tahoma, sans-serif;
}
/* Kurdish, Punjabi Shahmukhi, Urdu */
.ku-Arab,
.pa-Arab,
.ur-Arab {
font-family: Tahoma, 'Arial Unicode MS', 'UT Cairo', 'UT Naskh', sans-serif;
}
/* Pashto */
.ps-Arab {
font-family: Pokhto, 'Pashto Kror Asiatype', 'Scheherazade New', Scheherazade, sans-serif;
}
/* Sindhi */
.sd-Arab {
font-family: 'MB Sindhi', Tahoma, 'MBSarang Sattar', 'MB Bhitai Sattar', 'MB Lateefi', 'Ayaz Gul', 'Iranian Sans', sans-serif;
}
/* Uyghur */
.ug-Arab {
font-family: 'UKIJ Tuz', 'Microsoft Uighur', 'Scheherazade New', Scheherazade, 'Iranian Sans', 'Code2000', sans-serif;
}
/* Imperial Aramaic */
.Armi {
font-family: 'Segoe UI Historic', 'Aramaic Imperial Yeb', 'Noto Sans Imperial Aramaic', sans-serif;
direction: rtl;
unicode-bidi: embed;
}
.Armi, .Armi * {
font-style: normal;
}
/* Armenian */
.Armn {
font-family: Mshtakan, Arial, 'Segoe UI', Tahoma, 'Arian AMU', 'DejaVu Sans', sans-serif;
}
/* no italics */
.Armn, .Armn * {
font-style: normal;
}
/* Avestan */
.Avst {
font-family: Avestan, Ahuramzda, 'Noto Sans Avestan', sans-serif;
font-size: 125%;
direction: rtl;
unicode-bidi: embed;
font-variant-ligatures: none; /* Avestan language */
}
/* no italics */
.Avst, .Avst * {
font-style: normal;
}
.Avst:lang(pal) { /* Pazend (Middle Persian in Avestan script) */
font-variant-ligatures: normal;
}
/* Balinese */
.Bali {
font-family: 'Noto Sans Balinese', sans-serif;
}
.Bali, .Bali * {
font-style: normal;
}
/* Bamum */
.Bamu {
font-family: 'Noto Sans Bamum', sans-serif;
}
.Bamu, .Bamu * {
font-style: normal;
}
/* Batak */
.Batk {
font-family: Batak-Unicode, sans-serif;
}
.Batk, .Batk * {
font-style: normal;
}
/* Bengali */
.Beng {
font-family: 'Bangla Sangam MN', UniBangla, 'Arial Unicode MS', 'Code2000', Likhan, 'UT Bengali Dhaka', Vrinda, sans-serif;
font-size: 130%;
}
.Beng, .Beng * {
font-style: normal;
}
.as-Beng {
font-family: 'Bangla Sangam MN', UniBangla, 'Arial Unicode MS', 'Code2000', Likhan, 'UT Bengali Dhaka', Vrinda, sans-serif;
font-size: 130%;
}
.as-Beng, .as-Beng * {
font-style: normal;
}
/* Zhuyin (Bopomofo) */
.Bopo {
font-family: MOESongUN, DFKai-SB, 'Microsoft Yahei', 'Microsoft Jhenghei', 'Source Han Sans TC', 'Source Han Sans TW', 'Noto Sans CJK TC', sans-serif;
}
.Bopo, .Bopo * {
font-style: normal;
}
/* Brahmi */
.Brah {
font-family: 'Segoe UI Historic', 'Noto Sans Brahmi';
}
.Brah, .Brah * {
font-style: normal;
}
/* Braille */
.Brai {
font-size: 150%;
}
.Brai, .Brai * {
font-style: normal;
}
/* Buginese */
.Bugi {
font-family: Saweri, sans-serif;
}
.Bugi, .Bugi * {
font-style: normal;
}
/* Buhid */
.Buhd, .Buhd * {
font-style: normal;
}
/* Chakma */
.Cakm {
font-family: RibengUni, sans-serif;
}
.Cakm, .Cakm * {
font-style: normal;
}
/* Unified Canadian Aboriginal Syllabics */
.Cans {
font-family: 'Euphemia UCAS', Euphemia, 'Aboriginal Sans', OskiBlackfoot, 'Code2000', 'Everson Mono Unicode', sans-serif;
font-size: 110%;
}
.Cans, .Cans * {
font-style: normal;
}
/* Carian, Italic, Linear B, Lycian, Lydian */
.Cari,
.Ital,
.Linb,
.Lyci,
.Lydi {
font-family: 'Segoe UI Historic', Aegean, 'Noto Sans Carian', 'Noto Sans Old Italic', 'Noto Sans Linear B', 'Noto Sans Lycian', 'Noto Sans Lydian', sans-serif;
font-size: 125%;
}
.Cari, .Cari *,
.Ital, .Ital *,
.Linb, .Linb *,
.Lyci, .Lyci *,
.Lydi, .Lydi * {
font-style: normal;
}
/* Cham */
.Cham {
font-family: 'Code2000', 'JG ChamCambodia', sans-serif;
font-size: 1.1em;
}
.Cham, .Cham * {
font-style: normal;
}
/* Cherokee */
.Cher {
font-family: Digohweli, 'Aboriginal Sans', 'Code2000', Marin, 'Rotinonhsonni Sans', 'Everson Mono Unicode', sans-serif;
font-size: 110%;
}
.Cher, .Cher * {
font-style: normal;
}
/* Coptic */
.Copt {
font-family: Quivira, 'New Athena Unicode', 'Code2000', sans-serif;
font-size: 1.3em;
}
.Copt, .Copt * {
font-style: normal;
}
/* Cypriot */
.Cprt {
font-family: 'Segoe UI Historic', Aegean, sans-serif;
font-size: 1.15em;
direction: rtl;
unicode-bidi: embed;
}
.Cprt, .Cprt * {
font-style: normal;
}
/* Cyrillic */
.Cyrl,
.Cyrs {
font-family: Helvetica, Geneva, 'Arial Unicode MS', 'Lucida Sans Unicode', 'Code2000', sans-serif;
}
.Cyrl, .Cyrl * {
font-style: normal;
}
/* Old Cyrillic (Old Church Slavonic, Old East Slavic) */
.Cyrs {
font-family: BukyVede, 'Kliment Std', 'RomanCyrillic Std', Menaion, 'Menaion Medieval', Lazov, Dilyana, 'Hirmos Ponomar', 'Hirmos Ponomar TT', 'Fedorovsk Unicode', 'Fedorovsk Unicode TT', 'Code2000', 'DejaVu Sans', 'Lucida Grande', 'Arial Unicode MS', 'Lucida Sans Unicode', sans-serif;
font-size: 125%;
}
.Cyrs, .Cyrs * {
font-style: normal;
}
/* Devanagari */
.Deva {
font-family: 'Adobe Devanagari', 'Noto Serif Devanagari', Utsaah, 'Devanagari MT', Raghu, Gargi, JanaSanskrit, JanaHindi, Siddhanta, sans-serif;
font-size: 120%;
}
i.Deva {
font-style: normal;
}
/* Deseret */
.Dsrt {
font-family: 'Segoe UI Symbol', 'Code2001', 'MPH 2B Damase', 'Everson Mono', sans-serif;
}
.Dsrt, .Dsrt * {
font-style: normal;
}
/* Demotic (Egyptian) */
.Egyd, .Egyd * {
font-style: normal;
direction: rtl;
}
/* Egyptian hieroglyphs */
.Egyp {
font-family: 'Noto Sans Egyptian Hieroglyphs', Abydos, Aegyptus, 'Segoe UI Historic', sans-serif;
font-size: 150%;
}
.Egyp, .Egyp * {
font-style: normal;
}
/* Ethiopic (Ge'ez) */
.Ethi {
font-family: 'Abyssinica SIL', Nyala, 'Code2000', 'Ethiopia Jiret', 'GF Zemen Unicode', 'TITUS Cyberbit Basic', 'Visual Geez Unicode', 'Visual Geez Unicode Agazian', 'Visual Geez Unicode Title', sans-serif;
font-size: 120%;
}
.Ethi, .Ethi * {
font-style: normal;
}
/* Khutsuri */
.Geok, .Geok * {
font-style: normal;
}
/* Georgian */
.Geor {
font-family: 'DejaVu Sans', 'Arial Unicode MS', Sylfaen, sans-serif;
}
.Geor, .Geor * {
font-style: normal;
}
/* Glagolitic */
.Glag {
font-family: 'Segoe UI Historic', BukyVede, Dilyana, 'Noto Sans Glagolitic', sans-serif;
font-size: 150%;
}
.Glag, .Glag * {
font-style: normal;
}
/* Gothic */
.Goth {
font-family: 'Segoe UI Historic', 'Code2001', Skeirs, 'MPH 2B Damase', sans-serif;
}
.Goth, .Goth * {
font-style: normal;
}
b.Goth,
strong.Goth {
font-size: larger;
}
/* Greek */
.Grek {
font-family: Athena, Gentium, 'Gentium Plus', 'Palatino Linotype', 'Arial Unicode MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Code2000', sans-serif;
}
i.Grek.mention,
i.polytonic.mention {
font-style: normal;
}
/* Polytonic Greek */
.polytonic {
font-family: 'SBL Greek', 'New Athena Unicode', 'DejaVu Sans', Athena, Gentium, 'Gentium Plus', 'Palatino Linotype', Times, 'Arial Unicode MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Code2000', sans-serif;
}
/* Gujarati */
.Gujr {
font-family: 'Noto Sans Gujarati', 'Gujarati Sangam MN', 'Gujarati MT', Shruti, 'Lucida Grande', 'Arial Unicode MS', 'Lucida Sans Unicode', 'Code2000', 'TITUS Cyberbit Basic', 'Chrysanthi Unicode', 'Bitstream Cyberbit', 'Bitstream CyberBase', 'Bitstream Vera', 'Visual Geez Unicode', sans-serif;
font-size: 125%;
}
.Gujr, .Gujr * {
font-style: normal;
}
/* Gurmukhi */
.Guru {
font-family: 'Gurmukhi MN', 'Gurmukhi MT', 'UT Punjabi Amritsar', 'Lucida Grande', 'Arial Unicode MS', 'Lucida Sans Unicode', 'Code2000', 'TITUS Cyberbit Basic', 'Chrysanthi Unicode', 'Bitstream Cyberbit', 'Bitstream CyberBase', 'Bitstream Vera', 'Visual Geez Unicode', sans-serif;
font-size: 125%;
}
.Guru, .Guru * {
font-style: normal;
}
/* Chinese (Han) */
/* Hani: generic */
/* Hans: simplified */
/* Hant: traditional */
.Hans {
font-family: 'PingFang SC', DengXian, 'Source Han Sans SC', 'Source Han Sans CN', 'Noto Sans CJK SC', 'Microsoft Yahei', SimHei, SimSun, NSimSun, SimSun-ExtB, Song, 'Heiti SC', HanaMinA, HanaMinB, sans-serif;
}
.Hani,
.Hant {
font-family: 'PingFang TC', 'Source Han Sans TC', 'Source Han Sans TW', 'Noto Sans CJK TC', 'Microsoft Jhenghei', MOESongUN, PMingLiU, PMingLiU-ExtB, MingLiU, MingLiU-ExtB, Ming, 'Heiti TC', HanaMinA, HanaMinB, sans-serif;
}
.Hani,
.Hans,
.Hant {
font-size: 120%;
line-height: 1;
}
.Hani, .Hani *,
.Hans, .Hans *,
.Hant, .Hant * {
font-style: normal;
}
.Hani:lang(vi) {
font-family: 'Nom Na Tong', 'HAN NOM A', 'HAN NOM B', Sun-ExtA, Sun-ExtB, Ming-Lt-HKSCS-UNI-H, Ming-Lt-HKSCS-ExtB, HanaMinA, HanaMinB, HanaMin, 'PingFang TC', MingLiU, MingLiU-ExtB, 'MingLiU_HKSCS', 'MingLiU_HKSCS-ExtB', SimSun, SimSun-ExtB, 'Arial Unicode MS', 'TITUS Cyberbit Basic', sans-serif;
/* CJK Unified Ideographs Extension C and Extension D (U+2A700..U+2B734, U+2B740..U+2B81F)
font-family: Sun-ExtB, 'MingLiU_HKSCS-ExtB', Ming-Lt-HKSCS-ExtB, HanaMinB, sans-serif;
**/
}
/* Hanunoo */
.Hano {
font-family: Quivira, 'MPH 2B Damase', sans-serif;
font-size: 1.1em;
}
.Hano, .Hano * {
font-style: normal;
}
/* Hatran */
.Hatr {
font-family: 'Noto Sans Hatran', sans-serif;
direction: rtl;
}
/* Hebrew */
.Hebr {
font-family: 'SBL Hebrew', 'Taamey David CLM', 'Taamey Frank CLM', Alef, 'Noto Sans Hebrew', Narkisim, Miriam, Kinryu, 'Arial Hebrew', Arial, 'Adobe Hebrew', serif;
font-size: 115%;
direction: rtl;
unicode-bidi: embed;
}
.Hebr, .Hebr * {
font-style: normal;
font-weight: normal;
}
big.Hebr,
strong.Hebr,
b.Hebr,
b .Hebr {
font-size: 144%;
}
.Hebr b {
font-size: 125%;
}
/* Hluw: Anatolian Hieroglyphs */
.Hluw {
font-family: 'Noto Sans Anatolian Hieroglyphs', Anatolian;
font-size: 200%;
}
.Hluw, .Hluw * {
font-style: normal;
}
/* Hiragana: see .Jpan */
/* Javanese */
.Java {
font-family: 'Tuladha Jejeg', 'Javanese Text', adjisaka, 'Noto Sans Javanese', sans-serif;
}
.Java, .Java * {
font-style: normal;
}
/* Japanese scripts
.Hira = Hiragana
.Kana = Katakana (used for Ainu language)
.Jpan = Hiragana + Katakana + Kanji
*/
.Hira,
.Jpan,
.Kana {
font-family: 'Hiragino Kaku Gothic Pro', Osaka, 'Yu Gothic', Meiryo, 'Source Han Sans J', 'Source Han Sans JP', 'Noto Sans CJK JP', 'Droid Sans Japanese', 'MS PGothic', 'MS Gothic', 'MS PMincho', 'MS Mincho', HanaMinA, HanaMinB, sans-serif;
font-size: 120%;
line-height: 1;
}
.Hira, .Hira *,
.Jpan, .Jpan *,
.Kana, .Kana * {
font-style: normal;
}
.Jpan ruby rt {
font-family: 'Yu Gothic UI', 'Meiryo UI', 'MS UI Gothic', sans-serif;
font-size: 60%;
}
/* Kayah Li, Ol Chiki, Rejang */
.Kali,
.Olck {
font-family: 'Code2000', sans-serif;
}
.Kali, .Kali *,
.Olck, .Olck *,
.Rjng, .Rjng * {
font-style: normal;
}
/* Katakana (Ainu language): see .Jpan */
/* Kharoshthi */
.Khar {
font-family: 'Segoe UI Historic', 'MPH 2B Damase', sans-serif;
font-size: 1.1em;
direction: rtl;
unicode-bidi: embed;
}
.Khar, .Khar * {
font-style: normal;
}
/* Khmer */
.Khmr {
font-family: 'Khmer OS', 'Khmer OS Content', 'Leelawadee UI', 'Noto Sans Khmer', 'Code2000', 'Khmer Mondulkiri U OT ls', sans-serif;
font-size: 125%;
}
.Khmr, .Khmr * {
font-style: normal;
}
/* Kannada */
.Knda {
font-family: 'Kannada Sangam MN', JanaKannada, Tunga, Kedage, RaghuKannada, Sampige, 'Arial Unicode MS', 'Code2000', 'Bitstream Cyberbit', 'Bitstream CyberBase', sans-serif;
font-size: 125%;
}
.Knda, .Knda * {
font-style: normal;
}
/* Korean */
.Kore,
.Hang {
font-family: 'Apple SD Gothic Neo', 'Malgun Gothic', Dotum, Gulim, 'NanumBarunGothic YetHangul', NanumBarunGothic, UnDotum, 'Source Han Sans K', 'Source Han Sans KR', 'Noto Sans CJK KR', NanumGothic, 'NanumMyeongjo YetHangul', NanumMyeongjo, Batang, UnBatang, sans-serif;
font-size: 120%;
line-height: 1;
}
.Kore, .Kore *,
.Hang, .Hang * {
font-style: normal;
}
/* Kaithi */
.Kthi {
font-family: 'Noto Sans Kaithi', sans-serif;
}
.Kthi, .Kthi * {
font-style: normal;
}
/* Lanna */
.Lana {
font-family: 'Lanna Alif', 'Noto Sans Tai Tham', sans-serif;
}
.Lana, .Lana * {
font-style: normal;
}
/* Lao */
.Laoo {
font-family: 'Phetsarath OT', 'Saysettha OT', 'JG Basic Lao Opentype', 'JG Basic2 Lao Opentype', 'JG LaoTimes Opentype', 'Phagnoum Lao Unicode Opentype', 'JG Lao Old Arial Opentype', DokChampa, 'Code2000', 'JG Lao Classic Opentype', 'Alice0 Unicode', 'Alice1 Unicode', 'Alice2 Unicode', 'Alice3 Unicode', 'Alice4 Unicode', 'Alice5 Unicode', sans-serif;
font-size: 125%;
}
.Laoo, .Laoo * {
font-style: normal;
}
/* Lepcha */
.Lepc {
font-family: 'Noto Sans Lepcha', Mingzat, sans-serif;
}
.Lepc, .Lepc * {
font-style: normal;
}
/* Limbu */
.Limb {
font-family: 'Code2000', 'MPH 2B Damase', sans-serif;
}
.Limb, .Limb * {
font-style: normal;
}
/* Lisu */
.Lisu {
font-family: 'Noto Sans Lisu', sans-serif;
}
.Lisu, .Lisu * {
font-style: normal;
}
/* Mandaic */
.Mand {
font-family: 'Noto Sans Mandaic', sans-serif;
}
.Mand, .Mand * {
font-style: normal;
}
/* Manichaean */
.Mani, .Mani * {
font-style: normal;
}
/* Meroitic cursive */
.Merc {
font-family: 'Segoe UI Historic', Aegyptus, sans-serif;
font-size: 150%;
}
.Merc, .Merc * {
font-style: normal;
}
/* Meroitic hieroglyphs */
.Mero {
font-family: Aegyptus, sans-serif;
font-size: 150%;
}
.Mero, .Mero * {
font-style: normal;
}
/* Malayalam */
.Mlym {
font-family: 'Malayalam Sangam MN', Kartika, 'Code2000', 'Lucida Grande', 'Arial Unicode MS', 'Lucida Sans Unicode', 'TITUS Cyberbit Basic', 'Chrysanthi Unicode', 'Bitstream Cyberbit', 'Bitstream CyberBase', 'Bitstream Vera', 'Visual Geez Unicode', sans-serif;
font-size: 125%;
}
.Mlym, .Mlym * {
font-style: normal;
}
/* Classical Mongolian, Manchu, Xibe, Clear Script */
.Mong,
.mnc-Mong, /* Manchu */
.sjo-Mong, /* Xibe */
.xwo-Mong /* Clear Script, Todo */ {
font-family: 'Mongolian Baiti', 'Noto Sans Mongolian', sans-serif;
font-size: 140%;
-webkit-writing-mode: vertical-lr;
-moz-writing-mode: vertical-lr;
writing-mode: vertical-lr;
layout-flow: vertical-ideographic;
}
.Mong, .Mong *,
.mnc-Mong, .mnc-Mong *,
.sjo-Mong, .sjo-Mong *,
.xwo-Mong, .xwo-Mong * {
font-style: normal;
}
/* Meitei Mayek */
.Mtei {
font-family: 'Eeyek Unicode', 'Noto Sans Meetei Mayek', sans-serif;
}
.Mtei, .Mtei * {
font-style: normal;
}
/* Burmese */
.Mymr {
font-family: TharLon, Padauk, 'Myanmar Text', 'Myanmar3', 'Myanmar2', 'Myanmar1', ParabaikSans, 'MyMyanmar sans-serif';
font-size: 130%;
}
.Mymr, .Mymr * {
font-style: normal;
font-weight: normal;
}
big.Mymr,
strong.Mymr,
b.Mymr,
b .Mymr {
font-size: 162%;
}
.Mymr b {
font-size: 130%;
}
/* North Arabian */
.Narb {
font-family: 'Noto Sans Old North Arabian', sans-serif;
}
.Narb, .Narb * {
font-style: normal;
}
/* N'ko */
.Nkoo, .Nkoo * {
font-style: normal;
}
/* Ogham */
.Ogam {
font-family: 'Segoe UI Historic', Beth-Luis-Nion, Pollach, 'Maigh Nuad', 'Craobh Ruadh', 'Everson Mono Ogham', Cog, Crosta, 'TITUS Ogham', 'Ragnarok Ogham', sans-serif;
font-size: 125%;
}
.Ogam, .Ogam * {
font-style: normal;
font-weight: normal;
}
big.Ogam, strong.Ogam, b.Ogam, b .Ogam {
font-size: 156%;
}
.Ogam b {
font-size: 125%;
}
/* Orkhon Runes */
.Orkh {
font-family: 'Segoe UI Historic', Orkun, 'Old Turkic', sans-serif;
}
.Orkh, .Orkh * {
font-style: normal;
}
/* Oriya */
.Orya {
font-family: 'Oriya Sangam MN', sans-serif;
font-size: 125%;
}
.Orya, .Orya * {
font-style: normal;
}
/* Osmanya */
.Osma, .Osma * {
font-style: normal;
}
/* Palmyrene */
.Palm, .Palm * {
font-family: 'Noto Sans Palmyrene';
}
/* Old Permian */
.Perm {
font-family: 'Noto Sans Old Permic';
}
/* Phags-pa */
.Phag {
font-family: 'BabelStone Phags-pa Book', 'Microsoft PhagsPa', sans-serif;
-webkit-writing-mode: vertical-lr;
-moz-writing-mode: vertical-lr;
writing-mode: vertical-lr;
layout-flow: vertical-ideographic;
}
.Phag, .Phag * {
font-style: normal;
}
/* Inscriptional Pahlavi */
.Phli {
font-family: 'Segoe UI Historic', 'Noto Sans Inscriptional Pahlavi', Shapour, 'ZH Mono', sans-serif;
}
.Phli, .Phli * {
font-style: normal;
}
/* Book Pahlavi */
.Phlv, .Phlv * {
font-style: normal;
}
/* Phoenician */
.Phnx {
font-family: 'Segoe UI Historic', 'ALPHABETUM Unicode', 'MPH 2B Damase', Aegean, 'Code2001', 'Free Sans', sans-serif;
font-size: 125%;
direction: rtl;
unicode-bidi: embed;
}
.Phnx, .Phnx * {
font-style: normal;
}
/* Pollard */
.Plrd, .Plrd * {
font-style: normal;
}
/* Parthian */
.Prti {
font-family: 'Segoe UI Historic', 'Noto Sans Inscriptional Parthian', 'ZH Mono', sans-serif;
}
.Prti, .Prti * {
font-style: normal;
}
/* Rejang */
.Rjng, .Rjng * {
font-family: 'Noto Sans Rejang', 'Code2000', sans-serif;
}
/* Runic (Germanic) */
.Runr {
font-family: 'Segoe UI Historic', Junicode, 'Free Mono', 'Caslon Roman', 'Segoe UI Symbol', 'Code2000', 'Everson Mono', 'TITUS Cyberbit Basic', sans-serif;
font-size: 130%;
}
.Runr, .Runr * {
font-style: normal;
}
/* Samaritan */
.Samr {
font-family: 'Noto Sans Samaritan', Quivira, 'Everson Mono', Unifont, sans-serif;
font-size: 150%;
direction: rtl;
unicode-bidi: embed;
}
.Samr, .Samr * {
font-style: normal;
}
/* South Arabian */
.Sarb {
font-family: 'Segoe UI Historic', Qataban, 'Noto Sans Old South Arabian', sans-serif;
}
.Sarb, .Sarb * {
font-style: normal;
}
/* Saurashtra */
.Saur {
font-family: Pagul, sans-serif;
}
.Saur, .Saur * {
font-style: normal;
}
/* SignWriting */
.Sgnw, .Sgnw * {
font-style: normal;
}
/* Shavian */
.Shaw {
font-family: 'Segoe UI Historic', 'Code2001', 'Everson Mono', sans-serif;
}
.Shaw, .Shaw * {
font-style: normal;
}
/* Sharada */
.Shrd {
font-family: 'Noto Sans Sharada', sans-serif;
font-size: 125%;
}
.Shrd, .Shrd * {
font-style: normal;
}
/* Sinhalese */
.Sinh {
font-family: 'Sinhala Sangam MN', KaputaUnicode, KandyUnicode, Dinamina, DinaminaUniWeb, Potha, Madhura, sans-serif;
font-size: 125%;
}
.Sinh, .Sinh * {
font-style: normal;
}
/* Sorang Sompeng */
.Sora, .Sora * {
font-style: normal;
}
/* Sundanese */
.Sund {
font-family: 'Sundanese Unicode', 'Noto Sans Sundanese', sans-serif;
}
.Sund, .Sund * {
font-style: normal;
}
/* Syloti Nagri */
.Sylo {
font-family: 'Noto Sans Syloti Nagri', sans-serif;
}
.Sylo, .Sylo * {
font-style: normal;
}
/* Syriac */
.Syrc {
font-family: 'Estrangelo Edessa', 'San Francisco', 'Code2000', 'Bitstream Cyberbit', 'Bitstream CyberBase', 'Bitstream Vera', 'TITUS Cyberbit Basic', sans-serif;
font-size: 1.3em;
direction: rtl;
unicode-bidi: embed;
}
.Syrc, .Syrc * {
font-style: normal;
}
/* Serto or Western form of Syriac */
.Syrc:lang(tru) {
font-family: 'Noto Sans Syriac Western', 'Serto Jerusalem', 'Noto Sans Syriac';
}
/* Madnhaya or Eastern form of Syriac */
.Syrc:lang(aii) {
font-family: 'Noto Sans Syriac Eastern', 'Noto Sans Syriac';
}
/* Tagbanwa */
.Tagb {
font-family: Quivira, Tagbanwa, sans-serif;
font-size: 1.1em;
}
.Tagb, .Tagb * {
font-style: normal;
}
/* Tai Le */
.Tale {
font-family: 'Microsoft Tai Le', 'Tai Le Valentinium', 'MPH 2B Damase', sans-serif;
}
.Tale, .Tale * {
font-style: normal;
}
/* New Tai Lue */
.Talu {
font-family: 'Noto Sans New Tai Lue', 'Microsoft New Tai Lue', 'Dai Banna SIL Book', 'Husb_New_Tai_Lue_WB', sans-serif;
}
.Talu, .Talu * {
font-style: normal;
}
/* Tamil */
.Taml {
font-family: 'Tamil Sangam MN', InaiMathi, Vijaya, Akshar, JanaTamil, 'Code2000', ETTamilNew, 'Lohit Tamil', 'Arial Unicode MS', 'Free Serif', Latha, sans-serif;
font-size: 125%;
}
.Taml, .Taml * {
font-style: normal;
}
/* Tangut */
.Tang {
font-family: 'BabelStone Tangut Wenhai', 'Tangut N4694', 'Tangut Yinchuan', 'New Tangut', 'New Tangut Std', 'Tangut TWU', 'Babelstone Tangut Wenhai', sans-serif;
font-size: 1.2em;
text-orientation: upright;
-webkit-text-orientation: upright
}
.Tang, .Tang * {
font-style: normal;
font-weight: normal;
}
/* Tai Viet */
.Tavt {
font-family: 'Tai Heritage Pro', 'Noto Sans Tai Viet', sans-serif;
}
.Tavt, .Tavt * {
font-style: normal;
}
/* Telugu */
.Telu {
font-family: 'Telugu Sangam MN', sans-serif;
font-size: 125%;
}
.Telu, .Telu * {
font-style: normal;
}
/* Tifinagh (Berber) */
.Tfng {
font-family: 'Hapax Berbère', Ebrima, 'Code2000', DejaVu, sans-serif;
font-size: 120%;
}
.Tfng, .Tfng * {
font-style: normal;
}
/* Tagalog */
.Tglg {
font-family: 'Noto Sans Tagalog', 'Tagalog Stylized', 'Baybayin Lopez', 'Tagalog Doctrina 1593', 'Noto Sans Hanunoo', 'Code2000', sans-serif;
}
.Tglg, .Tglg * {
font-style: normal;
}
/* Thaana */
.Thaa, .Thaa * {
font-style: normal;
}
/* Thai */
.Thai {
font-family: 'Leelawadee UI', Leelawadee, 'Arial Unicode MS', 'Code2000', sans-serif;
font-size: 125%;
}
.Thai, .Thai * {
font-style: normal;
}
/* Tibetan */
.Tibt,
.xzh-Tibt {
font-family: 'Noto Serif Tibetan', 'Noto Sans Tibetan', Jomolhari-ID, 'Tibetan Machine Uni', 'Tibetan Machine Web', Jomolhari, 'Microsoft Himalaya', sans-serif;
font-size: 130%;
}
.Tibt, .Tibt *,
.xzh-Tibt, .xzh-Tibt * {
font-style: normal;
}
.Tibt.mention {
font-size: 130%;
}
/* Zhang-Zhung */
.xzh-Tibt {
font-family: 'BabelStone Tibetan sMar-chen', sans-serif;
}
/* Ugaritic */
.Ugar {
font-family: 'Oxford Ugaritic', 'Segoe UI Historic', Aegean, 'Code2001', sans-serif;
}
.Ugar, .Ugar * {
font-style: normal;
}
/* Vai */
.Vaii {
font-family: Ebrima, 'Code2000', sans-serif;
font-size: 1.1em;
}
.Vaii, .Vaii * {
font-style: normal;
}
/* Old Persian cuneiform */
.Xpeo {
font-family: 'Segoe UI Historic', Aegean, Xerxes, 'Code2001', sans-serif;
}
.Xpeo, .Xpeo * {
font-style: normal;
}
/* Sumero-Akkadian cuneiform */
.Xsux {
font-family: Akkadian, FreeIdgSerif, CuneiformComposite, 'Segoe UI Historic', sans-serif; /* Neo-Assyrian form */
/* font-family: FreeIdgSerif, Akkadian, CuneiformComposite, 'Segoe UI Historic', sans-serif; */ /* Old Assyrian form */
/* font-family: Akkadian, CuneiformComposite, FreeIdgSerif, 'Segoe UI Historic', sans-serif; /* /* Neo-Sumerian form */
/* font-family: Akkadian, CuneiformComposite, FreeIdgSerif, 'Segoe UI Historic', sans-serif; /* /* Classical Sumerian form */
font-size: 125%;
}
.Xsux, .Xsux * {
font-style: normal;
font-weight: normal;
}
/* Specify Hittite fonts */
.Xsux:lang(hit) {
font-family: UllikummiA, Akkadian, FreeIdgSerif, CuneiformComposite, 'Segoe UI Historic', sans-serif;
}
/* Specify Sumerian fonts */
.Xsux:lang(sux) {
font-family: CuneiformComposite, Akkadian, 'Segoe UI Historic', sans-serif;
}
/* Yi */
.Yiii, .Yiii * {
font-style: normal;
}
/* Mathematical notation */
.Zmth, .Zmth * {
font-style: normal;
}
/* Symbols */
.Zsym {
font-family: Symbola, sans-serif;
font-size: 150%;
}
.Zsym, .Zsym * {
font-style: normal;
}
/* Rumi (Malay) numerals */
.Ruminumerals {
font-size:1.2em;
}
/*
Multilingual writing systems and notations
*/
/* English Phonemic Representation (AHD) */
.enPR {
font-family: 'Arial Unicode MS', 'Lucida Grande', Gentium, 'Gentium Plus', 'Gentium Alternative', 'TITUS Cyberbit Basic', 'Code2000', 'Lucida Sans Unicode', sans-serif;
}
/* International Phonetic Alphabet */
.IPA, .IPAchar {
font-family: Gentium, 'Gentium Plus', GentiumAlt, 'DejaVu Sans', 'Segoe UI', 'Lucida Grande', 'Charis SIL', 'Doulos SIL', 'TITUS Cyberbit Basic', 'Code2000', 'Lucida Sans Unicode', sans-serif;
font-size: 110%;
font-variant-ligatures: no-common-ligatures;
}
.IPA, .IPA *, .IPAchar, .IPAchar * {
font-style: normal;
}
/* Musical notation */
.musical {
font-family: Musica, 'Musical Symbols', Euterpe, sans-serif;
font-size: 1.4em;
}
.musical, .musical * {
font-style: normal;
}
/* A kludge that lets the members of [[:Category:Redirected combining characters]] be displayed. */
body.page-Category_Combining_characters div#mw-pages li,
body.page-Category_Redirected_combining_characters div#mw-pages li,
body.page-Category_IPA_combining_characters div#mw-pages li {
letter-spacing: 0.3em;
}
/* Tabbed Languages support */
#languageLinks .selectedTab a {
font-size: 19px;
color: #000;
padding: 6px;
display: block;
border-left: 1px solid #CCC;
border-bottom: 1px solid #CCC;
margin-bottom: -3px;
background-color: #fff;
margin-right: -6px;
position: relative;
border-top: 1px solid #CCC;
white-space: nowrap;
}
#languageLinks .unselectedTab a {
font-size: 16px;
color: #929292;
padding: 6px;
display: block;
border-left: 1px solid #CCC;
border-top: 1px solid #CCC;
border-bottom: 1px solid #CCC;
margin-bottom: -3px;
margin-left: 15px;
margin-right: -5px;
white-space: nowrap;
background-color: #F6F6F6;
}
#languageLinks tr td {
padding: 0px;
}
tr td.languageContainer {
padding-left: 8px;
padding-bottom: 10px;
padding-right: 8px;
border: 1px solid #CCC;
vertical-align: top;
width: 100%;
}
.unselectedtab {
margin-left: 5px;
}
.editlangsection {
margin-top: -13px;
margin-right: 5px;
border: 1px solid #CCC;
margin-bottom: -2px;
border-bottom-width: 0px;
-webkit-border-top-left-radius: 5px;
-webkit-border-top-right-radius: 5px;
-moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
color: white;
line-height: 14px;
font-size: 12px;
padding: 0px 7px;
text-align: center;
clear: both;
background-color: white;
float: right;
}
#languageLinks a.addLanguageButton {
font-size: 12px;
padding: 3px 6px;
}
@media screen and (max-width:36em) {
#tabstable>tbody>tr>td {
display: block;
float: left;
width: 100%;
}
#languageLinks tr {
display: block;
float: left;
margin-bottom: -3px;
margin-left: -5px;
margin-top: 5px;
}
#languageLinks .unselectedTab a {
margin-left: 0;
margin-right: 5px;
border-right: 1px solid #CCC;
}
#languageLinks .selectedTab a {
margin-left: 0;
margin-right: 5px;
border-right: 1px solid #CCC;
border-bottom: 1px solid #FFF;
}
#tabstable {
width: 100%;
}
#languageLinks a.addLanguageButton {
margin-top: 2px;
margin-bottom: 1px;
}
.editlangsection {
border-bottom-width: 1px;
}
}
/* Grease Pit edit button fix */
.page-Wiktionary_Grease_pit.skin-vector #ca-edit,
.page-Wiktionary_Etymology_scriptorium.skin-vector #ca-edit,
.page-Wiktionary_Information_desk.skin-vector #ca-edit,
.page-Wiktionary_Beer_parlour.skin-vector #ca-edit,
.page-Wiktionary_Tea_room.skin-vector #ca-edit{
display: none;
}
/* Romanization tables
---------- */
table.romanization {
clear: both;
background: white;
white-space: nowrap;
border-collapse: collapse;
border: 1px solid white;
vertical-align: baseline;
text-align: center;
}
table.romanization th,
table.romanization td {
padding: 0.25em;
border: 1px solid white;
}
table.romanization th {
background: rgb(87%, 91%, 96%);
}
table.romanization tr.romanization-source td {
background: rgba(87%, 91%, 96%, 0.5);
}
table.romanization td,
table.romanization tr.romanization-target td {
background: rgb(90%, 90%, 90%);
}
/* -----
end Romanization tables */
/* Definition dates, in {{defdate}} */
.defdate { font-size: smaller; }
/* unit tests filter */
table.unit-tests.unit-tests-hide-passing tr.unit-test-pass {
display: none;
}
table.unit-tests th.unit-tests-img-corner {
background: #def;
min-width: 1em;
}
table.unit-tests.unit-tests-hide-passing th.unit-tests-img-corner {
background: red;
}
/* multi-column lists */
li, .group-in-column {
column-break-inside: avoid;
page-break-inside: avoid;
break-inside: avoid;
-webkit-column-break-inside: avoid;
-webkit-page-break-inside: avoid;
-webkit-break-inside: avoid;
-o-column-break-inside: avoid;
-o-page-break-inside: avoid;
-o-break-inside: avoid;
-moz-column-break-inside: avoid;
-moz-page-break-inside: avoid;
-moz-break-inside: avoid;
}
/* {{shortcut}} */
.shortcut-box,
.category-edit-box {
border: 1px solid #aaa;
color: black;
background: #f9f9f9;
margin: 0 0 .5em 1em;
text-align: center;
padding: 5px;
float: right;
clear: both;
font-weight: bold;
font-size: smaller;
}
/* Display tabs with 4 spaces, see [[phab:T59824]] and [[phab:T59825]] */
textarea#wpTextbox1 + div:last-child, /* workaround for [[mw:User:Remember the dot/Syntax highlighter]] */
textarea, pre, code, .mw-highlight {
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
}
/* stop double-bolding of self-links like in [[acquit]], [[fishbone]] */
/* old code: b .selflink, strong .selflink { font-weight: inherit; } */
b, strong {
font-weight: bold;
}
/* archive templates */
.archive-box {
border: 1px #AAAAAA solid;
padding: 3px 10px;
margin-bottom: 1em;
color: black;
background: #F9F9F9;
}
.archive-box.archive-passed {
color: black;
background: #F3F9FF;
}
.archive-box.archive-failed {
color: black;
background: #F9F3FF;
}
tr:target {
background: #def;
}
.character-sample {
display: inline-block;
min-width: 1em;
font-size: 300%;
text-align: center;
background: rgba(0, 0, 0, 0.1);
}
.character-sample > :only-child {
display: block;
}
.character-sample-primary{
display: inline-table;
min-width: 1.1em;
font-size: 300%;
line-height: 110%;
text-align: center;
background: rgba(0, 0, 0, 0.1);
height: 1.1em;
}
.character-sample-secondary {
display: inline-block;
min-width: 1em;
text-align: center;
}
table.symboltable td {
font-family: 'DejaVu Sans', Symbola, Quivira, sans-serif;
text-align: center;
}
#firstHeading var, .headword var {
color: #888;
}
body[class*="page-Template_table"] .CategoryTreeLabel {
font-style: inherit;
}
body[class*="page-Template_table"] .CategoryTreeLabel:before {
content: "•";
padding-right: 0.75em;
}
/* Temporary kludge to be used because categoryTree is generating a newline. This CSS line should be removed after the developers fix it. */
.CategoryTreeTag + p br:first-child{display:none;}
.vsShow {
display: none;
}
/* Used by column templates (see [[Module:columns]]). */
.ul-column-count[data-column-count="2"] > ul,
.ul-column-count[data-column-count="2"] > ol,
.ul-column-count[data-column-count="2"] > dl {
-moz-column-count: 2; -webkit-column-count: 2; -ms-column-count: 2; column-count: 2;
}
.ul-column-count[data-column-count="3"] > ul,
.ul-column-count[data-column-count="3"] > ol,
.ul-column-count[data-column-count="3"] > dl {
-moz-column-count: 3; -webkit-column-count: 3; -ms-column-count: 3; column-count: 3;
}
.ul-column-count[data-column-count="4"] > ul,
.ul-column-count[data-column-count="4"] > ol,
.ul-column-count[data-column-count="4"] > dl {
-moz-column-count: 4; -webkit-column-count: 4; -ms-column-count: 4; column-count: 4;
}
.ul-column-count[data-column-count="5"] > ul,
.ul-column-count[data-column-count="5"] > ol,
.ul-column-count[data-column-count="5"] > dl {
-moz-column-count: 5; -webkit-column-count: 5; -ms-column-count: 5; column-count: 5;
}
.ul-column-count[data-column-count="6"] > ul,
.ul-column-count[data-column-count="6"] > ol,
.ul-column-count[data-column-count="6"] > dl {
-moz-column-count: 6; -webkit-column-count: 6; -ms-column-count: 6; column-count: 6;
}
/* Default style for hypothetical inflections -- currently italic. */
.hypothetical {
font-style: italic;
}
/* Style for entries using deprecated templates */
.deprecated {
color: olivedrab;
}
.deprecated a {
color: darkgreen;
}
/* == wrap toggle links with [ and ] == */
.HQToggle:before, .NavToggle:before, .nyms-toggle:before, .usex-toggle:before {
content:'[';
}
.HQToggle:after, .NavToggle:after, .nyms-toggle:after, .usex-toggle:after {
content:']';
}
.HQToggle a, .NavToggle a, .nyms-toggle a, .usex-toggle a {
user-select: none;
}
.client-js .NavFrame .NavContent {
display: none;
}
.client-js .not .NavContent { /* ??? */
display: block;
}
/* Hidden quotes */
.client-js .ns-0 ol>li>ul {
display: none;
}
/* WikiHiero kludge */
/* disable for now, apparently not necessary and breaks wrapping
.wikt-hierokludge {
display: inline-block;
} */
/* Support lists that automatically split into limited-width columns (for translations tables and the like): */
.multicolumn-list > ul {
-webkit-column-width: 25em;
-moz-column-width: 25em;
-ms-column-width: 25em;
column-width: 25em;
column-gap: 20px;
}
.multicolumn-list-wide > ul {
-webkit-column-width: 55em;
-moz-column-width: 55em;
-ms-column-width: 55em;
column-width: 55em;
column-gap: 20px;
}
.multicolumn-list-narrow > ul {
-webkit-column-width: 22em;
-moz-column-width: 22em;
-ms-column-width: 22em;
column-width: 22em;
column-gap: 20px;
}
/* Horizontal rules */
body.ns-0 .mw-parser-output > :not(.collapsible-block) + h2:not(:first-of-type) {
border-top: 1px solid #a2a9b1;
padding-top: 1em;
margin-top: 0.2em;
}
body.ns-0 hr {
display: none;
}
/* </nowiki> */
/* T156351: Support for Parsoid's Cite implementation */
a[ rel="mw:referencedBy" ]::before {
content: " ^";
}
/* بەرچاوکردنی تاگەکان */
.mw-tag-marker {
background-color:#FFE599;
}
mam1srhin07rv0rg3orkw7vaeah26io
میدیاویکی:Gadgets-definition
8
7833
47387
47236
2026-10-15T13:51:55Z
Sakura emad
13
Added missing module dependencies for CatMaker and RedirectMaker
47387
wikitext
text/x-wiki
بۆ بەڵگەنامەدارکردنی ئەم ئامرازانە، بڕوانە [[تایبەت:ئامرازەکان]]. بۆ زانیاریی گشتی لەسەر ئامرازەکانی ویکیفەرھەنگ، بڕوانە [[ویکیفەرھەنگ:ئامراز|ئامرازەکان]]. ھەروەھا بۆ ھەڵبژاردەکانی تر، بڕوانە [[وف:ھەڵبژاردەکان]].
== not yet sorted ==
* FloatNavToggleRight|FloatNavToggleRight.css
== appearance ==
* myGadgets[default|rights=minoredit|dependencies=mediawiki.util]|myGadgets.js
* dark-mode-toggle [dependencies=mediawiki.util, mediawiki.api, mediawiki.Uri, mediawiki.storage |peers=dark-mode-toggle-pagestyles] |dark-mode-toggle.js
* dark-mode-toggle-pagestyles [hidden |skins=vector, vector-2022, minerva, monobook] |dark-mode-toggle-pagestyles.css
* MoreMenu-local[dependencies=mediawiki.api,mediawiki.util,user.options]|MoreMenu-local.js
* UTCLiveClock[supportsUrlLoad|type=general|dependencies=mediawiki.util,mediawiki.api|peers=UTCLiveClock-pagestyles]|UTCLiveClock.js|UTCLiveClock.css
* UTCLiveClock-pagestyles[hidden|skins=vector,vector-2022,monobook]|UTCLiveClock-pagestyles.css
== interface-gadgets ==
* Navigation_popups[dependencies=mediawiki.user,mediawiki.util,user.options,mediawiki.util|type=general]|popups.js|navpop.css
* lastedited[dependencies=mediawiki.util]|lastedited&quickeditcounter.js
== editing-gadgets ==
* quickLinker[dependencies=mediawiki.util,mediawiki.api]|quickLinker.js|quickLinker.css
* HotCat[rights=autoconfirmed|dependencies=mediawiki.util]|HotCat.js
* Cat-a-lot[rights=autoconfirmed|dependencies=mediawiki.util]|Cat-a-lot.css|Cat-a-lot.js
* CatMaker[dependencies=mediawiki.util,mediawiki.api,mediawiki.ForeignApi,jquery.ui]|CatMaker.js
* RedirectMaker[dependencies=jquery.ui,mediawiki.util,mediawiki.api]|RedirectMaker.js
* charinsert [default |actions=edit] |charinsert.js
* charinsert-core [hidden |dependencies=jquery.textSelection, user, mediawiki.storage] |charinsert-styles.css |charinsert-core.js
* FastRevert[dependencies=mediawiki.util]|FastRevert.js
* DotsSyntaxHighlighter|DotsSyntaxHighlighter.js
* TranslationAdder[rights=delete|dependencies=ext.gadget.Editor,ext.gadget.LegacyScriptsNewNode,mediawiki.cookie,ext.gadget.LanguageUtils,mediawiki.util,ext.gadget.TranslationAdder-Data]|TranslationAdder.js
== discussion ==
* autosign[default]|autosign.js
* DiscussionCloser|DiscussionCloser.js|DiscussionCloser.css
* signit|signit.js
* close[dependencies=mediawiki.util]|close.js|close.css
== Test ==
* Extra-Editbuttons[dependencies=mediawiki.util]|Extra-Editbuttons.js|Extra-Editbuttons-kurdishtools.js|Extra-Editbuttons-kurdishwikitools.js|Extra-Editbuttons-dictionary.js|Extra-Editbuttons-template.js|Extra-Editbuttons-autoed.js|Extra-Editbuttons-botworks.js
== modules ==
* dark-mode [supportsUrlLoad |skins=vector, vector-2022, monobook, modern, minerva, timeless] |dark-mode.css
== Hidden gadgets and utils ==
* Editor[hidden|dependencies=mediawiki.util,mediawiki.api]|Editor.js
* LegacyScriptsNewNode[hidden|targets=desktop,mobile]|LegacyScriptsNewNode.js
* LanguageUtils[hidden|dependencies=mediawiki.api,ext.gadget.StorageUtils]|LanguageUtils.js
* StorageUtils[hidden|dependencies=mediawiki.cookie,mediawiki.storage]|StorageUtils.js
* TranslationAdder-Data[hidden|dependencies=mediawiki.api,mediawiki.Uri,ext.gadget.LanguageUtils]|TranslationAdder-Data.js
* VisibilityToggles[hidden|targets=desktop,mobile|dependencies=user,mediawiki.cookie]|VisibilityToggles.js
* defaultVisibilityToggles[hidden|default|targets=desktop,mobile|dependencies=ext.gadget.VisibilityToggles]|defaultVisibilityToggles.js
gxd4koq86wwlhh604cks872lly8yhn9
مۆدیوول:message box
828
10682
47384
47369
2026-10-15T13:10:34Z
Sakura emad
13
Restored Wiktionary's own message box module (rev 33891 by Aram), used by {{auto cat}}; Wikipedia's code now lives at [[Module:Message box]]
47384
Scribunto
text/plain
local html_create = mw.html.create
local tostring = tostring
local export = {}
local function make_box(tag, rows, image, header, text)
tag = tag:addClass("noprint")
:tag("table")
:tag("tr")
:tag("td")
if rows > 1 then
tag:attr("rowspan", rows)
end
tag = tag:wikitext(image)
:done()
if header then
tag = tag:node(header)
:done()
:tag("tr")
end
return tostring(tag:tag("td")
:wikitext(text)
:allDone()) ..
require("Module:TemplateStyles")("Module:message box/styles.css")
end
function export.maintenance(color, image, title, text)
local div = html_create("div")
:addClass("maintenance-box")
:addClass("maintenance-box-" .. color)
local header = html_create("th")
:css("text-align", "left")
:wikitext(title)
return make_box(div, 2, image, header, text)
end
function export.request(image, text)
local div = html_create("div")
:addClass("request-box")
return make_box(div, 1, image, nil, text)
end
return export
0njvtu4cuuvz98uci9fdhcz9qzscuod
ھۆژین
0
10938
47399
36595
2026-10-15T16:28:12Z
Ghybu
12
/* کوردیی ناوەندی */
47399
wikitext
text/x-wiki
== کوردیی ناوەندی ==
=== وشەڕەتناسی ===
پەیوەندیدارە بە وشەی [[ھۆش]] (بیر، زەین، ئاگا).
=== گۆکردن ===
* {{IPA|ckb|/hoːˈʒiːn/}}
=== ناو ===
{{ckb-noun}}
# بیرکردنەوەی قووڵ، ڕامان و تێفکرینی ورد لەسەر شتێک؛ ژیری و تێگەیشتنی بەرز.
#: {{ux|ckb|نموونە: پاش خوێندنەوەی کتێبەکە، کەوتە '''هۆژین'''ێکی قووڵەوە.|tr=-}}
==== هاوواتا ====
* [[ڕامان]]
* [[تێفکرین]]
* [[بیرکردنەوەی قووڵ]]
==== وەرگێڕانەکان ====
{{trans-top|بیرکردنەوەی قووڵ}}
* ئینگلیزی: {{t+|en|contemplation}}, {{t+|en|deep thought}}, {{t+|en|reflection}}
* عەرەبی: {{t+|ar|تَأَمُّل|m}}, {{t+|ar|تَفَكُّر|m}}
{{trans-mid}}
* فارسی: {{t+|fa|تأمل|tr=ta'ammol}}, {{t|fa|اندیشه عمیق|tr=andiše-ye amiq}}
* تورکی: {{t+|tr|derin düşünce}}
{{trans-bottom}}
f9ffpe247ljg3rlvnkciah3akv6yzjm
بیرکردنەوەی قووڵ
0
10939
47397
38654
2026-10-15T16:16:45Z
Ghybu
12
/* کوردیی ناوەندی */
47397
wikitext
text/x-wiki
== کوردیی ناوەندی ==
=== وشەڕەتناسی ===
لێکدراوە لە [[بیرکردنەوە]] + [[ی]] (ئیزافە) + [[قووڵ]].
=== گۆکردن ===
* {{IPA|ckb|/biːrkɪrdɪnɛwɛj quːɭ/}}
=== ناو ===
{{ckb-phrase}}
# تێفکرینی ورد و چڕ لەسەر بابەتێک؛ ڕامان.
#: {{ux|ckb|نموونە: گەیشتن بە چارەسەرێکی باش پێویستی بە '''بیرکردنەوەیەکی قووڵ''' هەیە.|tr=-}}
==== هاوواتا ====
* [[ھۆژین]]
* [[ڕامان]]
* [[تێفکرین]]
==== وەرگێڕانەکان ====
{{trans-top|تێفکرینی ورد و چڕ}}
* ئینگلیزی: {{t+|en|deep thought}}, {{t+|en|contemplation}}
* عەربی: {{t+|ar|تَفْكِير عَمِيق|m}}
{{trans-mid}}
* فارسی: {{t|fa|تفکر عمیق|tr=tafakkor-e amiq}}, {{t|fa|اندیشه ژرف|tr=andiše-ye žarf}}
* تورکی: {{t+|tr|derin düşünce}}
{{trans-bottom}}
qt1390diraqkzblgakejgr1fngjfubi
تێفکرین
0
10954
47400
38661
2026-10-15T16:28:48Z
Ghybu
12
/* کوردیی ناوەندی */
47400
wikitext
text/x-wiki
== کوردیی ناوەندی ==
=== وشەڕەتناسی ===
وەرگیراوە لە وشەی عەرەبیی [[تَفْكِير]] (tafkīr).
=== گۆکردن ===
* {{IPA|ckb|/teːfɪkˈriːn/}}
=== ناو ===
{{ckb-noun}}
# بیرکردنەوەی قووڵ و ورد لەسەر بابەتێک؛ ڕامان.
#: {{ux|ckb|نموونە: چارەسەری کێشەکە پێویستی بە '''تێفکرین'''ێکی زۆر ھەیە.|tr=-}}
==== ھاوواتا ====
* [[ھۆژین]]
* [[ڕامان]]
* [[بیرکردنەوەی قووڵ]]
==== وەرگێڕانەکان ====
{{trans-top|بیرکردنەوەی قووڵ}}
* ئینگلیزی: {{t+|en|thinking}}, {{t+|en|reflection}}, {{t+|en|contemplation}}
* عەرەبی: {{t+|ar|تَفْكِير|m}}
{{trans-mid}}
* فارسی: {{t+|fa|تفکر|tr=tafakkor}}, {{t+|fa|اندیشیدن|tr=andišidan}}
* تورکی: {{t+|tr|düşünme}}, {{t+|tr|tefekkür}}
{{trans-bottom}}
gjo1w0pryevykybftmcuiopjlzsjvci
میدیاویکی:Gadget-close.js
8
11686
47396
47301
2026-10-15T15:57:21Z
Sakura emad
13
Local Wiktionary version of the close gadget (no longer loads from ckbwiki).
47396
javascript
text/javascript
/*
* MediaWiki:Gadget-close.js — ویکیفەرھەنگ (ckb.wiktionary.org)
* Local version adapted from [[w:MediaWiki:Gadget-close.js]] (ckbwiki).
* Adds «دەنگ بدە / داخستن» links next to section edit links on project
* pages (namespace 4) and talk pages.
*/
// <nowiki>
( function ( $, mw ) {
'use strict';
var OOUI_MODULES = [ 'oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows' ];
var api = null; // created once mediawiki.api has loaded (see bottom)
var pageName = mw.config.get( 'wgPageName' );
var windowManager = null;
// Only templates that exist on ckbwiktionary.
// vote: true → added as a new list line at the end, no indentation
// prefix: true → starts with "* " (or "# " in numbered discussions)
var COMMENT_TYPES = [
{ data: 'info', icon: 'share', label: 'پەیام', text: '', summary: 'تۆمارکردنی پەیام' },
{ data: 'opinion', icon: 'info', label: 'لێدوان', text: '{{لێدوان}} ', summary: 'تۆمارکردنی لێدوان', prefix: true },
{ data: 'done', icon: 'check', label: 'کرا', text: '{{کرا}} ', summary: 'کرا' },
{ data: 'notdone', icon: 'close', label: 'نەکرا', text: '{{نەکرا}} ', summary: 'نەکرا' },
{ data: 'agree', icon: 'add', label: 'لەگەڵ', text: '{{لەگەڵ}} ', summary: 'تۆمارکردنی لێدوان بە لەگەڵ', prefix: true, vote: true },
{ data: 'contrary', icon: 'subtract', label: 'دژ', text: '{{دژ}} ', summary: 'تۆمارکردنی لێدوان بە دژ', prefix: true, vote: true },
{ data: 'neutral', icon: 'ellipsis', label: 'بێلایەن', text: '{{بێلایەن}} ', summary: 'تۆمارکردنی لێدوان بە بێلایەن', prefix: true, vote: true },
{ data: 'question', icon: 'help', label: 'پرسیار', text: '{{پرسیار}} ', summary: 'تۆمارکردنی پرسیار' }
];
function getType( data ) {
for ( var i = 0; i < COMMENT_TYPES.length; i++ ) {
if ( COMMENT_TYPES[ i ].data === data ) {
return COMMENT_TYPES[ i ];
}
}
return COMMENT_TYPES[ 0 ];
}
/* ---------- wikitext helpers ---------- */
function sectionTitle( text ) {
var m = text.match( /^(=+)\s*(.*?)\s*\1\s*$/m );
return m ? m[ 2 ] : 'بەشی دەستپێک';
}
// Text of the section above its first sub-heading, or null if there is none.
function topPart( text ) {
var lines = text.split( '\n' );
for ( var i = 1; i < lines.length; i++ ) {
if ( /^={2,}[^=].*?={2,}\s*$/.test( lines[ i ] ) ) {
return lines.slice( 0, i ).join( '\n' ).replace( /\s+$/, '' );
}
}
return null;
}
// indentMode: 1 = reply to previous, 2 = same level, 3 = start of line
function addIndented( text, newText, indentMode ) {
text = text.replace( /\r/g, '' ).replace( /\s+$/, '' );
var lines = text.split( '\n' );
var m = lines[ lines.length - 1 ].match( /^([#*]?)(:*)/ );
var listChar = m[ 1 ];
var colons = m[ 2 ].length;
if ( indentMode === 2 ) {
colons -= 1;
}
var indent = '';
if ( indentMode !== 3 ) {
for ( var i = 0; i < colons + 1; i++ ) {
indent += ':';
}
}
return text + '\n' + listChar + indent +
newText.trim().replace( /\n/g, '\n' + listChar + indent );
}
function pingedUsers( text ) {
var re = /\[\[(?:لێدوانی[_ ]بەکارھێنەر|[Uu]ser[_ ][Tt]alk|بەکارھێنەر|[Uu]ser):([^\]|\/#]+)/g;
var me = mw.config.get( 'wgUserName' );
var names = [];
var m;
while ( ( m = re.exec( text ) ) !== null ) {
var name = m[ 1 ].trim();
if ( name && name !== me && names.indexOf( name ) === -1 ) {
names.push( name );
}
}
return names;
}
/* ---------- API ---------- */
function fetchSection( section ) {
return api.get( {
action: 'query',
prop: 'revisions',
titles: pageName,
rvsection: section,
rvprop: 'content|timestamp',
rvslots: 'main',
curtimestamp: 1,
formatversion: 2
} ).then( function ( data ) {
var page = data.query && data.query.pages && data.query.pages[ 0 ];
if ( !page || page.missing || !page.revisions ) {
return $.Deferred().reject( 'nosection' ).promise();
}
var rev = page.revisions[ 0 ];
return {
text: rev.slots.main.content,
basetimestamp: rev.timestamp,
starttimestamp: data.curtimestamp
};
} );
}
function saveSection( section, text, summary, info ) {
return api.postWithEditToken( {
action: 'edit',
title: pageName,
section: section,
text: text,
summary: summary,
basetimestamp: info.basetimestamp,
starttimestamp: info.starttimestamp,
formatversion: 2
} );
}
function asProcessError( code ) {
var msg = code === 'editconflict' ?
'ناکۆکیی دەستکاری: کەسێکی تر لە ھەمان کاتدا ئەم بەشەی گۆڕیوە. پەڕەکە نوێ بکەرەوە.' :
'تۆمارکردن سەرکەوتوو نەبوو: ' + code;
return $.Deferred().reject( new OO.ui.Error( msg, { recoverable: false } ) ).promise();
}
function openDialog( dialog ) {
if ( windowManager ) {
windowManager.$element.remove();
}
windowManager = new OO.ui.WindowManager();
$( document.body ).append( windowManager.$element );
windowManager.addWindows( [ dialog ] );
windowManager.openWindow( dialog );
}
/* ---------- «داخستن» dialog ---------- */
function openArchiveDialog( section ) {
function ArchiveDialog( config ) {
ArchiveDialog.super.call( this, config );
}
OO.inheritClass( ArchiveDialog, OO.ui.ProcessDialog );
ArchiveDialog.static.name = 'closeSectionArchive';
ArchiveDialog.static.title = 'داخستنی بەش';
ArchiveDialog.static.actions = [
{ action: 'archive', label: 'داخستنی بەش', flags: [ 'primary', 'progressive' ] },
{ label: 'ھەڵوەشاندنەوە', flags: 'safe' }
];
ArchiveDialog.prototype.initialize = function () {
ArchiveDialog.super.prototype.initialize.apply( this, arguments );
this.switchTop = new OO.ui.ToggleSwitchWidget( { value: false } );
this.switchSuccess = new OO.ui.ToggleSwitchWidget( { value: true } );
this.switchDone = new OO.ui.ToggleSwitchWidget( { value: false } );
this.switchBold = new OO.ui.ToggleSwitchWidget( { value: false } );
this.summary = new OO.ui.MultilineTextInputWidget( {
placeholder: 'دەقی داخستنەکە داخڵ بکە',
rows: 6
} );
var fieldset = new OO.ui.FieldsetLayout();
fieldset.addItems( [
new OO.ui.FieldLayout( this.switchTop, { label: 'دەقی داخستنەکە ببە سەرەوە', align: 'inline' } ),
new OO.ui.FieldLayout( this.switchSuccess, { label: 'وتووێژەکە بە گەیشتن بە یەکدەنگی سەرکەوتوو بوو', align: 'inline' } ),
new OO.ui.FieldLayout( this.switchDone, { label: 'بەپێی سەرکەوتووبوون یان نەبوون، {{کرا}} یان {{نەکرا}} زیاد بکە', align: 'inline' } ),
new OO.ui.FieldLayout( this.switchBold, { label: 'دەقی داخستنەکە بە تۆخ پیشان بدە', align: 'inline' } ),
new OO.ui.FieldLayout( this.summary, { label: 'داخستنی بەش:', align: 'top' } )
] );
this.panel = new OO.ui.PanelLayout( { padded: true, expanded: false } );
this.panel.$element.append( fieldset.$element );
this.$body.append( this.panel.$element );
};
ArchiveDialog.prototype.getBodyHeight = function () {
return this.panel.$element.outerHeight( true );
};
ArchiveDialog.prototype.buildText = function ( current ) {
var nl = current.indexOf( '\n' );
var header = nl === -1 ? current : current.slice( 0, nl );
var content = nl === -1 ? '' : current.slice( nl + 1 );
var success = this.switchSuccess.getValue();
var input = this.summary.getValue().trim();
var newText = header + '\n{{بەسراو|کات={{subst:' + 'CURRENTTIMESTAMP}}' +
( success ? '}}\n' : '|سەرکەوتوو_نەبوو=بەڵێ}}\n' );
if ( this.switchDone.getValue() ) {
input = ( success ? '{{کرا}}' : '{{نەکرا}}' ) + input;
}
var closingNote = '';
if ( input ) {
closingNote = ( this.switchBold.getValue() ? "'''" + input + "'''" : input ) +
' ~~' + '~~';
}
if ( this.switchTop.getValue() ) {
if ( closingNote ) {
newText += ':' + closingNote + '\n';
}
newText += content;
} else {
newText = closingNote ?
addIndented( newText + content, closingNote, 1 ) :
newText + content;
}
return newText.replace( /\s+$/, '' ) + '\n{{کۆتایی بەسراو}}';
};
ArchiveDialog.prototype.getActionProcess = function ( action ) {
var dialog = this;
if ( action === 'archive' ) {
return new OO.ui.Process( function () {
return fetchSection( section ).then( function ( info ) {
var summary = '/* ' + sectionTitle( info.text ) + ' */ داخستنی بەش: ' +
dialog.summary.getValue().trim();
return saveSection( section, dialog.buildText( info.text ), summary, info );
} ).then( function () {
mw.notify( 'بەشەکە داخرا.' );
location.reload();
}, asProcessError );
} );
}
return ArchiveDialog.super.prototype.getActionProcess.call( this, action );
};
openDialog( new ArchiveDialog( { size: 'medium' } ) );
}
/* ---------- «دەنگ بدە» dialog ---------- */
function openCommentDialog( section ) {
fetchSection( section ).then( function ( info ) {
var onlyTop = false;
var top = topPart( info.text );
if ( top !== null ) {
onlyTop = confirm( 'ئەم بەشە ژێربەشیشی ھەیە! بۆ ناردنی دەق، مەبەستت بەشی سەرترە؟\n' +
'OK = پەیامەکە لە بەشی سەرتر دادەنرێت.\n' +
'Cancel = پەیامەکە لە کۆتایی بەشەکە دادەنرێت.' );
}
var users = pingedUsers( info.text );
function CommentDialog( config ) {
CommentDialog.super.call( this, config );
}
OO.inheritClass( CommentDialog, OO.ui.ProcessDialog );
CommentDialog.static.name = 'closeSectionComment';
CommentDialog.static.title = 'دەقی لێدوان';
CommentDialog.static.actions = [
{ action: 'comment', label: 'تۆمارکردن', flags: [ 'primary', 'progressive' ] },
{ action: 'preview', label: 'پێشبینین', icon: 'eye' },
{ action: 'cancel', label: 'دای بخە', flags: 'safe' }
];
CommentDialog.prototype.initialize = function () {
CommentDialog.super.prototype.initialize.apply( this, arguments );
var dialog = this;
this.btnReply = new OO.ui.ButtonOptionWidget( { data: 1, label: 'وەڵامی پێشوو', title: 'پەیامەکە لە وەڵامی کەسی پێشوو دەنووسرێ.' } );
this.btnSame = new OO.ui.ButtonOptionWidget( { data: 2, label: 'بەبێ بردنەپێش', title: 'پەیامەکە بەبێ بردنەپێش دەنووسرێ.' } );
this.btnNone = new OO.ui.ButtonOptionWidget( { data: 3, label: 'سەری دێڕ', title: 'پەیامەکە لە سەری دێڕ دەست پێ دەکات.' } );
this.indentSelect = new OO.ui.ButtonSelectWidget( { items: [ this.btnReply, this.btnSame, this.btnNone ] } );
this.indentSelect.selectItem( this.btnReply );
this.typeDropdown = new OO.ui.DropdownWidget( {
menu: {
items: COMMENT_TYPES.map( function ( t ) {
return new OO.ui.MenuOptionWidget( { data: t.data, icon: t.icon, label: t.label } );
} )
}
} );
this.typeDropdown.getMenu().selectItemByData( 'info' );
this.typeDropdown.getMenu().on( 'select', function ( item ) {
var isVote = item && getType( item.getData() ).vote;
dialog.btnReply.setDisabled( !!isVote );
dialog.btnSame.setDisabled( !!isVote );
dialog.indentSelect.selectItem( isVote ? dialog.btnNone : dialog.btnReply );
} );
this.pingSelect = new OO.ui.MenuTagMultiselectWidget( {
inputPosition: 'outline',
allowArbitrary: true,
options: users.map( function ( u ) {
return { data: u, label: u };
} ),
placeholder: 'ناوی ئەو بەکارھێنەرە بنووسە کە دەتەوێ وەڵامی بدەیتەوە'
} );
this.comment = new OO.ui.MultilineTextInputWidget( {
placeholder: 'دەقی لێدوانەکە داخڵ بکە',
rows: 6,
autosize: true
} );
var toolbar = new OO.ui.HorizontalLayout( {
items: [
this.makeTool( 'bold', 'دەقی تۆخ', "'''", "'''" ),
this.makeTool( 'italic', 'دەقی لار', "''", "''" ),
this.makeTool( 'link', 'ویکیبەستەر', '[[', ']]' ),
this.makeTool( 'bigger', 'دەقی گەورەتر', '<big>', '</big>' ),
this.makeTool( 'smaller', 'دەقی بچووکتر', '<small>', '</small>' ),
this.makeTool( 'newline', 'دێڕی نوێ', '<br>', '' )
]
} );
var fieldset = new OO.ui.FieldsetLayout();
fieldset.addItems( [
new OO.ui.FieldLayout( this.pingSelect, { label: 'بانگکردنی بەکارھێنەر:', align: 'top' } ),
new OO.ui.FieldLayout( this.indentSelect, { label: 'بردنەپێش:', align: 'top' } ),
new OO.ui.FieldLayout( this.typeDropdown, { label: 'تاگی پێش لێدوان:', align: 'top' } ),
new OO.ui.FieldLayout( toolbar ),
new OO.ui.FieldLayout( this.comment, { label: 'دەقی لێدوان:', align: 'top' } )
] );
this.$preview = $( '<div>' ).css( {
display: 'none',
marginTop: '1em',
padding: '0.5em',
border: '1px solid var(--border-color-subtle, #c8ccd1)'
} );
this.panel = new OO.ui.PanelLayout( { padded: true, expanded: false } );
this.panel.$element.append( fieldset.$element, this.$preview );
this.$body.append( this.panel.$element );
};
CommentDialog.prototype.makeTool = function ( icon, title, before, after ) {
var dialog = this;
var button = new OO.ui.ButtonWidget( { framed: false, icon: icon, title: title, invisibleLabel: true, label: title } );
button.on( 'click', function () {
var el = dialog.comment.$input[ 0 ];
var start = el.selectionStart;
var end = el.selectionEnd;
var value = dialog.comment.getValue();
dialog.comment.setValue( value.slice( 0, start ) + before + value.slice( start, end ) + after + value.slice( end ) );
el.focus();
el.selectionStart = el.selectionEnd = end + before.length + after.length;
} );
return button;
};
CommentDialog.prototype.getBodyHeight = function () {
return this.panel.$element.outerHeight( true );
};
CommentDialog.prototype.buildText = function () {
var type = getType( this.typeDropdown.getMenu().findSelectedItem().getData() );
var indentMode = this.indentSelect.findSelectedItem().getData();
var listPrefix = /\n#/.test( info.text ) ? '# ' : '* ';
var pinged = this.pingSelect.getValue();
var pingText = pinged.length ? '{{وب|' + pinged.join( '|' ) + '}}' : '';
var newText = ( type.prefix ? listPrefix : '' ) + pingText + type.text +
this.comment.getValue().trim() + ' ~~' + '~~';
var base = onlyTop ? top : info.text.replace( /\s+$/, '' );
var updated = type.vote ?
base + '\n' + newText :
addIndented( base, newText, indentMode );
var full = onlyTop ? updated + info.text.slice( top.length ) : updated;
var summary = '/* ' + sectionTitle( info.text ) + ' */ ' + type.summary +
( pinged.length ? ' + وەڵام بۆ بەکارھێنەر: ' + pinged.join( '، ' ) : '' );
return { text: full, summary: summary, comment: newText };
};
CommentDialog.prototype.getActionProcess = function ( action ) {
var dialog = this;
if ( action === 'comment' ) {
return new OO.ui.Process( function () {
if ( !dialog.comment.getValue().trim() &&
getType( dialog.typeDropdown.getMenu().findSelectedItem().getData() ).data === 'info' ) {
return $.Deferred().reject( new OO.ui.Error( 'تکایە دەقی لێدوانەکە بنووسە.' ) ).promise();
}
var built = dialog.buildText();
return saveSection( section, built.text, built.summary, info ).then( function () {
mw.notify( 'لێدوانەکەت تۆمار کرا.' );
location.reload();
}, asProcessError );
} );
}
if ( action === 'preview' ) {
return new OO.ui.Process( function () {
var built = dialog.buildText();
return api.post( {
action: 'parse',
text: built.comment,
title: pageName,
pst: true,
prop: 'text',
disablelimitreport: true,
formatversion: 2
} ).then( function ( data ) {
dialog.$preview.html( data.parse.text ).show();
dialog.updateSize();
}, function ( code ) {
return $.Deferred().reject( new OO.ui.Error( 'پێشبینین سەرکەوتوو نەبوو: ' + code ) ).promise();
} );
} );
}
if ( action === 'cancel' ) {
return new OO.ui.Process( function () {
dialog.close();
} );
}
return CommentDialog.super.prototype.getActionProcess.call( this, action );
};
openDialog( new CommentDialog( { size: 'large' } ) );
}, function ( code ) {
mw.notify( 'خوێندنەوەی بەشەکە سەرکەوتوو نەبوو: ' + code, { type: 'error' } );
} );
}
/* ---------- links next to section headings ---------- */
function addLinks( $content ) {
$content.find( '.mw-editsection' ).each( function () {
var $editSection = $( this );
if ( $editSection.closest( '#firstHeading, .mw-first-heading' ).length ||
$editSection.next( '.mw-archivesection' ).length ) {
return;
}
// Only sections of this page; transcluded sections use "section=T-n" and are skipped.
var section = null;
$editSection.find( 'a' ).each( function () {
var m = ( $( this ).attr( 'href' ) || '' ).match( /[?&](?:ve)?section=(\d+)(?:&|$)/ );
if ( m && section === null ) {
section = m[ 1 ];
}
} );
if ( section === null ) {
return;
}
function link( text, title, opener ) {
return $( '<a>' ).attr( { href: '#', title: title } ).css( 'font-size', 'smaller' ).text( text )
.on( 'click', function ( e ) {
e.preventDefault();
e.stopPropagation(); // don't collapse the section on mobile
mw.loader.using( OOUI_MODULES ).then( function () {
opener( section );
} );
} );
}
$( '<span>' ).addClass( 'mw-archivesection' ).append(
$( '<span>' ).addClass( 'mw-editsection-bracket' ).text( '[' ),
link( 'دەنگ بدە', 'بە لەگەڵ/دژ/کرا/… دەنگ بدە', openCommentDialog ),
$( '<span>' ).text( ' / ' ).css( 'color', 'var(--color-subtle, #54595d)' ),
link( 'داخستن', 'ئەم بەشە داخە', openArchiveDialog ),
$( '<span>' ).addClass( 'mw-editsection-bracket' ).text( ']' )
).insertAfter( $editSection );
} );
}
var ns = mw.config.get( 'wgNamespaceNumber' );
if ( ( ns === 4 || ns % 2 === 1 ) && mw.config.get( 'wgAction' ) === 'view' ) {
mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] ).then( function () {
if ( mw.util.getParamValue( 'oldid' ) || mw.util.getParamValue( 'diff' ) ) {
return;
}
api = new mw.Api();
mw.hook( 'wikipage.content' ).add( addLinks );
mw.loader.load( OOUI_MODULES );
} );
}
}( jQuery, mediaWiki ) );
// </nowiki>
9omts0alo8r3hxjgwh6yn528gm685x6
47398
47396
2026-10-15T16:17:03Z
Sakura emad
13
Refactored, Bugs fixed, tailored for Wiktionary instead of ckbwiki
47398
javascript
text/javascript
/*
* MediaWiki:Gadget-close.js — ویکیفەرھەنگ (ckb.wiktionary.org)
* Local version adapted from [[w:MediaWiki:Gadget-close.js]] (ckbwiki).
* Adds «دەنگ بدە / داخستن» links next to section edit links on project
* pages (namespace 4) and talk pages.
*/
// <nowiki>
( function ( $, mw ) {
'use strict';
var OOUI_MODULES = [ 'oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows' ];
// Icon packs are loaded without waiting: if one is missing the dialogs
// still open, they only lose that icon.
var ICON_MODULES = [
'oojs-ui.styles.icons-interactions',
'oojs-ui.styles.icons-content',
'oojs-ui.styles.icons-moderation',
'oojs-ui.styles.icons-alerts',
'oojs-ui.styles.icons-accessibility',
'oojs-ui.styles.icons-editing-core',
'oojs-ui.styles.icons-editing-styling',
'oojs-ui.styles.icons-editing-advanced'
];
var api = null; // created once mediawiki.api has loaded (see bottom)
var pageName = mw.config.get( 'wgPageName' );
var windowManager = null;
// Only templates that exist on ckbwiktionary.
// vote: true → added as its own line at the end of the section, never indented
// prefix: true → starts with "* " (or "# " in numbered discussions)
var COMMENT_TYPES = [
{ data: 'info', icon: 'share', label: 'پەیام', text: '', summary: 'تۆمارکردنی پەیام' },
{ data: 'opinion', icon: 'info', label: 'لێدوان', text: '{{لێدوان}}', summary: 'تۆمارکردنی لێدوان', prefix: true },
{ data: 'done', icon: 'check', label: 'کرا', text: '{{کرا}}', summary: 'کرا' },
{ data: 'notdone', icon: 'close', label: 'نەکرا', text: '{{نەکرا}}', summary: 'نەکرا' },
{ data: 'agree', icon: 'add', label: 'لەگەڵ', text: '{{لەگەڵ}}', summary: 'تۆمارکردنی لێدوان بە لەگەڵ', prefix: true, vote: true },
{ data: 'contrary', icon: 'subtract', label: 'دژ', text: '{{دژ}}', summary: 'تۆمارکردنی لێدوان بە دژ', prefix: true, vote: true },
{ data: 'neutral', icon: 'ellipsis', label: 'بێلایەن', text: '{{بێلایەن}}', summary: 'تۆمارکردنی لێدوان بە بێلایەن', prefix: true, vote: true },
{ data: 'question', icon: 'help', label: 'پرسیار', text: '{{پرسیار}}', summary: 'تۆمارکردنی پرسیار' }
];
var INDENT_REPLY = 1; // one level deeper than the last line
var INDENT_SAME = 2; // same level as the last line
var INDENT_NONE = 3; // start of line
function getType( data ) {
for ( var i = 0; i < COMMENT_TYPES.length; i++ ) {
if ( COMMENT_TYPES[ i ].data === data ) {
return COMMENT_TYPES[ i ];
}
}
return COMMENT_TYPES[ 0 ];
}
/* ---------- wikitext helpers ---------- */
// Heading of the section, without wiki markup, for the edit summary.
function sectionTitle( text ) {
var m = text.match( /^(=+)\s*(.*?)\s*\1\s*$/m );
if ( !m ) {
return 'بەشی دەستپێک';
}
var title = m[ 2 ]
.replace( /\[\[(?:[^\]|]*\|)?([^\]]*)\]\]/g, '$1' ) // [[a|b]] → b, [[a]] → a
.replace( /\{\{[^{}]*\}\}/g, '' ) // templates
.replace( /<[^>]+>/g, '' ) // HTML tags
.replace( /'{2,}/g, '' ) // bold / italic
.trim();
return title || 'بەشی دەستپێک';
}
// Text of the section above its first sub-heading, or null if there is none.
function topPart( text ) {
var lines = text.split( '\n' );
for ( var i = 1; i < lines.length; i++ ) {
if ( /^={2,}[^=].*?={2,}\s*$/.test( lines[ i ] ) ) {
return lines.slice( 0, i ).join( '\n' ).replace( /\s+$/, '' );
}
}
return null;
}
function addIndented( text, newText, indentMode ) {
text = text.replace( /\r/g, '' ).replace( /\s+$/, '' );
var lines = text.split( '\n' );
var m = lines[ lines.length - 1 ].match( /^([#*]?)(:*)/ );
var listChar = m[ 1 ];
var colons = m[ 2 ].length;
var indent = '';
if ( indentMode === INDENT_REPLY ) {
indent = listChar + new Array( colons + 2 ).join( ':' ); // one more ":"
} else if ( indentMode === INDENT_SAME ) {
indent = listChar + new Array( colons + 1 ).join( ':' ); // same "*" / ":" as the last line
}
return text + '\n' + indent + newText.trim().replace( /\n/g, '\n' + indent );
}
function pingedUsers( text ) {
var re = /\[\[(?:لێدوانی[_ ]بەکارھێنەر|[Uu]ser[_ ][Tt]alk|بەکارھێنەر|[Uu]ser):([^\]|\/#]+)/g;
var skip = [ mw.config.get( 'wgUserName' ) ];
// On a user talk page, don't offer to ping the page owner.
if ( mw.config.get( 'wgNamespaceNumber' ) === 3 ) {
skip.push( mw.config.get( 'wgTitle' ).split( '/' )[ 0 ] );
}
var names = [];
var m;
while ( ( m = re.exec( text ) ) !== null ) {
var name = m[ 1 ].replace( /_/g, ' ' ).trim();
if ( name && skip.indexOf( name ) === -1 && names.indexOf( name ) === -1 ) {
names.push( name );
}
}
return names;
}
/* ---------- API ---------- */
function fetchSection( section ) {
return api.get( {
action: 'query',
prop: 'revisions',
titles: pageName,
rvsection: section,
rvprop: 'content|timestamp',
rvslots: 'main',
curtimestamp: 1,
formatversion: 2
} ).then( function ( data ) {
var page = data.query && data.query.pages && data.query.pages[ 0 ];
if ( !page || page.missing || !page.revisions ) {
return $.Deferred().reject( 'nosection' ).promise();
}
var rev = page.revisions[ 0 ];
return {
text: rev.slots.main.content,
basetimestamp: rev.timestamp,
starttimestamp: data.curtimestamp
};
} );
}
// basetimestamp/starttimestamp make MediaWiki refuse the save (editconflict)
// if someone else changed the page after we read it.
function saveSection( section, text, summary, info ) {
return api.postWithEditToken( {
action: 'edit',
title: pageName,
section: section,
text: text,
summary: summary,
basetimestamp: info.basetimestamp,
starttimestamp: info.starttimestamp,
formatversion: 2
} ).then( function ( data ) {
// e.g. a CAPTCHA comes back as a "successful" request with result=Failure
if ( !data.edit || data.edit.result !== 'Success' ) {
return $.Deferred().reject( 'editfailure', data ).promise();
}
return data;
} );
}
// Turns an API failure into an error the ProcessDialog shows.
// Recoverable errors get a "try again" button: that is how an edit filter
// warning (e.g. non-standard characters) is confirmed, like saving twice.
function asProcessError( code, result ) {
if ( code === 'editconflict' ) {
return $.Deferred().reject( new OO.ui.Error(
'ناکۆکیی دەستکاری: کەسێکی تر لە ھەمان کاتدا ئەم بەشەی گۆڕیوە. پەڕەکە نوێ بکەرەوە.',
{ recoverable: false }
) ).promise();
}
var message = 'تۆمارکردن سەرکەوتوو نەبوو: ' + code;
if ( result && ( result.error || result.errors ) ) {
try {
message = api.getErrorMessage( result );
} catch ( e ) {}
}
return $.Deferred().reject( new OO.ui.Error( message, { recoverable: true } ) ).promise();
}
function openDialog( dialog ) {
if ( windowManager ) {
windowManager.destroy();
}
windowManager = new OO.ui.WindowManager();
$( document.body ).append( windowManager.$element );
windowManager.addWindows( [ dialog ] );
windowManager.openWindow( dialog );
}
/* ---------- «داخستن» dialog ---------- */
function openArchiveDialog( section ) {
function ArchiveDialog( config ) {
ArchiveDialog.super.call( this, config );
}
OO.inheritClass( ArchiveDialog, OO.ui.ProcessDialog );
ArchiveDialog.static.name = 'closeSectionArchive';
ArchiveDialog.static.title = 'داخستنی بەش';
ArchiveDialog.static.actions = [
{ action: 'archive', label: 'داخستنی بەش', flags: [ 'primary', 'progressive' ] },
{ label: 'ھەڵوەشاندنەوە', flags: 'safe' }
];
ArchiveDialog.prototype.initialize = function () {
ArchiveDialog.super.prototype.initialize.apply( this, arguments );
this.switchTop = new OO.ui.ToggleSwitchWidget( { value: false } );
this.switchSuccess = new OO.ui.ToggleSwitchWidget( { value: true } );
this.switchDone = new OO.ui.ToggleSwitchWidget( { value: false } );
this.switchBold = new OO.ui.ToggleSwitchWidget( { value: false } );
this.note = new OO.ui.MultilineTextInputWidget( {
placeholder: 'دەقی داخستنەکە داخڵ بکە',
rows: 6
} );
var fieldset = new OO.ui.FieldsetLayout();
fieldset.addItems( [
new OO.ui.FieldLayout( this.switchTop, { label: 'دەقی داخستنەکە ببە سەرەوە', align: 'inline' } ),
new OO.ui.FieldLayout( this.switchSuccess, { label: 'وتووێژەکە بە گەیشتن بە یەکدەنگی سەرکەوتوو بوو', align: 'inline' } ),
new OO.ui.FieldLayout( this.switchDone, { label: 'بەپێی سەرکەوتووبوون یان نەبوون، {{کرا}} یان {{نەکرا}} زیاد بکە', align: 'inline' } ),
new OO.ui.FieldLayout( this.switchBold, { label: 'دەقی داخستنەکە بە تۆخ پیشان بدە', align: 'inline' } ),
new OO.ui.FieldLayout( this.note, { label: 'داخستنی بەش:', align: 'top' } )
] );
this.panel = new OO.ui.PanelLayout( { padded: true, expanded: false } );
this.panel.$element.append( fieldset.$element );
this.$body.append( this.panel.$element );
};
ArchiveDialog.prototype.getBodyHeight = function () {
return this.panel.$element.outerHeight( true );
};
ArchiveDialog.prototype.getReadyProcess = function ( data ) {
return ArchiveDialog.super.prototype.getReadyProcess.call( this, data ).next( function () {
this.note.focus();
}, this );
};
ArchiveDialog.prototype.buildText = function ( current ) {
var nl = current.indexOf( '\n' );
var header = nl === -1 ? current : current.slice( 0, nl );
var content = nl === -1 ? '' : current.slice( nl + 1 );
var success = this.switchSuccess.getValue();
var input = this.note.getValue().trim();
var newText = header + '\n{{بەسراو|کات={{subst:' + 'CURRENTTIMESTAMP}}' +
( success ? '}}\n' : '|سەرکەوتوو_نەبوو=بەڵێ}}\n' );
if ( this.switchDone.getValue() ) {
input = ( success ? '{{کرا}} ' : '{{نەکرا}} ' ) + input;
}
input = input.trim();
var closingNote = '';
if ( input ) {
closingNote = ( this.switchBold.getValue() ? "'''" + input + "'''" : input ) +
' ~~' + '~~';
}
if ( this.switchTop.getValue() ) {
if ( closingNote ) {
newText += ':' + closingNote + '\n';
}
newText += content;
} else {
newText = closingNote ?
addIndented( newText + content, closingNote, INDENT_REPLY ) :
newText + content;
}
return newText.replace( /\s+$/, '' ) + '\n{{کۆتایی بەسراو}}';
};
ArchiveDialog.prototype.getActionProcess = function ( action ) {
var dialog = this;
if ( action === 'archive' ) {
return new OO.ui.Process( function () {
return fetchSection( section ).then( function ( info ) {
if ( /\{\{\s*بەسراو\s*[|}]/.test( info.text ) ) {
return $.Deferred().reject( 'alreadyclosed' ).promise();
}
var note = dialog.note.getValue().trim();
var summary = '/* ' + sectionTitle( info.text ) + ' */ داخستنی بەش' +
( note ? ': ' + note : '' );
return saveSection( section, dialog.buildText( info.text ), summary, info );
} ).then( function () {
mw.notify( 'بەشەکە داخرا.' );
location.reload();
}, function ( code, result ) {
if ( code === 'alreadyclosed' ) {
return $.Deferred().reject( new OO.ui.Error(
'ئەم بەشە پێشتر داخراوە.', { recoverable: false }
) ).promise();
}
return asProcessError( code, result );
} );
} );
}
return ArchiveDialog.super.prototype.getActionProcess.call( this, action );
};
openDialog( new ArchiveDialog( { size: 'medium' } ) );
}
/* ---------- «دەنگ بدە» dialog ---------- */
function openCommentDialog( section ) {
fetchSection( section ).then( function ( info ) {
var onlyTop = false;
var top = topPart( info.text );
if ( top !== null ) {
onlyTop = confirm( 'ئەم بەشە ژێربەشیشی ھەیە! بۆ ناردنی دەق، مەبەستت بەشی سەرترە؟\n' +
'OK = پەیامەکە لە بەشی سەرتر دادەنرێت.\n' +
'Cancel = پەیامەکە لە کۆتایی بەشەکە دادەنرێت.' );
}
var users = pingedUsers( info.text );
function CommentDialog( config ) {
CommentDialog.super.call( this, config );
}
OO.inheritClass( CommentDialog, OO.ui.ProcessDialog );
CommentDialog.static.name = 'closeSectionComment';
CommentDialog.static.title = 'دەقی لێدوان';
CommentDialog.static.actions = [
{ action: 'comment', label: 'تۆمارکردن', flags: [ 'primary', 'progressive' ] },
{ action: 'preview', label: 'پێشبینین', icon: 'eye' },
{ label: 'دای بخە', flags: 'safe' }
];
CommentDialog.prototype.initialize = function () {
CommentDialog.super.prototype.initialize.apply( this, arguments );
var dialog = this;
var resize = function () {
dialog.updateSize();
};
this.btnReply = new OO.ui.ButtonOptionWidget( { data: INDENT_REPLY, label: 'وەڵامی پێشوو', title: 'پەیامەکە لە وەڵامی کەسی پێشوو دەنووسرێ.' } );
this.btnSame = new OO.ui.ButtonOptionWidget( { data: INDENT_SAME, label: 'بەبێ بردنەپێش', title: 'پەیامەکە بەبێ بردنەپێش دەنووسرێ.' } );
this.btnNone = new OO.ui.ButtonOptionWidget( { data: INDENT_NONE, label: 'سەری دێڕ', title: 'پەیامەکە لە سەری دێڕ دەست پێ دەکات.' } );
this.indentSelect = new OO.ui.ButtonSelectWidget( { items: [ this.btnReply, this.btnSame, this.btnNone ] } );
this.indentSelect.selectItem( this.btnReply );
this.typeDropdown = new OO.ui.DropdownWidget( {
menu: {
items: COMMENT_TYPES.map( function ( t ) {
return new OO.ui.MenuOptionWidget( { data: t.data, icon: t.icon, label: t.label } );
} )
}
} );
this.typeDropdown.getMenu().selectItemByData( 'info' );
// Votes always go on their own line, so indentation doesn't apply.
this.typeDropdown.getMenu().on( 'select', function ( item ) {
var isVote = !!( item && getType( item.getData() ).vote );
dialog.btnReply.setDisabled( isVote );
dialog.btnSame.setDisabled( isVote );
dialog.indentSelect.selectItem( isVote ? dialog.btnNone : dialog.btnReply );
} );
this.pingSelect = new OO.ui.MenuTagMultiselectWidget( {
inputPosition: 'outline',
allowArbitrary: true,
options: users.map( function ( u ) {
return { data: u, label: u };
} ),
placeholder: 'ناوی ئەو بەکارھێنەرە بنووسە کە دەتەوێ وەڵامی بدەیتەوە'
} );
this.pingSelect.on( 'change', resize );
this.comment = new OO.ui.MultilineTextInputWidget( {
placeholder: 'دەقی لێدوانەکە داخڵ بکە',
rows: 6,
autosize: true
} );
this.comment.on( 'resize', resize );
var toolbar = new OO.ui.HorizontalLayout( {
items: [
this.makeTool( 'bold', 'دەقی تۆخ', "'''", "'''" ),
this.makeTool( 'italic', 'دەقی لار', "''", "''" ),
this.makeTool( 'link', 'ویکیبەستەر', '[[', ']]' ),
this.makeTool( 'bigger', 'دەقی گەورەتر', '<big>', '</big>' ),
this.makeTool( 'smaller', 'دەقی بچووکتر', '<small>', '</small>' ),
this.makeTool( 'newline', 'دێڕی نوێ', '<br>', '' )
]
} );
var fieldset = new OO.ui.FieldsetLayout();
fieldset.addItems( [
new OO.ui.FieldLayout( this.pingSelect, { label: 'بانگکردنی بەکارھێنەر:', align: 'top' } ),
new OO.ui.FieldLayout( this.indentSelect, { label: 'بردنەپێش:', align: 'top' } ),
new OO.ui.FieldLayout( this.typeDropdown, { label: 'تاگی پێش لێدوان:', align: 'top' } ),
new OO.ui.FieldLayout( toolbar ),
new OO.ui.FieldLayout( this.comment, { label: 'دەقی لێدوان:', align: 'top' } )
] );
this.$preview = $( '<div>' ).css( {
display: 'none',
marginTop: '1em',
padding: '0.5em',
border: '1px solid var(--border-color-subtle, #c8ccd1)'
} );
this.panel = new OO.ui.PanelLayout( { padded: true, expanded: false } );
this.panel.$element.append( fieldset.$element, this.$preview );
this.$body.append( this.panel.$element );
};
// Wraps the selected text (or inserts at the cursor).
CommentDialog.prototype.makeTool = function ( icon, title, before, after ) {
var dialog = this;
var button = new OO.ui.ButtonWidget( { framed: false, icon: icon, title: title, invisibleLabel: true, label: title } );
button.on( 'click', function () {
var el = dialog.comment.$input[ 0 ];
var value = dialog.comment.getValue();
var start = el.selectionStart;
var end = el.selectionEnd;
if ( typeof start !== 'number' ) {
start = end = value.length;
}
dialog.comment.setValue( value.slice( 0, start ) + before + value.slice( start, end ) + after + value.slice( end ) );
el.focus();
el.selectionStart = el.selectionEnd = end + before.length + after.length;
} );
return button;
};
CommentDialog.prototype.getBodyHeight = function () {
return this.panel.$element.outerHeight( true );
};
CommentDialog.prototype.getReadyProcess = function ( data ) {
return CommentDialog.super.prototype.getReadyProcess.call( this, data ).next( function () {
this.comment.focus();
}, this );
};
CommentDialog.prototype.getSelectedType = function () {
var item = this.typeDropdown.getMenu().findSelectedItem();
return getType( item ? item.getData() : 'info' );
};
CommentDialog.prototype.buildText = function () {
var type = this.getSelectedType();
var indentItem = this.indentSelect.findSelectedItem();
var indentMode = indentItem ? indentItem.getData() : INDENT_REPLY;
var listPrefix = /\n#/.test( info.text ) ? '# ' : '* ';
var pinged = this.pingSelect.getValue();
var parts = [];
if ( pinged.length ) {
parts.push( '{{وب|' + pinged.join( '|' ) + '}}' );
}
if ( type.text ) {
parts.push( type.text );
}
var comment = this.comment.getValue().trim();
if ( comment ) {
parts.push( comment );
}
parts.push( '~~' + '~~' );
var newText = ( type.prefix ? listPrefix : '' ) + parts.join( ' ' );
var base = onlyTop ? top : info.text.replace( /\s+$/, '' );
var updated = type.vote ?
base.replace( /\s+$/, '' ) + '\n' + newText :
addIndented( base, newText, indentMode );
var full = onlyTop ? updated + info.text.slice( top.length ) : updated;
var summary = '/* ' + sectionTitle( info.text ) + ' */ ' + type.summary +
( pinged.length ? ' + وەڵام بۆ بەکارھێنەر: ' + pinged.join( '، ' ) : '' );
return { text: full, summary: summary, comment: newText };
};
CommentDialog.prototype.getActionProcess = function ( action ) {
var dialog = this;
if ( action === 'comment' ) {
return new OO.ui.Process( function () {
if ( !dialog.comment.getValue().trim() &&
!dialog.pingSelect.getValue().length &&
dialog.getSelectedType().data === 'info' ) {
return $.Deferred().reject( new OO.ui.Error( 'تکایە دەقی لێدوانەکە بنووسە.' ) ).promise();
}
var built = dialog.buildText();
return saveSection( section, built.text, built.summary, info ).then( function () {
mw.notify( 'لێدوانەکەت تۆمار کرا.' );
location.reload();
}, asProcessError );
} );
}
if ( action === 'preview' ) {
return new OO.ui.Process( function () {
var built = dialog.buildText();
return api.post( {
action: 'parse',
text: built.comment,
title: pageName,
pst: true,
prop: 'text',
disablelimitreport: true,
formatversion: 2
} ).then( function ( data ) {
dialog.$preview.html( data.parse.text ).show();
dialog.updateSize();
}, function ( code ) {
return $.Deferred().reject( new OO.ui.Error( 'پێشبینین سەرکەوتوو نەبوو: ' + code ) ).promise();
} );
} );
}
return CommentDialog.super.prototype.getActionProcess.call( this, action );
};
openDialog( new CommentDialog( { size: 'large' } ) );
}, function ( code ) {
mw.notify( 'خوێندنەوەی بەشەکە سەرکەوتوو نەبوو: ' + code, { type: 'error' } );
} );
}
/* ---------- links next to section headings ---------- */
function makeLink( text, title, section, opener ) {
return $( '<a>' ).attr( { href: '#', role: 'button', title: title } ).css( 'font-size', 'smaller' ).text( text )
.on( 'click', function ( e ) {
e.preventDefault();
e.stopPropagation(); // don't collapse the section on mobile
mw.loader.using( OOUI_MODULES ).then( function () {
opener( section );
}, function () {
mw.notify( 'بارکردنی ئامرازەکە سەرکەوتوو نەبوو. پەڕەکە نوێ بکەرەوە.', { type: 'error' } );
} );
} );
}
function addLinks( $content ) {
$content.find( '.mw-editsection' ).each( function () {
var $editSection = $( this );
if ( $editSection.closest( '#firstHeading, .mw-first-heading' ).length ||
$editSection.next( '.mw-archivesection' ).length ) {
return;
}
// Only sections of this page; transcluded sections use "section=T-n" and are skipped.
var section = null;
$editSection.find( 'a' ).each( function () {
var m = ( $( this ).attr( 'href' ) || '' ).match( /[?&](?:ve)?section=(\d+)(?:&|#|$)/ );
if ( m ) {
section = m[ 1 ];
return false; // first match is enough
}
} );
if ( section === null ) {
return;
}
$( '<span>' ).addClass( 'mw-archivesection' ).append(
$( '<span>' ).addClass( 'mw-editsection-bracket' ).text( '[' ),
makeLink( 'دەنگ بدە', 'بە لەگەڵ/دژ/کرا/… دەنگ بدە', section, openCommentDialog ),
$( '<span>' ).text( ' / ' ).css( 'color', 'var(--color-subtle, #54595d)' ),
makeLink( 'داخستن', 'ئەم بەشە داخە', section, openArchiveDialog ),
$( '<span>' ).addClass( 'mw-editsection-bracket' ).text( ']' )
).insertAfter( $editSection );
} );
}
var ns = mw.config.get( 'wgNamespaceNumber' );
if ( ( ns === 4 || ns % 2 === 1 ) &&
mw.config.get( 'wgAction' ) === 'view' &&
mw.config.get( 'wgIsProbablyEditable' ) &&
mw.config.get( 'wgRevisionId' ) === mw.config.get( 'wgCurRevisionId' ) // not an old revision
) {
mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] ).then( function () {
if ( mw.util.getParamValue( 'diff' ) || mw.util.getParamValue( 'oldid' ) ) {
return;
}
api = new mw.Api();
mw.hook( 'wikipage.content' ).add( addLinks );
mw.loader.load( OOUI_MODULES.concat( ICON_MODULES ) );
} );
}
}( jQuery, mediaWiki ) );
// </nowiki>
2grmrgycbpoqiwnewhvfktrb185zgx0
47401
47398
2026-10-15T16:31:36Z
Sakura emad
13
toolbar layout++
47401
javascript
text/javascript
/*
* MediaWiki:Gadget-close.js — ویکیفەرھەنگ (ckb.wiktionary.org)
* Local version adapted from [[w:MediaWiki:Gadget-close.js]] (ckbwiki).
* Adds «دەنگ بدە / داخستن» links next to section edit links on project
* pages (namespace 4) and talk pages.
*/
// <nowiki>
( function ( $, mw ) {
'use strict';
var OOUI_MODULES = [ 'oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows' ];
// Icon packs are loaded without waiting: if one is missing the dialogs
// still open, they only lose that icon.
var ICON_MODULES = [
'oojs-ui.styles.icons-interactions',
'oojs-ui.styles.icons-content',
'oojs-ui.styles.icons-moderation',
'oojs-ui.styles.icons-alerts',
'oojs-ui.styles.icons-accessibility',
'oojs-ui.styles.icons-editing-core',
'oojs-ui.styles.icons-editing-styling',
'oojs-ui.styles.icons-editing-advanced'
];
var api = null; // created once mediawiki.api has loaded (see bottom)
var pageName = mw.config.get( 'wgPageName' );
var windowManager = null;
// Only templates that exist on ckbwiktionary.
// vote: true → added as its own line at the end of the section, never indented
// prefix: true → starts with "* " (or "# " in numbered discussions)
var COMMENT_TYPES = [
{ data: 'info', icon: 'share', label: 'پەیام', text: '', summary: 'تۆمارکردنی پەیام' },
{ data: 'opinion', icon: 'info', label: 'لێدوان', text: '{{لێدوان}}', summary: 'تۆمارکردنی لێدوان', prefix: true },
{ data: 'done', icon: 'check', label: 'کرا', text: '{{کرا}}', summary: 'کرا' },
{ data: 'notdone', icon: 'close', label: 'نەکرا', text: '{{نەکرا}}', summary: 'نەکرا' },
{ data: 'agree', icon: 'add', label: 'لەگەڵ', text: '{{لەگەڵ}}', summary: 'تۆمارکردنی لێدوان بە لەگەڵ', prefix: true, vote: true },
{ data: 'contrary', icon: 'subtract', label: 'دژ', text: '{{دژ}}', summary: 'تۆمارکردنی لێدوان بە دژ', prefix: true, vote: true },
{ data: 'neutral', icon: 'ellipsis', label: 'بێلایەن', text: '{{بێلایەن}}', summary: 'تۆمارکردنی لێدوان بە بێلایەن', prefix: true, vote: true },
{ data: 'question', icon: 'help', label: 'پرسیار', text: '{{پرسیار}}', summary: 'تۆمارکردنی پرسیار' }
];
var INDENT_REPLY = 1; // one level deeper than the last line
var INDENT_SAME = 2; // same level as the last line
var INDENT_NONE = 3; // start of line
function getType( data ) {
for ( var i = 0; i < COMMENT_TYPES.length; i++ ) {
if ( COMMENT_TYPES[ i ].data === data ) {
return COMMENT_TYPES[ i ];
}
}
return COMMENT_TYPES[ 0 ];
}
/* ---------- wikitext helpers ---------- */
// Heading of the section, without wiki markup, for the edit summary.
function sectionTitle( text ) {
var m = text.match( /^(=+)\s*(.*?)\s*\1\s*$/m );
if ( !m ) {
return 'بەشی دەستپێک';
}
var title = m[ 2 ]
.replace( /\[\[(?:[^\]|]*\|)?([^\]]*)\]\]/g, '$1' ) // [[a|b]] → b, [[a]] → a
.replace( /\{\{[^{}]*\}\}/g, '' ) // templates
.replace( /<[^>]+>/g, '' ) // HTML tags
.replace( /'{2,}/g, '' ) // bold / italic
.trim();
return title || 'بەشی دەستپێک';
}
// Text of the section above its first sub-heading, or null if there is none.
function topPart( text ) {
var lines = text.split( '\n' );
for ( var i = 1; i < lines.length; i++ ) {
if ( /^={2,}[^=].*?={2,}\s*$/.test( lines[ i ] ) ) {
return lines.slice( 0, i ).join( '\n' ).replace( /\s+$/, '' );
}
}
return null;
}
function addIndented( text, newText, indentMode ) {
text = text.replace( /\r/g, '' ).replace( /\s+$/, '' );
var lines = text.split( '\n' );
var m = lines[ lines.length - 1 ].match( /^([#*]?)(:*)/ );
var listChar = m[ 1 ];
var colons = m[ 2 ].length;
var indent = '';
if ( indentMode === INDENT_REPLY ) {
indent = listChar + new Array( colons + 2 ).join( ':' ); // one more ":"
} else if ( indentMode === INDENT_SAME ) {
indent = listChar + new Array( colons + 1 ).join( ':' ); // same "*" / ":" as the last line
}
return text + '\n' + indent + newText.trim().replace( /\n/g, '\n' + indent );
}
function pingedUsers( text ) {
var re = /\[\[(?:لێدوانی[_ ]بەکارھێنەر|[Uu]ser[_ ][Tt]alk|بەکارھێنەر|[Uu]ser):([^\]|\/#]+)/g;
var skip = [ mw.config.get( 'wgUserName' ) ];
// On a user talk page, don't offer to ping the page owner.
if ( mw.config.get( 'wgNamespaceNumber' ) === 3 ) {
skip.push( mw.config.get( 'wgTitle' ).split( '/' )[ 0 ] );
}
var names = [];
var m;
while ( ( m = re.exec( text ) ) !== null ) {
var name = m[ 1 ].replace( /_/g, ' ' ).trim();
if ( name && skip.indexOf( name ) === -1 && names.indexOf( name ) === -1 ) {
names.push( name );
}
}
return names;
}
/* ---------- API ---------- */
function fetchSection( section ) {
return api.get( {
action: 'query',
prop: 'revisions',
titles: pageName,
rvsection: section,
rvprop: 'content|timestamp',
rvslots: 'main',
curtimestamp: 1,
formatversion: 2
} ).then( function ( data ) {
var page = data.query && data.query.pages && data.query.pages[ 0 ];
if ( !page || page.missing || !page.revisions ) {
return $.Deferred().reject( 'nosection' ).promise();
}
var rev = page.revisions[ 0 ];
return {
text: rev.slots.main.content,
basetimestamp: rev.timestamp,
starttimestamp: data.curtimestamp
};
} );
}
// basetimestamp/starttimestamp make MediaWiki refuse the save (editconflict)
// if someone else changed the page after we read it.
function saveSection( section, text, summary, info ) {
return api.postWithEditToken( {
action: 'edit',
title: pageName,
section: section,
text: text,
summary: summary,
basetimestamp: info.basetimestamp,
starttimestamp: info.starttimestamp,
formatversion: 2
} ).then( function ( data ) {
// e.g. a CAPTCHA comes back as a "successful" request with result=Failure
if ( !data.edit || data.edit.result !== 'Success' ) {
return $.Deferred().reject( 'editfailure', data ).promise();
}
return data;
} );
}
// Turns an API failure into an error the ProcessDialog shows.
// Recoverable errors get a "try again" button: that is how an edit filter
// warning (e.g. non-standard characters) is confirmed, like saving twice.
function asProcessError( code, result ) {
if ( code === 'editconflict' ) {
return $.Deferred().reject( new OO.ui.Error(
'ناکۆکیی دەستکاری: کەسێکی تر لە ھەمان کاتدا ئەم بەشەی گۆڕیوە. پەڕەکە نوێ بکەرەوە.',
{ recoverable: false }
) ).promise();
}
var message = 'تۆمارکردن سەرکەوتوو نەبوو: ' + code;
if ( result && ( result.error || result.errors ) ) {
try {
message = api.getErrorMessage( result );
} catch ( e ) {}
}
return $.Deferred().reject( new OO.ui.Error( message, { recoverable: true } ) ).promise();
}
function openDialog( dialog ) {
if ( windowManager ) {
windowManager.destroy();
}
windowManager = new OO.ui.WindowManager();
$( document.body ).append( windowManager.$element );
windowManager.addWindows( [ dialog ] );
windowManager.openWindow( dialog );
}
/* ---------- «داخستن» dialog ---------- */
function openArchiveDialog( section ) {
function ArchiveDialog( config ) {
ArchiveDialog.super.call( this, config );
}
OO.inheritClass( ArchiveDialog, OO.ui.ProcessDialog );
ArchiveDialog.static.name = 'closeSectionArchive';
ArchiveDialog.static.title = 'داخستنی بەش';
ArchiveDialog.static.actions = [
{ action: 'archive', label: 'داخستنی بەش', flags: [ 'primary', 'progressive' ] },
{ label: 'ھەڵوەشاندنەوە', flags: 'safe' }
];
ArchiveDialog.prototype.initialize = function () {
ArchiveDialog.super.prototype.initialize.apply( this, arguments );
this.switchTop = new OO.ui.ToggleSwitchWidget( { value: false } );
this.switchSuccess = new OO.ui.ToggleSwitchWidget( { value: true } );
this.switchDone = new OO.ui.ToggleSwitchWidget( { value: false } );
this.switchBold = new OO.ui.ToggleSwitchWidget( { value: false } );
this.note = new OO.ui.MultilineTextInputWidget( {
placeholder: 'دەقی داخستنەکە داخڵ بکە',
rows: 6
} );
var fieldset = new OO.ui.FieldsetLayout();
fieldset.addItems( [
new OO.ui.FieldLayout( this.switchTop, { label: 'دەقی داخستنەکە ببە سەرەوە', align: 'inline' } ),
new OO.ui.FieldLayout( this.switchSuccess, { label: 'وتووێژەکە بە گەیشتن بە یەکدەنگی سەرکەوتوو بوو', align: 'inline' } ),
new OO.ui.FieldLayout( this.switchDone, { label: 'بەپێی سەرکەوتووبوون یان نەبوون، {{کرا}} یان {{نەکرا}} زیاد بکە', align: 'inline' } ),
new OO.ui.FieldLayout( this.switchBold, { label: 'دەقی داخستنەکە بە تۆخ پیشان بدە', align: 'inline' } ),
new OO.ui.FieldLayout( this.note, { label: 'داخستنی بەش:', align: 'top' } )
] );
this.panel = new OO.ui.PanelLayout( { padded: true, expanded: false } );
this.panel.$element.append( fieldset.$element );
this.$body.append( this.panel.$element );
};
ArchiveDialog.prototype.getBodyHeight = function () {
return this.panel.$element.outerHeight( true );
};
ArchiveDialog.prototype.getReadyProcess = function ( data ) {
return ArchiveDialog.super.prototype.getReadyProcess.call( this, data ).next( function () {
this.note.focus();
}, this );
};
ArchiveDialog.prototype.buildText = function ( current ) {
var nl = current.indexOf( '\n' );
var header = nl === -1 ? current : current.slice( 0, nl );
var content = nl === -1 ? '' : current.slice( nl + 1 );
var success = this.switchSuccess.getValue();
var input = this.note.getValue().trim();
var newText = header + '\n{{بەسراو|کات={{subst:' + 'CURRENTTIMESTAMP}}' +
( success ? '}}\n' : '|سەرکەوتوو_نەبوو=بەڵێ}}\n' );
if ( this.switchDone.getValue() ) {
input = ( success ? '{{کرا}} ' : '{{نەکرا}} ' ) + input;
}
input = input.trim();
var closingNote = '';
if ( input ) {
closingNote = ( this.switchBold.getValue() ? "'''" + input + "'''" : input ) +
' ~~' + '~~';
}
if ( this.switchTop.getValue() ) {
if ( closingNote ) {
newText += ':' + closingNote + '\n';
}
newText += content;
} else {
newText = closingNote ?
addIndented( newText + content, closingNote, INDENT_REPLY ) :
newText + content;
}
return newText.replace( /\s+$/, '' ) + '\n{{کۆتایی بەسراو}}';
};
ArchiveDialog.prototype.getActionProcess = function ( action ) {
var dialog = this;
if ( action === 'archive' ) {
return new OO.ui.Process( function () {
return fetchSection( section ).then( function ( info ) {
if ( /\{\{\s*بەسراو\s*[|}]/.test( info.text ) ) {
return $.Deferred().reject( 'alreadyclosed' ).promise();
}
var note = dialog.note.getValue().trim();
var summary = '/* ' + sectionTitle( info.text ) + ' */ داخستنی بەش' +
( note ? ': ' + note : '' );
return saveSection( section, dialog.buildText( info.text ), summary, info );
} ).then( function () {
mw.notify( 'بەشەکە داخرا.' );
location.reload();
}, function ( code, result ) {
if ( code === 'alreadyclosed' ) {
return $.Deferred().reject( new OO.ui.Error(
'ئەم بەشە پێشتر داخراوە.', { recoverable: false }
) ).promise();
}
return asProcessError( code, result );
} );
} );
}
return ArchiveDialog.super.prototype.getActionProcess.call( this, action );
};
openDialog( new ArchiveDialog( { size: 'medium' } ) );
}
/* ---------- «دەنگ بدە» dialog ---------- */
function openCommentDialog( section ) {
fetchSection( section ).then( function ( info ) {
var onlyTop = false;
var top = topPart( info.text );
if ( top !== null ) {
onlyTop = confirm( 'ئەم بەشە ژێربەشیشی ھەیە! بۆ ناردنی دەق، مەبەستت بەشی سەرترە؟\n' +
'OK = پەیامەکە لە بەشی سەرتر دادەنرێت.\n' +
'Cancel = پەیامەکە لە کۆتایی بەشەکە دادەنرێت.' );
}
var users = pingedUsers( info.text );
function CommentDialog( config ) {
CommentDialog.super.call( this, config );
}
OO.inheritClass( CommentDialog, OO.ui.ProcessDialog );
CommentDialog.static.name = 'closeSectionComment';
CommentDialog.static.title = 'دەقی لێدوان';
CommentDialog.static.actions = [
{ action: 'comment', label: 'تۆمارکردن', flags: [ 'primary', 'progressive' ] },
{ action: 'preview', label: 'پێشبینین', icon: 'eye' },
{ label: 'دای بخە', flags: 'safe' }
];
CommentDialog.prototype.initialize = function () {
CommentDialog.super.prototype.initialize.apply( this, arguments );
var dialog = this;
var resize = function () {
dialog.updateSize();
};
this.btnReply = new OO.ui.ButtonOptionWidget( { data: INDENT_REPLY, label: 'وەڵامی پێشوو', title: 'پەیامەکە لە وەڵامی کەسی پێشوو دەنووسرێ.' } );
this.btnSame = new OO.ui.ButtonOptionWidget( { data: INDENT_SAME, label: 'بەبێ بردنەپێش', title: 'پەیامەکە بەبێ بردنەپێش دەنووسرێ.' } );
this.btnNone = new OO.ui.ButtonOptionWidget( { data: INDENT_NONE, label: 'سەری دێڕ', title: 'پەیامەکە لە سەری دێڕ دەست پێ دەکات.' } );
this.indentSelect = new OO.ui.ButtonSelectWidget( { items: [ this.btnReply, this.btnSame, this.btnNone ] } );
this.indentSelect.selectItem( this.btnReply );
this.typeDropdown = new OO.ui.DropdownWidget( {
menu: {
items: COMMENT_TYPES.map( function ( t ) {
return new OO.ui.MenuOptionWidget( { data: t.data, icon: t.icon, label: t.label } );
} )
}
} );
this.typeDropdown.getMenu().selectItemByData( 'info' );
// Votes always go on their own line, so indentation doesn't apply.
this.typeDropdown.getMenu().on( 'select', function ( item ) {
var isVote = !!( item && getType( item.getData() ).vote );
dialog.btnReply.setDisabled( isVote );
dialog.btnSame.setDisabled( isVote );
dialog.indentSelect.selectItem( isVote ? dialog.btnNone : dialog.btnReply );
} );
this.pingSelect = new OO.ui.MenuTagMultiselectWidget( {
inputPosition: 'outline',
allowArbitrary: true,
options: users.map( function ( u ) {
return { data: u, label: u };
} ),
placeholder: 'ناوی ئەو بەکارھێنەرە بنووسە کە دەتەوێ وەڵامی بدەیتەوە'
} );
this.pingSelect.on( 'change', resize );
this.comment = new OO.ui.MultilineTextInputWidget( {
placeholder: 'دەقی لێدوانەکە داخڵ بکە',
rows: 6,
autosize: true
} );
this.comment.on( 'resize', resize );
var toolbar = new OO.ui.HorizontalLayout( {
items: [
this.makeTool( 'bold', 'دەقی تۆخ', "'''", "'''" ),
this.makeTool( 'italic', 'دەقی لار', "''", "''" ),
this.makeTool( 'link', 'ویکیبەستەر', '[[', ']]' ),
this.makeTool( 'bigger', 'دەقی گەورەتر', '<big>', '</big>' ),
this.makeTool( 'smaller', 'دەقی بچووکتر', '<small>', '</small>' ),
this.makeTool( 'newline', 'دێڕی نوێ', '<br>', '' )
]
} );
var fieldset = new OO.ui.FieldsetLayout();
fieldset.addItems( [
new OO.ui.FieldLayout( this.pingSelect, { label: 'بانگکردنی بەکارھێنەر:', align: 'top' } ),
new OO.ui.FieldLayout( this.indentSelect, { label: 'بردنەپێش:', align: 'top' } ),
new OO.ui.FieldLayout( this.typeDropdown, { label: 'تاگی پێش لێدوان:', align: 'top' } ),
// FieldLayout needs a widget, so the toolbar layout is wrapped in one.
new OO.ui.FieldLayout( new OO.ui.Widget( { content: [ toolbar ] } ) ),
new OO.ui.FieldLayout( this.comment, { label: 'دەقی لێدوان:', align: 'top' } )
] );
this.$preview = $( '<div>' ).css( {
display: 'none',
marginTop: '1em',
padding: '0.5em',
border: '1px solid var(--border-color-subtle, #c8ccd1)'
} );
this.panel = new OO.ui.PanelLayout( { padded: true, expanded: false } );
this.panel.$element.append( fieldset.$element, this.$preview );
this.$body.append( this.panel.$element );
};
// Wraps the selected text (or inserts at the cursor).
CommentDialog.prototype.makeTool = function ( icon, title, before, after ) {
var dialog = this;
var button = new OO.ui.ButtonWidget( { framed: false, icon: icon, title: title, invisibleLabel: true, label: title } );
button.on( 'click', function () {
var el = dialog.comment.$input[ 0 ];
var value = dialog.comment.getValue();
var start = el.selectionStart;
var end = el.selectionEnd;
if ( typeof start !== 'number' ) {
start = end = value.length;
}
dialog.comment.setValue( value.slice( 0, start ) + before + value.slice( start, end ) + after + value.slice( end ) );
el.focus();
el.selectionStart = el.selectionEnd = end + before.length + after.length;
} );
return button;
};
CommentDialog.prototype.getBodyHeight = function () {
return this.panel.$element.outerHeight( true );
};
CommentDialog.prototype.getReadyProcess = function ( data ) {
return CommentDialog.super.prototype.getReadyProcess.call( this, data ).next( function () {
this.comment.focus();
}, this );
};
CommentDialog.prototype.getSelectedType = function () {
var item = this.typeDropdown.getMenu().findSelectedItem();
return getType( item ? item.getData() : 'info' );
};
CommentDialog.prototype.buildText = function () {
var type = this.getSelectedType();
var indentItem = this.indentSelect.findSelectedItem();
var indentMode = indentItem ? indentItem.getData() : INDENT_REPLY;
var listPrefix = /\n#/.test( info.text ) ? '# ' : '* ';
var pinged = this.pingSelect.getValue();
var parts = [];
if ( pinged.length ) {
parts.push( '{{وب|' + pinged.join( '|' ) + '}}' );
}
if ( type.text ) {
parts.push( type.text );
}
var comment = this.comment.getValue().trim();
if ( comment ) {
parts.push( comment );
}
parts.push( '~~' + '~~' );
var newText = ( type.prefix ? listPrefix : '' ) + parts.join( ' ' );
var base = onlyTop ? top : info.text.replace( /\s+$/, '' );
var updated = type.vote ?
base.replace( /\s+$/, '' ) + '\n' + newText :
addIndented( base, newText, indentMode );
var full = onlyTop ? updated + info.text.slice( top.length ) : updated;
var summary = '/* ' + sectionTitle( info.text ) + ' */ ' + type.summary +
( pinged.length ? ' + وەڵام بۆ بەکارھێنەر: ' + pinged.join( '، ' ) : '' );
return { text: full, summary: summary, comment: newText };
};
CommentDialog.prototype.getActionProcess = function ( action ) {
var dialog = this;
if ( action === 'comment' ) {
return new OO.ui.Process( function () {
if ( !dialog.comment.getValue().trim() &&
!dialog.pingSelect.getValue().length &&
dialog.getSelectedType().data === 'info' ) {
return $.Deferred().reject( new OO.ui.Error( 'تکایە دەقی لێدوانەکە بنووسە.' ) ).promise();
}
var built = dialog.buildText();
return saveSection( section, built.text, built.summary, info ).then( function () {
mw.notify( 'لێدوانەکەت تۆمار کرا.' );
location.reload();
}, asProcessError );
} );
}
if ( action === 'preview' ) {
return new OO.ui.Process( function () {
var built = dialog.buildText();
return api.post( {
action: 'parse',
text: built.comment,
title: pageName,
pst: true,
prop: 'text',
disablelimitreport: true,
formatversion: 2
} ).then( function ( data ) {
dialog.$preview.html( data.parse.text ).show();
dialog.updateSize();
}, function ( code ) {
return $.Deferred().reject( new OO.ui.Error( 'پێشبینین سەرکەوتوو نەبوو: ' + code ) ).promise();
} );
} );
}
return CommentDialog.super.prototype.getActionProcess.call( this, action );
};
openDialog( new CommentDialog( { size: 'large' } ) );
}, function ( code ) {
mw.notify( 'خوێندنەوەی بەشەکە سەرکەوتوو نەبوو: ' + code, { type: 'error' } );
} );
}
/* ---------- links next to section headings ---------- */
function makeLink( text, title, section, opener ) {
return $( '<a>' ).attr( { href: '#', role: 'button', title: title } ).css( 'font-size', 'smaller' ).text( text )
.on( 'click', function ( e ) {
e.preventDefault();
e.stopPropagation(); // don't collapse the section on mobile
mw.loader.using( OOUI_MODULES ).then( function () {
opener( section );
}, function () {
mw.notify( 'بارکردنی ئامرازەکە سەرکەوتوو نەبوو. پەڕەکە نوێ بکەرەوە.', { type: 'error' } );
} );
} );
}
function addLinks( $content ) {
$content.find( '.mw-editsection' ).each( function () {
var $editSection = $( this );
if ( $editSection.closest( '#firstHeading, .mw-first-heading' ).length ||
$editSection.next( '.mw-archivesection' ).length ) {
return;
}
// Only sections of this page; transcluded sections use "section=T-n" and are skipped.
var section = null;
$editSection.find( 'a' ).each( function () {
var m = ( $( this ).attr( 'href' ) || '' ).match( /[?&](?:ve)?section=(\d+)(?:&|#|$)/ );
if ( m ) {
section = m[ 1 ];
return false; // first match is enough
}
} );
if ( section === null ) {
return;
}
$( '<span>' ).addClass( 'mw-archivesection' ).append(
$( '<span>' ).addClass( 'mw-editsection-bracket' ).text( '[' ),
makeLink( 'دەنگ بدە', 'بە لەگەڵ/دژ/کرا/… دەنگ بدە', section, openCommentDialog ),
$( '<span>' ).text( ' / ' ).css( 'color', 'var(--color-subtle, #54595d)' ),
makeLink( 'داخستن', 'ئەم بەشە داخە', section, openArchiveDialog ),
$( '<span>' ).addClass( 'mw-editsection-bracket' ).text( ']' )
).insertAfter( $editSection );
} );
}
var ns = mw.config.get( 'wgNamespaceNumber' );
if ( ( ns === 4 || ns % 2 === 1 ) &&
mw.config.get( 'wgAction' ) === 'view' &&
mw.config.get( 'wgIsProbablyEditable' ) &&
mw.config.get( 'wgRevisionId' ) === mw.config.get( 'wgCurRevisionId' ) // not an old revision
) {
mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] ).then( function () {
if ( mw.util.getParamValue( 'diff' ) || mw.util.getParamValue( 'oldid' ) ) {
return;
}
api = new mw.Api();
mw.hook( 'wikipage.content' ).add( addLinks );
mw.loader.load( OOUI_MODULES.concat( ICON_MODULES ) );
} );
}
}( jQuery, mediaWiki ) );
// </nowiki>
g5z07wmm3hjvq6yydume0z78gg28ou4
47409
47401
2026-10-15T16:55:44Z
Sakura emad
13
some improvements
47409
javascript
text/javascript
/*
* MediaWiki:Gadget-close.js — ویکیفەرھەنگ (ckb.wiktionary.org)
* Local version adapted from [[w:MediaWiki:Gadget-close.js]] (ckbwiki).
* Adds «دەنگ بدە / داخستن» links next to section edit links on project
* pages (namespace 4) and talk pages.
*/
// <nowiki>
( function ( $, mw ) {
'use strict';
var OOUI_MODULES = [ 'oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows' ];
// Icon packs are loaded without waiting: if one is missing the dialogs
// still open, they only lose that icon.
var ICON_MODULES = [
'oojs-ui.styles.icons-interactions',
'oojs-ui.styles.icons-content',
'oojs-ui.styles.icons-moderation',
'oojs-ui.styles.icons-alerts',
'oojs-ui.styles.icons-accessibility',
'oojs-ui.styles.icons-editing-core',
'oojs-ui.styles.icons-editing-styling',
'oojs-ui.styles.icons-editing-advanced'
];
var api = null; // created once mediawiki.api has loaded (see bottom)
var pageName = mw.config.get( 'wgPageName' );
var windowManager = null;
// Only templates that exist on ckbwiktionary.
// vote: true → added as its own line at the end of the section, never indented
// prefix: true → starts with "* " (or "# " in numbered discussions)
var COMMENT_TYPES = [
{ data: 'info', icon: 'share', label: 'پەیام', text: '', summary: 'تۆمارکردنی پەیام' },
{ data: 'opinion', icon: 'info', label: 'لێدوان', text: '{{لێدوان}}', summary: 'تۆمارکردنی لێدوان', prefix: true },
{ data: 'done', icon: 'check', label: 'کرا', text: '{{کرا}}', summary: 'کرا' },
{ data: 'notdone', icon: 'close', label: 'نەکرا', text: '{{نەکرا}}', summary: 'نەکرا' },
{ data: 'agree', icon: 'add', label: 'لەگەڵ', text: '{{لەگەڵ}}', summary: 'تۆمارکردنی لێدوان بە لەگەڵ', prefix: true, vote: true },
{ data: 'contrary', icon: 'subtract', label: 'دژ', text: '{{دژ}}', summary: 'تۆمارکردنی لێدوان بە دژ', prefix: true, vote: true },
{ data: 'neutral', icon: 'ellipsis', label: 'بێلایەن', text: '{{بێلایەن}}', summary: 'تۆمارکردنی لێدوان بە بێلایەن', prefix: true, vote: true },
{ data: 'question', icon: 'help', label: 'پرسیار', text: '{{پرسیار}}', summary: 'تۆمارکردنی پرسیار' }
];
var INDENT_REPLY = 1; // one level deeper than the last line
var INDENT_SAME = 2; // same level as the last line
var INDENT_NONE = 3; // start of line
function getType( data ) {
for ( var i = 0; i < COMMENT_TYPES.length; i++ ) {
if ( COMMENT_TYPES[ i ].data === data ) {
return COMMENT_TYPES[ i ];
}
}
return COMMENT_TYPES[ 0 ];
}
/* ---------- wikitext helpers ---------- */
// Heading of the section, without wiki markup, for the edit summary.
function sectionTitle( text ) {
var m = text.match( /^(=+)\s*(.*?)\s*\1\s*$/m );
if ( !m ) {
return 'بەشی دەستپێک';
}
var title = m[ 2 ]
.replace( /\[\[(?:[^\]|]*\|)?([^\]]*)\]\]/g, '$1' ) // [[a|b]] → b, [[a]] → a
.replace( /\{\{[^{}]*\}\}/g, '' ) // templates
.replace( /<[^>]+>/g, '' ) // HTML tags
.replace( /'{2,}/g, '' ) // bold / italic
.trim();
return title || 'بەشی دەستپێک';
}
// Text of the section above its first sub-heading, or null if there is none.
function topPart( text ) {
var lines = text.split( '\n' );
for ( var i = 1; i < lines.length; i++ ) {
if ( /^={2,}[^=].*?={2,}\s*$/.test( lines[ i ] ) ) {
return lines.slice( 0, i ).join( '\n' ).replace( /\s+$/, '' );
}
}
return null;
}
function addIndented( text, newText, indentMode ) {
text = text.replace( /\r/g, '' ).replace( /\s+$/, '' );
var lines = text.split( '\n' );
var m = lines[ lines.length - 1 ].match( /^([#*]?)(:*)/ );
var listChar = m[ 1 ];
var colons = m[ 2 ].length;
var indent = '';
if ( indentMode === INDENT_REPLY ) {
indent = listChar + new Array( colons + 2 ).join( ':' ); // one more ":"
} else if ( indentMode === INDENT_SAME ) {
indent = listChar + new Array( colons + 1 ).join( ':' ); // same "*" / ":" as the last line
}
return text + '\n' + indent + newText.trim().replace( /\n/g, '\n' + indent );
}
function pingedUsers( text ) {
var re = /\[\[(?:لێدوانی[_ ]بەکارھێنەر|[Uu]ser[_ ][Tt]alk|بەکارھێنەر|[Uu]ser):([^\]|\/#]+)/g;
var skip = [ mw.config.get( 'wgUserName' ) ];
// On a user talk page, don't offer to ping the page owner.
if ( mw.config.get( 'wgNamespaceNumber' ) === 3 ) {
skip.push( mw.config.get( 'wgTitle' ).split( '/' )[ 0 ] );
}
var names = [];
var m;
while ( ( m = re.exec( text ) ) !== null ) {
var name = m[ 1 ].replace( /_/g, ' ' ).trim();
if ( name && skip.indexOf( name ) === -1 && names.indexOf( name ) === -1 ) {
names.push( name );
}
}
return names;
}
/* ---------- API ---------- */
function fetchSection( section ) {
return api.get( {
action: 'query',
prop: 'revisions',
titles: pageName,
rvsection: section,
rvprop: 'content|timestamp',
rvslots: 'main',
curtimestamp: 1,
formatversion: 2
} ).then( function ( data ) {
var page = data.query && data.query.pages && data.query.pages[ 0 ];
if ( !page || page.missing || !page.revisions ) {
return $.Deferred().reject( 'nosection' ).promise();
}
var rev = page.revisions[ 0 ];
return {
text: rev.slots.main.content,
basetimestamp: rev.timestamp,
starttimestamp: data.curtimestamp
};
} );
}
// basetimestamp/starttimestamp make MediaWiki refuse the save (editconflict)
// if someone else changed the page after we read it.
function saveSection( section, text, summary, info ) {
return api.postWithEditToken( {
action: 'edit',
title: pageName,
section: section,
text: text,
summary: summary,
basetimestamp: info.basetimestamp,
starttimestamp: info.starttimestamp,
// Errors (e.g. edit filter warnings) in the wiki's language, using its
// local MediaWiki: messages, whatever interface language the user has.
errorformat: 'html',
errorlang: 'content',
errorsuselocal: 1,
formatversion: 2
} ).then( function ( data ) {
// e.g. a CAPTCHA comes back as a "successful" request with result=Failure
if ( !data.edit || data.edit.result !== 'Success' ) {
return $.Deferred().reject( 'editfailure', data ).promise();
}
return data;
} );
}
// Turns an API failure into an error the ProcessDialog shows.
// Recoverable errors get a "try again" button: that is how an edit filter
// warning (e.g. non-standard characters) is confirmed, like saving twice.
function asProcessError( code, result ) {
if ( code === 'editconflict' ) {
return $.Deferred().reject( new OO.ui.Error(
'ناکۆکیی دەستکاری: کەسێکی تر لە ھەمان کاتدا ئەم بەشەی گۆڕیوە. پەڕەکە نوێ بکەرەوە.',
{ recoverable: false }
) ).promise();
}
var message = 'تۆمارکردن سەرکەوتوو نەبوو: ' + code;
if ( result && ( result.error || result.errors ) ) {
try {
message = api.getErrorMessage( result );
} catch ( e ) {}
}
return $.Deferred().reject( new OO.ui.Error( message, { recoverable: true } ) ).promise();
}
function openDialog( dialog ) {
if ( windowManager ) {
windowManager.destroy();
}
windowManager = new OO.ui.WindowManager();
$( document.body ).append( windowManager.$element );
windowManager.addWindows( [ dialog ] );
windowManager.openWindow( dialog );
}
/* ---------- «داخستن» dialog ---------- */
function openArchiveDialog( section ) {
function ArchiveDialog( config ) {
ArchiveDialog.super.call( this, config );
}
OO.inheritClass( ArchiveDialog, OO.ui.ProcessDialog );
ArchiveDialog.static.name = 'closeSectionArchive';
ArchiveDialog.static.title = 'داخستنی بەش';
ArchiveDialog.static.actions = [
{ action: 'archive', label: 'داخستنی بەش', flags: [ 'primary', 'progressive' ] },
{ label: 'ھەڵوەشاندنەوە', flags: 'safe' }
];
ArchiveDialog.prototype.initialize = function () {
ArchiveDialog.super.prototype.initialize.apply( this, arguments );
this.switchTop = new OO.ui.ToggleSwitchWidget( { value: false } );
this.switchSuccess = new OO.ui.ToggleSwitchWidget( { value: true } );
this.switchDone = new OO.ui.ToggleSwitchWidget( { value: false } );
this.switchBold = new OO.ui.ToggleSwitchWidget( { value: false } );
this.note = new OO.ui.MultilineTextInputWidget( {
placeholder: 'دەقی داخستنەکە داخڵ بکە',
rows: 6
} );
var fieldset = new OO.ui.FieldsetLayout();
fieldset.addItems( [
new OO.ui.FieldLayout( this.switchTop, { label: 'دەقی داخستنەکە ببە سەرەوە', align: 'inline' } ),
new OO.ui.FieldLayout( this.switchSuccess, { label: 'وتووێژەکە بە گەیشتن بە یەکدەنگی سەرکەوتوو بوو', align: 'inline' } ),
new OO.ui.FieldLayout( this.switchDone, { label: 'بەپێی سەرکەوتووبوون یان نەبوون، {{کرا}} یان {{نەکرا}} زیاد بکە', align: 'inline' } ),
new OO.ui.FieldLayout( this.switchBold, { label: 'دەقی داخستنەکە بە تۆخ پیشان بدە', align: 'inline' } ),
new OO.ui.FieldLayout( this.note, { label: 'داخستنی بەش:', align: 'top' } )
] );
this.panel = new OO.ui.PanelLayout( { padded: true, expanded: false } );
this.panel.$element.append( fieldset.$element );
this.$body.append( this.panel.$element );
};
ArchiveDialog.prototype.getBodyHeight = function () {
return this.panel.$element.outerHeight( true );
};
ArchiveDialog.prototype.getReadyProcess = function ( data ) {
return ArchiveDialog.super.prototype.getReadyProcess.call( this, data ).next( function () {
this.note.focus();
}, this );
};
ArchiveDialog.prototype.buildText = function ( current ) {
var nl = current.indexOf( '\n' );
var header = nl === -1 ? current : current.slice( 0, nl );
var content = nl === -1 ? '' : current.slice( nl + 1 );
var success = this.switchSuccess.getValue();
var input = this.note.getValue().trim();
var newText = header + '\n{{بەسراو|کات={{subst:' + 'CURRENTTIMESTAMP}}' +
( success ? '}}\n' : '|سەرکەوتوو_نەبوو=بەڵێ}}\n' );
if ( this.switchDone.getValue() ) {
input = ( success ? '{{کرا}} ' : '{{نەکرا}} ' ) + input;
}
input = input.trim();
var closingNote = '';
if ( input ) {
closingNote = ( this.switchBold.getValue() ? "'''" + input + "'''" : input ) +
' ~~' + '~~';
}
if ( this.switchTop.getValue() ) {
if ( closingNote ) {
newText += ':' + closingNote + '\n';
}
newText += content;
} else {
newText = closingNote ?
addIndented( newText + content, closingNote, INDENT_REPLY ) :
newText + content;
}
return newText.replace( /\s+$/, '' ) + '\n{{کۆتایی بەسراو}}';
};
ArchiveDialog.prototype.getActionProcess = function ( action ) {
var dialog = this;
if ( action === 'archive' ) {
return new OO.ui.Process( function () {
return fetchSection( section ).then( function ( info ) {
if ( /\{\{\s*بەسراو\s*[|}]/.test( info.text ) ) {
return $.Deferred().reject( 'alreadyclosed' ).promise();
}
var note = dialog.note.getValue().trim();
var summary = '/* ' + sectionTitle( info.text ) + ' */ داخستنی بەش' +
( note ? ': ' + note : '' );
return saveSection( section, dialog.buildText( info.text ), summary, info );
} ).then( function () {
mw.notify( 'بەشەکە داخرا.' );
location.reload();
}, function ( code, result ) {
if ( code === 'alreadyclosed' ) {
return $.Deferred().reject( new OO.ui.Error(
'ئەم بەشە پێشتر داخراوە.', { recoverable: false }
) ).promise();
}
return asProcessError( code, result );
} );
} );
}
return ArchiveDialog.super.prototype.getActionProcess.call( this, action );
};
openDialog( new ArchiveDialog( { size: 'medium' } ) );
}
/* ---------- «دەنگ بدە» dialog ---------- */
function openCommentDialog( section ) {
fetchSection( section ).then( function ( info ) {
var onlyTop = false;
var top = topPart( info.text );
if ( top !== null ) {
onlyTop = confirm( 'ئەم بەشە ژێربەشیشی ھەیە! بۆ ناردنی دەق، مەبەستت بەشی سەرترە؟\n' +
'OK = پەیامەکە لە بەشی سەرتر دادەنرێت.\n' +
'Cancel = پەیامەکە لە کۆتایی بەشەکە دادەنرێت.' );
}
var users = pingedUsers( info.text );
function CommentDialog( config ) {
CommentDialog.super.call( this, config );
}
OO.inheritClass( CommentDialog, OO.ui.ProcessDialog );
CommentDialog.static.name = 'closeSectionComment';
CommentDialog.static.title = 'دەقی لێدوان';
CommentDialog.static.actions = [
{ action: 'comment', label: 'تۆمارکردن', flags: [ 'primary', 'progressive' ] },
{ action: 'preview', label: 'پێشبینین', icon: 'eye' },
{ label: 'دای بخە', flags: 'safe' }
];
CommentDialog.prototype.initialize = function () {
CommentDialog.super.prototype.initialize.apply( this, arguments );
var dialog = this;
var resize = function () {
dialog.updateSize();
};
this.btnReply = new OO.ui.ButtonOptionWidget( { data: INDENT_REPLY, label: 'وەڵامی پێشوو', title: 'پەیامەکە لە وەڵامی کەسی پێشوو دەنووسرێ.' } );
this.btnSame = new OO.ui.ButtonOptionWidget( { data: INDENT_SAME, label: 'بەبێ بردنەپێش', title: 'پەیامەکە بەبێ بردنەپێش دەنووسرێ.' } );
this.btnNone = new OO.ui.ButtonOptionWidget( { data: INDENT_NONE, label: 'سەری دێڕ', title: 'پەیامەکە لە سەری دێڕ دەست پێ دەکات.' } );
this.indentSelect = new OO.ui.ButtonSelectWidget( { items: [ this.btnReply, this.btnSame, this.btnNone ] } );
this.indentSelect.selectItem( this.btnReply );
this.typeDropdown = new OO.ui.DropdownWidget( {
menu: {
items: COMMENT_TYPES.map( function ( t ) {
return new OO.ui.MenuOptionWidget( { data: t.data, icon: t.icon, label: t.label } );
} )
}
} );
this.typeDropdown.getMenu().selectItemByData( 'info' );
// Votes always go on their own line, so indentation doesn't apply.
this.typeDropdown.getMenu().on( 'select', function ( item ) {
var isVote = !!( item && getType( item.getData() ).vote );
dialog.btnReply.setDisabled( isVote );
dialog.btnSame.setDisabled( isVote );
dialog.indentSelect.selectItem( isVote ? dialog.btnNone : dialog.btnReply );
} );
this.pingSelect = new OO.ui.MenuTagMultiselectWidget( {
inputPosition: 'outline',
allowArbitrary: true,
options: users.map( function ( u ) {
return { data: u, label: u };
} ),
placeholder: 'ناوی ئەو بەکارھێنەرە بنووسە کە دەتەوێ وەڵامی بدەیتەوە'
} );
this.pingSelect.on( 'change', resize );
this.comment = new OO.ui.MultilineTextInputWidget( {
placeholder: 'دەقی لێدوانەکە داخڵ بکە',
rows: 6,
autosize: true
} );
this.comment.on( 'resize', resize );
var toolbar = new OO.ui.HorizontalLayout( {
items: [
this.makeTool( 'bold', 'دەقی تۆخ', "'''", "'''" ),
this.makeTool( 'italic', 'دەقی لار', "''", "''" ),
this.makeTool( 'link', 'ویکیبەستەر', '[[', ']]' ),
this.makeTool( 'bigger', 'دەقی گەورەتر', '<big>', '</big>' ),
this.makeTool( 'smaller', 'دەقی بچووکتر', '<small>', '</small>' ),
this.makeTool( 'newline', 'دێڕی نوێ', '<br>', '' )
]
} );
var fieldset = new OO.ui.FieldsetLayout();
fieldset.addItems( [
new OO.ui.FieldLayout( this.pingSelect, { label: 'بانگکردنی بەکارھێنەر:', align: 'top' } ),
new OO.ui.FieldLayout( this.indentSelect, { label: 'بردنەپێش:', align: 'top' } ),
new OO.ui.FieldLayout( this.typeDropdown, { label: 'تاگی پێش لێدوان:', align: 'top' } ),
// FieldLayout needs a widget, so the toolbar layout is wrapped in one.
new OO.ui.FieldLayout( new OO.ui.Widget( { content: [ toolbar ] } ) ),
new OO.ui.FieldLayout( this.comment, { label: 'دەقی لێدوان:', align: 'top' } )
] );
this.$preview = $( '<div>' ).css( {
display: 'none',
marginTop: '1em',
padding: '0.5em',
border: '1px solid var(--border-color-subtle, #c8ccd1)'
} );
this.panel = new OO.ui.PanelLayout( { padded: true, expanded: false } );
this.panel.$element.append( fieldset.$element, this.$preview );
this.$body.append( this.panel.$element );
};
// Wraps the selected text (or inserts at the cursor).
CommentDialog.prototype.makeTool = function ( icon, title, before, after ) {
var dialog = this;
var button = new OO.ui.ButtonWidget( { framed: false, icon: icon, title: title, invisibleLabel: true, label: title } );
button.on( 'click', function () {
var el = dialog.comment.$input[ 0 ];
var value = dialog.comment.getValue();
var start = el.selectionStart;
var end = el.selectionEnd;
if ( typeof start !== 'number' ) {
start = end = value.length;
}
dialog.comment.setValue( value.slice( 0, start ) + before + value.slice( start, end ) + after + value.slice( end ) );
el.focus();
el.selectionStart = el.selectionEnd = end + before.length + after.length;
} );
return button;
};
CommentDialog.prototype.getBodyHeight = function () {
return this.panel.$element.outerHeight( true );
};
CommentDialog.prototype.getReadyProcess = function ( data ) {
return CommentDialog.super.prototype.getReadyProcess.call( this, data ).next( function () {
this.comment.focus();
}, this );
};
CommentDialog.prototype.getSelectedType = function () {
var item = this.typeDropdown.getMenu().findSelectedItem();
return getType( item ? item.getData() : 'info' );
};
CommentDialog.prototype.buildText = function () {
var type = this.getSelectedType();
var indentItem = this.indentSelect.findSelectedItem();
var indentMode = indentItem ? indentItem.getData() : INDENT_REPLY;
var listPrefix = /\n#/.test( info.text ) ? '# ' : '* ';
var pinged = this.pingSelect.getValue();
var parts = [];
if ( pinged.length ) {
parts.push( '{{وب|' + pinged.join( '|' ) + '}}' );
}
if ( type.text ) {
parts.push( type.text );
}
var comment = this.comment.getValue().trim();
if ( comment ) {
parts.push( comment );
}
parts.push( '~~' + '~~' );
var newText = ( type.prefix ? listPrefix : '' ) + parts.join( ' ' );
var base = onlyTop ? top : info.text.replace( /\s+$/, '' );
var updated = type.vote ?
base.replace( /\s+$/, '' ) + '\n' + newText :
addIndented( base, newText, indentMode );
var full = onlyTop ? updated + info.text.slice( top.length ) : updated;
var summary = '/* ' + sectionTitle( info.text ) + ' */ ' + type.summary +
( pinged.length ? ' + وەڵام بۆ بەکارھێنەر: ' + pinged.join( '، ' ) : '' );
return { text: full, summary: summary, comment: newText };
};
CommentDialog.prototype.getActionProcess = function ( action ) {
var dialog = this;
if ( action === 'comment' ) {
return new OO.ui.Process( function () {
if ( !dialog.comment.getValue().trim() &&
!dialog.pingSelect.getValue().length &&
dialog.getSelectedType().data === 'info' ) {
return $.Deferred().reject( new OO.ui.Error( 'تکایە دەقی لێدوانەکە بنووسە.', { recoverable: false } ) ).promise();
}
var built = dialog.buildText();
return saveSection( section, built.text, built.summary, info ).then( function () {
mw.notify( 'لێدوانەکەت تۆمار کرا.' );
location.reload();
}, asProcessError );
} );
}
if ( action === 'preview' ) {
return new OO.ui.Process( function () {
var built = dialog.buildText();
return api.post( {
action: 'parse',
text: built.comment,
title: pageName,
pst: true,
prop: 'text',
disablelimitreport: true,
formatversion: 2
} ).then( function ( data ) {
dialog.$preview.html( data.parse.text ).show();
dialog.updateSize();
}, function ( code ) {
return $.Deferred().reject( new OO.ui.Error( 'پێشبینین سەرکەوتوو نەبوو: ' + code ) ).promise();
} );
} );
}
return CommentDialog.super.prototype.getActionProcess.call( this, action );
};
openDialog( new CommentDialog( { size: 'large' } ) );
}, function ( code ) {
mw.notify( 'خوێندنەوەی بەشەکە سەرکەوتوو نەبوو: ' + code, { type: 'error' } );
} );
}
/* ---------- links next to section headings ---------- */
function makeLink( text, title, section, opener ) {
return $( '<a>' ).attr( { href: '#', role: 'button', title: title } ).css( 'font-size', 'smaller' ).text( text )
.on( 'click', function ( e ) {
e.preventDefault();
e.stopPropagation(); // don't collapse the section on mobile
mw.loader.using( OOUI_MODULES ).then( function () {
opener( section );
}, function () {
mw.notify( 'بارکردنی ئامرازەکە سەرکەوتوو نەبوو. پەڕەکە نوێ بکەرەوە.', { type: 'error' } );
} );
} );
}
function addLinks( $content ) {
$content.find( '.mw-editsection' ).each( function () {
var $editSection = $( this );
if ( $editSection.closest( '#firstHeading, .mw-first-heading' ).length ||
$editSection.next( '.mw-archivesection' ).length ) {
return;
}
// Only sections of this page; transcluded sections use "section=T-n" and are skipped.
var section = null;
$editSection.find( 'a' ).each( function () {
var m = ( $( this ).attr( 'href' ) || '' ).match( /[?&](?:ve)?section=(\d+)(?:&|#|$)/ );
if ( m ) {
section = m[ 1 ];
return false; // first match is enough
}
} );
if ( section === null ) {
return;
}
$( '<span>' ).addClass( 'mw-archivesection' ).append(
$( '<span>' ).addClass( 'mw-editsection-bracket' ).text( '[' ),
makeLink( 'دەنگ بدە', 'بە لەگەڵ/دژ/کرا/… دەنگ بدە', section, openCommentDialog ),
$( '<span>' ).text( ' / ' ).css( 'color', 'var(--color-subtle, #54595d)' ),
makeLink( 'داخستن', 'ئەم بەشە داخە', section, openArchiveDialog ),
$( '<span>' ).addClass( 'mw-editsection-bracket' ).text( ']' )
).insertAfter( $editSection );
} );
}
var ns = mw.config.get( 'wgNamespaceNumber' );
if ( ( ns === 4 || ns % 2 === 1 ) &&
mw.config.get( 'wgAction' ) === 'view' &&
mw.config.get( 'wgIsProbablyEditable' ) &&
mw.config.get( 'wgRevisionId' ) === mw.config.get( 'wgCurRevisionId' ) // not an old revision
) {
mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] ).then( function () {
if ( mw.util.getParamValue( 'diff' ) || mw.util.getParamValue( 'oldid' ) ) {
return;
}
api = new mw.Api();
mw.hook( 'wikipage.content' ).add( addLinks );
mw.loader.load( OOUI_MODULES.concat( ICON_MODULES ) );
} );
}
}( jQuery, mediaWiki ) );
// </nowiki>
kec4vfxyrmb73cm8dv263n2ug46hpwz
میدیاویکی:Abusefilter-warning-character
8
11715
47388
47353
2026-10-15T14:51:17Z
-Haryad
34
+ڕەنگ
47388
wikitext
text/x-wiki
{{edit filter warning
|action = warn
|friendly =
|text=<big>{{ڕەنگ٢|red|'''ھۆشدار'''}}: تەختەکلیلەکەت ھەندێک لە پیتەکان بە '''یوونیکۆدی عەرەبی''' دەنووسێت. </big>
'''سەرنج''': پیتەکانی <big><big>ي</big></big> (ی لەگەڵ دوو خاڵ) و <big><big>ك</big></big> (ک لەگەڵ ھەمزە) و <big><big>ه</big></big> (لە بڕی ھ یا ە) تایبەت بە زمانی عەرەبین. تکایە بەر لە ھەر چەشنە بەشداری لە ویکیپیدیادا، تەختەکلیلی ستاندارد دامەزرێنە و ئەم گرفتە چارەسەر بکە. (بۆ زانیاری زۆرتر سەبارەت بە تەختەکلیلی ستاندارد بڕوانە: [[ویکیپیدیا:نووسینی کوردی|نووسینی کوردی]])
'''چارەسەری خێرا''': کرتە بکە لەسەر ([[پەڕگە:Button YehKeh.png]]:چاکسازیی ی ک و ھ) بۆ چارەسەرکردنی کێشەکە)
پاڵوێنەیەک کە پێشی بە تۆ گرت ئەمەیە: $1
}}
mc8tp98zqoj12p6fu74gq4hy7j71s8w
مۆدیوول:Message box/fmbox.css
828
11721
47385
47367
2026-10-15T13:13:07Z
Sakura emad
13
Sakura emad پەڕەی [[مۆدیوول:message box/fmbox.css]]ی بە بێ بەجێھشتنی ڕەوانەکەرێک گواستەوە بۆ [[مۆدیوول:Message box/fmbox.css]]: Moved to the capital-M name that [[Module:Message box/configuration]] loads for {{fmbox}}
47361
sanitized-css
text/css
/* {{pp|small=y}} */
.fmbox {
clear: both; /* this sheet does not require overflow-x because of this clear */
margin: 0.2em 0;
border: 1px solid #a2a9b1;
background-color: var(--background-color-interactive-subtle, #f8f9fa);
box-sizing: border-box;
color: var(--color-base, #202122);
}
.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
.fmbox-editnotice {
background-color: transparent;
}
.fmbox .mbox-text {
padding: 0.35em 1em;
flex: 1 1 100%;
}
.fmbox .mbox-image,
.fmbox .mbox-imageright {
padding: 4px 2px;
text-align: center;
flex: none;
}
/* keep synced with each other type of message box as this isn't qualified */
.mbox-invalid-type {
text-align: center;
}
@media (min-width: 480px) {
.fmbox {
display: flex;
align-items: center;
}
.fmbox .mbox-image {
/* @noflip */
padding-left: 1em;
}
.fmbox .mbox-imageright {
/* @noflip */
padding-right: 1em;
}
}
@media screen {
html.skin-theme-clientpref-night .fmbox-warning {
background-color: #300; /* Reddish, same hue/saturation as light */
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .fmbox-warning {
background-color: #300; /* Reddish, same hue/saturation as light */
}
}
ivof69wam0nxtvwqgg5cd5tk4dl4s0k
مۆدیوول:Message box
828
11723
47383
47364
2026-10-15T13:08:14Z
Sakura emad
13
Moved Wikipedia's Message box code here (from [[Module:message box]], rev 47369) so the lowercase module can be restored as Wiktionary's own module for {{auto cat}}
47383
Scribunto
text/plain
require('strict')
local getArgs
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
else
-- default to ombox
obj.cfg = cfg.ombox
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[پۆل:%s|%s]]', cat, sort)
else
cat = string.format('[[پۆل:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
table.insert(self.classes, class)
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
self.typeImageNeedsLink = typeData.imageNeedsLink
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Set the below row.
self.below = cfg.below and args.below
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
if yesno(args.plainlinks) ~= false then
self:addClass('plainlinks')
end
if self.below then
self:addClass('mbox-with-below')
end
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Set image classes.
self.imageRightClass = args.imagerightclass or args.imageclass
self.imageLeftClass = args.imageleftclass or args.imageclass
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^([tT][eE][mM][pP][lL][aA][tT][eE]|داڕێژە)[%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'داڕێژە:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'ئەم ' .. (cfg.sectionDefault or 'پەڕە')
elseif type(args.sect) == 'string' then
sect = 'ئەم ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText
if self.isSmall then
local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. (talk == '#' and '' or '#') .. talk)
talkText = string.format('([[%s|وتووێژ]])', talkLink)
else
talkText = 'لەوانەیە وتووێژی پەیوەندیدار لەسەر'
if talkArgIsTalkPage then
talkText = string.format(
'%s لە [[%s|%s]] بدۆزرێتەوە.',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s [[%s' .. (talk == '#' and '' or '#') .. '%s|پەڕەی وتووێژ]] بدۆزرێتەوە.',
talkText,
talkTitle.prefixedText,
talk
)
end
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('Fی Y')
end
if date then
self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s%s|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize, self.typeImageNeedsLink and "" or "|link=" )
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
-- set templatestyles
self.base_templatestyles = cfg.templatestyles
self.templatestyles = args.templatestyles
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'لە'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('پۆل:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'ئەو وتارانە کە لە پارامەتری ڕێکەوتی داڕێژەکەیاندا کێشە ھەیە')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'پ'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.invalidTypeError then
local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)
end
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:exportDiv()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
-- Create the box.
local mbox = root:tag('div')
mbox:attr('id', self.id or nil)
for i, class in ipairs(self.classes or {}) do
mbox:addClass(class or nil)
end
mbox
:cssText(self.style or nil)
if self.attrs then
mbox:attr(self.attrs)
end
local flex_container
if self.below then
-- we need to wrap the flex components (`image(right)` and `text`) in their
-- own container div to support the `below` parameter
flex_container = mw.html.create('div')
flex_container:addClass('mbox-flex')
else
-- the mbox itself is the parent, so we need no HTML flex_container
flex_container = mw.html.create()
end
-- Add the left-hand image.
if self.imageLeft then
local imageLeftCell = flex_container:tag('div'):addClass('mbox-image')
imageLeftCell
:addClass(self.imageLeftClass)
:wikitext(self.imageLeft or nil)
end
-- Add the text.
local textCell = flex_container:tag('div'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = flex_container:tag('div'):addClass('mbox-imageright')
imageRightCell
:addClass(self.imageRightClass)
:wikitext(self.imageRight or nil)
end
mbox:node(flex_container)
-- Add the below row.
if self.below then
mbox:tag('div')
:addClass('mbox-text mbox-below')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:addClass('mbox-invalid-type')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'داڕێژەی <code>%s[[داڕێژە:%s|%s]]%s</code> بەنادروستی سەبستیووت کراوە.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
-- Create the box table.
local boxTable = root:tag('table')
boxTable:attr('id', self.id or nil)
for i, class in ipairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div')
end
imageLeftCell
:addClass(self.imageLeftClass)
:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div')
end
imageRightCell
:addClass(self.imageRightClass)
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:addClass('mbox-invalid-type')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
-- DIV MIGRATION CONDITIONAL
if box.cfg.div_structure then
return box:exportDiv()
end
-- END DIV MIGRATION CONDITIONAL
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
purx73tszxu57rjxz2al1jvenowbna0
داڕێژە:لێدوان
10
11732
47391
2026-10-15T15:38:54Z
Sakura emad
13
لێدوان
47391
wikitext
text/x-wiki
[[پەڕگە:Pictogram voting comment.svg|15px|link=|alt=]] '''{{{1|لێدوان:}}}'''
ffvov0m1ptrw8h76fu2hbuhjlmmxk56
داڕێژە:بێلایەن
10
11733
47392
2026-10-15T15:39:08Z
Sakura emad
13
بێلایەن
47392
wikitext
text/x-wiki
[[پەڕگە:Symbol neutral vote.svg|15px|link=]] '''بێلایەن'''
64uok3y6f1x6unzbpia7lz3n02e1fcr
داڕێژە:پرسیار
10
11734
47393
2026-10-15T15:39:20Z
Sakura emad
13
پرسیار
47393
wikitext
text/x-wiki
[[پەڕگە:Symbol question.svg|17px|link=|alt=]] <span style="font-weight:bold">{{{label|پرسیار}}}: </span>{{{1| }}}
ljdzsk9ehf99upiezz9d59jl1wtgyte
ویکیفەرھەنگ:تاقیکردنەوەی ئامرازەکان
4
11736
47402
2026-10-15T16:32:52Z
Sakura emad
13
پەڕەی دروست کرد بە «test»ەوە
47402
wikitext
text/x-wiki
test
jrwjerxiekdtj9k82lg930wpkr6tq6r
47403
47402
2026-10-15T16:34:12Z
Sakura emad
13
Test sections for the close gadget
47403
wikitext
text/x-wiki
پەڕەیەک بۆ تاقیکردنەوەی ئامرازی داخستن/دەنگدان. دواتر دەسڕدرێتەوە.
== تاقیکردنەوە ١: وتووێژی ئاسایی ==
پرسیارێکی تاقیکردنەوە. — [[بەکارھێنەر:Example|Example]]
:وەڵامێکی تاقیکردنەوە.
== تاقیکردنەوە ٢: دەنگدان ==
* {{لەگەڵ}} دەنگێکی تاقیکردنەوە.
== تاقیکردنەوە ٣: ژێربەشی ھەیە ==
دەقی بەشی سەرەوە.
=== ژێربەش ===
دەقی ژێربەش.
== تاقیکردنەوە ٤: بۆ داخستن ==
وتووێژێک بۆ تاقیکردنەوەی داخستن.
== تاقیکردنەوە ٥: پێشتر داخراوە ==
{{بەسراو}}
وتووێژێکی داخراو.
{{کۆتایی بەسراو}}
== تاقیکردنەوە ٦: پاڵوێنەی پیتی ناستاندارد ==
بۆ تاقیکردنەوەی ھۆشداریی پاڵوێنە.
au5na8k0wnkdmpgfqu6d8bwx74l9yel
47404
47403
2026-10-15T16:38:33Z
Sakura emad
13
/* تاقیکردنەوە ١: وتووێژی ئاسایی */ تۆمارکردنی پەیام
47404
wikitext
text/x-wiki
پەڕەیەک بۆ تاقیکردنەوەی ئامرازی داخستن/دەنگدان. دواتر دەسڕدرێتەوە.
== تاقیکردنەوە ١: وتووێژی ئاسایی ==
پرسیارێکی تاقیکردنەوە. — [[بەکارھێنەر:Example|Example]]
:وەڵامێکی تاقیکردنەوە.
::وەڵامی تاقیکردنەوە ١ [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٣٨، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
== تاقیکردنەوە ٢: دەنگدان ==
* {{لەگەڵ}} دەنگێکی تاقیکردنەوە.
== تاقیکردنەوە ٣: ژێربەشی ھەیە ==
دەقی بەشی سەرەوە.
=== ژێربەش ===
دەقی ژێربەش.
== تاقیکردنەوە ٤: بۆ داخستن ==
وتووێژێک بۆ تاقیکردنەوەی داخستن.
== تاقیکردنەوە ٥: پێشتر داخراوە ==
{{بەسراو}}
وتووێژێکی داخراو.
{{کۆتایی بەسراو}}
== تاقیکردنەوە ٦: پاڵوێنەی پیتی ناستاندارد ==
بۆ تاقیکردنەوەی ھۆشداریی پاڵوێنە.
bouo4a61rf3k2yw8nipokc8wiewj6jw
47405
47404
2026-10-15T16:39:54Z
Sakura emad
13
/* تاقیکردنەوە ٢: دەنگدان */ تۆمارکردنی لێدوان بە لەگەڵ
47405
wikitext
text/x-wiki
پەڕەیەک بۆ تاقیکردنەوەی ئامرازی داخستن/دەنگدان. دواتر دەسڕدرێتەوە.
== تاقیکردنەوە ١: وتووێژی ئاسایی ==
پرسیارێکی تاقیکردنەوە. — [[بەکارھێنەر:Example|Example]]
:وەڵامێکی تاقیکردنەوە.
::وەڵامی تاقیکردنەوە ١ [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٣٨، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
== تاقیکردنەوە ٢: دەنگدان ==
* {{لەگەڵ}} دەنگێکی تاقیکردنەوە.
* {{لەگەڵ}} دەنگی تاقیکردنەوە ٢ [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٣٩، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
== تاقیکردنەوە ٣: ژێربەشی ھەیە ==
دەقی بەشی سەرەوە.
=== ژێربەش ===
دەقی ژێربەش.
== تاقیکردنەوە ٤: بۆ داخستن ==
وتووێژێک بۆ تاقیکردنەوەی داخستن.
== تاقیکردنەوە ٥: پێشتر داخراوە ==
{{بەسراو}}
وتووێژێکی داخراو.
{{کۆتایی بەسراو}}
== تاقیکردنەوە ٦: پاڵوێنەی پیتی ناستاندارد ==
بۆ تاقیکردنەوەی ھۆشداریی پاڵوێنە.
k41w7ho700ffk0nv245udhcxcuewhju
47406
47405
2026-10-15T16:41:15Z
Sakura emad
13
/* تاقیکردنەوە ٣: ژێربەشی ھەیە */ تۆمارکردنی پەیام
47406
wikitext
text/x-wiki
پەڕەیەک بۆ تاقیکردنەوەی ئامرازی داخستن/دەنگدان. دواتر دەسڕدرێتەوە.
== تاقیکردنەوە ١: وتووێژی ئاسایی ==
پرسیارێکی تاقیکردنەوە. — [[بەکارھێنەر:Example|Example]]
:وەڵامێکی تاقیکردنەوە.
::وەڵامی تاقیکردنەوە ١ [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٣٨، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
== تاقیکردنەوە ٢: دەنگدان ==
* {{لەگەڵ}} دەنگێکی تاقیکردنەوە.
* {{لەگەڵ}} دەنگی تاقیکردنەوە ٢ [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٣٩، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
== تاقیکردنەوە ٣: ژێربەشی ھەیە ==
دەقی بەشی سەرەوە.
:لێدوانی تاقیکردنەوە ٣ بۆ بەشی سەرەوە [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٤١، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
=== ژێربەش ===
دەقی ژێربەش.
== تاقیکردنەوە ٤: بۆ داخستن ==
وتووێژێک بۆ تاقیکردنەوەی داخستن.
== تاقیکردنەوە ٥: پێشتر داخراوە ==
{{بەسراو}}
وتووێژێکی داخراو.
{{کۆتایی بەسراو}}
== تاقیکردنەوە ٦: پاڵوێنەی پیتی ناستاندارد ==
بۆ تاقیکردنەوەی ھۆشداریی پاڵوێنە.
9tbjg170fat1oovrs19a04hafoimfj3
47407
47406
2026-10-15T16:42:12Z
Sakura emad
13
/* تاقیکردنەوە ٤: بۆ داخستن */ داخستنی بەش: داخستنی تاقیکردنەوە ٤
47407
wikitext
text/x-wiki
پەڕەیەک بۆ تاقیکردنەوەی ئامرازی داخستن/دەنگدان. دواتر دەسڕدرێتەوە.
== تاقیکردنەوە ١: وتووێژی ئاسایی ==
پرسیارێکی تاقیکردنەوە. — [[بەکارھێنەر:Example|Example]]
:وەڵامێکی تاقیکردنەوە.
::وەڵامی تاقیکردنەوە ١ [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٣٨، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
== تاقیکردنەوە ٢: دەنگدان ==
* {{لەگەڵ}} دەنگێکی تاقیکردنەوە.
* {{لەگەڵ}} دەنگی تاقیکردنەوە ٢ [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٣٩، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
== تاقیکردنەوە ٣: ژێربەشی ھەیە ==
دەقی بەشی سەرەوە.
:لێدوانی تاقیکردنەوە ٣ بۆ بەشی سەرەوە [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٤١، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
=== ژێربەش ===
دەقی ژێربەش.
== تاقیکردنەوە ٤: بۆ داخستن ==
{{بەسراو|کات=20261015164212}}
وتووێژێک بۆ تاقیکردنەوەی داخستن.
:{{کرا}} داخستنی تاقیکردنەوە ٤ [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٤٢، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
{{کۆتایی بەسراو}}
== تاقیکردنەوە ٥: پێشتر داخراوە ==
{{بەسراو}}
وتووێژێکی داخراو.
{{کۆتایی بەسراو}}
== تاقیکردنەوە ٦: پاڵوێنەی پیتی ناستاندارد ==
بۆ تاقیکردنەوەی ھۆشداریی پاڵوێنە.
dp3bcik4yq5f6yoi5ezl9ifl0t47xns
47408
47407
2026-10-15T16:44:13Z
Sakura emad
13
/* تاقیکردنەوە ٦: پاڵوێنەی پیتی ناستاندارد */ تۆمارکردنی پەیام
47408
wikitext
text/x-wiki
پەڕەیەک بۆ تاقیکردنەوەی ئامرازی داخستن/دەنگدان. دواتر دەسڕدرێتەوە.
== تاقیکردنەوە ١: وتووێژی ئاسایی ==
پرسیارێکی تاقیکردنەوە. — [[بەکارھێنەر:Example|Example]]
:وەڵامێکی تاقیکردنەوە.
::وەڵامی تاقیکردنەوە ١ [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٣٨، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
== تاقیکردنەوە ٢: دەنگدان ==
* {{لەگەڵ}} دەنگێکی تاقیکردنەوە.
* {{لەگەڵ}} دەنگی تاقیکردنەوە ٢ [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٣٩، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
== تاقیکردنەوە ٣: ژێربەشی ھەیە ==
دەقی بەشی سەرەوە.
:لێدوانی تاقیکردنەوە ٣ بۆ بەشی سەرەوە [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٤١، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
=== ژێربەش ===
دەقی ژێربەش.
== تاقیکردنەوە ٤: بۆ داخستن ==
{{بەسراو|کات=20261015164212}}
وتووێژێک بۆ تاقیکردنەوەی داخستن.
:{{کرا}} داخستنی تاقیکردنەوە ٤ [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٤٢، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
{{کۆتایی بەسراو}}
== تاقیکردنەوە ٥: پێشتر داخراوە ==
{{بەسراو}}
وتووێژێکی داخراو.
{{کۆتایی بەسراو}}
== تاقیکردنەوە ٦: پاڵوێنەی پیتی ناستاندارد ==
بۆ تاقیکردنەوەی ھۆشداریی پاڵوێنە.
:تاقیکردنەوە ٦ بە پیتی عەرەبی: ي و ك [[بەکارھێنەر:Sakura emad|Sakura emad]] ([[لێدوانی بەکارھێنەر:Sakura emad|لێدوان]]) ١٩:٤٤، ١٥ی تشرینی یەکەمی ٢٠٢٦ (+03)
n84bdt1qux75ojbk9xrh6glqs5semso