ویکیفەرھەنگ 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