ویکیفەرھەنگ
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
isim
0
3303
47351
42707
2026-10-14T20:18:21Z
Sakura emad
13
47351
wikitext
text/x-wiki
تاقيكردنةوة
== تورکی ==
=== وشەڕەتناسی ===
{{واڵا}}
=== ناو ===
{{head|tr|ناو}}
#ناو
knfjtle8uvbj2qzd0mpgm2qex2d54b4
47352
47351
2026-10-14T20:19:51Z
Sakura emad
13
Restored revision 42707 by [[Special:Contributions/Ghybu|Ghybu]] ([[en:w:User:BrandonXLF/Restorer|Restorer]])
47352
wikitext
text/x-wiki
== تورکی ==
=== وشەڕەتناسی ===
{{واڵا}}
=== ناو ===
{{head|tr|ناو}}
#ناو
0eecfcpqr8jztcylteyrdfh0qpcz0f3
تۆکیۆ
0
4565
47343
45794
2026-10-14T17:06:52Z
Ghybu
12
/* ناو */
47343
wikitext
text/x-wiki
== کوردیی ناوەندی ==
=== وشەڕەتناسی ===
{{واڵا}}
=== ناوی تایبەت ===
{{ckb-proper noun}}
# پایتەختی وڵاتی ژاپۆنە
==== وەرگێڕانەکان ====
{{وەرگێڕان-سەر|}}
{{وەرگێڕان-بن}}
a54t13ny5ga9t6hinsd5nli322d0anp
میدیاویکی:Common.css
8
7829
47349
36822
2026-10-14T17:29:57Z
-Haryad
34
+تاقیکردنەوە
47349
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;
}
fn601zye3flczhu62coc7m36xtv87p8
مۆدیوول:message box/styles.css
828
10680
47358
34389
2026-10-15T05:49:57Z
-Haryad
34
-Haryad پەڕەی [[مۆدیوول:message box/styles.css]]ی بە بێ بەجێھشتنی ڕەوانەکەرێک گواستەوە بۆ [[مۆدیوول:Message box/styles.css]]
34388
sanitized-css
text/css
.maintenance-box {
width: 90%;
margin: 0.75em auto;
border-width: 1px;
border-style: dashed;
padding: 0.25em;
}
.request-box {
/* width: fit-content added as inline style */
margin: 0.75em 1em 0.75em 1em;
border: 1px dashed var(--border-color-base, #999999);
padding: 0.25em;
background: var(--background-color-base, #FFFFFF);
}
body.skin-minerva .request-box table {
margin-top: 0.25em;
margin-bottom: 0.25em;
}
/* Colors */
.maintenance-box-blue { background-color: #E6E6FF; border-color: #000061; }
.maintenance-box-red { background-color: #FFE6E6; border-color: #610000; }
.maintenance-box-yellow { background-color: #FFFFE6; border-color: #616100; }
.maintenance-box-grey { background-color: #F2F2F2; border-color: #303030; }
.maintenance-box-orange { background-color: #FFF2E6; border-color: #612F00; }
/* Dark colors. Styles need to be duplicated exactly between these two selectors. */
@media screen {
html.skin-theme-clientpref-night .maintenance-box-blue { background-color: #1D1D44; border-color: #73737F; }
html.skin-theme-clientpref-night .maintenance-box-red { background-color: #441D1D; border-color: #7F7373; }
html.skin-theme-clientpref-night .maintenance-box-yellow { background-color: #323216; border-color: #7F7F73; }
html.skin-theme-clientpref-night .maintenance-box-grey { background-color: #303030; border-color: #797979; }
html.skin-theme-clientpref-night .maintenance-box-orange { background-color: #44301D; border-color: #7F7973; }
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .maintenance-box-blue { background-color: #1D1D44; border-color: #73737F; }
html.skin-theme-clientpref-os .maintenance-box-red { background-color: #441D1D; border-color: #7F7373; }
html.skin-theme-clientpref-os .maintenance-box-yellow { background-color: #323216; border-color: #7F7F73; }
html.skin-theme-clientpref-os .maintenance-box-grey { background-color: #303030; border-color: #797979; }
html.skin-theme-clientpref-os .maintenance-box-orange { background-color: #44301D; border-color: #7F7973; }
}
rjz98q84bhx4tq9g0e8nrtea9per3ay
47368
47358
2026-10-15T06:29:32Z
-Haryad
34
-Haryad پەڕەی [[مۆدیوول:Message box/styles.css]]ی بە بێ بەجێھشتنی ڕەوانەکەرێک گواستەوە بۆ [[مۆدیوول:message box/styles.css]]
34388
sanitized-css
text/css
.maintenance-box {
width: 90%;
margin: 0.75em auto;
border-width: 1px;
border-style: dashed;
padding: 0.25em;
}
.request-box {
/* width: fit-content added as inline style */
margin: 0.75em 1em 0.75em 1em;
border: 1px dashed var(--border-color-base, #999999);
padding: 0.25em;
background: var(--background-color-base, #FFFFFF);
}
body.skin-minerva .request-box table {
margin-top: 0.25em;
margin-bottom: 0.25em;
}
/* Colors */
.maintenance-box-blue { background-color: #E6E6FF; border-color: #000061; }
.maintenance-box-red { background-color: #FFE6E6; border-color: #610000; }
.maintenance-box-yellow { background-color: #FFFFE6; border-color: #616100; }
.maintenance-box-grey { background-color: #F2F2F2; border-color: #303030; }
.maintenance-box-orange { background-color: #FFF2E6; border-color: #612F00; }
/* Dark colors. Styles need to be duplicated exactly between these two selectors. */
@media screen {
html.skin-theme-clientpref-night .maintenance-box-blue { background-color: #1D1D44; border-color: #73737F; }
html.skin-theme-clientpref-night .maintenance-box-red { background-color: #441D1D; border-color: #7F7373; }
html.skin-theme-clientpref-night .maintenance-box-yellow { background-color: #323216; border-color: #7F7F73; }
html.skin-theme-clientpref-night .maintenance-box-grey { background-color: #303030; border-color: #797979; }
html.skin-theme-clientpref-night .maintenance-box-orange { background-color: #44301D; border-color: #7F7973; }
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .maintenance-box-blue { background-color: #1D1D44; border-color: #73737F; }
html.skin-theme-clientpref-os .maintenance-box-red { background-color: #441D1D; border-color: #7F7373; }
html.skin-theme-clientpref-os .maintenance-box-yellow { background-color: #323216; border-color: #7F7F73; }
html.skin-theme-clientpref-os .maintenance-box-grey { background-color: #303030; border-color: #797979; }
html.skin-theme-clientpref-os .maintenance-box-orange { background-color: #44301D; border-color: #7F7973; }
}
rjz98q84bhx4tq9g0e8nrtea9per3ay
مۆدیوول:message box
828
10682
47356
33891
2026-10-15T05:49:57Z
-Haryad
34
-Haryad پەڕەی [[مۆدیوول:message box]]ی گواستەوە بۆ [[مۆدیوول:Message box]]
33891
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
47363
47356
2026-10-15T06:29:32Z
-Haryad
34
-Haryad پەڕەی [[مۆدیوول:Message box]] گواستەوە بۆ [[مۆدیوول:message box]] کە پێشتر ڕەوانەکەر بوو
33891
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
47369
47363
2026-10-15T06:33:27Z
-Haryad
34
+نوێکردنەوە
47369
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
بەکارھێنەر:-Haryad/sandbox
2
11184
47350
35941
2026-10-14T17:39:37Z
-Haryad
34
+تاقیکردنەوە
47350
wikitext
text/x-wiki
سڵاو هاوڕێیان
كوردی زمان
kfwsvhloiq45zue5q6psj9psy7z9da5
میدیاویکی:Gadget-CatMaker
8
11664
47382
46939
2026-10-15T09:54:28Z
-Haryad
34
47382
wikitext
text/x-wiki
پۆلساز: دروستکردنی پۆلی ھاوپلە بەپێی ویکیفەرھەنگی ئینگلیزی
bl7q0g8z8ippqrht5y0x0saw8r1h53a
داڕێژە:بەکارھێنانی تەختەکلیلی ستاندارد
10
11668
47380
47127
2026-10-15T09:48:31Z
-Haryad
34
+ڕەنگ
47380
wikitext
text/x-wiki
== تەختەکلیل ==
سڵاو {{و|{{{name|{{SAFESUBST:<noinclude/>BASEPAGENAME}}}}}}} بەخێرھاتی بۆ ویکیفەرھەنگ! سپاس بۆ بەشدارییەکانت، بەڵام [[w:ckb:تەختەکلیلی کۆمپیوتەر|تەختەکلیل]]ەکەت کێشەی ھەیە و [[w:ckb:ویکیپیدیا:نووسینی کوردی|ناستانداردە]]. تەختەکلیلە ناستانداردەکان چەند پیتێک بەکار دەبەن کە لە [[ویکیفەرھەنگ|ویکیفەرھەنگی کوردیی ناوەندی]] کێشە دەنێنەوە. بۆ نموونە ھەردووک پیتەکانی '''ك''' و '''ک'''، کە بە وشەی ترەوە دەلکێنرێن ھەست بە جیاوازییەکەیان ناکرێت؛ بەڵام کێشە بۆ سیستم دروست دەکات لە کاتی گەڕان و لەوانەیە بایتی زۆرتر سەرف بکەن لە وتارەکاندا. ئەو پیتانەی کە ناستانداردن لەوانەیە یەکێک یان زیاتر لەمانە بن: {{ڕەنگ٢|red|ە}}، {{ڕەنگ٢|red|ي}}، {{ڕەنگ٢|red|ـهـ}}، {{ڕەنگ٢|red|ك}}. تکایە کیبۆردەکەت بگۆڕە بە دانەیەک کە [[w:ckb:ویکیپیدیا:نووسینی کوردی|لەم پەڕەیە پێشنیار کراوە]] تاکو ئەم کێشەیە چارەسەر ببێت. سەرنج بدە ئەگەر دوای دەستکارییەکانت تاگێکی ئاوا لە نزیک دەستکارییەکەت بوو: ({{highlight|''بەکارھێنانی نووسەی ناستاندارد''|#ffe599}}) ئەوە واتای ئەوەیە کە تەختەکلیلەکەت کێشەی ھەیە و ناستانداردە و پێویستە بگۆڕدرێت.<noinclude>{{documentation}}</noinclude>
gi070ede13bdaycmltn48h1e50g2vcg
47381
47380
2026-10-15T09:50:29Z
-Haryad
34
+تەواو
47381
wikitext
text/x-wiki
== تەختەکلیل ==
سڵاو {{وەڵام بۆ|{{{name|{{SAFESUBST:<noinclude/>BASEPAGENAME}}}}}}} بەخێرھاتی بۆ ویکیفەرھەنگ! سپاس بۆ بەشدارییەکانت، بەڵام [[w:ckb:تەختەکلیلی کۆمپیوتەر|تەختەکلیل]]ەکەت کێشەی ھەیە و [[w:ckb:ویکیپیدیا:نووسینی کوردی|ناستانداردە]]. تەختەکلیلە ناستانداردەکان چەند پیتێک بەکار دەبەن کە لە [[ویکیفەرھەنگ|ویکیفەرھەنگی کوردیی ناوەندی]] کێشە دەنێنەوە. بۆ نموونە ھەردووک پیتەکانی '''ك''' و '''ک'''، کە بە وشەی ترەوە دەلکێنرێن ھەست بە جیاوازییەکەیان ناکرێت؛ بەڵام کێشە بۆ سیستم دروست دەکات لە کاتی گەڕان و لەوانەیە بایتی زۆرتر سەرف بکەن لە وتارەکاندا. ئەو پیتانەی کە ناستانداردن لەوانەیە یەکێک یان زیاتر لەمانە بن: {{ڕەنگ٢|red|ە}}، {{ڕەنگ٢|red|ي}}، {{ڕەنگ٢|red|ـهـ}}، {{ڕەنگ٢|red|ك}}. تکایە کیبۆردەکەت بگۆڕە بە دانەیەک کە [[w:ckb:ویکیپیدیا:نووسینی کوردی|لەم پەڕەیە پێشنیار کراوە]] تاکو ئەم کێشەیە چارەسەر ببێت. سەرنج بدە ئەگەر دوای دەستکارییەکانت تاگێکی ئاوا لە نزیک دەستکارییەکەت بوو: ({{highlight|''بەکارھێنانی نووسەی ناستاندارد''|#ffe599}}) ئەوە واتای ئەوەیە کە تەختەکلیلەکەت کێشەی ھەیە و ناستانداردە و پێویستە بگۆڕدرێت.<noinclude>{{documentation}}</noinclude>
50kf79m4rqwve4f7tgbrgn98ub0dz96
میدیاویکی:Tag-بەستەردەری خێرا-description
8
11696
47328
2026-10-14T15:43:35Z
-Haryad
34
+وەسفی تاگ
47328
wikitext
text/x-wiki
بەئاسانی بەستەر بە وتارەکان دەدات (بەڵام لەکاتی بەکارھێنان تۆ بڕیار دەدەیت بەستەر بە کام وتار بدەیت و بە کامەی نەدەیت.)
n6hsqxi8begxcpgf73q3ioah9l7f9t0
میدیاویکی:Tag-بەستەردەری خێرا
8
11697
47329
2026-10-14T15:44:35Z
-Haryad
34
+ناوی تاگ
47329
wikitext
text/x-wiki
[[w:ckb:ویکیپیدیا:بەستەردەری خێرا|بەستەردەری خێرا]]
butcwki1fjryu7iu2srmcjkx9qut0kh
میدیاویکی:Tag-بەکارھێنانی نووسەی ناستاندارد-description
8
11698
47330
2026-10-14T16:40:26Z
-Haryad
34
+وەسفی تاگ
47330
wikitext
text/x-wiki
ئەو دەستکارییانەی بە بەکارھێنانی تەختەکلیلی ناستاندارد ئەنجام دراون
4j95lbre43int8254amqdxxnm6ge4uk
میدیاویکی:Gadget-quickLinker.js
8
11699
47331
2026-10-14T16:41:08Z
-Haryad
34
+ئامراز
47331
javascript
text/javascript
/*
* ئەم سکریپتە بۆ زیادکردنی خێرای بەستەرەکانە لە ویکیفەرھەنگی کوردیی ناوەندی
* وەرگیراوە لە: [[:he:User:ערن]]
*/
if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) $(function(){
var titleNoBrackets = /(.+?)( \(|$)/.exec(mw.config.get('wgTitle'));
if (titleNoBrackets) titleNoBrackets = titleNoBrackets[1];
else return;
// پەیامە کوردییەکان
mw.messages.set({
'qlinker-edit' : 'بەستەردەری خێرا',
'qlinker-cancel' : 'ھەڵوەشاندنەوە',
'linkify-summary': 'زیادکردنی بەستەر بۆ [[$1]]',
'qlinker-save-success': 'بەسەرکەوتوویی پاشەکەوت کرا!',
'qlinker-save-continue': 'پاشەکەوتکردن',
'qlinker-skip': 'پەڕاندنی پەڕە',
'qlinker-skip-match': 'بازدان بۆ ئەوەی دواتر',
'qlinker-invoke': 'زیادکردنی بەستەرەکان بەخێرایی',
'qlinker-sidelink': 'بەستەردەری خێرا',
'qlinker-no-results': 'ھیچ ئەنجامێک نەدۆزرایەوە',
'qlinker-confirm-masslink': 'پێشتر ئەم پەڕەیە چەند جارێک بەستەری پێ دراوە. دڵنیایت؟'
});
function createQuickEditorDialog(searchRes, safeMode){
function QuickEditorDialog( config ) {
this.contextRgx = new RegExp('(.*[^\\[])(' + mw.util.escapeRegExp(titleNoBrackets) +')((?![^\\[\\{]*[\\]\\}]).*)', 'ig');
this.contextRgxLink = new RegExp('(.*\\[\\[)([^\\]]+?)\\|(' + mw.util.escapeRegExp(titleNoBrackets) +')(\\]\\].*)', 'ig');
this.pageI = -1;
this.matchI = 0;
this.searchData = null;
this.curPage = null;
this.safeMode = safeMode;
this.skipsCounter = 0;
this.starttimestamp = null;
this.timestamp = null;
QuickEditorDialog.super.call( this, config );
}
OO.inheritClass( QuickEditorDialog, OO.ui.ProcessDialog );
QuickEditorDialog.static.name = 'QuickEditorDialog';
QuickEditorDialog.static.title = mw.msg('qlinker-edit');
QuickEditorDialog.static.actions = [
{ action: 'saveContinue', label: mw.msg('qlinker-save-continue'), flags: [ 'other', 'constructive' ] },
{ action: 'skipOne', label: mw.msg('qlinker-skip'), flags: [ 'other', 'progressive' ] },
{ action: 'skipMatch', label: mw.msg('qlinker-skip-match'), flags: [ 'other', 'progressive' ] },
{ label: mw.msg('qlinker-cancel'), flags: 'safe' }
];
QuickEditorDialog.prototype.initialize = function () {
QuickEditorDialog.super.prototype.initialize.call( this );
this.content = new OO.ui.PanelLayout( { padded: true, expanded: true } );
this.$body.append( this.content.$element );
};
QuickEditorDialog.prototype.getBodyHeight = function () {
return 400;
};
QuickEditorDialog.prototype.getSetupProcess = function ( data ) {
data = data || {};
return QuickEditorDialog.super.prototype.getSetupProcess.call( this, data )
.next( function () {
this.searchData = data.searchData.query;
this.starttimestamp = data.searchData.curtimestamp;
this.nextPage();
}, this );
};
QuickEditorDialog.prototype.getActionProcess = function ( action ) {
var dialog = this;
switch ( action ) {
case 'skipOne':
return new OO.ui.Process( function () {
dialog.skipsCounter++;
dialog.nextPage();
}, this );
case 'skipMatch':
return new OO.ui.Process( function () {
dialog.skipsCounter++;
dialog.nextMatch();
}, this );
case 'saveContinue':
return new OO.ui.Process( function () {
dialog.savePage();
}, this );
}
return QuickEditorDialog.super.prototype.getActionProcess.call( this, action );
};
QuickEditorDialog.prototype.savePage = function ( ) {
if (this.curPage)
{
var api = new mw.Api(), pagename = this.curPage;
// دروستکردنی کەرەستەکانی دەستکاری (بەبێ tags بۆ ڕێگری لە ھەڵە)
var editParams = {
action: 'edit',
title: this.curPage,
summary: mw.msg('linkify-summary', mw.config.get('wgTitle')),
minor: 1,
basetimestamp: this.timestamp,
starttimestamp: this.starttimestamp,
text: this.text
};
api.postWithToken('csrf', editParams).done(function(d) {
if (d && d.edit && d.edit.result == 'Success') mw.notify(mw.msg('qlinker-save-success', pagename));
});
}
var self = this;
if(this.safeMode) setTimeout(function(){ self.nextPage(); }, 5000/(self.skipsCounter+1));
else self.nextPage();
};
QuickEditorDialog.prototype.nextMatch = function ( ) {
var m, contextPre, contextPost, contextInner, contextInnerOld, newContext, context;
this.matchI++;
if (this.searchData.pageids.length <= this.pageI) {
return this.nextPage();
}
var page = this.searchData.pages[this.searchData.pageids[this.pageI]],
pagecontent = page.revisions[0]['*'];
if (page.title == mw.config.get('wgTitle')) {
return this.nextPage();
}
if (m = this.contextRgx.exec(pagecontent)) {
contextPost = m[3];
contextInner = (m[2] == mw.config.get('wgTitle')) ? '[['+mw.config.get('wgTitle')+']]' : '[['+mw.config.get('wgTitle')+'|' + m[2] + ']]';
contextInnerOld = '';
}
else if (m = this.contextRgxLink.exec(pagecontent)) {
if(m[2].endsWith(')'))
{
m = null;
}
else
{
contextPost = m[3] == mw.config.get('wgTitle')? m[4] : '|' + m[3] + m[4];
contextInner = mw.config.get('wgTitle');
contextInnerOld = '<s>' + m[2] + (m[3] == mw.config.get('wgTitle')? '|' : '') + '</s>';
}
}
if (!m) return this.nextPage();
context = m[0];
contextPre = m[1];
newContext = contextPre+contextInner+contextPost;
this.content.$element.html('<h1><a href="/wiki/'+encodeURI(page.title)+'" target="_blank">'+page.title+'</a></h1><p>'+contextPre+contextInnerOld+'<b style="background-color:powderblue;">'+contextInner+'</b>'+contextPost+'</p>');
this.curPage = page.title;
this.text = pagecontent.replace(context, newContext);
this.timestamp = page.revisions[0].timestamp;
};
QuickEditorDialog.prototype.nextPage = function ( ) {
this.pageI++;
this.matchI = 0;
if (this.searchData.pageids.length <= this.pageI)
{
if(this.curPage === null) {
this.content.$element.html('<h1><a target="_blank" href="/wiki/Special:Search/'+encodeURI('"' + titleNoBrackets +'" -linksto:"'+mw.config.get('wgPageName') + '"')+'">'+mw.msg('qlinker-no-results')+'</a></h1>');
this.actions.setAbilities( {
saveContinue: false, skipOne: false
} );
} else {
this.close();
}
return;
}
this.nextMatch();
}
var qlinkerEditor = new QuickEditorDialog( { size: 'medium' } );
var windowManager = new OO.ui.WindowManager();
$( 'body' ).append( windowManager.$element );
windowManager.addWindows( [ qlinkerEditor ] );
windowManager.openWindow( qlinkerEditor, { searchData: searchRes } );
}
function createAddLinksButton(){
var addLinksWizard;
if (mw.config.get('skin') === 'minerva') {
$('#bodyContent').prepend("<a href='#' style='margin-inline-end: 1em;text-indent:5px;width: fit-content; display: inline-block;' id='quiclink' title='" + mw.msg('qlinker-invoke') + "'>" + mw.msg('qlinker-sidelink') + "</a>");
addLinksWizard = $("#quiclink");
} else {
addLinksWizard = $(mw.util.addPortletLink(
'p-tb',
'#',
mw.msg('qlinker-sidelink'),
't-quicklinker',
mw.msg('qlinker-invoke'),
null,
'#t-whatlinkshere'
));
}
addLinksWizard.click(function(e){
protectedSearchQuery();
e.preventDefault();
});
return addLinksWizard;
}
function protectedSearchQuery() {
var api = new mw.Api();
api.get( {
action: 'query',
prop: 'linkshere',
lhlimit: 500,
titles: mw.config.get('wgPageName'),
indexpageids: 1
}).done(function(d) {
var isValid = true, safeMode = false;
if(d.query && d.query.pages && d.query.pages[d.query.pageids[0]] && d.query.pages[d.query.pageids[0]].linkshere && d.query.pages[d.query.pageids[0]].linkshere.length > 100)
{
isValid = confirm(mw.msg('qlinker-confirm-masslink'));
safeMode = true;
}
if (!isValid) return;
searchLinksApi().done(function(q){
if (q.error) mw.notify(q.error.info);
if (!q.query || !q.query.pageids || q.query.pageids.length<=1) {
mw.notify(mw.msg('qlinker-no-results'));
return;
}
mw.loader.using('oojs-ui-windows', function() { createQuickEditorDialog(q, safeMode) } );
});
});
}
function searchLinksApi() {
var api = new mw.Api();
return api.get( {
action: 'query',
generator: 'search',
gsrnamespace: 0,
gsrsearch: 'insource:/' + mw.util.escapeRegExp(titleNoBrackets) +'/ -linksto:'+mw.config.get('wgPageName'),
gsrlimit: 50,
prop: 'revisions',
rvprop: 'content|timestamp',
indexpageids: 1,
curtimestamp: 1
});
}
// نمایشدانی دوگمەکە لە تەواوی پەڕەکانی بۆشایی ناوچەی سەرەکی (Main Namespace)
createAddLinksButton();
});
mw.util.addCSS(".oo-ui-window-frame { width:60vw; } .oo-ui-window-frame h1 { line-height: 1em; font-size: 1.2em; }");
1qy066izv49a80ddghi1cqqe7konmqg
میدیاویکی:Gadget-quickLinker.css
8
11700
47332
2026-10-14T16:42:58Z
-Haryad
34
+ئامراز
47332
css
text/css
/* لە ویکیپیدیای عەرەبییەوە وەرگیراوە */
/* Below line mess up Growth link suggestions pop-up */
/*.oo-ui-window-frame {width:60vw!important}*/
/*.oo-ui-window-frame h1 {line-height: 1em !important; font-size: 1em !important}*/
0nc35x1td6kf5u2orxtmsqs2i0m8f6a
میدیاویکی:Tag-no-L2-L3
8
11701
47333
2026-10-14T16:51:34Z
-Haryad
34
+وەسفی تاگ
47333
wikitext
text/x-wiki
نەبوونی سەردێڕی ٢ و ٣
5ecfpjpdv5ndcbxi5beu22ykjx2ggdy
میدیاویکی:Tag-mw-rollback-description
8
11702
47334
2026-10-14T16:54:25Z
-Haryad
34
+وەسفی تاگ
47334
wikitext
text/x-wiki
ئەو دەستکارییانەی لە ڕێگەی مافی گەڕاندنەوەوە ئەنجام دراون
9czck830qitb2zkuieh8wfpn6e144ff
میدیاویکی:Tag-new-L2
8
11703
47335
2026-10-14T16:55:02Z
-Haryad
34
+ناوی تاگ
47335
wikitext
text/x-wiki
سەردێڕی نوێ ئاستی ٢
98h1wcgm01cg1iei6m52fmtmnev3fb0
میدیاویکی:Tag-mobile web edit-description
8
11704
47336
2026-10-14T16:57:53Z
-Haryad
34
+وەسفی تاگ
47336
wikitext
text/x-wiki
ئەو دەستکارییانەی بە بەرنامەی مۆبایل ئەنجام دراون
dir79me7k95iolrkzorn9k6wvypvyjs
47337
47336
2026-10-14T16:58:56Z
-Haryad
34
+وەسفی تاگ
47337
wikitext
text/x-wiki
ئەو دەستکارییانەی لە ماڵپەڕی مۆبایلەوە ئەنجام دراون
h0v4ayoyp7gv9jz5kacvegsl4a42fup
میدیاویکی:Tag-mobile edit-description
8
11705
47338
2026-10-14T16:59:32Z
-Haryad
34
+وەسفی تاگ
47338
wikitext
text/x-wiki
ئەو دەستکارییانەی لە ڕێی مۆبایلەوە ئەنجام دراون (وێب یان بەرنامە)
h19wh7x45przq396i3zj8j2dsrljk0v
میدیاویکی:Tag-mw-undo-description
8
11706
47339
2026-10-14T17:00:38Z
-Haryad
34
+وەسفی ئامراز
47339
wikitext
text/x-wiki
ئەنجامدانی کرداری پووچەڵکردنەوەی دەستکاری
dqstkhoy2y88wuuxv41tbrm8roy3bmq
میدیاویکی:Tag-visualeditor-wikitext-description
8
11707
47340
2026-10-14T17:02:24Z
-Haryad
34
+وەسفی تاگ
47340
wikitext
text/x-wiki
ئەو دەستکارییانەی لەڕێگەی بەکارھێنانی دەستکاریکەری ویکیدەقی ٢٠١٧ ئەنجام دراون
shfm0pb6xugs0a2jng66al4tpz9ltpi
میدیاویکی:Tag-redirect
8
11708
47341
2026-10-14T17:03:16Z
-Haryad
34
+وەسفی تاگ
47341
wikitext
text/x-wiki
ڕەوانکەر
r3bna4ggepp79va22ecctmdp1u9z39z
میدیاویکی:Tag-mw-reverted-description
8
11709
47342
2026-10-14T17:06:08Z
-Haryad
34
+وەسفی تاگ
47342
wikitext
text/x-wiki
ئەو دەستکارییانەی کە دواتر بە دەستکارییەکی تر گەڕێندراونەتەوە
n6l212uidl48rs6a68q0lm7ed0v7b40
میدیاویکی:Tag-advanced mobile edit-description
8
11710
47344
2026-10-14T17:09:22Z
-Haryad
34
+وەسفی تاگ
47344
wikitext
text/x-wiki
ئەو دەستکارییانەی بە دۆخی پێشکەوتوو لەلایەن بەکارھێنەرەوە کراون
6aqckeb0q77dx54rej9ec7kbsba10oa
میدیاویکی:Tag-mw-manual-revert-description
8
11711
47345
2026-10-14T17:11:18Z
-Haryad
34
+وەسفی تاگ
47345
wikitext
text/x-wiki
ئەو دەستکارییانەی بە دەستی پەڕەکە دەگەڕێننەوە بۆ دۆخی پێشتری خۆی
dsmlt2xjxhed1126bpun99mm8m0gp8u
میدیاویکی:Tag-mw-blank-description
8
11712
47346
2026-10-14T17:13:24Z
-Haryad
34
+وەسفی تاگ
47346
wikitext
text/x-wiki
ئەو دەستکارییانەی پەڕەیەکیان واڵا کردووەتەوە
j7zyadp3uub1hmb1f7yysvtqjc21oxc
میدیاویکی:Tag-mw-new-redirect-description
8
11713
47347
2026-10-14T17:16:07Z
-Haryad
34
+وەسفی تاگ
47347
wikitext
text/x-wiki
ئەو دەستکارییانەی دەبنە ھۆی دروستکردنی ڕەوانەکەرێکی نوێ یان گۆڕینی پەڕەیەک بۆ ڕەوانەکەر
ckezo700kc7ydgshz5z8zjwi30pnxmp
میدیاویکی:Tag-بەکارھێنانی نووسەی ناستاندارد
8
11714
47348
2026-10-14T17:17:34Z
-Haryad
34
+ناوی تاگ
47348
wikitext
text/x-wiki
بەکارھێنانی نووسەی ناستاندارد
slqbc33si10xzmrui7ey3ozmfv3enld
میدیاویکی:Abusefilter-warning-character
8
11715
47353
2026-10-15T05:44:05Z
-Haryad
34
+پەڕەی هۆشداریی میدیاویکی
47353
wikitext
text/x-wiki
{{edit filter warning
|action = warn
|friendly =
|text=<big>{{سوور|'''ھۆشدار'''}}: تەختەکلیلەکەت ھەندێک لە پیتەکان بە '''یوونیکۆدی عەرەبی''' دەنووسێت. </big>
'''سەرنج''': پیتەکانی <big><big>ي</big></big> (ی لەگەڵ دوو خاڵ) و <big><big>ك</big></big> (ک لەگەڵ ھەمزە) و <big><big>ه</big></big> (لە بڕی ھ یا ە) تایبەت بە زمانی عەرەبین. تکایە بەر لە ھەر چەشنە بەشداری لە ویکیپیدیادا، تەختەکلیلی ستاندارد دامەزرێنە و ئەم گرفتە چارەسەر بکە. (بۆ زانیاری زۆرتر سەبارەت بە تەختەکلیلی ستاندارد بڕوانە: [[ویکیپیدیا:نووسینی کوردی|نووسینی کوردی]])
'''چارەسەری خێرا''': کرتە بکە لەسەر ([[پەڕگە:Button YehKeh.png]]:چاکسازیی ی ک و ھ) بۆ چارەسەرکردنی کێشەکە)
پاڵوێنەیەک کە پێشی بە تۆ گرت ئەمەیە: $1
}}
mx6qlvbanikf0hzwjra5z3fvsejl0ue
داڕێژە:Edit filter warning
10
11716
47354
2026-10-15T05:45:32Z
-Haryad
34
+داڕێژە
47354
wikitext
text/x-wiki
{{fmbox
|type = {{#switch:{{{action|}}}
|warn
|#default = editnotice
|throttle
|disallow
|deauto
|block
|degroup = warning
}}
|textstyle = {{#switch:{{{action|}}}
|warn
|throttle
|disallow
|deauto
|#default =
|block
|degroup = color:red; font-weight:bold; font-style:italic;
}}
|image = [[File:{{#switch:{{{action|}}}
|warn
|#default = {{#ifeq:{{{friendly|}}}|yes| Ambox warning blue.svg | Ambox warning orange.svg }}
|throttle = {{#ifeq:{{{friendly|}}}|yes| Ambox warning orange.svg | Ambox warning pn.svg }}
|disallow = {{#ifeq:{{{friendly|}}}|yes| Ambox warning pn.svg | Dialog-error.svg }}
|deauto
|block
|degroup = Stop x nuvola.svg
}}|60px|Your action has triggered the Abuse Filter]]
|text = {{{text}}}
}}{{#if:{{{filter|}}}|{{#ifeq:{{NAMESPACE}}|{{ns:8}}|{{notice|ئەم پەیامە لە ڕێگەی فیلتێری [[Special:AbuseFilter/{{{filter}}}|ژمارە {{{filter}}}]] نێردراوە.}}}}}}<noinclude>
{{documentation}}
4zuypdxgyzriqmnr0z2y3dx40crdvqf
داڕێژە:fmbox
10
11717
47355
2026-10-15T05:46:23Z
-Haryad
34
+داڕێژە
47355
wikitext
text/x-wiki
{{#invoke:Message box|fmbox|plainlinks={{{plainlinks|yes}}}}}<noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
oieddw57hf0pjq1rxypu544i15g9gwn
47372
47355
2026-10-15T06:54:24Z
-Haryad
34
-Haryad پەڕەی [[داڕێژە:Fmbox]] گواستەوە بۆ [[داڕێژە:fmbox]] کە پێشتر ڕەوانەکەر بوو
47355
wikitext
text/x-wiki
{{#invoke:Message box|fmbox|plainlinks={{{plainlinks|yes}}}}}<noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
oieddw57hf0pjq1rxypu544i15g9gwn
داڕێژە:edit filter warning
10
11720
47360
2026-10-15T06:11:57Z
-Haryad
34
+ڕەوانەکەر
47360
wikitext
text/x-wiki
#ڕەوانەکەر [[داڕێژە:Edit filter warning]]
delfo2y8v6hirh2x6ycj02nra2uvf7m
مۆدیوول:Message box/fmbox.css
828
11721
47361
2026-10-15T06:13:51Z
-Haryad
34
+مۆدیوول
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
47367
47361
2026-10-15T06:29:32Z
-Haryad
34
-Haryad پەڕەی [[مۆدیوول:Message box/fmbox.css]]ی بە بێ بەجێھشتنی ڕەوانەکەرێک گواستەوە بۆ [[مۆدیوول:message box/fmbox.css]]
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/div
828
11722
47362
2026-10-15T06:15:36Z
-Haryad
34
+مۆدیوول
47362
Scribunto
text/plain
require('strict')
local getArgs
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local CONFIG_MODULE = 'Module:Message box/div/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('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%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
-- 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)
)
-- 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
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
-- 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 = 'Template:' .. 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 = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. 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)
talkText = string.format('([[%s|talk]])', talkLink)
else
talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
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
-- Set the below row.
self.below = cfg.below and args.below
-- 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|link=|alt=]]', self.typeImage
or 'Imbox notice.png', imageSize)
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
-- DIV MIGRATION CONDITIONAL
if cfg.div_templatestyles then
self.base_templatestyles = cfg.div_templatestyles
else
self.base_templatestyles = cfg.templatestyles
end
-- END DIV MIGRATION CONDITIONAL
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 = 'from'
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('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
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 = 'C'
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 table.
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
-- Add the left-hand image.
if self.imageLeft then
local imageLeftCell = mbox:tag('div'):addClass('mbox-image')
imageLeftCell:wikitext(self.imageLeft or nil)
end
-- Add the text.
local textCell = mbox: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 = mbox:tag('div'):addClass('mbox-imageright')
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
mbox:tag('div')
: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
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(
'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 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: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
: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)
pp5lqch0rp3sdc2oovdlbx0nhusb4cc
47365
47362
2026-10-15T06:29:32Z
-Haryad
34
-Haryad پەڕەی [[مۆدیوول:Message box/div]]ی گواستەوە بۆ [[مۆدیوول:message box/div]]
47362
Scribunto
text/plain
require('strict')
local getArgs
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local CONFIG_MODULE = 'Module:Message box/div/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('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%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
-- 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)
)
-- 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
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
-- 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 = 'Template:' .. 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 = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. 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)
talkText = string.format('([[%s|talk]])', talkLink)
else
talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
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
-- Set the below row.
self.below = cfg.below and args.below
-- 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|link=|alt=]]', self.typeImage
or 'Imbox notice.png', imageSize)
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
-- DIV MIGRATION CONDITIONAL
if cfg.div_templatestyles then
self.base_templatestyles = cfg.div_templatestyles
else
self.base_templatestyles = cfg.templatestyles
end
-- END DIV MIGRATION CONDITIONAL
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 = 'from'
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('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
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 = 'C'
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 table.
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
-- Add the left-hand image.
if self.imageLeft then
local imageLeftCell = mbox:tag('div'):addClass('mbox-image')
imageLeftCell:wikitext(self.imageLeft or nil)
end
-- Add the text.
local textCell = mbox: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 = mbox:tag('div'):addClass('mbox-imageright')
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
mbox:tag('div')
: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
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(
'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 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: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
: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)
pp5lqch0rp3sdc2oovdlbx0nhusb4cc
مۆدیوول:Message box
828
11723
47364
2026-10-15T06:29:32Z
-Haryad
34
-Haryad پەڕەی [[مۆدیوول:Message box]] گواستەوە بۆ [[مۆدیوول:message box]] کە پێشتر ڕەوانەکەر بوو
47364
Scribunto
text/plain
return require [[مۆدیوول:message box]]
sfp17i08bcy7odmubwd4iflmv5nnywj
مۆدیوول:Message box/div
828
11724
47366
2026-10-15T06:29:32Z
-Haryad
34
-Haryad پەڕەی [[مۆدیوول:Message box/div]]ی گواستەوە بۆ [[مۆدیوول:message box/div]]
47366
Scribunto
text/plain
return require [[مۆدیوول:message box/div]]
i9v2xu4bjxtckejzx8xrngbpl056atm
مۆدیوول:Message box/configuration
828
11725
47370
2026-10-15T06:41:15Z
-Haryad
34
+مۆدیوول
47370
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Message box configuration --
-- --
-- This module contains configuration data for [[Module:Message box]]. --
--------------------------------------------------------------------------------
return {
ambox = {
types = {
speedy = {
class = 'ambox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ambox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ambox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ambox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ambox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ambox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ambox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
allowSmall = true,
smallParam = 'left',
smallClass = 'mbox-small-left',
substCheck = true,
classes = {'metadata', 'ambox'},
imageEmptyCell = true,
imageCheckBlank = true,
imageSmallSize = '20x20px',
imageCellDiv = true,
useCollapsibleTextFields = true,
imageRightNone = true,
sectionDefault = 'وتارە',
allowMainspaceCategories = true,
templateCategory = 'Article message templates',
templateCategoryRequireName = true,
templateErrorCategory = 'Article message templates with missing parameters',
templateErrorParamsToCheck = {'issue', 'fix', 'subst'},
removalNotice = '<small>[[یارمەتی:لابردنی داڕێژەکانی ڕاگرتن|فێربە کەی و چۆن ئەم داڕێژەیە لابەریت]]</small>',
templatestyles = 'Module:Message box/ambox.css'
},
cmbox = {
types = {
speedy = {
class = 'cmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'cmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'cmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'cmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'cmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'cmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'cmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'cmbox'},
imageEmptyCell = true,
templatestyles = 'Module:Message box/cmbox.css'
},
fmbox = {
types = {
warning = {
class = 'fmbox-warning',
image = 'Ambox warning pn.svg'
},
editnotice = {
class = 'fmbox-editnotice',
image = 'Information icon4.svg'
},
system = {
class = 'fmbox-system',
image = 'Information icon4.svg'
}
},
default = 'system',
showInvalidTypeError = true,
classes = {'fmbox'},
imageEmptyCell = false,
imageRightNone = false,
templatestyles = 'Module:Message box/fmbox.css'
},
imbox = {
types = {
speedy = {
class = 'imbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'imbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'imbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'imbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'imbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'imbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
license = {
class = 'imbox-license licensetpl',
image = 'Imbox-license.svg'
},
["license-related"] = {
class = 'imbox-license',
image = 'Imbox-license.svg'
},
featured = {
class = 'imbox-featured',
image = 'Cscr-featured.svg',
imageNeedsLink = true
},
notice = {
class = 'imbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'imbox'},
imageEmptyCell = true,
below = true,
templateCategory = 'File message boxes',
templatestyles = 'Module:Message box/imbox.css'
},
ombox = {
types = {
speedy = {
class = 'ombox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ombox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ombox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ombox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ombox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ombox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ombox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'ombox'},
allowSmall = true,
imageEmptyCell = true,
imageRightNone = true,
templatestyles = 'Module:Message box/ombox.css'
},
tmbox = {
types = {
speedy = {
class = 'tmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'tmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'tmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'tmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'tmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'tmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'tmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'tmbox'},
allowSmall = true,
imageRightNone = true,
imageEmptyCell = true,
templateCategory = 'Talk message boxes',
templatestyles = 'Module:Message box/tmbox.css'
}
}
szfmwfxp25qf5pmxty7zok5r0gm5q1j
مۆدیوول:Yesno
828
11726
47371
2026-10-15T06:51:13Z
-Haryad
34
+ڕەوانەکەر
47371
Scribunto
text/plain
return require('Module:yesno')
7f26ux3yiabvzpq6uwusa8hy3szb4fd
داڕێژە:Fmbox
10
11727
47373
2026-10-15T06:54:24Z
-Haryad
34
-Haryad پەڕەی [[داڕێژە:Fmbox]] گواستەوە بۆ [[داڕێژە:fmbox]] کە پێشتر ڕەوانەکەر بوو
47373
wikitext
text/x-wiki
#ڕەوانەکەر [[داڕێژە:fmbox]]
jwvwj35j7nbnqpxrxrv63c8hz02oytr
داڕێژە:Highlight/core
10
11728
47374
2026-10-15T09:39:18Z
-Haryad
34
+داڕێژە
47374
wikitext
text/x-wiki
<span style="background:{{{2|yellow}}}">{{{1}}}</span>
swh6kmszd79tj8h7pv4yz14wmrbyoy9
داڕێژە:Highlight
10
11729
47375
2026-10-15T09:40:07Z
-Haryad
34
+داڕێژە
47375
wikitext
text/x-wiki
0|{{highlight/core|{{{1|}}}|{{#ifeq:{{{2|}}}||yellow|{{{2}}}}}}}|{{{1|}}}}}|{{highlight/core|{{{1|}}}|{{{2|yellow}}}}}}}<noinclude>{{documentation}}</noinclude>
pyyodcivk1wenzyrg1ap5ujg9zuhkxs
47376
47375
2026-10-15T09:40:59Z
-Haryad
34
-Haryad پەڕەی [[داڕێژە:highlight]]ی گواستەوە بۆ [[داڕێژە:Highlight]]
47375
wikitext
text/x-wiki
0|{{highlight/core|{{{1|}}}|{{#ifeq:{{{2|}}}||yellow|{{{2}}}}}}}|{{{1|}}}}}|{{highlight/core|{{{1|}}}|{{{2|yellow}}}}}}}<noinclude>{{documentation}}</noinclude>
pyyodcivk1wenzyrg1ap5ujg9zuhkxs
47379
47376
2026-10-15T09:43:35Z
-Haryad
34
+ڕێکخستنەوە
47379
wikitext
text/x-wiki
{{#if:{{{3|}}}|{{#ifexpr:({{#time:U|{{{3}}}}} - {{#time:U|now}}) > 0|{{highlight/core|{{{1|}}}|{{#ifeq:{{{2|}}}||yellow|{{{2}}}}}}}|{{{1|}}}}}|{{highlight/core|{{{1|}}}|{{{2|yellow}}}}}}}<noinclude>{{documentation}}</noinclude>
85f1u8asfkocafe7i187pir1dmczgpc
داڕێژە:highlight
10
11730
47377
2026-10-15T09:40:59Z
-Haryad
34
-Haryad پەڕەی [[داڕێژە:highlight]]ی گواستەوە بۆ [[داڕێژە:Highlight]]
47377
wikitext
text/x-wiki
#ڕەوانەکەر [[داڕێژە:Highlight]]
4je047taqo8ahm1q886zeblshdfi8ju
داڕێژە:highlight/core
10
11731
47378
2026-10-15T09:42:43Z
-Haryad
34
+ڕەوانەکەر
47378
wikitext
text/x-wiki
#ڕەوانەکەر [[داڕێژە:Highlight/core]]
qbupoomfc1l6vojgmi2yn16npavqguj