signature). Subclasses are likely to call at least doMainQuery
(possibly both), but other classes might too, because they were
public.
-
Also, some related hooks were deprecated, but this is not yet a
breaking change.
+* Removed 'jquery.arrowSteps' module. (deprecated since 1.28)
+* The 'jquery.autoEllipsis' ResourceLoader module is now deprecated.
== Compatibility ==
"apihelp-query+revisions-param-excludeuser": "Exclure les révisions faites par l’utilisateur.",
"apihelp-query+revisions-param-tag": "Lister uniquement les révisions marquées avec cette balise.",
"apihelp-query+revisions-param-token": "Quels jetons obtenir pour chaque révision.",
- "apihelp-query+revisions-example-content": "Obtenir des données avec le contenu pour la dernière révision des titres <kbd>API</kbd> et <kbd>Page principale</kbd>.",
+ "apihelp-query+revisions-example-content": "Obtenir des données avec le contenu pour la dernière révision des titres <kbd>API</kbd> et <kbd>Main Page</kbd>.",
"apihelp-query+revisions-example-last5": "Obtenir les 5 dernières révisions de la <kbd>Main Page</kbd>.",
"apihelp-query+revisions-example-first5": "Obtenir les 5 premières révisions de la <kbd>Page principale</kbd>.",
"apihelp-query+revisions-example-first5-after": "Obtenir les 5 premières révisions de la <kbd>Page principale</kbd> faites après le 01/05/2006.",
* 'selectorWithVariant' => [CSS selector template, variables: {prefix} {name} {variant}],
* // List of variants that may be used for the image files
* 'variants' => [
- * [theme name] => [
+ * // This level of nesting can be omitted if you use the same images for every skin
+ * [skin name (or 'default')] => [
* [variant name] => [
* 'color' => [color string, e.g. '#ffff00'],
* 'global' => [boolean, if true, this variant is available
* ],
* // List of image files and their options
* 'images' => [
- * [theme name] => [
+ * // This level of nesting can be omitted if you use the same images for every skin
+ * [skin name (or 'default')] => [
* [icon name] => [
* 'file' => [file path string or array whose values are file path strings
* and whose keys are 'default', 'ltr', 'rtl', a single
if ( $deprecationInfo ) {
$name = $this->getName();
$warning = 'This page is using the deprecated ResourceLoader module "' . $name . '".';
- if ( !is_bool( $deprecationInfo ) && isset( $deprecationInfo['message'] ) ) {
- $warning .= "\n" . $deprecationInfo['message'];
+ if ( is_string( $deprecationInfo ) ) {
+ $warning .= "\n" . $deprecationInfo;
}
return Xml::encodeJsCall(
'mw.log.warn',
class ResourceLoaderOOUIImageModule extends ResourceLoaderImageModule {
protected function loadFromDefinition() {
if ( $this->definition === null ) {
+ // Do nothing if definition was already processed
return;
}
$definition = [];
foreach ( $themes as $skin => $theme ) {
+ // Find the path to the JSON file which contains the actual image definitions for this theme
// TODO Allow extensions to specify this path somehow
- $dataPath = $this->localBasePath . '/' . $rootPath . '/' . $theme . '/' . $name . '.json';
+ $dataPath = $rootPath . '/' . $theme . '/' . $name . '.json';
+ $localDataPath = $this->localBasePath . '/' . $dataPath;
- if ( file_exists( $dataPath ) ) {
- $data = json_decode( file_get_contents( $dataPath ), true );
- $fixPath = function ( &$path ) use ( $rootPath, $theme ) {
- // TODO Allow extensions to specify this path somehow
- $path = $rootPath . '/' . $theme . '/' . $path;
- };
- array_walk( $data['images'], function ( &$value ) use ( $fixPath ) {
- if ( is_string( $value['file'] ) ) {
- $fixPath( $value['file'] );
- } elseif ( is_array( $value['file'] ) ) {
- array_walk_recursive( $value['file'], $fixPath );
- }
- } );
- } else {
- $data = [];
+ // If there's no file for this module of this theme, that's okay, it will just use the defaults
+ if ( !file_exists( $localDataPath ) ) {
+ continue;
}
+ $data = json_decode( file_get_contents( $localDataPath ), true );
+ // Expand the paths to images (since they are relative to the JSON file that defines them, not
+ // our base directory)
+ $fixPath = function ( &$path ) use ( $dataPath ) {
+ $path = dirname( $dataPath ) . '/' . $path;
+ };
+ array_walk( $data['images'], function ( &$value ) use ( $fixPath ) {
+ if ( is_string( $value['file'] ) ) {
+ $fixPath( $value['file'] );
+ } elseif ( is_array( $value['file'] ) ) {
+ array_walk_recursive( $value['file'], $fixPath );
+ }
+ } );
+
+ // Convert into a definition compatible with the parent vanilla ResourceLoaderImageModule
foreach ( $data as $key => $value ) {
switch ( $key ) {
+ // Images and color variants are defined per-theme, here converted to per-skin
case 'images':
case 'variants':
$definition[$key][$skin] = $data[$key];
break;
+ // Other options must be identical for each theme (or only defined in the default one)
default:
if ( !isset( $definition[$key] ) ) {
$definition[$key] = $data[$key];
} elseif ( $definition[$key] !== $data[$key] ) {
throw new Exception(
- "Mismatched OOUI theme definitions are not supported: trying to load $key of $theme theme"
+ "Mismatched OOUI theme images definition: " .
+ "key '$key' of theme '$theme' " .
+ "does not match other themes"
);
}
break;
}
}
- // Fields from definition silently override keys from JSON files
+ // Fields from module definition silently override keys from JSON files
$this->definition += $definition;
parent::loadFromDefinition();
$opts->add( 'days', $user->getOption( 'watchlistdays' ), FormOptions::FLOAT );
$opts->add( 'extended', $user->getBoolOption( 'extendwatchlist' ) );
- if ( $this->getRequest()->getVal( 'action' ) == 'submit' ) {
- // The user has submitted the form, so we dont need the default values
- return $opts;
- }
return $opts;
}
}
}
+ if ( $this->getRequest()->getVal( 'action' ) == 'submit' ) {
+ $allBooleansFalse = [];
+
+ // If the user submitted the form, start with a baseline of "all
+ // booleans are false", then change the ones they checked. This
+ // means we ignore the defaults.
+
+ // This is how we handle the fact that HTML forms don't submit
+ // unchecked boxes.
+ foreach ( $this->filterGroups as $filterGroup ) {
+ if ( $filterGroup instanceof ChangesListBooleanFilterGroup ) {
+ foreach ( $filterGroup->getFilters() as $filter ) {
+ $allBooleansFalse[$filter->getName()] = false;
+ }
+ }
+ }
+
+ $params = $params + $allBooleansFalse;
+ }
+
// Not the prettiest way to achieve this… FormOptions internally depends on data sanitization
// methods defined on WebRequest and removing this dependency would cause some code duplication.
$request = new DerivativeRequest( $this->getRequest(), $params );
"resources/src/mediawiki.toolbar",
"resources/src/mediawiki.widgets",
"resources/src/jquery/jquery.accessKeyLabel.js",
- "resources/src/jquery/jquery.arrowSteps.js",
"resources/src/jquery/jquery.autoEllipsis.js",
"resources/src/jquery/jquery.badge.js",
"resources/src/jquery/jquery.byteLength.js",
"saveusergroups": "احفظ مجموعات {{GENDER:$1|المستخدم|المستخدمة}}",
"userrights-groupsmember": "عضو في:",
"userrights-groupsmember-auto": "عضو ضمني في:",
- "userrights-groups-help": "يمكنك تغيير المجموعات التي ينتمي هذا المستخدم إليها:\n* يعني الصندوق المعلم أن المستخدم في هذه المجموعة.\n* يعني الصندوق غير المعلم أن المستخدم ليس في هذه المجموعة.\n* تعني علامة * عدم إمكانية إزالة المجموعة متى ما أضفتها، أو العكس.\n* تعن علامة # أنه يمكنك فقط تحديد تاريخ الانتهاء لهذه المجموعة؛ لكن لا يمكنك تقديمه بعد تحديده.",
+ "userrights-groups-help": "يمكنك تغيير المجموعات التي ينتمي هذا المستخدم إليها:\n* يعني الصندوق المعلم أن المستخدم ضمن هذه المجموعة.\n* يعني الصندوق غير المعلم أن المستخدم ليس في هذه المجموعة.\n* تعني علامة * عدم إمكانية إزالة المجموعة متى ما أضفتها أو العكس.\n* تعني علامة # أنه يمكنك فقط تحديد تاريخ الانتهاء لهذه المجموعة؛ لكن لا يمكنك تقديمه بعد تحديده.",
"userrights-reason": "السبب:",
"userrights-no-interwiki": "أنت لا تمتلك الصلاحية لتعديل صلاحيات المستخدمين على الويكيات الأخرى.",
"userrights-nodatabase": "قاعدة البيانات $1 غير موجودة أو ليست محلية.",
"page_last": "cabera",
"histlegend": "Seleición de diferencies: marca los botones de les versiones que quies comparar y calca <i>enter</i> o al botón d'abaxo.<br />\nLleenda: '''({{int:cur}})''' = diferencies cola versión actual, '''({{int:last}})''' = diferencies cola versión anterior, '''{{int:minoreditletter}}''' = edición menor.",
"history-fieldset-title": "Navegar pel historial",
- "history-show-deleted": "Sólo desaniciaes",
+ "history-show-deleted": "Sólo desaniciaes por revisión",
"histfirst": "lo más antiguo",
"histlast": "lo más nuevo",
"historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
"prefs-help-prefershttps": "Esta preferencia aplicaráse nel siguiente aniciu de sesión.",
"prefswarning-warning": "Ficisti cambios nes tos preferencies qu'inda nun se guardaron.\nSi abandones esta páxina ensin calcar \"$1\" les preferencies nun s'anovarán.",
"prefs-tabs-navigation-hint": "Gabitu: pue usar les tecles de flecha izquierda y drecha pa navegar peles llingüetes de la llista.",
- "userrights": "Xestión de permisos d'usuariu",
+ "userrights": "Permisos d'usuariu",
"userrights-lookup-user": "Seleiciona un usuariu",
"userrights-user-editname": "Escribe un nome d'usuariu:",
"editusergroup": "Cargar los grupos d'usuariu",
"rcfilters-filterlist-feedbacklink": "Comentar sobro los nuevos filtros (beta)",
"rcfilters-highlightbutton-title": "Resaltar resultaos",
"rcfilters-highlightmenu-title": "Seleiciona un color",
+ "rcfilters-highlightmenu-help": "Seleiciona un color pa resaltar esta propiedá",
"rcfilters-filterlist-noresults": "Nun s'alcontraron filtros",
"rcfilters-filtergroup-registration": "Rexistru del usuariu",
"rcfilters-filter-registered-label": "Rexistraos",
"rcfilters-filter-registered-description": "Editores coneutaos.",
"rcfilters-filter-unregistered-label": "Non rexistraos",
"rcfilters-filter-unregistered-description": "Editores ensin coneutar.",
+ "rcfilters-filter-unregistered-conflicts-user-experience-level": "El filtru «Sin rexistrar» ta inactivu porque'l so efeutu ta torgáu {{PLURAL:$2|pol siguiente filtru|polos siguientes filtros}} Experience, qu'{{PLURAL:$2|alcuentra|alcuentren}} sólo usuarios rexistraos: $1",
"rcfilters-filtergroup-authorship": "Editar autoría",
"rcfilters-filter-editsbyself-label": "Les tos propies ediciones",
"rcfilters-filter-editsbyself-description": "Ediciones de to",
"rcfilters-filter-editsbyother-label": "Ediciones d'otros",
"rcfilters-filter-editsbyother-description": "Ediciones creaes por otros usuarios (non por ti).",
"rcfilters-filtergroup-userExpLevel": "Nivel d'esperiencia (solo pa usuarios rexistraos)",
+ "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "Esti filtru ta inactivu porque sólo alcuentra usuarios rexistraos, de manera que'l filtru «Sin rexistrar» torga'l so efeutu.",
+ "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "El filtru «Sin rexistrar» tien un conflictu con un filtru Experience o más. Los filtros Experience alcuentren sólo usuarios rexistraos. Los filtros que tienen un conflictu márquense como desactivaos más arriba.",
"rcfilters-filter-user-experience-level-newcomer-label": "Recién llegaos",
"rcfilters-filter-user-experience-level-newcomer-description": "Menos de 10 ediciones y 4 díes d'actividá.",
"rcfilters-filter-user-experience-level-learner-label": "Aprendices",
"rcfilters-filter-bots-description": "Ediciones feches con ferramientes automátiques.",
"rcfilters-filter-humans-label": "Ser humanu (non bot)",
"rcfilters-filter-humans-description": "Ediciones feches por editores humanos.",
+ "rcfilters-filtergroup-reviewstatus": "Estáu de revisión",
+ "rcfilters-filter-patrolled-label": "Patrullaes",
+ "rcfilters-filter-patrolled-description": "Ediciones marcaes como patrullaes.",
+ "rcfilters-filter-unpatrolled-label": "Sin patrullar",
+ "rcfilters-filter-unpatrolled-description": "Ediciones sin marcar como patrullaes.",
"rcfilters-filtergroup-significance": "Significación",
"rcfilters-filter-minor-label": "Ediciones menores",
"rcfilters-filter-minor-description": "Ediciones que l'autor etiquetó como menores.",
"revdelete-success": "Бачнасьць вэрсіі абноўленая.",
"revdelete-failure": "Немагчыма абнавіць бачнасьць вэрсіі:\n$1",
"logdelete-success": "Бачнасьць падзеі ўсталяваная.",
- "logdelete-failure": "'''Немагчыма ўстанавіць бачнасьць у журнале:'''\n$1",
+ "logdelete-failure": "Немагчыма ўсталяваць бачнасьць журнала:\n$1",
"revdel-restore": "Зьмяніць бачнасьць",
"pagehist": "Гісторыя старонкі",
"deletedhist": "Выдаленая гісторыя",
"authmanager-authplugin-create-fail": "Дадатак аўтэнтыфікацыі адмовіў у стварэньні рахунку.",
"authmanager-authplugin-setpass-denied": "Дадатак аўтэнтыфікацыі не дазваляе зьмяняць паролі.",
"authmanager-authplugin-setpass-bad-domain": "Няслушны дамэн.",
+ "authmanager-autocreate-noperm": "Аўтаматычнае стварэньне рахункаў не дазволенае.",
+ "authmanager-autocreate-exception": "Аўтаматычнае стварэньне рахункаў часова адключанае праз папярэднія памылкі.",
"authmanager-realname-label": "Сапраўднае імя",
"authmanager-provider-temporarypassword": "Часовы пароль",
"changecredentials": "Зьмена ўліковых зьвестак",
"createacct-reason": "دلیل",
"createacct-submit": "هساڤ خوتۈنإ راسد کونين",
"createacct-another-submit": "راسد کردن هساڤ کارياري",
+ "createacct-benefit-heading": "{{SITENAME}} ڤئ دسد خلکي چي ايسا رأڤأندیاری ڤابيڌإ.",
"createacct-benefit-body1": "{{PLURAL:$1|ڤيرایشد|ڤيرایشدا}}",
"createacct-benefit-body2": "{{PLURAL:$1|بألگأ|بألگإ آ}}",
"createacct-benefit-body3": "تازأ{{PLURAL:$1|هوميار|هوميارا}}",
"preview": "پیش نمایش",
"showpreview": "پیشنمایش",
"showdiff": "نشودادن تغییرات",
- "anoneditwarning": "'''توجه:''' ایسا داخل سیستم نوابیدین.\nآی پی آدرستو درگزارش اصلاح صفحه ضبط ابوه.",
+ "anoneditwarning": "<strong>زئنار:</strong> شوما هأنی نیوٙمایتە ڤامین. تیرنئشوٙن آی پی شوما سی هأر گاتی کئ آلئشتکاری بأکیت سی کول خألک دیاری می کە. أر <strong>[$1 روئیت ڤامین]</strong> یا <strong>[$2 یئ گئل حئساڤ کاریاری راس بأکیت]</strong>، ڤیرایئشتیا شوما ڤئ نوم کاریاری خوتوٙ دیاری می کە و سی شوما بیتأرە.",
"summary-preview": "پیش نمایش - خلاصه:",
"blockedtext": " \"'''دسترسی نام کاربری یا نشانی اینترنتی ایسا بسته وابیده.'''\nای کار توسط $1 انجام شدهاست.\nدلیلی که گده اینه: $2''\n* آغاز قطع دسترسی: $8\n* زمان اتمام ای قطع دسترسی: $6\n* کاربری که قطع دسترسیاش در نظر بیده: $7\nایساترین با $1 یا یکی از [[{{MediaWiki:Grouppage-sysop}}|مدیران]] تماس بگیرین و در ای باره صحبت کنین.\nتوجه کنین که ایسا نترین زه امکان «ارسال پست الکترونیکی به ای کاربر» استفاده کنین مگر این که نشانی پست الکترونیکی معتبری در [[Special:Preferences|اولویتهای کاربری]]خود ثبت کرده بوین.\nنشانی IP ایسا $3 و شماره قطع دسترسی ایسا $5 است. لطفاً ای شمارهها را در همه کاوشهاتون ذکر کنین.\nایسا ترین با $1 یا یکی دیه زه [[{{MediaWiki:Grouppage-sysop}}|مدیران]] تماس بگیرین، تا در باره ای قطع دسترسی صحبت کنین.\nدقت کنین که سی ارسال پست الکترونیکی در ویکی، وا پست الکترونیکی خود را زه طریق صفحه[[Special:Preferences|تنظیمات]] فعال کرده بوین، و نیز، وا امکان استفاده زه ای ویژگی سی ایساقطع نبوه.\nنشانی اینترنتی الان ایسا $3 است و شماره قطع دسترسی $5 است.\nلطفاً ای شماره را در هر درخواستی که در ای مورد مطرح اکنین ذکر کنین",
"loginreqtitle": "ڤامإن إڤوڌن لازومإ",
"newarticle": "(تازه)",
"newarticletext": "ايسا ز دين یأ هومپیڤأندي هڌين کإ نيڌس. سي رأڤأندياري بألگإ شورۈ کونين مإن اي جأڤإ دإڤۈني بنڤيسين(سي دونسدن بیشدر سإیل [$1]کونین).\nأر ايسا سي إشتڤاکاري ايچونين، دوگمإ رأهڌن ڤاپوشد نأ بپۈرنين.",
"noarticletext": " ايسإ اي بألگإ نإڤشدإیي نارإ، ايسا تإرين [[Special:Search/{{PAGENAME}}داسۈن اي بألگإ نإ مإن بألگإآ ديأري پی جۈري کونين]] یا [{{fullurl:{{FULLPAGENAME}}|action=edit}} اي بألگإ نأ ڤيرایشد کونين].",
+ "noarticletext-nopermission": " ايسإ اي بألگإ نإڤشدإیي نارإ، ايسا تإرين [[Special:Search/{{PAGENAME}}داسۈن اي بألگإ نإ مإن بألگإآ ديأري پی جۈري کونين]] یا [{{fullurl:{{FULLPAGENAME}}|action=edit}} اي بألگإ نأ ڤيرایشد کونين].",
"previewnote": "'''ای فقط یه پیش نمایشه;\nتغییراتی که ایسا دادین هنی ضبط نوابیده!'''",
"editing": "درحال اصلاح $1",
"creating": "راسد کردن $1",
"templatesusedpreview": "قالبها یا الگوهای استفاده وابیده در ای پیش نمایش:",
"template-protected": "(تحت حمایت)",
"template-semiprotected": "(نیمه حمایت وابیده)",
+ "hiddencategories": "اي بلگأ یکي ز أندوما {{PLURAL:$1|1 hidden category|$1 hidden categories}} إ:",
"nocreatetext": "{{SITENAME}}قابلیت درست کردن صفحات تازه را محدود کرده. ترین برگردین و صفحه موجود را اصلاح کنین یا اینکه [[Special:UserLogin|به سیستم داخل بوین یا حساب کاربری درست کنین]].",
"permissionserrorstext-withaction": "ايسا سی نياگري $2 سإلا\nنارين {{PLURAL:$1|دلیل|دليلا}}:",
"recreate-moveddeleted-warn": "'''هشدار: ایسا در حال درست کردن دوباره صفحهای هدین که قبلاً حذف وابیده '''در نظر داشته بوین که ادامه اصلاح ای صفحه کار درستی هده یا نه. نمایه حذف مربوط به ای صفحه سی راحتی کار در ادامه اویده",
"lineno": "سطر $1:",
"compareselectedversions": "مقایسه نسخههای انتخاب وابیده",
"editundo": "لغو اصلاح آخر",
+ "diff-multi-sameuser": "({{PLURAL:$1|یه دۈنإ نسقه مینجایی|$1 نسقه یل مینجایی}} ب دسد{{PLURAL:$2|کاریاری ديأ|$2 کاريارا}} نشۈن داڌإ نڤابيڌإ)",
"searchresults": "نتيجأ آ پی جۈري سي",
"searchresults-title": "نتيجإ آ پی جوري سي \"$1\"",
"prevn": "قبلی {{PLURAL:$1|$1}}",
"nextn-title": "نيایي $1 {{PLURAL:$1|نتيجه|نتيجإآ}}",
"shown-title": "نإشۈن دائن $1 {{PLURAL:$1|نتيجأ|نتيجإ آ}} سي هر بألگأ",
"viewprevnext": "مشاهده ($1 {{int:pipe-separator}} $2) ($3)",
+ "searchmenu-new": "<strong>اي بلگإ نأ مإن \"[[:$1]]\" اي ڤيکي راسد کو!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
"searchprofile-articles": "بلگه آ مینونه دار",
"searchprofile-images": "ڤارسگرا خلکمند",
"searchprofile-everything": "همه چی",
"search-suggest": "منزۈرت یو بي:$1",
"search-interwiki-more": "(بيشدر)",
"searchall": "همه",
+ "search-showingresults": "{{PLURAL:$4|نتیجه یل<strong>$1</strong> د <strong>$3</strong>|نتیجه یل<strong>$1 - $2</strong د <strong>$3</strong>}}",
"search-nonefound": "هیژ نتیجه یی وا پی جست تو یکی نئ.",
"powersearch-toggleall": "همأ",
"powersearch-togglenone": "هيش کوم",
"enhancedrc-history": "ڤیرگار",
"recentchanges": "تغییرات اخیر",
"recentchanges-legend": "گزينإ آ آلشدا ايسإني",
+ "recentchanges-summary": "دو بیشتر آلشدا تازباو نه د ویکی نه د ای بلگه پیگری کو.",
"recentchanges-feed-description": "ردیابی آخرین تغییرات ویکی در ای خورد",
"recentchanges-label-newpage": "ای ويرايشت يه بلگه تازه راس كرده",
"recentchanges-label-minor": "یو یه ويرايشت کوچيره",
"recentchangeslinked-title": "تغییرهای مرتبط با $1",
"recentchangeslinked-summary": " ای صفحه خاص تغییرات اخیر در صفحههای لینک داده شده به این صفحه را نشو اده.\nصفحههایی که در لیست پیگیریهای ایسا بون به شکل '''سیاه''' نشو داده ابون.",
"recentchangeslinked-page": "نوم بألگە:",
+ "recentchangeslinked-to": "آلشتیایی که د بلگه یا هوم پیوند بینه وه جا بلگه دئیه بیه نشو بیه",
"upload": "آپلود فایل",
"uploadbtn": "آپلود فایل",
"uploadlogpage": "نمایه آپلود",
"tooltip-recreate": "دوباره درست کردن صفحه ای که زه رو کینه وغرض پاک وابیده",
"tooltip-upload": "شروع آپلود",
"tooltip-rollback": "\"اعاده\" برگرداندن به وضع اولیه سی ای صفحه که بخاطر مشارکت آخر اصلاح وابیده بایک کلیک",
+ "tooltip-undo": "انجوم نگرتن ای ویرایشت ورگن و همه فرمیا ویرایشت تانه که حالت پیش سیل واکو.یه اجازه میئه سی اضاف کردن یه دلیل د چکسته.",
"tooltip-summary": "یأ چکسدأ کۈچير ڤارڌ کونين",
"simpleantispam-label": "Anti-spam check.\nپور<strong>نکنين</strong> ايچو نأ!",
"pageinfo-toolboxlink": "دونسمندیا بلگه",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|چک چنه]])",
"version": "ترجمه یا تفسیر",
"specialpages": "صفحات ویژه",
- "tag-filter": "[[Special:سرديسا|سرديس]] فيلتر :",
+ "tag-filter": "[[Special:سرديسا|سرديس]] فيلتر:",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|سرديس|سرديسا}}]]: $2)",
"logentry-delete-delete": "$1 بألگأ {{GENDER:$2|پاکسا ڤابيأ}} $3",
"logentry-move-move": "$1 {{GENDER:$2|جا ب جا کردإ}} بألگأ $3 نأ سي $4",
"revdelete-no-file": "N'eus ket eus ar restr spisaet ganeoc'h.",
"revdelete-show-file-confirm": "Ha sur oc'h e fell deoc'h gwelet stumm diverket ar restr \"<nowiki>$1</nowiki>\" deiziataet eus an $2 da $3?",
"revdelete-show-file-submit": "Ya",
- "revdelete-selected-text": "{{PLURAL:$1|Stummoù diuzet|Stumm diuzet}} of [[:$2]]:",
+ "revdelete-selected-text": "{{PLURAL:$1|Stumm diuzet}} eus [[:$2]]:",
"revdelete-selected-file": "{{PLURAL:$1|Stumm eus ar restr diuzet}} evit [[:$2]] :",
"logdelete-selected": "{{PLURAL:$1|Darvoud eus ar marilh diuzet}} :",
"revdelete-text-text": "Dont a raio c'hoazh war wel ar stummoù diverket en istor ar bajenn met ne c'hallo ket an dud gwelet darn eus an danvez ken.",
"tags-apply-no-permission": "N'oc'h ket aotreet da lakaat tikedennoù kemmañ da dalvezout a-gevret gant ho kemmoù.",
"tags-apply-blocked": "N'hallit ket lakaat da dalvezout ar c'hemmañ tikedennoù hag ho kemmoù e-keit hag {{GENDER:$1|emaoc'h}} stanket.",
"tags-apply-not-allowed-one": "N'haller ket lakaat an dikedenn \"$1\" da dalvezout gant an dorn.",
+ "tags-apply-not-allowed-multi": "N'eo ket aotreet lakaat an {{PLURAL:$2|dikedenn}} da heul da dalvezout gant an dorn : $1",
+ "tags-update-no-permission": "N'oc'h ket aotreet da ouzhpennañ pe da lemel kuit tikedennoù kemmañ diwar stummoù hiniennel pe monedoù marilh.",
+ "tags-update-blocked": "N'hallit ket ouzhpennañ pe dilemel tikedennoù kemmañ e-keit hag {{GENDER:$1|emaoc'h}} stanket.",
+ "tags-update-add-not-allowed-one": "N'haller ket ouzhpennañ an dikedenn \"$1\" gant an dorn.",
+ "tags-update-add-not-allowed-multi": "N'eo ket aotreet ouzhpennañ an {{PLURAL:$2|dikedenn}} da heul gant an dorn : $1",
+ "tags-update-remove-not-allowed-one": "N'haller dilemel an dikedenn \"$1\".",
+ "tags-update-remove-not-allowed-multi": "N'haller ket dilemel an {{PLURAL:$2|dikedenn}} gant an dorn : $1",
"tags-edit-title": "Kemmañ an tikedennoù",
"tags-edit-manage-link": "Merañ an tikedennoù",
+ "tags-edit-revision-selected": "{{PLURAL:$1|stumm diuzet}} eus [[:$2]]:",
+ "tags-edit-logentry-selected": "{{PLURAL:$1|Darvoud eus ar marilh diuzet}} :",
+ "tags-edit-revision-legend": "Ouzhpennañ pe lemel tikedennoù a-ziwar {{PLURAL:$1|ar stumm-mañ|an $1 stumm zo}}",
+ "tags-edit-logentry-legend": "Ouzhpennañ pe dilemel tikedennoù a-ziwar {{PLURAL:$1|ar moned marilh-mañ|ar $1 moned marilh zo}}",
"tags-edit-existing-tags": "Tikedennoù zo anezho :",
"tags-edit-existing-tags-none": "<em>Hini ebet</em>",
"tags-edit-new-tags": "Tikedennoù nevez :",
"tags-edit-remove": "Dilemel an tikedennoù-mañ :",
"tags-edit-remove-all-tags": "(dilemel an holl dikedennoù)",
"tags-edit-chosen-placeholder": "Diuzañ un nebeud tikedennoù",
+ "tags-edit-chosen-no-results": "N'eus bet kavet tikedenn ebet o klotañ",
"tags-edit-reason": "Abeg :",
+ "tags-edit-revision-submit": "Lakaat ar c'hemmoù da dalvezout evit {{PLURAL:$1|ar stumm-mañ|$1 stumm}}",
+ "tags-edit-logentry-submit": "Lakaat ar c'hemmoù da dalvezout evit {{PLURAL:$1|ar moned marilh-mañ|$1 moned marilh}}",
"tags-edit-success": "Lakaet eo bet ar c'hemmoù da dalvezout",
+ "tags-edit-failure": "N'eus ket bet gallet lakaat ar c'hemmoù da dalvezout :\n$1",
+ "tags-edit-nooldid-title": "Stumm pal direizh",
+ "tags-edit-nooldid-text": "Pe n'eus ket bet spisaet ganeoc'h stumm pal resis ebet da lakaat an arc'hwel-mañ da oberiañ warnañ, pe n'eus ket eus ar stumm spisaet.",
+ "tags-edit-none-selected": "Diuzit da nebeutañ un dikedenn da vezañ ouzhpennet pe dilamet.",
"comparepages": "Keñveriañ pajennoù",
"compare-page1": "Pajenn 1",
"compare-page2": "Pajenn 2",
"compare-revision-not-exists": "N'eus ket eus an adweladenn spisaet ganeoc'h.",
"dberr-problems": "Ho tigarez ! Kudennoù teknikel zo gant al lec'hienn-mañ.",
"dberr-again": "Gortozit un nebeud munutennoù a-raok adkargañ.",
- "dberr-info": "(Dibosupl kevreañ ouzh servijer an diaz roadennoù: $1)",
- "dberr-info-hidden": "(Ne c'haller ket mont da servijer an diaz roadennoù)",
+ "dberr-info": "(Dibosupl kevreañ ouzh an diaz roadennoù : $1)",
+ "dberr-info-hidden": "(Ne c'haller ket mont d'an diaz roadennoù)",
"dberr-usegoogle": "E-keit-se esaeit klask dre c'hGoogle.",
"dberr-outofdate": "Notit mat e c'hall o menegerioù dezho bezañ dispredet e-keñver ar boued zo ganeomp.",
"dberr-cachederror": "Un eilstumm memoret eus ar bajenn goulennet eo hemañ, gallout a ra bezañ dispredet.",
"htmlform-date-placeholder": "BBBB-MM-DD",
"htmlform-time-placeholder": "HH:MM:SS",
"htmlform-datetime-placeholder": "BBBB-MM-DD HH:MM:SS",
+ "htmlform-date-invalid": "An talvoud lakaet ganeoc'h n'eo ket un deiziad anavezet. Klaskit gant ar furmad BBBB-MM-DD.",
+ "htmlform-time-invalid": "An talvoud lakaet ganeoc'h n'eo ket un eur anavezet. Klaskit gant ar furmad HH:MM:SS.",
+ "htmlform-datetime-invalid": "An talvoud lakaet ganeoc'h n'eo ket un deiziad nag un eur anavezet. Klaskit gant ar furmad BBBB-MM-DD HH:MM:SS.",
+ "htmlform-date-toolow": "An talvoud lakaet ganeoc'h zo a-raok an deiziad aotreet abretañ hag a zo $1.",
+ "htmlform-date-toohigh": "An talvoud lakaet ganeoc'h zo war-lerc'h an deiziad aotreet diwezhañ hag a zo $1.",
+ "htmlform-time-toolow": "An talvoud lakaet ganeoc'h zo a-raok an eur aotreet abretañ hag a zo $1.",
+ "htmlform-time-toohigh": "An talvoud lakaet ganeoc'h zo war-lerc'h an eur aotreet diwezhañ hag a zo $1.",
+ "htmlform-datetime-toolow": "An talvoud lakaet ganeoc'h zo a-raok an deiziad hag eur aotreet abretañ hag a zo $1.",
+ "htmlform-datetime-toohigh": "An talvoud lakaet ganeoc'h zo war-lerc'h an deiziad hag eur aotreet diwezhañ hag a zo $1.",
+ "htmlform-title-badnamespace": "N'emañ ket [[:$1]] en esaouenn anv \"{{ns:$2}}\".",
+ "htmlform-title-not-creatable": "N'haller ket reiñ an titl \"$1\" d'ur bajenn bennak",
"htmlform-title-not-exists": "N'eus ket eus $1.",
"htmlform-user-not-exists": "N'eus ket eus <strong>$1</strong>.",
"htmlform-user-not-valid": "Un anv implijer direizh eo <strong>$1</strong>.",
"view-foreign": "Tan-awa sa $1",
"edit": "Usba",
"create": "Himoa",
+ "create-local": "Pagpuno og lokal nga deskripsyon",
"editthispage": "Usba kining panid",
"create-this-page": "Himoa kining panid",
"delete": "Papasa",
"newarticle": "(Bag-o)",
"newarticletext": "Mitulpok ka sa sumpay ngadto sa usa ka wala pa masulat nga panid.\nAron mahimo ang maong panid, pagtayp sa kahon sa ubos (tan-awa ang [$1 panid sa tabang] alang sa dugang impormasyon).\nKon miabot ka dinhi pinaagi sa usa ka sayop, palihog tuploka ang back nga tuplokanan sa imong brawser.",
"noarticletext": "Sa kasamtangan walay sulod nga teksto kining panid.\nPuyde nimong [[Special:Search/{{PAGENAME}}|pangitaon kining titulo sa panid]] sa ubang mga panid, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pangitaa ang mga may kalabotan nga log],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} mugnaa kining panid]</span>.",
+ "noarticletext-nopermission": "Sa kasamtangan walay sulod nga teksto kining panid.\nPuyde nimong [[Special:Search/{{PAGENAME}}|pangitaon kining titulo sa panid]] sa ubang mga panid, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pangitaa ang mga may kalabotan nga log]</span>, apan wala kay katungod nga mohimo ning maong panid.",
"userpage-userdoesnotexist": "Ang akawnt sa tiggamit nga \"<nowiki>$1</nowiki>\" wala marehistro. Palihug tan-awa kon buot nimong himoon/usbon ang kining panid.",
"previewnote": "'''Hinumdomi nga kini usa lang ka paunang tan-aw; wala pa matipigi ang imong giusab!'''",
"editing": "Nagausab sa $1",
"nextn-title": "Sunod nga $1 {{PLURAL:$1|resulta|mga resulta}}",
"shown-title": "Pagpakita og $1 {{PLURAL:$1|ka resulta|ka mga resulta}} matag panid",
"viewprevnext": "Tan-awa sa ($1 {{int:pipe-separator}} $2) ($3)",
+ "searchmenu-new": "<strong>Mugnaa ang panid nga \"[[:$1]]\" dinhi ning maong wiki!</strong> {{PLURAL:$2|0=|Tan-awa usab ang panid nga nakit-an sa imong pagpangita.|Tan-awa usab ang mga resulta sa pagpangita.}}",
"searchprofile-articles": "Mga panid sa sulod",
"searchprofile-images": "Multimedia",
"searchprofile-everything": "Tanan",
"enhancedrc-history": "kaagi",
"recentchanges": "Mga bag-ong giusab",
"recentchanges-legend": "Mga opsyon sa bag-ong pag-usab",
+ "recentchanges-summary": "Bantayi ang kinabag-ohang mga pag-usab sa wiki dinhi niining panid.",
"recentchanges-feed-description": "Bantayi ang kinabag-ohang mga pag-usab sa wiki niining feed.",
"recentchanges-label-newpage": "Kining pag-usab nagmugna og bag-ong panid",
"recentchanges-label-minor": "Ginagmay nga pag-usab",
"rcshowhideliu": "$1 ka mga gumagamit ang natala",
"rcshowhideliu-hide": "Tagoa",
"rcshowhideanons": "$1 mga wala mailhing gumagamit",
+ "rcshowhideanons-show": "Ipakita",
"rcshowhideanons-hide": "Tagoa",
"rcshowhidemine": "$1 akong mga pag-usab",
"rcshowhidemine-hide": "Tagoa",
"recentchangeslinked-to": "Ipakita na lang ang mga pag-usab sa mga panid nga nakasumpay sa nahatag nga panid",
"upload": "Pagsumiter og payl",
"uploadlogpage": "Log sa upload",
+ "filedesc": "Mubong sugid:",
"license": "Paglilisensya:",
"license-header": "Pagtugot",
"file-anchor-link": "Payl",
"exif-xresolution": "Resolusyon (pahigda)",
"exif-yresolution": "Resolusyon (pabarog)",
"exif-datetime": "Petsa ug oras sa pagkausab sa payl",
+ "exif-make": "Tighimo sa kamera",
+ "exif-model": "Model sa kamera",
+ "exif-software": "Programa nga gigamit",
+ "exif-exifversion": "Bersyon sa Exif",
"exif-colorspace": "<i>Color space</i>",
+ "exif-datetimeoriginal": "Petsa ug oras sa pag-<i>generate</i> sa <i>data</i>",
+ "exif-datetimedigitized": "Petsa ug oras sa pag-<i>digitize</i>",
+ "exif-orientation-1": "Normal",
"namespacesall": "tanan",
"monthsall": "tanan",
"watchlisttools-view": "Tan-awa ang may kalabotan nga mga pag-usab",
"specialpages": "Espesyal nga mga panid",
"tag-filter": "[[Special:Tags|Tag]] nga pilter:",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Mga tag}}]]: $2)",
+ "logentry-delete-delete": "Si $1 {{GENDER:$2|mipapas}} sa panid nga $3",
"revdelete-restricted": "mga na-aplay nga restriksyon sa mga tagdumala",
"revdelete-unrestricted": "gitangtang ang mga restriksyon alang sa mga tagdumala",
"logentry-newusers-create": "Ang akawnt nga $1 {{GENDER:$2|namugna}}",
"rcfilters-invalid-filter": "Ungültiger Filter",
"rcfilters-empty-filter": "Keine aktiven Filter. Es werden alle Beiträge angezeigt.",
"rcfilters-filterlist-title": "Filter",
+ "rcfilters-filterlist-whatsthis": "Was ist das?",
"rcfilters-filterlist-feedbacklink": "Rückmeldung zu den neuen (Beta-)Filtern hinterlassen",
"rcfilters-highlightbutton-title": "Ergebnisse hervorheben",
"rcfilters-highlightmenu-title": "Eine Farbe auswählen",
"rcfilters-invalid-filter": "Invalid filter",
"rcfilters-empty-filter": "No active filters. All contributions are shown.",
"rcfilters-filterlist-title": "Filters",
+ "rcfilters-filterlist-whatsthis": "What's this?",
"rcfilters-filterlist-feedbacklink": "Provide feedback on the new (beta) filters",
"rcfilters-highlightbutton-title": "Highlight results",
"rcfilters-highlightmenu-title": "Select a color",
"rcfilters-highlightmenu-help": "Select a color to highlight this property",
"rcfilters-filterlist-noresults": "No filters found",
+ "rcfilters-noresults-conflict": "No results found because the search criteria are in conflict",
+ "rcfilters-state-message-subset": "This filter has no effect because its results are included with those of the following, broader {{PLURAL:$2|filter|filters}} (try highlighting to distinguish it): $1",
+ "rcfilters-state-message-fullcoverage": "Selecting all filters in a group is the same as selecting none, so this filter has no effect. Group includes: $1",
"rcfilters-filtergroup-registration": "User registration",
"rcfilters-filter-registered-label": "Registered",
"rcfilters-filter-registered-description": "Logged-in editors.",
"rcfilters-filter-unregistered-label": "Unregistered",
"rcfilters-filter-unregistered-description": "Editors who aren’t logged in.",
- "rcfilters-filter-unregistered-conflicts-user-experience-level": "The \"Unregistered\" filter is inactive because its effect is being canceled by the following Experience {{PLURAL:$2|filter|filters}}, which {{PLURAL:$2|finds|find}} only registered users: $1",
+ "rcfilters-filter-unregistered-conflicts-user-experience-level": "This filter conflicts with the following Experience {{PLURAL:$2|filter|filters}}, which {{PLURAL:$2|finds|find}} only registered users: $1",
"rcfilters-filtergroup-authorship": "Edit authorship",
"rcfilters-filter-editsbyself-label": "Your own edits",
"rcfilters-filter-editsbyself-description": "Edits by you.",
"rcfilters-filter-editsbyother-label": "Edits by others",
"rcfilters-filter-editsbyother-description": "Edits created by other users (not you).",
"rcfilters-filtergroup-userExpLevel": "Experience level (for registered users only)",
- "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "This filter is inactive because it finds only registered users, so the \"Unregistered\" filter is canceling its effect.",
- "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "The \"Unregistered\" filter is in conflict with one or more Experience filters. Experience filters find registered users only. The conflicting filters are marked as inactive above.",
+ "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "Experience filters find only registered users, so this filter conflicts with the “Unregistered” filter.",
+ "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "The \"Unregistered\" filter conflicts with one or more Experience filters, which find registered users only. The conflicting filters are marked in the Active Filters area, above.",
"rcfilters-filter-user-experience-level-newcomer-label": "Newcomers",
"rcfilters-filter-user-experience-level-newcomer-description": "Fewer than 10 edits and 4 days of activity.",
"rcfilters-filter-user-experience-level-learner-label": "Learners",
"feedback-bugnew": "Provjereno. Prijavi novi \"bug\"",
"feedback-bugornote": "Ako ste spremni detaljno opisati tehnički problem molimo [$1 prijavite \"bug\"].\nInače, možete ispuniti jednostavan obrazac u nastavku. Vaš komentar biti će dodan na stranicu \"[$3 $2]\", zajedno s vašim suradničkim imenom i imenom internetskog preglednika koji rabite.",
"feedback-cancel": "Odustani",
- "feedback-close": "Gotovo",
+ "feedback-close": "Riješeno",
"feedback-external-bug-report-button": "Arhiviraj tehnički zadatak",
"feedback-dialog-title": "Slanje povratnih informacija",
"feedback-dialog-intro": "Da biste poslali povratnu informaciju, rabite jednostavan obrazac. Vaš će komentar biti dodan na stranici \"$1\" s Vašim suradničkim imenom.",
"feedback-terms": "Jasno mi je da moje ''user agent'' informacije sadrže točne informacije o mom pregledniku i operativnom sustavu te da će biti javno dostupne zajedno s mojom povratnom informacijom.",
"feedback-termsofuse": "Slažem se da povratne informacije objavljujem u skladu s Uvjetima uporabe.",
"feedback-thanks": "Hvala! Vaš odgovor je snimljen na stranicu \"[$2 $1]\".",
- "feedback-thanks-title": "Hvala!",
+ "feedback-thanks-title": "Hvala Vam lijepa!",
"searchsuggest-search": "Pretraži projekt {{SITENAME}}",
"searchsuggest-containing": "sadrži....",
"api-error-badtoken": "Interna pogrješka: Token nije ispravan.",
"prefs-help-prefershttps": "이 사용자 환경 설정은 다음 로그인부터 적용됩니다.",
"prefswarning-warning": "사용자 환경 설정에서 바뀐 것이 아직 저장되어 있지 않습니다.\n사용자 환경 설정에서 \"$1\"을 클릭하지 않고 이 페이지를 떠나면 바뀌지 않습니다.",
"prefs-tabs-navigation-hint": "팁: 탭 목록에서 탭 사이를 둘러보려면 왼쪽과 오른쪽 화살표 키를 사용할 수 있습니다.",
- "userrights": "사용자 권한 관리",
+ "userrights": "사용자 권한",
"userrights-lookup-user": "사용자 선택",
"userrights-user-editname": "사용자 이름 입력:",
"editusergroup": "사용자 그룹 불러오기",
"Macofe",
"Zygimantus",
"Matma Rex",
- "Nemo bis"
+ "Nemo bis",
+ "Nersip"
]
},
"tog-underline": "Nuorodos pabraukimas:",
"login": "Prisijungti",
"login-security": "Patvirtinkite savo tapatybę",
"nav-login-createaccount": "Prisijungti / sukurti paskyrą",
- "userlogin": "Prisijungti / sukurti paskyrą",
- "userloginnocreate": "Prisijungti",
"logout": "Atsijungti",
"userlogout": "Atsijungti",
"notloggedin": "Neprisijungęs",
"userlogin-noaccount": "Neturite paskyros?",
"userlogin-joinproject": "Prisijungti prie {{SITENAME}}",
- "nologin": "Neturite prisijungimo vardo? '''$1'''.",
- "nologinlink": "Sukurkite paskyrą",
"createaccount": "Sukurti paskyrą",
- "gotaccount": "Jau turite paskyrą? '''$1'''.",
- "gotaccountlink": "Prisijunkite",
- "userlogin-resetlink": "Pamiršote savo prisijungimo duomenis?",
"userlogin-resetpassword-link": "Pamiršote savo slaptažodį?",
"userlogin-helplink2": "Padėti prisijungti",
"userlogin-loggedin": "Jūs jau prisijungęs kaip {{GENDER:$1|$1}}.\nNaudokite žemiau pateiktą pavidalą, kad prisijungtumėte kaip kitas naudotojas.",
"createaccountmail": "Naudokite laikiną atsitiktinį slaptažodį ir nusiųskite jį į elektroninį paštą, nurodytą žemiau.",
"createaccountmail-help": "Gali būti naudojamas paskyros sukūrimui kitam asmeniui, neatskleidžiant slaptažodžio.",
"createacct-realname": "Vardas (neprivaloma)",
- "createaccountreason": "Priežastis:",
"createacct-reason": "Priežastis",
"createacct-reason-ph": "Kodėl kuriate kitą paskyrą",
"createacct-reason-help": "Pranešimas rodomas paskyros sukūrimo žurnale",
"rcfilters-clear-all-filters": "Valyti visus filtrus",
"rcfilters-invalid-filter": "Negalimas filtras",
"rcfilters-filterlist-title": "Filtrai",
- "rcfilters-highlightmenu-title": "Pasirinkti spalvą",
+ "rcfilters-highlightmenu-title": "Pasirinkite spalvą",
"rcfilters-filterlist-noresults": "Nerastas toks filtras",
"rcfilters-filtergroup-registration": "Vartotojo registracija",
"rcfilters-filter-registered-label": "Registruoti",
"rcfilters-filter-unregistered-label": "Neregistruoti",
+ "rcfilters-filter-unregistered-description": "Redaktoriai, kurie nėra prisijungę.",
"rcfilters-filter-editsbyself-label": "Jūsų keitimai",
"rcfilters-filter-editsbyself-description": "Jūsų keitimai.",
"rcfilters-filter-editsbyother-label": "Kitų keitimai",
"rcfilters-filter-editsbyother-description": "Kaitimai sukurti kitų vartotojų (ne jūsų).",
"rcfilters-filtergroup-userExpLevel": "Patirties lygis (tik registruotiems vartotojams)",
- "rcfilters-filter-userExpLevel-newcomer-label": "Naujokai",
- "rcfilters-filter-userExpLevel-learner-label": "Mokiniai",
- "rcfilters-filter-userExpLevel-experienced-label": "Patyrę vartotojai",
- "rcfilters-filter-userExpLevel-experienced-description": "Daugiau nei 30 dienų veiklos ir 500 keitimų.",
+ "rcfilters-filter-user-experience-level-newcomer-label": "Naujokai",
+ "rcfilters-filter-user-experience-level-learner-label": "Mokiniai",
+ "rcfilters-filter-user-experience-level-experienced-label": "Patyrę vartotojai",
+ "rcfilters-filter-user-experience-level-experienced-description": "Daugiau nei 30 dienų veiklos ir 500 keitimų.",
"rcfilters-filter-bots-label": "Robotas",
"rcfilters-filter-bots-description": "Keitimai, atlikti automatinių įrankių.",
"rcfilters-filter-humans-label": "Žmogaus (ne roboto)",
"rcfilters-filter-humans-description": "Keitimai atlikti žmonių.",
+ "rcfilters-filtergroup-reviewstatus": "Peržiūrėti statusą",
"rcfilters-filtergroup-significance": "Reikšmė",
"rcfilters-filter-minor-label": "Smulkūs pakeitimai",
"rcfilters-filter-minor-description": "Keitimai, kuriuos autorius pažymėjo kaip mažus.",
"logentry-tag-update-revision": "$1 {{GENDER:$2|atnaujino}} žymes $3 puslapio versijoje $4, ({{PLURAL:$7|pridėjo}} $6; {{PLURAL:$9|pašalino}} $8)",
"logentry-tag-update-logentry": "$1 {{GENDER:$2|atnaujino}} žymes $3 puslapio žurnalo įraše $5 ({{PLURAL:$7|pridėtas}} $6; {{PLURAL:$9|pašalintas}} $8)",
"rightsnone": "(jokių)",
- "revdelete-summary": "keitimo paaiškinimas",
"rightslogentry-temporary-group": "$1 (laikinai, iki $2)",
"feedback-adding": "Pridedamas atsiliepimas į puslapį ...",
"feedback-back": "Atgal",
"title-invalid-empty": "Só͘ iau-kiû ê ia̍h-bīn tê-bo̍k sī khang--ê he̍k-chiá kaⁿ-taⁿ hâm liáu miâ-khong-kan.",
"title-invalid-utf8": "Só͘ iau-kiû ê ia̍h-bīn tê-bo̍k hâm liáu bô chiàⁿ-khak ê 1 lia̍t UTF-8 ê jī.",
"title-invalid-interwiki": "Só͘ iau-kiû ê ia̍h-bīn tê-bo̍k pau-hâm liáu 1-ê bē-tàng ēng ùi tê-bo̍k ê interwiki liân-kiat.",
+ "title-invalid-talk-namespace": "Chhéng-kiû ê ia̍h-bīn tê-bo̍k chí-tēng liáu chi̍t phiⁿ bô hoat-tō͘ chûn-chāi ê thó-lūn-ia̍h.",
+ "title-invalid-characters": "Chhéng-kiû ê ia̍h-bīn tê-bo̍k hâm hâm bû-hāu ê bûn-jī: \"$1\".",
+ "title-invalid-relative": "Tê-bo̍k ū siong-tùi lō͘-kèng. Siong-tùi-sek ê ia̍h-bīn tê-bo̍k (./, ../) sī bû-hāu--ê, in-ūi iōng-chiá ê liû-lám-khì tiāⁿ thàng in bē kàu.",
+ "title-invalid-magic-tilde": "Chhéng-kiû ê ia̍h-bīn tê-bo̍k hâm bû-hāu ê mô͘-hoat tilde bûn-jī-lia̍t (<nowiki>~~~</nowiki>).",
"perfcached": "Ē-kha ê chu-liāu tùi lâi--ê, só·-í bô it-tēng sī siōng sin ê. Tī khoài-chhûn-khu siōng chē ē-tàng khǹg{{PLURAL:$1| pit|$1 pit}} chu-liāu.",
"perfcachedts": "Ē-kha ê chu-liāu tùi lâi--ê, tī $1 keng-sin--koè. Tī khoài-chûn-khu siōng chē ē-tàng khǹg {{PLURAL:$4|pit|$4 pit}} chu-liāu.",
"querypage-no-updates": "Chit-má bē-sái kái chit ia̍h.\nChia ê chu-liāu bē-tàng sui tiông-sin chéng-lí.",
"page_last": "koniec",
"histlegend": "Wybór porównania – zaznacz kropeczkami dwie wersje do porównania i wciśnij enter lub przycisk ''Porównaj wybrane wersje''.<br />\nLegenda: (bież.) – pokaż zmiany od tej wersji do bieżącej,\n(poprz.) – pokaż zmiany od wersji poprzedzającej, m – mała (drobna) zmiana",
"history-fieldset-title": "Przeglądaj historię",
- "history-show-deleted": "Tylko usunięte",
+ "history-show-deleted": "Tylko usunięte edycje",
"histfirst": "od najstarszych",
"histlast": "od najświeższych",
"historysize": "({{PLURAL:$1|1 bajt|$1 bajty|$1 bajtów}})",
"rcfilters-filter-editsbyother-label": "Edycje inne niż Twoje",
"rcfilters-filter-editsbyother-description": "Edycje wykonane przez innych (nie Twoje).",
"rcfilters-filtergroup-userExpLevel": "Poziom doświadczenia (tylko dla zarejestrowanych użytkowników)",
+ "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "Filtr \"Niezarejestrowani\" koliduje z jednym lub więcej filtrów z filtrów poziomu doświadczenia, które służą do wyszukiwania wkładu tylko zarejestrowanych użytkowników. Kolidujące filtry zostały oznaczone jako nieaktywne.",
"rcfilters-filter-user-experience-level-newcomer-label": "Początkujący",
"rcfilters-filter-user-experience-level-newcomer-description": "Mniej niż 10 edycji i 4 dni aktywności.",
"rcfilters-filter-user-experience-level-learner-label": "Uczący się",
"rcfilters-filter-bots-description": "Zmiany wykonane z użyciem zautomatyzowanych narzędzi.",
"rcfilters-filter-humans-label": "Człowiek (nie bot)",
"rcfilters-filter-humans-description": "Zmiany wprowadzone przez ludzi.",
+ "rcfilters-filtergroup-reviewstatus": "Status przejrzenia",
+ "rcfilters-filter-patrolled-label": "Sprawdzone",
+ "rcfilters-filter-patrolled-description": "Edycje oznaczone jako sprawdzone.",
+ "rcfilters-filter-unpatrolled-label": "Niesprawdzone",
+ "rcfilters-filter-unpatrolled-description": "Edycje nie oznaczone jako sprawdzone.",
"rcfilters-filtergroup-significance": "Znaczenie",
"rcfilters-filter-minor-label": "Drobne zmiany",
"rcfilters-filter-minor-description": "Zmiany, które autor oznaczył jako drobne.",
"rcfilters-invalid-filter": "A label for an invalid filter.",
"rcfilters-empty-filter": "Placeholder for the filter list when no filters were chosen.",
"rcfilters-filterlist-title": "Title for the filters list.\n{{Identical|Filter}}",
+ "rcfilters-filterlist-whatsthis": "Caption for the link that opens a popup with explanations about this filter group.",
"rcfilters-filterlist-feedbacklink": "Caption for the link to the feedback page about the filters beta feature.",
"rcfilters-highlightbutton-title": "Title for the highlight button used to toggle the highlight feature on and off.",
"rcfilters-highlightmenu-title": "Title for the highlight menu used to select the highlight color for an individual filter.",
"rcfilters-highlightmenu-help": "Tooltip for the highlight menu for individual filters.",
"rcfilters-filterlist-noresults": "Message showing no results found for searching a filter.",
+ "rcfilters-noresults-conflict": "A message displayed in the results area when no results found because there are filters in conflict with one another.",
+ "rcfilters-state-message-subset": "Tooltip shown when hovering over a filter tag when one or more broader filters that contain the hovered filter are also selected. This indicates that the hovered filter has no effect because all the results it matches are also matched by the broader filter(s). Parameters:\n* $1 - Comma-separated string of selected broader filters that this filter is a subset of\n* $2 - Count of filters in $1, for PLURAL",
+ "rcfilters-state-message-fullcoverage": "Tooltip shown when hovering over a filter tag when all the filters in its group are selected. This indicates that the hovered filter has no effect because the selected filters in the group cover all changes. Parameters:\n* $1 - Comma-separated string of selected filters in the group\n* $2 - Count of filters in $1, for PLURAL",
"rcfilters-filtergroup-registration": "Title for the filter group for editor registration type.",
"rcfilters-filter-registered-label": "Label for the filter for showing edits made by logged-in users.\n{{Identical|Registered}}",
"rcfilters-filter-registered-description": "Description for the filter for showing edits made by logged-in users.",
"trackingcategories-msg": "Sledovacia kategória",
"trackingcategories-name": "Názov správy",
"trackingcategories-desc": "Kritériá pre zaradenie do kategórie",
+ "restricted-displaytitle-ignored": "Stránky s ignorovanými zobrazovanými názvami",
"noindex-category-desc": "Stránka nie je indexovaná robotmi, pretože obsahuje magické slovo <code><nowiki>__NOINDEX__</nowiki></code> a je v mennom priestore, v ktorom je tento príznak povolený.",
"index-category-desc": "Stránka obsahuje magické slovo <code><nowiki>__INDEX__</nowiki></code> (a je v mennom prostore, v ktorom je tento príznak povolený), takže je indexovaná robotmi, hoci by normálne nebola.",
"post-expand-template-inclusion-category-desc": "Stránka je po rozbalení všetkých šablón väčšia než <code>$wgMaxArticleSize</code>, takže niektoré šablóny nemohli byť rozbalené.",
"page_last": "sista",
"histlegend": "Val av diff: markera i klickrutorna för att jämföra versioner och tryck enter eller knappen längst ner.<br />\nFörklaring: '''({{int:cur}})''' = skillnad mot senaste version; '''({{int:last}})''' = skillnad mot föregående version; '''{{int:minoreditletter}}''' = mindre ändring.",
"history-fieldset-title": "Bläddra i historiken",
- "history-show-deleted": "Endast borttagna",
+ "history-show-deleted": "Endast raderade sidversioner",
"histfirst": "äldsta",
"histlast": "nyaste",
"historysize": "({{PLURAL:$1|1 byte|$1 byte}})",
"prefs-help-prefershttps": "Ändringar av denna inställning börjar gälla nästa gång du loggar in",
"prefswarning-warning": "Du har gjort ändringar i dina inställningarna som inte har sparats ännu.\nOm du lämnar denna sida utan att klicka på \"$1\" kommer dina inställningar inte att uppdateras.",
"prefs-tabs-navigation-hint": "Tips: Du kan använda vänster och höger piltangenterna för att navigera mellan flikarna i listan flikar.",
- "userrights": "Hantering av användarrättigheter",
+ "userrights": "Användarrättigheter",
"userrights-lookup-user": "Välj en användare",
"userrights-user-editname": "Skriv in ett användarnamn:",
"editusergroup": "Läs in användargrupper",
"rcfilters-filterlist-feedbacklink": "Ge återkoppling på nya (beta)filter",
"rcfilters-highlightbutton-title": "Markera resultat",
"rcfilters-highlightmenu-title": "Välj en färg",
+ "rcfilters-highlightmenu-help": "Välj en färg att markera denna egenskap",
"rcfilters-filterlist-noresults": "Inga filter hittades",
"rcfilters-filtergroup-registration": "Användarregistrering",
"rcfilters-filter-registered-label": "Registrerade",
"rcfilters-filter-registered-description": "Inloggade redigerare.",
"rcfilters-filter-unregistered-label": "Oregistrerade",
"rcfilters-filter-unregistered-description": "Redigerare som inte är inloggade.",
+ "rcfilters-filter-unregistered-conflicts-user-experience-level": "Filtret \"Oregistrerade\" är inaktivt eftersom dess effekt slås ut av följande {{PLURAL:$2|upplevelsefilter}}, som endast {{PLURAL:$2|hittade}} registrerade användare: $1",
"rcfilters-filtergroup-authorship": "Redigera författarskap",
"rcfilters-filter-editsbyself-label": "Dina egna redigeringar",
"rcfilters-filter-editsbyself-description": "Redigeringar av dig.",
"rcfilters-filter-editsbyother-label": "Redigeringar av andra",
"rcfilters-filter-editsbyother-description": "Redigeringar som har skapats av andra användare (inte dig).",
"rcfilters-filtergroup-userExpLevel": "Erfarenhetsnivå (endast för registrerade användare)",
- "rcfilters-filter-userExpLevel-newcomer-label": "Nykomlingar",
- "rcfilters-filter-userExpLevel-newcomer-description": "Färre än 10 redigeringar och 4 dagars aktivitet.",
- "rcfilters-filter-userExpLevel-learner-label": "Nybörjare",
- "rcfilters-filter-userExpLevel-learner-description": "Fler dagars aktivitet och redigeringar än \"Nybörjare\" men färre än \"Erfarna användare\".",
- "rcfilters-filter-userExpLevel-experienced-label": "Erfarna användare",
- "rcfilters-filter-userExpLevel-experienced-description": "Fler än 30 dagars aktivitet och 500 redigeringar.",
+ "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "Detta filter är inaktivt eftersom den endast hittar registrerade användare, så filtret \"Oregistrerade\" slår ut dess effekt.",
+ "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "Filtret \"Oregistrerade\" är i konflikt med en eller flera upplevelsefilter. Upplevelsefilter hittar endast registrerade användare. Filtren som är i konflikt är markerade som inaktiv ovan.",
+ "rcfilters-filter-user-experience-level-newcomer-label": "Nykomlingar",
+ "rcfilters-filter-user-experience-level-newcomer-description": "Färre än 10 redigeringar och 4 dagars aktivitet.",
+ "rcfilters-filter-user-experience-level-learner-label": "Nybörjare",
+ "rcfilters-filter-user-experience-level-learner-description": "Fler dagars aktivitet och redigeringar än \"Nybörjare\" men färre än \"Erfarna användare\".",
+ "rcfilters-filter-user-experience-level-experienced-label": "Erfarna användare",
+ "rcfilters-filter-user-experience-level-experienced-description": "Fler än 30 dagars aktivitet och 500 redigeringar.",
"rcfilters-filtergroup-automated": "Automatiserade bidrag",
"rcfilters-filter-bots-label": "Bot",
"rcfilters-filter-bots-description": "Redigeringar gjorda av automatiserade verktyg.",
"rcfilters-filter-humans-label": "Människa (inte bot)",
"rcfilters-filter-humans-description": "Redigeringar gjorda av mänskliga redigerare.",
+ "rcfilters-filtergroup-reviewstatus": "Granskningsstatus",
+ "rcfilters-filter-patrolled-label": "Patrullerade",
+ "rcfilters-filter-patrolled-description": "Redigeringar markerade som patrullerade.",
+ "rcfilters-filter-unpatrolled-label": "Inte patrullerade",
+ "rcfilters-filter-unpatrolled-description": "Redigeringar som inte är markerade som patrullerade.",
"rcfilters-filtergroup-significance": "Betydelse",
"rcfilters-filter-minor-label": "Mindre redigeringar",
"rcfilters-filter-minor-description": "Redigeringar som är märkta som mindre.",
"password-change-forbidden": "ಈರ್ ಈ ವಿಕಿಡ್ ಪ್ರರವೇಸ ಪದೊನು ಬದಲ್ಪೆರೆ ಸಾದ್ಯೊ ಇದ್ದಿ.",
"login": "ಲಾಗಿನ್ ಆಲೆ",
"nav-login-createaccount": "ಲಾಗ್-ಇನ್ / ಅಕೌಂಟ್ ಸೃಷ್ಟಿ ಮಲ್ಪುಲೆ",
- "userlogin": "ಲಾಗ್-ಇನ್ / ಅಕೌಂಟ್ ಸೃಷ್ಟಿ ಮಲ್ಪುಲೆ",
- "userloginnocreate": "ಲಾಗಿನ್ ಆಲೆ",
"logout": "ಲಾಗ್ ಔಟ್",
"userlogout": "ಲಾಗ್ ಔಟ್",
"notloggedin": "ಲಾಗಿನ್ ಆತ್‘ಜ್ಜರ್",
"userlogin-noaccount": "ಕಾತೆ ಇದ್ದಿಯಾ?",
"userlogin-joinproject": "{{SITENAME}}ಗ್ ಸೇರ್ಲೆ",
- "nologin": "ಈರೆನ ಖಾತೆ ಇಜ್ಜೇ?'''$1'''",
- "nologinlink": "ಪೊಸ ಖಾತೆ ಸುರು ಮಲ್ಪುಲೆ",
"createaccount": "ಪೊಸ ಅಕ್ಕೌಂಟ್ ಸುರು ಮಲ್ಪುಲೆ",
- "gotaccount": "ಈರೆನ ಖಾತೆ ಉಂಡೇ?'''$1'''",
- "gotaccountlink": "ಲಾಗಿನ್ ಆಲೆ",
- "userlogin-resetlink": "ಈರೆನ ಲಾಗಿನ್ ವಿವರ ಮರತ್ತ್ಂಡೇ?",
"userlogin-resetpassword-link": "ಈರೆನೆ ಪ್ರವೇಸೊ ಪದೊ ಮರತ್ತ್ಂಡಾ?",
"userlogin-helplink2": "ಲಾಗಿನ್ ಆಯರ ಸಹಾಯೊ",
"userlogin-createanother": "ಪೊಸ ಕಾತೆ ಸುರು ಮಲ್ಪುಲೆ",
"createacct-another-email-ph": "ಇ-ಅಂಚೆ ವಿಳಾಸೊನು ಬದಲಾವಣೆ ಮಲ್ಪುಲೆ",
"createaccountmail": "(ರಾಂಡಮ್) ತಾತ್ಕಾಲಿಕವಾದ್ ಯಾದೃಚ್ಛಿಕ ಪಾಸ್ವರ್ಡ್ ಆಯ್ಕೆ ಮಾಲ್ಪುಲೆ ಬುಕ್ಕೊ ಇಮೇಲ್ ವಿಳಾಸೊನು ಸೂಚಿಸದ್ : ಕಡಪುಡುಲೆ",
"createacct-realname": "ನಿಜವಾಯಿನ ಪುದರ್(ಐಚ್ಛಿಕೊ)",
- "createaccountreason": "ಕಾರಣ",
"createacct-reason": "ಕಾರಣೊ",
"createacct-reason-ph": "ಈರ್ ದಾಯೆ ನಾನಲ ಒಂಜಿ ಕಾತೆ ದೆತ್ತೊಂದುಲ್ಲರ್?",
"createacct-submit": "ಪೊಸ ಕಾತೆ ಸುರು ಮಲ್ಪುಲೆ",
"recentchanges-legend-heading": "<strong>ಲೆಜೆಂಡ್:</strong>",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ಬೊಕ್ಕೊಲಾ ತೂಲೆ [[Special:NewPages|ಪೊಸ ಪುಟೊದ ಪಟ್ಟಿ]])",
"recentchanges-submit": "ತೋಜಾಲೆ",
- "rcfilters-filter-userExpLevel-learner-label": "ಕಲ್ಪುನರ್",
+ "rcfilters-filter-user-experience-level-learner-label": "ಕಲ್ಪುನರ್",
"rclistfrom": "$3 $2 ರ್ದ್ ಸುರುವಾತಿನ ಪೊಸ ಬದಲಾವಣೆಲೆನ್ ತೊಜ್ಪಾವು",
"rcshowhideminor": "$1 ಎಲ್ಯೆಲ್ಯ ಬದಲಾವಣೆಲು",
"rcshowhideminor-show": "ತೋಜಾಲೆ",
"colon-separator": ":",
"pipe-separator": " | ",
"word-separator": "",
+ "ellipsis": "…",
"parentheses": "($1)",
"quotation-marks": "“$1”",
"imgmultipageprev": "← 上一页",
"Winstonyin",
"Wmr",
"烈羽",
- "和平奮鬥救地球"
+ "和平奮鬥救地球",
+ "Arthur2e5"
]
},
"tog-underline": "底線標示連結:",
"comma-separator": ",",
"colon-separator": ":",
"word-separator": "",
+ "ellipsis": "…",
"parentheses": " ($1)",
"quotation-marks": "\"$1\"",
"imgmultipageprev": "← 上一頁",
'targets' => [ 'mobile', 'desktop' ],
],
'jquery.appear' => [
- 'deprecated' => [
- 'message' => 'Please use "mediawiki.viewport" instead.',
- ],
+ 'deprecated' => 'Please use "mediawiki.viewport" instead.',
'scripts' => 'resources/lib/jquery/jquery.appear.js',
],
- 'jquery.arrowSteps' => [
- 'deprecated' => true,
- 'scripts' => 'resources/src/jquery/jquery.arrowSteps.js',
- 'styles' => 'resources/src/jquery/jquery.arrowSteps.css',
- 'targets' => [ 'desktop', 'mobile' ],
- ],
'jquery.async' => [
'scripts' => 'resources/lib/jquery/jquery.async.js',
],
'jquery.autoEllipsis' => [
+ 'deprecated' => 'Use CSS text-overflow instead.',
'scripts' => 'resources/src/jquery/jquery.autoEllipsis.js',
'dependencies' => 'jquery.highlightText',
'targets' => [ 'desktop', 'mobile' ],
'targets' => [ 'desktop', 'mobile' ],
],
'jquery.jStorage' => [
- 'deprecated' => [
- 'message' => 'Please use "mediawiki.storage" instead.',
- ],
+ 'deprecated' => 'Please use "mediawiki.storage" instead.',
'scripts' => 'resources/lib/jquery/jquery.jStorage.js',
],
'jquery.suggestions' => [
/* jQuery UI */
'jquery.ui.core' => [
- 'deprecated' => [
- 'message' => 'Please use "mediawiki.ui.button" or "oojs-ui" instead.',
- ],
+ 'deprecated' => 'Please use "mediawiki.ui.button" or "oojs-ui" instead.',
'scripts' => 'resources/lib/jquery.ui/jquery.ui.core.js',
'dependencies' => [
'jquery.ui.core.styles',
'rcfilters-filterlist-title',
'rcfilters-filterlist-feedbacklink',
'rcfilters-filterlist-noresults',
+ 'rcfilters-filterlist-whatsthis',
'rcfilters-highlightbutton-title',
'rcfilters-highlightmenu-title',
'rcfilters-highlightmenu-help',
+ 'rcfilters-noresults-conflict',
+ 'rcfilters-state-message-subset',
+ 'rcfilters-state-message-fullcoverage',
'recentchanges-noresult',
+ 'quotation-marks',
],
'dependencies' => [
'oojs-ui',
+ 'mediawiki.language',
'mediawiki.rcfilters.filters.dm',
'oojs-ui.styles.icons-moderation',
'oojs-ui.styles.icons-editing-core',
+++ /dev/null
-.arrowSteps {
- list-style-type: none;
- list-style-image: none;
- border: 1px solid #666;
- position: relative;
-}
-
-.arrowSteps li {
- float: left;
- padding: 0;
- margin: 0;
- border: 0;
-}
-
-.arrowSteps li div {
- padding: 0.5em;
- text-align: center;
- white-space: nowrap;
- overflow: hidden;
-}
-
-.arrowSteps li.arrow div {
- /* @embed */
- background: url( images/jquery.arrowSteps.divider-ltr.png ) no-repeat right center;
-}
-
-/* applied to the element preceding the highlighted step */
-.arrowSteps li.arrow.tail div {
- /* @embed */
- background: url( images/jquery.arrowSteps.tail-ltr.png ) no-repeat right center;
-}
-
-/* this applies to all highlighted, including the last */
-.arrowSteps li.head div {
- /* @embed */
- background: url( images/jquery.arrowSteps.head-ltr.png ) no-repeat left center;
- font-weight: bold;
-}
-
-/* this applies to all highlighted arrows except the last */
-.arrowSteps li.arrow.head div {
- /* TODO: eliminate duplication of jquery.arrowSteps.head.png embedding */
- /* @embed */
- background: url( images/jquery.arrowSteps.head-ltr.png ) no-repeat right center;
-}
+++ /dev/null
-/*!
- * jQuery arrowSteps plugin
- * Copyright Neil Kandalgaonkar, 2010
- *
- * This work is licensed under the terms of the GNU General Public License,
- * version 2 or later.
- * (see http://www.fsf.org/licensing/licenses/gpl.html).
- * Derivative works and later versions of the code must be free software
- * licensed under the same or a compatible license.
- */
-
-/**
- * @class jQuery.plugin.arrowSteps
- */
-( function ( $ ) {
- /**
- * Show users their progress through a series of steps, via a row of items that fit
- * together like arrows. One item can be highlighted at a time.
- *
- * <ul id="robin-hood-daffy">
- * <li id="guard"><div>Guard!</div></li>
- * <li id="turn"><div>Turn!</div></li>
- * <li id="parry"><div>Parry!</div></li>
- * <li id="dodge"><div>Dodge!</div></li>
- * <li id="spin"><div>Spin!</div></li>
- * <li id="ha"><div>Ha!</div></li>
- * <li id="thrust"><div>Thrust!</div></li>
- * </ul>
- *
- * <script>
- * $( '#robin-hood-daffy' ).arrowSteps();
- * </script>
- *
- * @return {jQuery}
- * @chainable
- */
- $.fn.arrowSteps = function () {
- var $steps, width, arrowWidth, $stepDiv,
- $el = this,
- paddingSide = $( 'body' ).hasClass( 'rtl' ) ? 'padding-left' : 'padding-right';
-
- $el.addClass( 'arrowSteps' );
- $steps = $el.find( 'li' );
-
- width = parseInt( 100 / $steps.length, 10 );
- $steps.css( 'width', width + '%' );
-
- // Every step except the last one has an arrow pointing forward:
- // at the right hand side in LTR languages, and at the left hand side in RTL.
- // Also add in the padding for the calculated arrow width.
- $stepDiv = $steps.filter( ':not(:last-child)' ).addClass( 'arrow' ).find( 'div' );
-
- // Execute when complete page is fully loaded, including all frames, objects and images
- $( window ).on( 'load', function () {
- arrowWidth = parseInt( $el.outerHeight(), 10 );
- $stepDiv.css( paddingSide, arrowWidth.toString() + 'px' );
- } );
-
- $el.data( 'arrowSteps', $steps );
-
- return this;
- };
-
- /**
- * Highlights the element selected by the selector.
- *
- * $( '#robin-hood-daffy' ).arrowStepsHighlight( '#guard' );
- * // 'Guard!' is highlighted.
- *
- * // ... user completes the 'guard' step ...
- *
- * $( '#robin-hood-daffy' ).arrowStepsHighlight( '#turn' );
- * // 'Turn!' is highlighted.
- *
- * @param {string} selector
- */
- $.fn.arrowStepsHighlight = function ( selector ) {
- var $previous,
- $steps = this.data( 'arrowSteps' );
- $.each( $steps, function ( i, step ) {
- var $step = $( step );
- if ( $step.is( selector ) ) {
- if ( $previous ) {
- $previous.addClass( 'tail' );
- }
- $step.addClass( 'head' );
- } else {
- $step.removeClass( 'head tail lasthead' );
- }
- $previous = $step;
- } );
- };
-
- /**
- * @class jQuery
- * @mixins jQuery.plugin.arrowSteps
- */
-}( jQuery ) );
* @cfg {boolean} [active] Group is active
* @cfg {boolean} [fullCoverage] This filters in this group collectively cover all results
* @cfg {Object} [conflicts] Defines the conflicts for this filter group
+ * @cfg {Object} [whatsThis] Defines the messages that should appear for the 'what's this' popup
+ * @cfg {string} [whatsThis.header] The header of the whatsThis popup message
+ * @cfg {string} [whatsThis.body] The body of the whatsThis popup message
+ * @cfg {string} [whatsThis.url] The url for the link in the whatsThis popup message
+ * @cfg {string} [whatsThis.linkMessage] The text for the link in the whatsThis popup message
*/
mw.rcfilters.dm.FilterGroup = function MwRcfiltersDmFilterGroup( name, config ) {
config = config || {};
this.active = !!config.active;
this.fullCoverage = !!config.fullCoverage;
+ this.whatsThis = config.whatsThis || {};
+
this.conflicts = config.conflicts || {};
this.aggregate( { update: 'filterItemUpdate' } );
return this.name;
};
+ /**
+ * Get the messags defining the 'whats this' popup for this group
+ *
+ * @return {Object} What's this messages
+ */
+ mw.rcfilters.dm.FilterGroup.prototype.getWhatsThis = function () {
+ return this.whatsThis;
+ };
+
+ /**
+ * Check whether this group has a 'what's this' message
+ *
+ * @return {boolean} This group has a what's this message
+ */
+ mw.rcfilters.dm.FilterGroup.prototype.hasWhatsThis = function () {
+ return !!this.whatsThis.body;
+ };
+
/**
* Get the conflicts associated with the entire group.
* Conflict object is set up by filter name keys and conflict
return this.param;
};
+ /**
+ * Get the message for the display area for the currently active conflict
+ *
+ * @return {string} Conflict result message key
+ */
+ mw.rcfilters.dm.FilterItem.prototype.getCurrentConflictResultMessage = function () {
+ var details = {};
+
+ // First look in filter's own conflicts
+ details = this.getConflictDetails( this.getOwnConflicts(), 'globalDescription' );
+ if ( !details.message ) {
+ // Fall back onto conflicts in the group
+ details = this.getConflictDetails( this.getGroupModel().getConflicts(), 'globalDescription' );
+ }
+
+ return details.message;
+ };
+
+ /**
+ * Get the details of the active conflict on this filter
+ *
+ * @param {Object} conflicts Conflicts to examine
+ * @param {string} [key='contextDescription'] Message key
+ * @return {Object} Object with conflict message and conflict items
+ * @return {string} return.message Conflict message
+ * @return {string[]} return.names Conflicting item labels
+ */
+ mw.rcfilters.dm.FilterItem.prototype.getConflictDetails = function ( conflicts, key ) {
+ var group,
+ conflictMessage = '',
+ itemLabels = [];
+
+ key = key || 'contextDescription';
+
+ $.each( conflicts, function ( filterName, conflict ) {
+ if ( !conflict.item.isSelected() ) {
+ return;
+ }
+
+ if ( !conflictMessage ) {
+ conflictMessage = conflict[ key ];
+ group = conflict.group;
+ }
+
+ if ( group === conflict.group ) {
+ itemLabels.push( mw.msg( 'quotation-marks', conflict.item.getLabel() ) );
+ }
+ } );
+
+ return {
+ message: conflictMessage,
+ names: itemLabels
+ };
+
+ };
+
+ /**
+ * Get the message representing the state of this model.
+ *
+ * @return {string} State message
+ */
+ mw.rcfilters.dm.FilterItem.prototype.getStateMessage = function () {
+ var messageKey, details, superset,
+ affectingItems = [];
+
+ if ( this.isConflicted() ) {
+ // First look in filter's own conflicts
+ details = this.getConflictDetails( this.getOwnConflicts() );
+ if ( !details.message ) {
+ // Fall back onto conflicts in the group
+ details = this.getConflictDetails( this.getGroupModel().getConflicts() );
+ }
+
+ messageKey = details.message;
+ affectingItems = details.names;
+ } else if ( this.isIncluded() ) {
+ superset = this.getSuperset();
+ // For this message we need to collect the affecting superset
+ affectingItems = this.getGroupModel().getSelectedItems( this )
+ .filter( function ( item ) {
+ return superset.indexOf( item.getName() ) !== -1;
+ } )
+ .map( function ( item ) {
+ return mw.msg( 'quotation-marks', item.getLabel() );
+ } );
+
+ messageKey = 'rcfilters-state-message-subset';
+ } else if ( this.isFullyCovered() ) {
+ affectingItems = this.getGroupModel().getSelectedItems( this )
+ .map( function ( item ) {
+ return mw.msg( 'quotation-marks', item.getLabel() );
+ } );
+
+ messageKey = 'rcfilters-state-message-fullcoverage';
+ }
+
+ if ( messageKey ) {
+ // Build message
+ return mw.msg(
+ messageKey,
+ mw.language.listToText( affectingItems ),
+ affectingItems.length
+ );
+ }
+
+ // Display description
+ return this.getDescription();
+ };
+
/**
* Get the model of the group this filter belongs to
*
};
/**
- * Get filter conflicts
+ * Get all conflicts associated with this filter or its group
*
* Conflict object is set up by filter name keys and conflict
* definition. For example:
* {
* filterName: {
* filter: filterName,
- * group: group1
+ * group: group1,
+ * label: itemLabel,
+ * item: itemModel
* }
* filterName2: {
* filter: filterName2,
* group: group2
+ * label: itemLabel2,
+ * item: itemModel2
* }
* }
*
return $.extend( {}, this.conflicts, this.getGroupModel().getConflicts() );
};
+ /**
+ * Get the conflicts associated with this filter
+ *
+ * @return {Object} Filter conflicts
+ */
+ mw.rcfilters.dm.FilterItem.prototype.getOwnConflicts = function () {
+ return this.conflicts;
+ };
+
/**
* Set conflicts for this filter. See #getConflicts for the expected
* structure of the definition.
} );
};
+ /**
+ * Get whether the model has any conflict in its items
+ *
+ * @return {boolean} There is a conflict
+ */
+ mw.rcfilters.dm.FiltersViewModel.prototype.hasConflict = function () {
+ return this.getItems().some( function ( filterItem ) {
+ return filterItem.isSelected() && filterItem.isConflicted();
+ } );
+ };
+
+ /**
+ * Get the first item with a current conflict
+ *
+ * @return {mw.rcfilters.dm.FilterItem} Conflicted item
+ */
+ mw.rcfilters.dm.FiltersViewModel.prototype.getFirstConflictedItem = function () {
+ var conflictedItem;
+
+ $.each( this.getItems(), function ( index, filterItem ) {
+ if ( filterItem.isSelected() && filterItem.isConflicted() ) {
+ conflictedItem = filterItem;
+ return false;
+ }
+ } );
+
+ return conflictedItem;
+ };
+
/**
* Set filters and preserve a group relationship based on
* the definition given by an object
adjustedConflicts = {};
conflicts.forEach( function ( conflict ) {
+ var filter;
+
if ( conflict.filter ) {
filterName = model.groups[ conflict.group ].getNamePrefix() + conflict.filter;
+ filter = model.getItemByName( filterName );
// Rename
adjustedConflicts[ filterName ] = $.extend(
{},
conflict,
- { filter: filterName }
+ {
+ filter: filterName,
+ item: filter
+ }
);
} else {
// This conflict is for an entire group. Split it up to
adjustedConflicts[ groupItem.getName() ] = $.extend(
{},
conflict,
- { filter: groupItem.getName() }
+ {
+ filter: groupItem.getName(),
+ item: groupItem
+ }
);
} );
}
type: data.type,
title: mw.msg( data.title ),
separator: data.separator,
- fullCoverage: !!data.fullCoverage
+ fullCoverage: !!data.fullCoverage,
+ whatsThis: {
+ body: data.whatsThisBody,
+ header: data.whatsThisHeader,
+ linkText: data.whatsThisLinkText,
+ url: data.whatsThisUrl
+ }
} );
}
}
} );
+ // Add items to the model
+ this.addItems( items );
+
// Expand conflicts
groupConflictResult = expandConflictDefinitions( groupConflictMap );
filterConflictResult = expandConflictDefinitions( filterConflictMap );
}
} );
- // Add items to the model
- this.addItems( items );
-
this.emit( 'initialize' );
};
* @param {Array} filterStructure Filter definition and structure for the model
*/
mw.rcfilters.Controller.prototype.initialize = function ( filterStructure ) {
+ var $changesList = $( '.mw-changeslist' ).first().contents();
// Initialize the model
this.filtersModel.initializeFilters( filterStructure );
this.updateStateBasedOnUrl();
+
+ // Update the changes list with the existing data
+ // so it gets processed
+ this.changesListModel.update(
+ $changesList.length ? $changesList : 'NO_RESULTS',
+ $( 'fieldset.rcoptions' ).first()
+ );
+
};
/**
.mw-rcfilters-ui-capsuleItemWidget {
background-color: #fff;
border-color: #979797;
- margin: 0 0.6em 0 0;
color: #222;
// Background and color of the capsule widget need a bit
@import 'mw.rcfilters.mixins';
.mw-rcfilters-ui-changesListWrapperWidget {
+ &-results {
+ width: 35em;
+ margin: 5em auto;
+ &-conflict {
+ font-weight: bold;
+ margin-bottom: 0.5em;
+ }
+ }
+
&-highlighted {
ul {
list-style: none;
.mw-rcfilters-ui-filterGroupWidget {
padding-bottom: 0.5em;
- &-title {
- // TODO: Unify colors with official design palette
+ &-header {
background: #eaecf0;
padding: 0.5em 0.75em;
- color: #555a5d;
- .box-sizing( border-box );
+
+ &-title {
+ // TODO: Unify colors with official design palette
+ color: #555a5d;
+ .box-sizing( border-box );
+ display: inline-block;
+ }
+ }
+
+ &-whatsThisButton {
+ display: inline-block;
+ margin-left: 1.5em;
+
+ &.oo-ui-buttonElement {
+ vertical-align: text-bottom;
+
+ & > .oo-ui-buttonElement-button {
+ font-weight: normal;
+ }
+ }
+
+ &-popup-content {
+ padding: 1em;
+
+ &-header {
+ font-weight: bold;
+ margin-bottom: 1em;
+ }
+
+ &-link {
+ margin: 1em 0;
+
+ }
+
+ .oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ margin-left: 0;
+ }
+ }
}
&-active {
- .mw-rcfilters-ui-filterGroupWidget-title {
+ .mw-rcfilters-ui-filterGroupWidget-header-title {
font-weight: bold;
}
}
direction: ltr;
&-popup {
- // We have to override OOUI's definition, which is set
- // on the inline style of the popup
- margin-top: 2em !important; /* stylelint-disable-line declaration-no-important */
+ margin-top: 1px;
max-width: 650px;
.oo-ui-popupWidget-body {
* @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
*/
mw.rcfilters.ui.CapsuleItemWidget = function MwRcfiltersUiCapsuleItemWidget( controller, model, config ) {
- var $popupContent = $( '<div>' )
- .addClass( 'mw-rcfilters-ui-capsuleItemWidget-popup-content' ),
- descLabelWidget = new OO.ui.LabelWidget();
-
// Configuration initialization
config = config || {};
this.controller = controller;
this.model = model;
+ this.popupLabel = new OO.ui.LabelWidget();
this.$overlay = config.$overlay || this.$element;
this.positioned = false;
this.popupTimeoutShow = null;
padded: false,
align: 'center',
position: 'above',
- $content: $popupContent
- .append( descLabelWidget.$element ),
+ $content: $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-capsuleItemWidget-popup-content' )
+ .append( this.popupLabel.$element ),
$floatableContainer: this.$element,
classes: [ 'mw-rcfilters-ui-capsuleItemWidget-popup' ]
}
}, config ) );
- // Set initial text for the popup - the description
- descLabelWidget.setLabel( this.model.getDescription() );
-
this.$highlight = $( '<div>' )
.addClass( 'mw-rcfilters-ui-capsuleItemWidget-highlight' );
* Respond to mouse enter event
*/
mw.rcfilters.ui.CapsuleItemWidget.prototype.onMouseEnter = function () {
- if ( this.model.getDescription() ) {
+ var labelText = this.model.getStateMessage();
+
+ if ( labelText ) {
+ this.popupLabel.setLabel( labelText );
+
if ( !this.positioned ) {
// Recalculate anchor position to be center of the capsule item
this.popup.$anchor.css( 'margin-left', ( this.$element.width() / 2 ) );
* @param {jQuery|string} $changesListContent The content of the updated changes list
*/
mw.rcfilters.ui.ChangesListWrapperWidget.prototype.onModelUpdate = function ( $changesListContent ) {
- var isEmpty = $changesListContent === 'NO_RESULTS';
+ var conflictItem,
+ $message = $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-changesListWrapperWidget-results' ),
+ isEmpty = $changesListContent === 'NO_RESULTS';
this.$element.toggleClass( 'mw-changeslist', !isEmpty );
this.$element.toggleClass( 'mw-changeslist-empty', isEmpty );
if ( isEmpty ) {
this.$changesListContent = null;
- this.$element.empty().append(
- document.createTextNode( mw.message( 'recentchanges-noresult' ).text() )
- );
+ this.$element.empty();
+
+ if ( this.filtersViewModel.hasConflict() ) {
+ conflictItem = this.filtersViewModel.getFirstConflictedItem();
+
+ $message
+ .append(
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-changesListWrapperWidget-results-conflict' )
+ .text( mw.message( 'rcfilters-noresults-conflict' ).text() ),
+ $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-changesListWrapperWidget-results-message' )
+ .text( mw.message( conflictItem.getCurrentConflictResultMessage() ).text() )
+ );
+ } else {
+ $message
+ .append(
+ $( '<div>' )
+ .text( mw.message( 'recentchanges-noresult' ).text() )
+ );
+ }
+
+ this.$element.append( $message );
} else {
this.$changesListContent = $changesListContent;
this.$element.empty().append( this.$changesListContent );
// Parent
mw.rcfilters.ui.FilterCapsuleMultiselectWidget.parent.call( this, $.extend( true, {
- popup: { $autoCloseIgnore: filterInput.$element.add( this.$overlay ) }
+ popup: {
+ $autoCloseIgnore: filterInput.$element.add( this.$overlay ),
+ $floatableContainer: filterInput.$element
+ }
}, config ) );
this.controller = controller;
* @param {mw.rcfilters.Controller} controller Controller
* @param {mw.rcfilters.dm.FilterGroup} model Filter group model
* @param {Object} config Configuration object
+ * @cfg {jQuery} [$overlay] Overlay
*/
mw.rcfilters.ui.FilterGroupWidget = function MwRcfiltersUiFilterGroupWidget( controller, model, config ) {
+ var whatsThisMessages,
+ $header = $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-filterGroupWidget-header' ),
+ $popupContent = $( '<div>' )
+ .addClass( 'mw-rcfilters-ui-filterGroupWidget-whatsThisButton-popup-content' );
+
config = config || {};
// Parent
this.controller = controller;
this.model = model;
this.filters = {};
+ this.$overlay = config.$overlay || this.$element;
// Mixin constructors
OO.ui.mixin.GroupWidget.call( this, config );
OO.ui.mixin.LabelElement.call( this, $.extend( {}, config, {
label: this.model.getTitle(),
$label: $( '<div>' )
- .addClass( 'mw-rcfilters-ui-filterGroupWidget-title' )
+ .addClass( 'mw-rcfilters-ui-filterGroupWidget-header-title' )
} ) );
- this.$overlay = config.$overlay || this.$element;
+
+ $header.append( this.$label );
+
+ if ( this.model.hasWhatsThis() ) {
+ whatsThisMessages = this.model.getWhatsThis();
+
+ // Create popup
+ if ( whatsThisMessages.header ) {
+ $popupContent.append(
+ ( new OO.ui.LabelWidget( {
+ label: mw.msg( whatsThisMessages.header ),
+ classes: [ 'mw-rcfilters-ui-filterGroupWidget-whatsThisButton-popup-content-header' ]
+ } ) ).$element
+ );
+ }
+ if ( whatsThisMessages.body ) {
+ $popupContent.append(
+ ( new OO.ui.LabelWidget( {
+ label: mw.msg( whatsThisMessages.body ),
+ classes: [ 'mw-rcfilters-ui-filterGroupWidget-whatsThisButton-popup-content-body' ]
+ } ) ).$element
+ );
+ }
+ if ( whatsThisMessages.linkText && whatsThisMessages.url ) {
+ $popupContent.append(
+ ( new OO.ui.ButtonWidget( {
+ framed: false,
+ flags: [ 'progressive' ],
+ href: whatsThisMessages.url,
+ label: mw.msg( whatsThisMessages.linkText ),
+ classes: [ 'mw-rcfilters-ui-filterGroupWidget-whatsThisButton-popup-content-link' ]
+ } ) ).$element
+ );
+ }
+
+ // Add button
+ this.whatsThisButton = new OO.ui.PopupButtonWidget( {
+ framed: false,
+ label: mw.msg( 'rcfilters-filterlist-whatsthis' ),
+ $overlay: this.$overlay,
+ classes: [ 'mw-rcfilters-ui-filterGroupWidget-whatsThisButton' ],
+ flags: [ 'progressive' ],
+ popup: {
+ padded: false,
+ align: 'center',
+ position: 'above',
+ $content: $popupContent,
+ classes: [ 'mw-rcfilters-ui-filterGroupWidget-whatsThisButton-popup' ]
+ }
+ } );
+
+ $header
+ .append( this.whatsThisButton.$element );
+ }
// Populate
this.populateFromModel();
.addClass( 'mw-rcfilters-ui-filterGroupWidget' )
.addClass( 'mw-rcfilters-ui-filterGroupWidget-name-' + this.model.getName() )
.append(
- this.$label,
+ $header,
this.$group
.addClass( 'mw-rcfilters-ui-filterGroupWidget-group' )
);
'deprecated' => true,
],
'deprecatedTomorrow' => $base + [
- 'deprecated' => [
- 'message' => 'Will be removed tomorrow.'
- ],
+ 'deprecated' => 'Will be removed tomorrow.'
],
'htmlTemplateModule' => $base + [
/**
* @dataProvider providerGetStyleDeclarations
- * @covers ResourceLoaderContext::getStyleDeclarations
+ * @covers ResourceLoaderImageModule::getStyleDeclarations
*/
public function testGetStyleDeclarations( $dataUriReturnValue, $expected ) {
$module = TestingAccessWrapper::newFromObject( new ResourceLoaderImageModule() );
* @covers SpecialWatchlist
*/
class SpecialWatchlistTest extends SpecialPageTestBase {
+ public function setUp() {
+ parent::setUp();
+
+ $this->setTemporaryHook(
+ 'ChangesListSpecialPageFilters',
+ null
+ );
+
+ $this->setTemporaryHook(
+ 'SpecialWatchlistQuery',
+ null
+ );
+
+ $this->setTemporaryHook(
+ 'ChangesListSpecialPageQuery',
+ null
+ );
+
+ $this->setMwGlobals(
+ 'wgDefaultUserOptions',
+ [
+ 'extendwatchlist' => 1,
+ 'watchlistdays' => 3.0,
+ 'watchlisthideanons' => 0,
+ 'watchlisthidebots' => 0,
+ 'watchlisthideliu' => 0,
+ 'watchlisthideminor' => 0,
+ 'watchlisthideown' => 0,
+ 'watchlisthidepatrolled' => 0,
+ 'watchlisthidecategorization' => 1,
+ 'watchlistreloadautomatically' => 0,
+ ]
+ );
+
+ }
/**
* Returns a new instance of the special page under test.
$this->assertContains( '(nowatchlist)', $html );
}
+ /**
+ * @dataProvider provideFetchOptionsFromRequest
+ */
+ public function testFetchOptionsFromRequest( $expectedValues, $preferences, $inputParams ) {
+ $page = TestingAccessWrapper::newFromObject(
+ $this->newSpecialPage()
+ );
+
+ $context = new DerivativeContext( $page->getContext() );
+
+ $fauxRequest = new FauxRequest( $inputParams, /* $wasPosted= */ false );
+ $user = $this->getTestUser()->getUser();
+
+ foreach ( $preferences as $key => $value ) {
+ $user->setOption( $key, $value );
+ }
+
+ $context->setRequest( $fauxRequest );
+ $context->setUser( $user );
+ $page->setContext( $context );
+
+ $page->registerFilters();
+ $formOptions = $page->getDefaultOptions();
+ $page->fetchOptionsFromRequest( $formOptions );
+
+ $this->assertArrayEquals(
+ $expectedValues,
+ $formOptions->getAllValues(),
+ /* $ordered= */ false,
+ /* $named= */ true
+ );
+ }
+
+ public function provideFetchOptionsFromRequest() {
+ // $defaults and $allFalse are just to make the expected values below
+ // shorter by hiding the background.
+
+ $page = TestingAccessWrapper::newFromObject(
+ $this->newSpecialPage()
+ );
+
+ $this->setTemporaryHook(
+ 'ChangesListSpecialPageFilters',
+ null
+ );
+
+ $page->registerFilters();
+
+ // Does not consider $preferences, just wiki's defaults
+ $wikiDefaults = $page->getDefaultOptions()->getAllValues();
+
+ $allFalse = $wikiDefaults;
+
+ foreach ( $allFalse as $key => &$value ) {
+ if ( $value === true ) {
+ $value = false;
+ }
+ }
+
+ // This is not exposed on the form (only in preferences) so it
+ // respects the preference.
+ $allFalse['extended'] = true;
+
+ return [
+ [
+ [
+ 'hideminor' => true,
+ ] + $wikiDefaults,
+ [],
+ [
+ 'hideMinor' => 1,
+ ],
+ ],
+
+ [
+ [
+ // First two same as prefs
+ 'hideminor' => true,
+ 'hidebots' => false,
+
+ // Second two overriden
+ 'hideanons' => false,
+ 'hideliu' => true,
+ ] + $wikiDefaults,
+ [
+ 'watchlisthideminor' => 1,
+ 'watchlisthidebots' => 0,
+
+ 'watchlisthideanons' => 1,
+ 'watchlisthideliu' => 0,
+ ],
+ [
+ 'hideanons' => 0,
+ 'hideliu' => 1,
+ ],
+ ],
+
+ // Defaults/preferences for form elements are entirely ignored for
+ // action=submit and omitted elements become false
+ [
+ [
+ 'hideminor' => false,
+ 'hidebots' => true,
+ 'hideanons' => false,
+ 'hideliu' => true,
+ ] + $allFalse,
+ [
+ 'watchlisthideminor' => 0,
+ 'watchlisthidebots' => 1,
+ 'watchlisthideanons' => 1,
+ 'watchlisthideliu' => 0,
+ ],
+ [
+ 'hidebots' => 1,
+ 'hideliu' => 1,
+ 'action' => 'submit',
+ ],
+ ],
+ ];
+ }
}