"selector-no-id": null,
"selector-pseudo-element-colon-notation": null,
- "string-quotes": null,
-
"value-keyword-case": null
}
}
=== External library changes in 1.29 ===
==== Upgraded external libraries ====
+* Added wikimedia/timestamp v1.0.0.
* Updated QUnit from v1.22.0 to v1.23.1.
* Updated cssjanus from v1.1.2 to 1.1.3.
* Updated psr/log from v1.0.0 to v1.0.2.
try {
/* Construct an ApiMain with the arguments passed via the URL. What we get back
* is some form of an ApiMain, possibly even one that produces an error message,
- * but we don't care here, as that is handled by the ctor.
+ * but we don't care here, as that is handled by the constructor.
*/
$processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI );
'ConvertLinks' => __DIR__ . '/maintenance/convertLinks.php',
'ConvertUserOptions' => __DIR__ . '/maintenance/convertUserOptions.php',
'ConverterRule' => __DIR__ . '/languages/ConverterRule.php',
- 'ConvertibleTimestamp' => __DIR__ . '/includes/libs/time/ConvertibleTimestamp.php',
'Cookie' => __DIR__ . '/includes/libs/Cookie.php',
'CookieJar' => __DIR__ . '/includes/libs/CookieJar.php',
'CopyFileBackend' => __DIR__ . '/maintenance/copyFileBackend.php',
'ThumbnailRenderJob' => __DIR__ . '/includes/jobqueue/jobs/ThumbnailRenderJob.php',
'TidyUpBug37714' => __DIR__ . '/maintenance/tidyUpBug37714.php',
'TiffHandler' => __DIR__ . '/includes/media/Tiff.php',
- 'TimestampException' => __DIR__ . '/includes/libs/time/TimestampException.php',
'Timing' => __DIR__ . '/includes/libs/Timing.php',
'Title' => __DIR__ . '/includes/Title.php',
'TitleArray' => __DIR__ . '/includes/TitleArray.php',
"ext-xml": "*",
"liuggio/statsd-php-client": "1.0.18",
"mediawiki/at-ease": "1.1.0",
- "oojs/oojs-ui": "0.19.2",
+ "oojs/oojs-ui": "0.19.4",
"oyejorge/less.php": "1.7.0.10",
"php": ">=5.5.9",
"psr/log": "1.0.2",
"wikimedia/running-stat": "1.1.0",
"wikimedia/scoped-callback": "1.0.0",
"wikimedia/utfnormal": "1.1.0",
+ "wikimedia/timestamp": "1.0.0",
"wikimedia/wait-condition-loop": "1.0.1",
"wikimedia/wrappedstring": "2.2.0",
"zordius/lightncandy": "0.23"
"autoload": {
"psr-0": {
"ComposerHookHandler": "includes/composer"
- }
+ },
+ "files": [
+ "includes/compat/Timestamp.php"
+ ]
},
"autoload-dev": {
"files": [
*/
require_once __DIR__ . '/libs/mime/defines.php';
-require_once __DIR__ . '/libs/time/defines.php';
require_once __DIR__ . '/libs/rdbms/defines.php';
require_once __DIR__ . '/compat/normal/UtfNormalDefines.php';
* @since 1.20
* @author Tyler Romeo, 2012
*/
+use Wikimedia\Timestamp\ConvertibleTimestamp;
/**
* Library for creating and parsing MW-style timestamps. Based on the JS
*
* @file
*/
+use Wikimedia\Timestamp\TimestampException;
/**
* Handles the backend logic of merging the histories of two
*/
use MediaWiki\Logger\LoggerFactory;
+use Wikimedia\Timestamp\TimestampException;
/**
* This is the main API class, used for both external and internal processing.
"apihelp-xmlfm-description": "Producir los datos de salida en formato XML (con resaltado sintáctico en HTML).",
"api-format-title": "Resultado de la API de MediaWiki",
"api-format-prettyprint-header": "Esta es la representación en HTML del formato $1. HTML es adecuado para realizar tareas de depuración, pero no para utilizarlo en aplicaciones.\n\nUtiliza el parámetro <var>format</var> para modificar el formato de salida. Para ver la representación no HTML del formato $1, emplea <kbd>format=$2</kbd>.\n\nPara obtener más información, consulta la [[mw:API|documentación completa]] o la [[Special:ApiHelp/main|ayuda de API]].",
+ "api-format-prettyprint-header-only-html": "Esta es una representación en HTML destinada a la depuración, y no es adecuada para el uso de la aplicación.\n\nVéase la [[mw:API|documentación completa]] o la [[Special:ApiHelp/main|página de ayuda de la API]] para más información.",
"api-format-prettyprint-status": "Esta respuesta se devolvería con el estado HTTP $1 $2.",
"api-pageset-param-titles": "Una lista de títulos en los que trabajar.",
"api-pageset-param-pageids": "Una lista de identificadores de páginas en las que trabajar.",
"api-pageset-param-generator": "Obtener la lista de páginas en las que trabajar mediante la ejecución del módulo de consulta especificado.\n\n<strong>Nota:</strong> Los nombres de los parámetros del generador deben prefijarse con una «g», véanse los ejemplos.",
"api-pageset-param-redirects-generator": "Resolver automáticamente las redirecciones en <var>$1titles</var>, <var>$1pageids</var>, y <var>$1revids</var> y en las páginas devueltas por <var>$1generator</var>.",
"api-pageset-param-redirects-nogenerator": "Resolver automáticamente las redirecciones en <var>$1titles</var>, <var>$1pageids</var> y <var>$1revids</var>.",
+ "api-pageset-param-converttitles": "Convertir los títulos a otras variantes, si es necesario. Solo funciona si el idioma del contenido del wiki admite la conversión entre variantes. La conversión entre variantes está habilitada en idiomas tales como $1.",
"api-help-title": "Ayuda de la API de MediaWiki",
"api-help-lead": "Esta es una página de documentación autogenerada de la API de MediaWiki.\n\nDocumentación y ejemplos: https://www.mediawiki.org/wiki/API",
"api-help-main-header": "Módulo principal",
"apierror-changeauth-norequest": "No se ha podido crear la petición de modificación.",
"apierror-compare-inputneeded": "Se necesita un título, un identificador de página o un número de revisión tanto para el parámetro <var>from</var> como para el parámetro <var>to</var>.",
"apierror-contentserializationexception": "La serialización de contenido falló: $1",
+ "apierror-contenttoobig": "El contenido que has suministrado supera el tamaño máximo de archivo de $1 {{PLURAL:$1|kilobytes|kilobytes}}.",
"apierror-create-titleexists": "Los títulos existentes no se pueden proteger con <kbd>create</kbd>.",
"apierror-csp-report": "Error de procesamiento del informe CSP: $1.",
"apierror-databaseerror": "[$1] Error en la consulta de la base de datos.",
"apihelp-query+deletedrevs-param-namespace": "Lister uniquement les pages dans cet espace de noms.",
"apihelp-query+deletedrevs-param-limit": "Le nombre maximal de révisions à lister.",
"apihelp-query+deletedrevs-param-prop": "Quelles propriétés obtenir :\n;revid:Ajoute l’ID de la révision supprimée.\n;parentid:Ajoute l’ID de la révision précédente de la page.\n;user:Ajoute l’utilisateur ayant fait la révision.\n;userid:Ajoute l’ID de l’utilisateur qui a fait la révision.\n;comment:Ajoute le commentaire de la révision.\n;parsedcomment:Ajoute le commentaire analysé de la révision.\n;minor:Marque si la révision est mineure.\n;len:Ajoute la longueur (en octets) de la révision.\n;sha1:Ajoute le SHA-1 (base 16) de la révision.\n;content:Ajoute le contenu de la révision.\n;token:<span class=\"apihelp-deprecated\">Obsolète.</span> Fournit le jeton de modification.\n;tags:Balises pour la révision.",
- "apihelp-query+deletedrevs-example-mode1": "Lister les dernières révisions supprimées de des pages <kbd>Main Page</kbd> et <kbd>Talk:Main Page</kbd>, avec le contenu (mode 1).",
+ "apihelp-query+deletedrevs-example-mode1": "Lister les dernières révisions supprimées des pages <kbd>Main Page</kbd> et <kbd>Talk:Main Page</kbd>, avec le contenu (mode 1).",
"apihelp-query+deletedrevs-example-mode2": "Lister les 50 dernières contributions de <kbd>Bob</kbd> supprimées (mode 2).",
"apihelp-query+deletedrevs-example-mode3-main": "Lister les 50 premières révisions supprimées dans l’espace de noms principal (mode 3)",
"apihelp-query+deletedrevs-example-mode3-talk": "Lister les 50 premières pages supprimées dans l’espace de noms {{ns:talk}} (mode 3).",
"apihelp-query+imageinfo-paramvalue-prop-bitdepth": "Ajoute la profondeur de bits de la version.",
"apihelp-query+imageinfo-paramvalue-prop-uploadwarning": "Utilisé par la page Special:Upload pour obtenir de l’information sur un fichier existant. Non prévu pour être utilisé en dehors du cœur de MédiaWiki.",
"apihelp-query+imageinfo-paramvalue-prop-badfile": "Ajoute l'indication que le fichier est sur [[MediaWiki:Bad image list]]",
- "apihelp-query+imageinfo-param-limit": "Combien de révision de fichier renvoyer par fichier.",
+ "apihelp-query+imageinfo-param-limit": "Combien de révisions de fichier renvoyer par fichier.",
"apihelp-query+imageinfo-param-start": "Horodatage auquel démarrer la liste.",
"apihelp-query+imageinfo-param-end": "Horodatage auquel arrêter la liste.",
"apihelp-query+imageinfo-param-urlwidth": "Si $2prop=url est défini, une URL vers une image à l’échelle de cette largeur sera renvoyée.\nPour des raisons de performance si cette option est utilisée, pas plus de $1 images mises à l’échelle seront renvoyées.",
"apihelp-main-param-maxage": "Задајте му олку секунди на заглавието за контрола HTTP-меѓускладот <code>s-maxage</code>. Грешките никогаш не се чуваат во меѓускладот.",
"apihelp-main-param-assert": "Провери дали корисникот е најавен ако е зададено <kbd>user</kbd> или дали го има корисничкото право на бот, ако е зададено <kbd>bot</kbd>.",
"apihelp-main-param-requestid": "Тука внесената вредност ќе биде вклучена во извештајот. Може да се користи за разликување на барањата.",
- "apihelp-main-param-servedby": "Вклучи го домаќинското име што го услужило барањето во резултатите.",
- "apihelp-main-param-curtimestamp": "Ð\91клÑ\83Ñ\87и Ñ\82ековно вÑ\80еме и вÑ\80еме и даÑ\82Ñ\83м во Ñ\80езÑ\83лÑ\82аÑ\82от.",
+ "apihelp-main-param-servedby": "Вклучи го домаќинското име што го услужило барањето во исходот.",
+ "apihelp-main-param-curtimestamp": "Ð\92клÑ\83Ñ\87и Ñ\82ековно вÑ\80еме и вÑ\80еме и даÑ\82Ñ\83м во иÑ\81Ñ\85одот.",
"apihelp-main-param-origin": "Кога му пристапувате на Пирлогот користејќи повеќедоменско AJAX-барање (CORS), задајте му го на ова изворниот домен. Ова мора да се вклучи во секое подготвително барање и затоа мора да биде дел од URI на барањето (не главната содржина во POST). Ова мора точно да се совпаѓа со еден од изворниците на заглавието Origin:, така што мора да е зададен на нешто како <kbd>https://mk.wikipedia.org</kbd> or <kbd>https://meta.wikimedia.org</kbd>. Ако овој параметар не се совпаѓа со заглавието <code>Origin</code>:, ќе се појави одговор 403. Ако се совпаѓа, а изворникот е на бел список (на допуштени), тогаш ќе се зададе заглавието <code>Access-Control-Allow-Origin</code>.",
"apihelp-main-param-uselang": "Јазик за преведување на пораките. Список на јазични кодови ќе најдете на <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> со <kbd>siprop=languages</kbd> или укажете <kbd>user</kbd> за да го користите тековно зададениот јазик корисникот, или пак укажете <kbd>content</kbd> за да го користите јазикот на содржината на ова вики.",
"apihelp-block-description": "Блокирај корисник.",
"apihelp-expandtemplates-param-title": "Наслов на страница.",
"apihelp-expandtemplates-param-text": "Викитекст за претворање.",
"apihelp-expandtemplates-param-revid": "Назнака на преработката, за <nowiki>{{REVISIONID}}</nowiki> и слични променливи.",
- "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n\nИмајте на ум дека ако не изберете никаква вредност, резултатот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
+ "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n\nИмајте на ум дека ако не изберете никаква вредност, исходот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
"apihelp-expandtemplates-paramvalue-prop-wikitext": "Проширениот викитекст.",
"apihelp-expandtemplates-param-includecomments": "Дали во изводот да се вклучени HTML-коментари.",
"apihelp-expandtemplates-param-generatexml": "Создај XML-дрво на расчленување (заменето со $1prop=parsetree).",
"apihelp-feedcontributions-param-deletedonly": "Прикажувај само избришани придонеси.",
"apihelp-feedcontributions-param-toponly": "Прикажувај само последни преработки.",
"apihelp-feedcontributions-param-newonly": "Прикажувај само новосоздадени страници",
+ "apihelp-feedcontributions-param-hideminor": "Сокриј ситни уредувања.",
"apihelp-feedcontributions-param-showsizediff": "Покажувај ја големинската разлика меѓу преработките.",
"apihelp-feedcontributions-example-simple": "Покажувај придонеси на <kbd>Пример</kbd>.",
"apihelp-feedrecentchanges-description": "Дава канал со скорешни промени.",
"apihelp-feedrecentchanges-param-feedformat": "Форматот на каналот.",
- "apihelp-feedrecentchanges-param-namespace": "Ð\9dа коÑ\98 именÑ\81ки пÑ\80оÑ\81Ñ\82оÑ\80 да Ñ\81е огÑ\80аниÑ\87аÑ\82 Ñ\80езÑ\83лÑ\82аÑ\82иÑ\82е.",
+ "apihelp-feedrecentchanges-param-namespace": "Ð\9dа коÑ\98 именÑ\81ки пÑ\80оÑ\81Ñ\82оÑ\80 да Ñ\81е огÑ\80аниÑ\87и иÑ\81Ñ\85одоÑ\82.",
"apihelp-feedrecentchanges-param-invert": "Сите именски простори освен избраниот.",
"apihelp-feedrecentchanges-param-associated": "Вклучи придружни именски простори (разговор или главен).",
- "apihelp-feedrecentchanges-param-days": "Ð\9dа кои денови да Ñ\81е огÑ\80аниÑ\87аÑ\82 Ñ\80езÑ\83лÑ\82аÑ\82ите.",
+ "apihelp-feedrecentchanges-param-days": "Ð\9dа кои денови да Ñ\81е огÑ\80аниÑ\87аÑ\82 Ñ\81Ñ\82авките.",
"apihelp-feedrecentchanges-param-limit": "Највеќе ставки во исходот за прикажување.",
"apihelp-feedrecentchanges-param-from": "Прикажи ги промените оттогаш.",
"apihelp-feedrecentchanges-param-hideminor": "Скриј ги ситните промени.",
"apihelp-feedrecentchanges-param-hideliu": "Скриј ги промените направени од регистрирани корисници.",
"apihelp-feedrecentchanges-param-hidepatrolled": "Скриј ги испатролираните промени.",
"apihelp-feedrecentchanges-param-hidemyself": "Скриј ги промените на тековниот корисник.",
+ "apihelp-feedrecentchanges-param-hidecategorization": "Сокриј префрлања во други категории.",
"apihelp-feedrecentchanges-param-tagfilter": "Филтрирање по ознака.",
"apihelp-feedrecentchanges-param-target": "Прикажи само промени на страници што водат од оваа.",
"apihelp-feedrecentchanges-param-showlinkedto": "Наместо тоа, прикажи ги промените на страниците поврзани со избраната страница.",
+ "apihelp-feedrecentchanges-param-categories": "Прикажи само промени на страниците во сите овие категории.",
+ "apihelp-feedrecentchanges-param-categories_any": "Прикажи само промени на страниците во било која од категориите.",
"apihelp-feedrecentchanges-example-simple": "Прикажи скорешни промени",
"apihelp-feedrecentchanges-example-30days": "Прикажувај скорешни промени 30 дена",
"apihelp-feedwatchlist-description": "Дава канал од набљудуваните.",
"apihelp-help-param-wrap": "Обвиткај го изводот како станрадна одѕивна структура од прилотот.",
"apihelp-help-param-toc": "Вклучи табела со содржина во HTML-изводот.",
"apihelp-help-example-main": "Помош за главниот модул",
+ "apihelp-help-example-submodules": "Помош за <kbd>action=query</kbd> и сите негови подмодули.",
"apihelp-help-example-recursive": "Сета помош на една страница",
"apihelp-help-example-help": "Помош за самиот помошен модул",
"apihelp-help-example-query": "Помош за два подмодула за барања",
"apihelp-imagerotate-description": "Сврти една или повеќе слики.",
"apihelp-imagerotate-param-rotation": "За колку степени да се сврти надесно.",
+ "apihelp-imagerotate-param-tags": "Ознаки за примена врз ставката во дневникот на подигања.",
"apihelp-imagerotate-example-simple": "Сврти ја <kbd>Податотека:Пример.png</kbd> за <kbd>90</kbd> степени.",
"apihelp-imagerotate-example-generator": "Сврти ги сите слики во <kbd>Категорија:Некоја</kbd> за <kbd>180</kbd> степени.",
"apihelp-import-description": "Увези страница од друго вики или од XML-податотека.\n\nИмајте на ум дека POST на HTTP мора да се изведе како подигање на податотеката (т.е. користејќи повеќеделни податоци/податоци од образец) кога ја испраќате податотеката за параметарот <var>xml</var>.",
- "apihelp-import-param-summary": "Увези опис.",
+ "apihelp-import-param-summary": "Ð\9eпиÑ\81 на Ñ\83возоÑ\82 на дневниÑ\87ки запис.",
"apihelp-import-param-xml": "Подигната XML-податотека.",
"apihelp-import-param-interwikisource": "За меѓујазични увози: од кое вики да се увезе.",
"apihelp-import-param-interwikipage": "За меѓујазични увози: страница за увоз.",
"apihelp-move-example-move": "Премести го <kbd>Badtitle</kbd> на <kbd>Goodtitle</kbd>, неоставајќи пренасочување",
"apihelp-opensearch-description": "Пребарување на викито со протоколот OpenSearch.",
"apihelp-opensearch-param-search": "Низа за пребарување.",
- "apihelp-opensearch-param-limit": "Ð\9dаÑ\98веÑ\9cе Ñ\80езÑ\83лÑ\82аÑ\82и за прикажување.",
+ "apihelp-opensearch-param-limit": "Ð\9dаÑ\98веÑ\9cе Ñ\81Ñ\82авки за прикажување.",
"apihelp-opensearch-param-namespace": "Именски простори за пребарување.",
"apihelp-opensearch-param-suggest": "Не прави ништо ако <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> е неточно.",
- "apihelp-opensearch-param-redirects": "Ð\9aако да Ñ\81е Ñ\80абоÑ\82и Ñ\81о пÑ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aа:\n;return: Ð\94аÑ\98 го Ñ\81амоÑ\82о пÑ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aе.\n;resolve: Ð\94аÑ\98 Ñ\98а Ñ\86елнаÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а. Ð\9cоже да даде помалкÑ\83 од $1limit Ñ\80езÑ\83лÑ\82аÑ\82и.\nОд историски причини, по основно е „return“ за $1format=json и „resolve“ за други формати.",
+ "apihelp-opensearch-param-redirects": "Ð\9aако да Ñ\81е Ñ\80абоÑ\82и Ñ\81о пÑ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aа:\n;return: Ð\94аÑ\98 го Ñ\81амоÑ\82о пÑ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aе.\n;resolve: Ð\94аÑ\98 Ñ\98а Ñ\86елнаÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а. Ð\9cоже да даде помалкÑ\83 од $1limit Ñ\81Ñ\82авки.\nОд историски причини, по основно е „return“ за $1format=json и „resolve“ за други формати.",
"apihelp-opensearch-param-format": "Формат на изводот.",
"apihelp-opensearch-example-te": "Најди страници што почнуваат со <kbd>Те</kbd>.",
"apihelp-options-description": "Смени ги нагодувањата на тековниот корисник.\n\nМожат да се зададат само можностите заведени во јадрото или во едно од воспоставените додатоци, или пак можности со клуч кој ја има претставката <code>userjs-</code> (предвиден за употреба од кориснички скрипти).",
"apihelp-query+revisions-example-first5-user": "Дај ги првите 5 преработки на <kbd>Главна страница</kbd> кои се направени од корисникот „зададен од МедијаВики“ (<kbd>MediaWiki default</kbd>)",
"apihelp-query+search-example-simple": "Побарај <kbd>meaning</kbd>.",
"apihelp-query+search-example-text": "Побарај го <kbd>meaning</kbd> по текстовите.",
- "apihelp-query+search-example-generator": "Дај информации за страниците што излегуваат во резултатите од пребарувањето на <kbd>meaning</kbd>.",
+ "apihelp-query+search-example-generator": "Дај информации за страниците што излегуваат во исходот од пребарувањето на <kbd>meaning</kbd>.",
"apihelp-query+siteinfo-description": "Дај општи информации за мрежното место.",
"apihelp-upload-param-filename": "Целно име на податотеката.",
"apihelp-upload-param-comment": "Коментар при подигање. Се користи и како првичен текст на страницата за нови податотеки ако не е укажано <var>$1text</var>.",
"apihelp-xml-param-xslt": "Ако е укажано, ја додава именуваната страница како XSL-стилска страница. Вредноста мора да биде наслов во именскиот простор „{{ns:MediaWiki}}“ што ќе завршува со <code>.xsl</code>.",
"apihelp-xml-param-includexmlnamespace": "Ако е укажано, додава именски простор XML.",
"apihelp-xmlfm-description": "Давај го изводот во XML-формат (подобрен испис во HTML).",
- "api-format-title": "РезÑ\83лÑ\82аÑ\82 од Извршникот на МедијаВики",
+ "api-format-title": "Ð\98Ñ\81Ñ\85од од Извршникот на МедијаВики",
"api-format-prettyprint-header": "Ова е HTML-претстава на форматот $1. HTML е добар за отстранување на грешки, но не е погоден за употреба во извршник.\n\nУкажете го параметарот <var>format</var> за да го смените изводниот формат. За да ги видите претставите на форматот $1 вон HTML, задајте <kbd>format=$2</kbd>.\n\nПовеќе информации ќе најдете на [[mw:API|целосната документација]], или пак [[Special:ApiHelp/main|помош со извршникот]].",
"api-pageset-param-titles": "Список на наслови на кои ќе се работи",
"api-pageset-param-pageids": "Список на назнаки за страници на кои ќе се работи",
"api-help-param-token": "Шифра „$1“ добиена од [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
"api-help-param-token-webui": "За складност, се прифаќа и шифрата што се користи за обичниот кориснички посредник.",
"api-help-param-disabled-in-miser-mode": "Исклучено поради [[mw:Manual:$wgMiserMode|скржавиот режим]].",
- "api-help-param-limited-in-miser-mode": "<strong>Напомена:</strong> Бидејќи сте во [[mw:Manual:$wgMiserMode|скржав режим]], користејќи го ова може да добиете помалку од <var>$1limit</var> резултати пред да продолжите; во крајни случаи може да не добиете ниеден резултат.",
+ "api-help-param-limited-in-miser-mode": "<strong>Напомена:</strong> Бидејќи сте во [[mw:Manual:$wgMiserMode|скржав режим]], користејќи го ова може да добиете помалку од <var>$1limit</var> исходни ставки пред да продолжите; во крајни случаи може да не добиете ниедна ставка.",
"api-help-param-direction": "Во која насока да се набројува:\n;понови:Прво најстарите. Напомена: $1start мора да биде пред $1end.\n;постари:Прво најновите (по основно). Напомена: $1start мора да биде подоцна од $1end.",
"api-help-param-continue": "Употребете го ова за да продолжите кога има повеќе расположиви ставки.",
"api-help-param-no-description": "<span class=\"apihelp-empty\">(нема опис)</span>",
&& $block[0]->mAttribs['rc_timestamp'] >= $block[0]->watched
) {
$tableClasses[] = 'mw-changeslist-line-watched';
- $tableClasses = array_merge( $tableClasses, $this->getHTMLClassesForFilters( $block[0] ) );
} else {
$tableClasses[] = 'mw-changeslist-line-not-watched';
}
if ( $rcObj->watched
&& $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched
) {
- $classes[] = [ 'mw-enhanced-watched' ];
+ $classes[] = 'mw-enhanced-watched';
}
$classes = array_merge( $classes, $this->getHTMLClassesForFilters( $rcObj ) );
--- /dev/null
+<?php
+// This file is loaded by composer.json#autoload.files instead of autoload.php,
+// because PHP's class loader does not support autoloading an alias for a class that
+// isn't already loaded. See also AutoLoaderTest and ClassCollector.
+
+// By using an autoload file, this will trigger directly at runtime outside any class
+// loading context. This file will then register the alias and, as class_alias() does
+// by default, it will trigger a plain autoload for the destination class.
+
+// The below uses string concatenation for the alias to avoid being seen by ClassCollector,
+// which would insist on adding it to autoload.php, after which AutoLoaderTest will
+// complain about class_alias() not being in the target class file.
+
+/**
+ * @deprecated since 1.29
+ * @since 1.20
+ */
+class_alias( Wikimedia\Timestamp\TimestampException::class, 'Timestamp' . 'Exception' );
"config-logo-help": "Матичното руво на МедијаВики има простор за лого од 135x160 пиксели над страничникот.\n\nМожете да употребите <code>$wgStylePath</code> или <code>$wgScriptPath</code> ако вашето лого е релативно на тие патеки.\n\nАко не сакате да имате лого, тогаш оставете го ова поле празно.",
"config-instantcommons": "Овозможи Instant Commons",
"config-instantcommons-help": "[https://www.mediawiki.org/wiki/InstantCommons Instant Commons] е функција која им овозможува на викијата да користат слики, звучни записи и други мултимедијални содржини од [https://commons.wikimedia.org/ Ризницата].\nЗа да може ова да работи, МедијаВики бара пристап до семрежјето.\n\nЗа повеќе информации за оваа функција и напатствија за нејзино поставување на вики (сите други освен Ризницата), коносултирајте го [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos прирачникот].",
- "config-cc-error": "Изборникот на лиценци од Криејтив комонс не даде резултати.\nВнесете го името на лиценцата рачно.",
+ "config-cc-error": "Изборникот на лиценци од Криејтив комонс не даде лиценца.\nВнесете го името на лиценцата рачно.",
"config-cc-again": "Одберете повторно...",
"config-cc-not-chosen": "Одберете ја саканата лиценца од Криејтив комонс и стиснете на „proceed“.",
"config-advanced-settings": "Напредни нагодувања",
* @ingroup FileBackend
* @author Aaron Schulz
*/
+use Wikimedia\Timestamp\ConvertibleTimestamp;
/**
* @brief Class for a file system (FS) based file backend.
* @ingroup FileBackend
* @author Aaron Schulz
*/
+use Wikimedia\Timestamp\ConvertibleTimestamp;
/**
* @brief Base class for all backends using particular storage medium.
*
* @file
*/
+use Wikimedia\Timestamp\ConvertibleTimestamp;
/**
* Functions related to the output of file content
use Wikimedia\Rdbms\DatabaseDomain;
use Wikimedia\Rdbms\DBMasterPos;
use Wikimedia\Rdbms\Blob;
+use Wikimedia\Timestamp\ConvertibleTimestamp;
/**
* Relational database abstraction object
* @file
* @ingroup Database
*/
+use Wikimedia\Timestamp\ConvertibleTimestamp;
use Wikimedia\WaitConditionLoop;
use Wikimedia\Rdbms\Blob;
use Wikimedia\Rdbms\PostgresBlob;
+++ /dev/null
-<?php
-/**
- * Creation, parsing, and conversion of timestamps.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @since 1.20
- * @author Tyler Romeo, 2012
- */
-
-/**
- * Library for creating, parsing, and converting timestamps. Based on the JS
- * library that does the same thing.
- *
- * @since 1.28
- */
-class ConvertibleTimestamp {
- /**
- * Standard gmdate() formats for the different timestamp types.
- */
- private static $formats = [
- TS_UNIX => 'U',
- TS_MW => 'YmdHis',
- TS_DB => 'Y-m-d H:i:s',
- TS_ISO_8601 => 'Y-m-d\TH:i:s\Z',
- TS_ISO_8601_BASIC => 'Ymd\THis\Z',
- TS_EXIF => 'Y:m:d H:i:s', // This shouldn't ever be used, but is included for completeness
- TS_RFC2822 => 'D, d M Y H:i:s',
- TS_ORACLE => 'd-m-Y H:i:s.000000', // Was 'd-M-y h.i.s A' . ' +00:00' before r51500
- TS_POSTGRES => 'Y-m-d H:i:s',
- ];
-
- /**
- * The actual timestamp being wrapped (DateTime object).
- * @var DateTime
- */
- public $timestamp;
-
- /**
- * Make a new timestamp and set it to the specified time,
- * or the current time if unspecified.
- *
- * @param bool|string|int|float|DateTime $timestamp Timestamp to set, or false for current time
- */
- public function __construct( $timestamp = false ) {
- if ( $timestamp instanceof DateTime ) {
- $this->timestamp = $timestamp;
- } else {
- $this->setTimestamp( $timestamp );
- }
- }
-
- /**
- * Set the timestamp to the specified time, or the current time if unspecified.
- *
- * Parse the given timestamp into either a DateTime object or a Unix timestamp,
- * and then store it.
- *
- * @param string|bool $ts Timestamp to store, or false for now
- * @throws TimestampException
- */
- public function setTimestamp( $ts = false ) {
- $m = [];
- $da = [];
- $strtime = '';
-
- // We want to catch 0, '', null... but not date strings starting with a letter.
- if ( !$ts || $ts === "\0\0\0\0\0\0\0\0\0\0\0\0\0\0" ) {
- $uts = time();
- $strtime = "@$uts";
- } elseif ( preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)$/D', $ts, $da ) ) {
- # TS_DB
- } elseif ( preg_match( '/^(\d{4}):(\d\d):(\d\d) (\d\d):(\d\d):(\d\d)$/D', $ts, $da ) ) {
- # TS_EXIF
- } elseif ( preg_match( '/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/D', $ts, $da ) ) {
- # TS_MW
- } elseif ( preg_match( '/^(-?\d{1,13})(\.\d+)?$/D', $ts, $m ) ) {
- # TS_UNIX
- $strtime = "@{$m[1]}"; // https://secure.php.net/manual/en/datetime.formats.compound.php
- } elseif ( preg_match( '/^\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}.\d{6}$/', $ts ) ) {
- # TS_ORACLE // session altered to DD-MM-YYYY HH24:MI:SS.FF6
- $strtime = preg_replace( '/(\d\d)\.(\d\d)\.(\d\d)(\.(\d+))?/', "$1:$2:$3",
- str_replace( '+00:00', 'UTC', $ts ) );
- } elseif ( preg_match(
- '/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.*\d*)?Z?$/',
- $ts,
- $da
- ) ) {
- # TS_ISO_8601
- } elseif ( preg_match(
- '/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(?:\.*\d*)?Z?$/',
- $ts,
- $da
- ) ) {
- # TS_ISO_8601_BASIC
- } elseif ( preg_match(
- '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.*\d*[\+\- ](\d\d)$/',
- $ts,
- $da
- ) ) {
- # TS_POSTGRES
- } elseif ( preg_match(
- '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.*\d* GMT$/',
- $ts,
- $da
- ) ) {
- # TS_POSTGRES
- } elseif ( preg_match(
- # Day of week
- '/^[ \t\r\n]*([A-Z][a-z]{2},[ \t\r\n]*)?' .
- # dd Mon yyyy
- '\d\d?[ \t\r\n]*[A-Z][a-z]{2}[ \t\r\n]*\d{2}(?:\d{2})?' .
- # hh:mm:ss
- '[ \t\r\n]*\d\d[ \t\r\n]*:[ \t\r\n]*\d\d[ \t\r\n]*:[ \t\r\n]*\d\d/S',
- $ts
- ) ) {
- # TS_RFC2822, accepting a trailing comment.
- # See http://www.squid-cache.org/mail-archive/squid-users/200307/0122.html / r77171
- # The regex is a superset of rfc2822 for readability
- $strtime = strtok( $ts, ';' );
- } elseif ( preg_match( '/^[A-Z][a-z]{5,8}, \d\d-[A-Z][a-z]{2}-\d{2} \d\d:\d\d:\d\d/', $ts ) ) {
- # TS_RFC850
- $strtime = $ts;
- } elseif ( preg_match( '/^[A-Z][a-z]{2} [A-Z][a-z]{2} +\d{1,2} \d\d:\d\d:\d\d \d{4}/', $ts ) ) {
- # asctime
- $strtime = $ts;
- } else {
- throw new TimestampException( __METHOD__ . ": Invalid timestamp - $ts" );
- }
-
- if ( !$strtime ) {
- $da = array_map( 'intval', $da );
- $da[0] = "%04d-%02d-%02dT%02d:%02d:%02d.00+00:00";
- $strtime = call_user_func_array( "sprintf", $da );
- }
-
- try {
- $final = new DateTime( $strtime, new DateTimeZone( 'GMT' ) );
- } catch ( Exception $e ) {
- throw new TimestampException( __METHOD__ . ': Invalid timestamp format.', $e->getCode(), $e );
- }
-
- if ( $final === false ) {
- throw new TimestampException( __METHOD__ . ': Invalid timestamp format.' );
- }
-
- $this->timestamp = $final;
- }
-
- /**
- * Convert a timestamp string to a given format.
- *
- * @param int $style Constant Output format for timestamp
- * @param string $ts Timestamp
- * @return string|bool Formatted timestamp or false on failure
- */
- public static function convert( $style = TS_UNIX, $ts ) {
- try {
- $ct = new static( $ts );
- return $ct->getTimestamp( $style );
- } catch ( TimestampException $e ) {
- return false;
- }
- }
-
- /**
- * Get the current time in the given format
- *
- * @param int $style Constant Output format for timestamp
- * @return string
- */
- public static function now( $style = TS_MW ) {
- return static::convert( $style, time() );
- }
-
- /**
- * Get the timestamp represented by this object in a certain form.
- *
- * Convert the internal timestamp to the specified format and then
- * return it.
- *
- * @param int $style Constant Output format for timestamp
- * @throws TimestampException
- * @return string The formatted timestamp
- */
- public function getTimestamp( $style = TS_UNIX ) {
- if ( !isset( self::$formats[$style] ) ) {
- throw new TimestampException( __METHOD__ . ': Illegal timestamp output type.' );
- }
-
- $output = $this->timestamp->format( self::$formats[$style] );
-
- if ( ( $style == TS_RFC2822 ) || ( $style == TS_POSTGRES ) ) {
- $output .= ' GMT';
- }
-
- if ( $style == TS_MW && strlen( $output ) !== 14 ) {
- throw new TimestampException( __METHOD__ . ': The timestamp cannot be represented in ' .
- 'the specified format' );
- }
-
- return $output;
- }
-
- /**
- * @return string
- */
- public function __toString() {
- return $this->getTimestamp();
- }
-
- /**
- * Calculate the difference between two ConvertibleTimestamp objects.
- *
- * @param ConvertibleTimestamp $relativeTo Base time to calculate difference from
- * @return DateInterval|bool The DateInterval object representing the
- * difference between the two dates or false on failure
- */
- public function diff( ConvertibleTimestamp $relativeTo ) {
- return $this->timestamp->diff( $relativeTo->timestamp );
- }
-
- /**
- * Set the timezone of this timestamp to the specified timezone.
- *
- * @param string $timezone Timezone to set
- * @throws TimestampException
- */
- public function setTimezone( $timezone ) {
- try {
- $this->timestamp->setTimezone( new DateTimeZone( $timezone ) );
- } catch ( Exception $e ) {
- throw new TimestampException( __METHOD__ . ': Invalid timezone.', $e->getCode(), $e );
- }
- }
-
- /**
- * Get the timezone of this timestamp.
- *
- * @return DateTimeZone The timezone
- */
- public function getTimezone() {
- return $this->timestamp->getTimezone();
- }
-
- /**
- * Format the timestamp in a given format.
- *
- * @param string $format Pattern to format in
- * @return string The formatted timestamp
- */
- public function format( $format ) {
- return $this->timestamp->format( $format );
- }
-}
+++ /dev/null
-<?php
-
-/**
- * @since 1.20
- */
-class TimestampException extends Exception {
-}
+++ /dev/null
-<?php
-
-/**
- * Unix time - the number of seconds since 1970-01-01 00:00:00 UTC
- */
-define( 'TS_UNIX', 0 );
-
-/**
- * MediaWiki concatenated string timestamp (YYYYMMDDHHMMSS)
- */
-define( 'TS_MW', 1 );
-
-/**
- * MySQL DATETIME (YYYY-MM-DD HH:MM:SS)
- */
-define( 'TS_DB', 2 );
-
-/**
- * RFC 2822 format, for E-mail and HTTP headers
- */
-define( 'TS_RFC2822', 3 );
-
-/**
- * ISO 8601 format with no timezone: 1986-02-09T20:00:00Z
- *
- * This is used by Special:Export
- */
-define( 'TS_ISO_8601', 4 );
-
-/**
- * An Exif timestamp (YYYY:MM:DD HH:MM:SS)
- *
- * @see http://exif.org/Exif2-2.PDF The Exif 2.2 spec, see page 28 for the
- * DateTime tag and page 36 for the DateTimeOriginal and
- * DateTimeDigitized tags.
- */
-define( 'TS_EXIF', 5 );
-
-/**
- * Oracle format time.
- */
-define( 'TS_ORACLE', 6 );
-
-/**
- * Postgres format time.
- */
-define( 'TS_POSTGRES', 7 );
-
-/**
- * ISO 8601 basic format with no timezone: 19860209T200000Z. This is used by ResourceLoader
- */
-define( 'TS_ISO_8601_BASIC', 9 );
use Psr\Log\LoggerInterface;
use Psr\Log\LoggerAwareInterface;
+use Wikimedia\Timestamp\ConvertibleTimestamp;
/**
* This contains some static methods for
* @see http://exif.org/Exif2-2.PDF The Exif 2.2 specification
* @file
*/
+use Wikimedia\Timestamp\TimestampException;
/**
* Format Image metadata values into a human readable form.
* @file
* @ingroup Pager
*/
+use Wikimedia\Timestamp\TimestampException;
/**
* IndexPager with a formatted navigation bar
$this->classes[] = $this->alias['name'];
$this->alias = null;
$this->startToken = null;
+ } elseif ( !is_array( $token ) || (
+ $token[0] !== T_STRING &&
+ $token[0] !== T_DOUBLE_COLON &&
+ $token[0] !== T_CLASS &&
+ $token[0] !== T_WHITESPACE
+ ) ) {
+ // Ignore this call to class_alias() - compat/Timestamp.php
+ $this->alias = null;
+ $this->startToken = null;
}
}
break;
"changeemail-no-info": "Для непасрэднага доступу да гэтай старонкі Вам неабходна ўвайсьці ў сыстэму.",
"changeemail-oldemail": "Цяперашні адрас электроннай пошты:",
"changeemail-newemail": "Новы адрас электроннай пошты:",
- "changeemail-newemail-help": "Ð\9fоле Ñ\82Ñ\80Ñ\8dба пакÑ\96нÑ\83Ñ\86Ñ\8c пÑ\83Ñ\81Ñ\82Ñ\8bм, калÑ\96 вÑ\8b Ñ\85оÑ\87аÑ\86е вÑ\8bдалÑ\96Ñ\86Ñ\8c Ñ\81вой адÑ\80аÑ\81 Ñ\8dлекÑ\82Ñ\80оннай поÑ\88Ñ\82Ñ\8b. Пасьля выдаленьня вы ня зможаце ануляваць забыты пароль і ня будзеце атрымліваць лісты электроннай пошты з гэтай вікі.",
+ "changeemail-newemail-help": "Ð\9aалÑ\96 вÑ\8b Ñ\85оÑ\87аÑ\86е вÑ\8bдалÑ\96Ñ\86Ñ\8c Ñ\81вой адÑ\80аÑ\81 Ñ\8dлекÑ\82Ñ\80оннай поÑ\88Ñ\82Ñ\8b, пакÑ\96нÑ\8cÑ\86е гÑ\8dÑ\82ае поле пÑ\83Ñ\81Ñ\82Ñ\8bм. Пасьля выдаленьня вы ня зможаце ануляваць забыты пароль і ня будзеце атрымліваць лісты электроннай пошты з гэтай вікі.",
"changeemail-none": "(няма)",
"changeemail-password": "Ваш пароль у {{GRAMMAR:месны|{{SITENAME}}}}:",
"changeemail-submit": "Зьмяніць адрас электроннай пошты",
"statistics-users-active-desc": "Удзельнікі, якія выканалі нейкае дзеяньне цягам {{PLURAL:$1|апошняга $1 дня|апошніх $1 дзён|апошніх $1 дзён}}",
"pageswithprop": "Старонкі з уласьцівасьцямі старонак",
"pageswithprop-legend": "Старонкі з уласьцівасьцямі старонак",
- "pageswithprop-text": "Ð\9dа гÑ\8dÑ\82ай Ñ\81Ñ\82аÑ\80онÑ\86Ñ\8b адлÑ\8eÑ\81Ñ\82Ñ\80оÑ\9eваÑ\8eÑ\86Ñ\86а Ñ\81Ñ\82аÑ\80онкÑ\96, Ñ\8fкÑ\96Ñ\8f Ñ\9eжÑ\8bваÑ\8eÑ\86Ñ\8c пÑ\8dÑ\9eнÑ\8bÑ\8f Ñ\9eлаÑ\81Ñ\8cÑ\86Ñ\96ваÑ\81Ñ\8cÑ\86Ñ\96 Ñ\81Ñ\82аÑ\80онак",
+ "pageswithprop-text": "Ð\9dа гÑ\8dÑ\82ай Ñ\81Ñ\82аÑ\80онÑ\86Ñ\8b адлÑ\8eÑ\81Ñ\82Ñ\80оÑ\9eваÑ\8eÑ\86Ñ\86а Ñ\81Ñ\82аÑ\80онкÑ\96, Ñ\8fкÑ\96Ñ\8f Ñ\9eжÑ\8bваÑ\8eÑ\86Ñ\8c пÑ\8dÑ\9eнÑ\83Ñ\8e Ñ\9eлаÑ\81Ñ\8cÑ\86Ñ\96ваÑ\81Ñ\8cÑ\86Ñ\8c Ñ\81Ñ\82аÑ\80онкÑ\96.",
"pageswithprop-prop": "Імя ўласьцівасьці:",
"pageswithprop-submit": "Паказаць",
"pageswithprop-prophidden-long": "доўгае тэкставае значэньне ўласьцівасьці схавана ($1)",
"authmanager-change-not-supported": "Пададзеныя ўліковыя зьвесткі ня могуць быць зьмененыя, бо яны ня будуць выкарыстаныя.",
"authmanager-create-disabled": "Стварэньне рахункаў адключанае.",
"authmanager-create-from-login": "Каб стварыць рахунак, калі ласка, запоўніце палі.",
+ "authmanager-create-not-in-progress": "Стварэньне рахунку не выконваецца або страчаныя зьвесткі пра сэсію. Калі ласка, пачніце наноў з самага пачатку.",
"authmanager-realname-label": "Сапраўднае імя",
"authmanager-provider-temporarypassword": "Часовы пароль",
"changecredentials": "Зьмена ўліковых зьвестак",
"rcfilters-filter-bots-description": "স্বয়ংক্রিয় সরঞ্জাম দিয়ে করা সম্পাদনা।",
"rcfilters-filter-humans-label": "মানুষ (বট নয়)",
"rcfilters-filter-humans-description": "মানব সম্পাদক দ্বারা করা সম্পাদনা।",
- "rcfilters-filtergroup-significance": "তাতà§\8dপর্য",
+ "rcfilters-filtergroup-significance": "তাà§\8eপর্য",
"rcfilters-filter-minor-label": "অনুল্লেখ্য সম্পাদনা",
"rcfilters-filter-major-label": "অ-অনুল্লেখ্য সম্পাদনা",
"rcfilters-filtergroup-changetype": "পরিবর্তনের ধরন",
"previewnote": "'''Diwallit mat, n'eus ken ur rakweled eus an destenn-mañ.'''\nN'eo ket bet enrollet ho kemmoù evit c'hoazh !",
"continue-editing": "Mont d'an takad kemmañ",
"previewconflict": "Gant ar rakweled e teu testenn ar bajenn war wel evel ma vo pa vo bet enrollet.",
- "session_fail_preview": "Ho tigarez ! N'eus ket bet tu da enrollañ ho kemmoù rak kollet eo bet roadennoù an dalc'h.\n\nMarteze n'oc'h ket kevreet ken. <strong>Gwiriit emaoc'h mat kevreet ha klaskit en-dro</strong>.\n\nMa ne'z a ket en-dro, klaskit [Special:UserLogout|digevreañ]] hag adkevreañ war-lerc'h. Gwiriit e asant mat ho merdeet resev toupinoù a-berzh al lec'hienn-mañ ivez.",
+ "session_fail_preview": "Ho tigarez ! N'eus ket bet tu da enrollañ ho kemmoù rak kollet eo bet roadennoù an dalc'h.\n\nMarteze n'oc'h ket kevreet ken. <strong>Gwiriit emaoc'h mat kevreet ha klaskit en-dro</strong>.\n\nMa ne'z a ket en-dro c'hoazh, klaskit [[Special:UserLogout|digevreañ]] hag adkevreañ war-lerc'h. Gwiriit mat e asant ho merdeer resev toupinoù a-berzh al lec'hienn-mañ ivez.",
"session_fail_preview_html": "Ho tigarez ! N'omp ket bet gouest da enrollañ ho kemmoù rak kollet ez eus bet roadennoù e-kerzh an dalc'h.\n\n<em>Gweredekaet eo al linennoù HTML e {{SITENAME}}. Rak-se eo kuzh ar rakweledoù a-benn en em zifenn diouzh an tagadennoù JavaScript.</em>\n\n<strong>Ma oa reizh ar c'hemmoù hoc'h eus klasket degas, klaskit en-dro.</strong>\nMa ned a ket en-dro, klaskit [[Special:UserLogout|digevreañ]] hag adkevreañ goude. Gwiriit e asant mat ho merdeer degemer toupinoù a-berzh al lec'hienn-mañ ivez.",
"token_suffix_mismatch": "'''Distaolet eo bet ar c'hemmoù degaset ganeoc'h abalamour ma oa bet kemmesket an arouezennoù poentadur gant ho merdeer en daveer kemmañ. Distaolet eo bet ar c'hemmoù kuit na vije breinet ar bajennad skrid.\nC'hoarvezout a ra a-wechoù pa implijit ur servijer proksi dreinek dizanav.'''",
"edit_form_incomplete": "'''Darn eus ar furmskrid kemmañ zo chomet hep tizhout ar servijer ; gwiriit ervat emañ mat ho kemmoù tre evel m'int bet graet ganeoc'h ha klaskit en-dro.'''",
"undo-summary": "Dizober kemmoù $1 a-berzh [[Special:Contributions/$2|$2]] ([[User talk:$2|kaozeal]])",
"undo-summary-username-hidden": "Dizober ar reizhadenn $1 gant un implijer kuzhet",
"cantcreateaccount-text": "Stanket eo bet ar c'hrouiñ kontoù adal ar chomlec'h IP ('''$1''') gant [[User:$3|$3]].\n\nAn abeg roet gant $3 zo ''$2''",
+ "cantcreateaccount-range-text": "Berzet eo bet gant [[User:$3|$3]] ar c'hrouiñ kontoù adalek ar chomlec'hioù IP el lijorennoù <strong>$1</strong> m'emañ ho chomlec'h IP (<strong>$4</strong>), \n\n<em>$2</em> eo an abeg roet gant $3",
"viewpagelogs": "Gwelet ar marilhoù evit ar bajenn-mañ",
"nohistory": "Ar bajenn-mañ n'he deus tamm istor ebet.",
"currentrev": "Stumm a-vremañ pe stumm red",
"history-feed-description": "Istor ar c'hemmoù degaset war ar bajenn-mañ eus ar wiki",
"history-feed-item-nocomment": "$1 d'an $2",
"history-feed-empty": "Ar bajenn goulennet n'eus ket anezhi.\nMarteze eo bet diverket eus ar wiki, pe adanvet.\nImplijit [[Special:Search|klaskit er wiki]] evit kavout pajennoù all a c'hallfe klotañ.",
+ "history-edit-tags": "Kemmañ tikedennoù ar stummoù diuzet",
"rev-deleted-comment": "(diverradenn ar c'hemm diverket)",
"rev-deleted-user": "(anv implijer diverket)",
- "rev-deleted-event": "(elfenn dilamet)",
+ "rev-deleted-event": "(munudoù ar marilh bet dilamet)",
"rev-deleted-user-contribs": "[anv implijer pe chomlec'h IP diverket - kemm kuzhet diouzh an degasadennoù]",
"rev-deleted-text-permission": "'''Diverket''' eo bet ar stumm-mañ eus ar bajenn.\nMarteze e kavot munudoù war [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} roll ar pajennoù diverket].",
+ "rev-suppressed-text-permission": "<strong>Diverket</strong> eo bet ar stumm-mañ eus ar bajenn.\nGallout a reot kavout ar munudoù e [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} marilh an diverkadennoù].",
"rev-deleted-text-unhide": "!'''Diverket''' eo bet ar stumm-mañ eus ar bajenn.\nMarteze e kavot munudoù war [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} marilh ar pajennoù diverket].\nGallout a rit [$1 gwelet ar stumm-se] c'hoazh mar fell deoc'h kenderc'hel.",
"rev-suppressed-text-unhide": "'''Diverket''' eo bet ar stumm-mañ eus ar bajenn.\nTitouroù zo da gaout war [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} marilh ar pajennoù diverket].\nGallout a rit [$1 gwelet ar stumm-se] c'hoazh mar fell deoc'h kenderc'hel.",
"rev-deleted-text-view": "'''Diverket''' eo bet ar stumm-mañ eus ar bajenn.\nGallout a rit sellet outañ ; titouroù all a gavot war [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} marilh ar pajennoù diverket].",
"rev-showdeleted": "diskouez",
"revisiondelete": "Diverkañ/diziverkañ stummoù",
"revdelete-nooldid-title": "N'eus stumm pal ebet evit an degasadennoù",
- "revdelete-nooldid-text": "Pe n'eo ket bet spisaet ganeoc'h ar stumm(où) pal da implijout an arc'hwel-mañ evito. pe n'eus ket eus ar stummoù spisaet, pe emaoc'h o klask kuzhat ar stumm red.",
+ "revdelete-nooldid-text": "Pe n'eus ket bet spisaet ganeoc'h stumm pal ebet da lakaat an arc'hwel-mañ da vont en-dro warnañ, pe n'eus ket eus ar stummoù spisaet, pe emaoc'h o klask kuzhat ar stumm red.",
"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]]:",
"logdelete-selected": "{{PLURAL:$1|Darvoud eus ar marilh diuzet}} :",
"revdelete-text-file": "Dalc'het e vo da welet stummoù restroù dilamet en istor ar restr, nemet ne c'hallo ket an dud mont da welet un darn anezho.",
"logdelete-text": "Gwelet e vo c'hoazh dilamadennoù er marilhoù, nemet ne c'hallo ket an dud mont da welet un darn anezho.",
"tog-watchdefault": "ئەو پەڕانە و ئەو پەڕگانە من دەستکاریان دەکەم زیاد بکە بە لیستی چاودێڕییەکەم",
"tog-watchmoves": "ئەو پەڕانە و ئەو پەڕگانە کە من گواستومنەتەوە زیاد بکە بە لیستی چاودێڕییەکەم",
"tog-watchdeletion": "ئەو پەڕانە و ئەو پەڕگانە من سڕیومنەتەوە زیاد بکە بە لیستی چاودێڕییەکەم",
+ "tog-watchuploads": "ئەو پەڕگە نوێیانەی باریان دەکەم زیاد بکە ناو پێڕستی چاودێرییەکەمەوە",
+ "tog-watchrollback": "ئەو پەڕانەی کە کرداری گەڕاندنەوەم لەسەر ئەنجام داون زیاد بکە ناو پێڕستی چاودێرییەکەمەوە",
"tog-minordefault": "ھەموو دەستکارییەکان بە ورد نیشان بکە لە حاڵەتی دیفاڵت",
"tog-previewontop": "پێشبینین بەرلە چوارچێوەی دەستکاری نیشان بدە",
"tog-previewonfirst": "لە یەکەم دەستکاری دا پێشبینین نیشان بدە",
"virus-scanfailed": "سکەن ئەنجام نەدرا(کۆد $1)",
"virus-unknownscanner": "دژەڤایرس نەناسراوە:",
"logouttext": "'''ئێستا چوویتە دەرەوە.'''\n\nئاگادار بە ھەتا ئەو کاتەی کەشی وێبگەڕەکەت پاک دەکەیتەوە، لەوانەیە ھەندێک لە پەڕەکان وا پێشان بدرێن کە ھێشتا لە ژوورەوە بیت.",
+ "cannotlogoutnow-title": "ناتوانیت لە ئێستادا بچیتە دەرەوە",
+ "cannotlogoutnow-text": "توانای چوونە دەرەوەت نییە لەکاتی بەکارھێنانی $1",
"welcomeuser": "بەخێربێیت، $1!",
"welcomecreation-msg": "ھەژمارەکەت دروست کرا.\nلە بیرت نەچێت [[Special:Preferences|ھەڵبژاردەکانی {{SITENAME}}]]ت بگۆڕی.",
"yourname": "ناوی بەکارھێنەری:",
"createacct-yourpasswordagain-ph": "تێپەروشە دیسان بنووسەوە",
"userlogin-remembermypassword": "چوونەژوورەوەکەم ڕابگرە",
"userlogin-signwithsecure": "پەیوەندیی دڵنیا بەکاربھێنە",
+ "cannotlogin-title": "ناتوانیت بچیتە ژوورەوە",
+ "cannotlogin-text": "توانای چوونەژوورەوەت نییە",
+ "cannotloginnow-title": "ناتوانیت لە ئێستادا بچیتە ناوەوە",
+ "cannotloginnow-text": "توانای چوونەژوورەوەت نییە لەکاتی بەکارھێنانی $1",
+ "cannotcreateaccount-title": "ناتوانرێت ھەژمار دروست بکرێت",
"yourdomainname": "دۆمەینەکەت:",
"password-change-forbidden": "ناتوانیت تێپەڕوشەکانت لەم ویکییەدا بگۆڕیت.",
"externaldberror": "یان هەڵەی ڕێگەپێدانی بنکەدراو هەیە یان ڕێگات پێ نادرێت بۆ نوێ کردنی هەژماری دەرەکیت.",
"login": "بچۆ ژوورەوە",
+ "login-security": "شوناست دڵنیا بکەرەوە",
"nav-login-createaccount": "بچۆ ژوورەوە / ھەژمار دروست بکە",
"userlogin": "بچۆ ژوورەوە / ھەژمار دروست بکە",
"userloginnocreate": "بچۆ ژوورەوە",
"userlogin-resetpassword-link": "تێپەڕوشەکەت بیر کردووە؟",
"userlogin-helplink2": "یارمەتی بۆ چوونەژوورەوە",
"userlogin-loggedin": "تۆ ھەر ئێستا بە ناوی {{GENDER:$1|$1}} چوویتە ژوورەوە.\nفۆرمی ژێرەوە بەکاربھێنە بۆ چوونەژوورەوە وەک بەکارھێنەرێکی تر.",
+ "userlogin-reauth": "دەبێت دووبارە بچیتە ژوورەوە بۆ دڵنیا بوونەوە لە {{GENDER:$1|$1}}بوونت.",
"userlogin-createanother": "ھەژمارێکی تر دروست بکە",
"createacct-emailrequired": "ناونیشانی ئیمەیل",
"createacct-emailoptional": "ناونیشانی ئیمەیل (دڵخوازانە)",
"createacct-email-ph": "ناونیشانی ئیمەیلەکەت بنووسە",
"createacct-another-email-ph": "ناونیشانی ئیمەیڵەکەت بنووسە",
"createaccountmail": "تێپەڕوشەیەکی ھەڕەمەکیی کاتی بەکاربھێنە و بینێرە بۆ ناونیشانی ئیمەیلی دیاریکراو",
+ "createaccountmail-help": "دەتوانرێت بەکار بھێندرێت بۆ دروستکردنی ھەژمار بۆ کەسێکی تر بەبێ زانینی تێپەڕ وشەکەی.",
"createacct-realname": "ناوی ڕاستی (دڵخوازانە)",
"createaccountreason": "هۆکار:",
"createacct-reason": "ھۆکار",
"createacct-reason-ph": "بۆ ھەژمارێکی تر دروست دەکەی",
"createacct-submit": "ھەژمارەکەت دروست بکە",
"createacct-another-submit": "ھەژمار دروست بکە",
+ "createacct-continue-submit": "بەردەوامبوون لە دروستکردنی ھەژمار",
+ "createacct-another-continue-submit": "بەردەوامبوون لە دروستکردنی ھەژمار",
"createacct-benefit-heading": "{{SITENAME}} لە لایەن کەسانێک وەکوو خۆت دروست کراوە.",
"createacct-benefit-body1": "{{PLURAL:$1|دەستکاری}}",
"createacct-benefit-body2": "{{PLURAL:$1|پەڕە}}",
"createacct-benefit-body3": "دوایین {{PLURAL:$1|بەشداربوو|بەشداربووان}}",
"badretype": "تێپەڕوشەکان لەیەک ناچن.",
+ "usernameinprogress": "دروستکردنی ھەژمارێک بۆ ئەم ناوی بەکارھێنەرە لە پڕۆسەی بەرھەمھێناندایە. تکایە چاوەڕوان بە.",
"userexists": "ئەو ناوەی تۆ داوتە پێشتر بەکارھێنراوە.\nناوێکی دیکە ھەڵبژێرە.",
"loginerror": "ھەڵەی چوونەژوورەوە",
"createacct-error": "ھەڵە لە دروستکردنی ھەژمار",
"nocookiesnew": "ھەژماری بەکارھێنەری دروست کرا، بەڵام نەچوویتەوە ژوورەوە.\n{{SITENAME}} بۆ چوونەوە ژوورەوەی بەکارھێنەر کوکی بەکاردەھێنێت.\nتۆ کوکییەکەکەت لەکارخستووە.\nتکایە کوکییەکە کارا بکە، پاشان بە ناوی بەکارھێنەری و تێپەڕوشەکەت بچۆ ژوورەوە.",
"nocookieslogin": "{{SITENAME}} بۆ چوونەژوورەوە لە کووکییەکان کەڵک وەرئەگرێت.\nڕێگەت نەداوە بە کووکییەکان.\nڕێگەیان پێ بدەو و دیسان تێبکۆشە.",
"nocookiesfornew": "ھەژماری بەکارھێنەری دروست نەکرا، چون ناتوانین سەرچاوەکەی پشتڕاست بکەینەوە.\nدڵنیا بە کوکییەکانت چالاک کردووە، پەڕەکە بار بکەوە و دیسان ھەوڵ بدە.",
+ "createacct-loginerror": "ھەژمارەکە بە سەرکەوتوانە دروست کرا، بەڵام ناتوانرێت بە شێوەیەکی ئۆتۆماتیکی بکرێیتە ژوورەوە. تکایە سەردانی [[Special:UserLogin|ڕێنماییەکانی چوونەژوورەوە]] بکە.",
"noname": "ناوی بەکارهێنەرییەکی گۆنجاوت دیاری نەکردووه.",
"loginsuccesstitle": "چوویە ناوەوە",
"loginsuccess": "'''ئێستا بە ناوی «$1»ەوە لە {{SITENAME}} چوویتەتەژوورەوە.'''",
- "nosuchuser": "بەکارھێنەرێک بە ناوی «$1» نیە.\nناوی بەکارھێنەر بە گەورە و بچووک بوونی پیتەکان ھەستیارە.\nڕێنووسەکەت چاولێکەرەوە، یان [[Special:CreateAccount|ھەژمارێکی نوێ دروست بکە]].",
+ "nosuchuser": "بÛ\95کارھÛ\8eÙ\86Û\95رÛ\8eÚ© بÛ\95 Ù\86اÙ\88Û\8c «$1» Ù\86Û\8cÛ\8cÛ\95.\nÙ\86اÙ\88Û\8c بÛ\95کارھÛ\8eÙ\86Û\95ر بÛ\95 Ú¯Û\95Ù\88رÛ\95 Ù\88 بÚ\86Ù\88Ù\88Ú© بÙ\88Ù\88Ù\86Û\8c Ù¾Û\8cتÛ\95کاÙ\86 Ú¾Û\95ستÛ\8cارÛ\95.\nÚ\95Û\8eÙ\86Ù\88Ù\88سÛ\95Ú©Û\95ت Ú\86اÙ\88Ù\84Û\8eÚ©Û\95رÛ\95Ù\88Û\95Ø\8c Û\8cاÙ\86 [[Special:CreateAccount|Ú¾Û\95Ú\98Ù\85ارÛ\8eÚ©Û\8c Ù\86Ù\88Û\8e درÙ\88ست بکÛ\95]].",
"nosuchusershort": "بەکارھێنەرێک بە ناوی «$1»ەوە نیە.\nبە نووسراوەکەتدا بچۆرەوە.",
"nouserspecified": "دەبێت ناوێکی بەکارھێنەری دەستنیشان بکەیت.",
"login-userblocked": "ئەم بەکارهێنەرە بڵۆک کراوە. چوونەژوورەوە ڕێگەپێنەدراوە.",
"wrongpassword": "تێپەڕوشەی ھەڵە.\nتکایە دووبارە تێبکۆشە.",
"wrongpasswordempty": "تێپەڕەوشەی لێدراو بەتاڵبوو.\nتکایە هەوڵ بدەوە.",
"passwordtooshort": "تێپەڕوشەکەت لانی کەم دەبێ {{PLURAL:$1|١ پیت|$1 پیت}} بێت.",
+ "passwordtoolong": "تێپەڕ وشەکان ناتوانرێت لە {{PLURAL:$1|١ کارەکتەر|$1 کارەکتەر}} درێژتر بێت.",
+ "passwordtoopopular": "تێپەڕ وشە باوەکان ناتواندرێت دابنرێن. تکایە تێپەڕ وشەیەکی دەگمەنتر ھەڵبژێرە.",
"password-name-match": "تێپەڕوشەکەت ئەبێ جیاواز بێت لە ناوی بەکارهێنەریت.",
"password-login-forbidden": "بەکارهێنانی ئەم ناوی بەکارهێنەر و تێپەڕەووشەیە قەدەغەکراوە.",
"mailmypassword": "تێپەڕوشەکە ڕێک بخەوە",
"noemail": "ھیچ ئەدرەسێکی ئیمەیل تۆمار نەکراوە بۆ بەکارھێنەر « $1 ».",
"noemailcreate": "دەبێ ناونیشانێکی دروستی ئیمەیل بنووسی",
"passwordsent": "تێپەڕوشەیەکی نوێ نێررا بۆ ئەدرەسی ئیمێلی تۆمارکراوی «$1».\nتکایە دوای وەرگرتنی، دیسان بچۆ ژوورەوە.",
- "blocked-mailpassword": "ئادرەسی ئایپی تۆ بۆ دەستکاری کردن بەستراوه بۆیە بۆ بەرگری لە بەکارهێنانی نابەجێ ئەنجامی گەڕانەوەی تێپەڕوشە ڕیگە نەدراوە.",
+ "blocked-mailpassword": "ناونیشانی ئای پی تۆ بۆ دەستکاری کردن بەستراوه. بۆ بەرگری لە بەکارهێنانی نابەجێ، ئەنجامی گەڕانەوەی تێپەڕوشە ڕیگە نەدراوە لەسەر ئەم ناونیشانە ئای پییە.",
"eauthentsent": "ئیمێلێکی پشتڕاستکردنەوە بۆ ناونیشانی ئیمێلی دیاریکراو نێررا.\nپێش ئەوەی ئیمەیلی تر بۆ ئەم ھەژمارە بنێررێت، دەبێت پەیڕەوی ڕێکارەکانی ناو ئیمێلەکە بکەیت بۆ پشتڕاستکردنەوەی ئەوەی کە ئەم هەژمارە بە ڕاستی ھی تۆیە.",
"throttled-mailpassword": "ئیمەیلێکی ڕیکخستنەوەی تێپەڕوشە لە ماوەی {{PLURAL:$1|ساعەت}}ی ڕابردوودا نێردراوە.\nبۆ ڕێگری لە بەکارھێنانی خراپ، ھەر {{PLURAL:$1|ساعەت}} تاکە یەک ئیمەیلی ڕیکخستنەوەی تێپەڕوشە دەنێردرێت.",
"mailerror": "هەڵە ڕوویدا لە ناردنی ئیمەیل: $1",
"createaccount-title": "درووست کردنی ھەژمار بۆ {{SITENAME}}",
"createaccount-text": "کەسێک ھەژمارێکی بۆ ناونیشانی ئیمێلی تۆ لە {{SITENAME}}دا ($4) بە ناوی «$2»ـەوە و بە تێپەڕوشەی «$3»ـەوە دروست کردووە.\nدەبێت ھەر ئێستا بچیتە چوورەوە و تێپەڕوشەیەکەت بگۆڕیت.\n\nئەگەر ئەم ھەژمارە بە ھەڵە دروست کراوە، دەکرێت گوێ بەم پەیامە نەدەیت.",
"login-throttled": "زۆر زۆر ھەوڵت داوە بۆ چوونە ژوورەوە.\nتکایە $1 بوەستە پێش ھەوڵی دووبارە.",
+ "login-abort-generic": "چوونەژوورەوەکەت شکستی ھێنا - بەجێ ھێڵدرا",
+ "login-migrated-generic": "ھەژمارەکەت گوازراوەتەوە و ناوی بەکارھێنەرەکەت چی تر لەسەر ئەم ویکیپیدیایە بوونی نییە.",
"loginlanguagelabel": "زمان: $1",
+ "suspicious-userlogout": "داواکارییەکەت بۆ چوونە دەرەوە ڕەت کرایەوە لەبەر ئەوەی وا دیارە داواکارییەکە لەلایەن براوسەرێکی شکاوەوە نێردراوە.",
+ "createacct-another-realname-tip": "ناوی ڕاستیت پێویست نییە.\nئەگەر ھەڵت بژارد کە دایبنێیت، ئەوا بەکار دەھێندرێت بۆ ئاماژە کردن بە بەکارھێنەر بۆ بەشدارییەکانیان.",
"pt-login": "بچۆ ژوورەوە",
"pt-login-button": "بچۆ ژوورەوە",
+ "pt-login-continue-button": "بەردەوامبوونی چوونەژوورەوە",
"pt-createaccount": "ھەژمار دروست بکە",
"pt-userlogout": "بچۆ دەرەوە",
+ "user-mail-no-addy": "ھەوڵی ناردنی ئیمەڵ درا بەبێ ھەبوونی ناونیشانێکی ئیمەیڵ.",
"changepassword": "تێپەڕوشە بگۆڕە",
"resetpass_announce": "بۆ کۆتایی چوونە ژوورەوە، دەبێت تێپەڕوشەیەکی نوێ دابنێیت.",
"resetpass_text": "<!-- تێپهڕهوشهی ههژمارهكه سفر بكهرهوه -->",
"retypenew": "تێپەڕوشەی نوێ دوبارە بنووسەوە:",
"resetpass_submit": "تێپەڕوشە رێکخە و بچۆ ژوورەوە",
"changepassword-success": "تێپەڕەوشەکەت گۆڕدرا!",
+ "changepassword-throttled": "تۆ ھەوڵی زۆری چوونەژوورەوەت داوە. \nتکایە $1 چاوەڕوان بە پێش دووبارە ھەوڵدانەوە.",
+ "botpasswords": "تێپەڕ وشەی بۆت",
+ "botpasswords-disabled": "تێپەڕ وشەی بۆتەکان کوژێنرانەوە.",
+ "botpasswords-label-appid": "ناوی بۆت",
"botpasswords-label-create": "دروستکردن",
"botpasswords-label-update": "نوێکردنەوە",
"botpasswords-label-cancel": "ھەڵوەشاندنەوە",
"botpasswords-label-delete": "سڕینەوە",
"botpasswords-label-resetpassword": "ڕێکخستنەوەی تێپەڕوشە",
+ "botpasswords-bad-appid": "ناوی بۆت «$1» دروست نییە.",
+ "botpasswords-created-title": "تێپەڕ وشەی بۆت دروست کرا",
+ "botpasswords-updated-title": "تێپەڕ وشەی بۆتەکە نوێ کرایەوە",
+ "botpasswords-deleted-title": "تێپەڕ وشەی بۆت سڕدرایەوە",
"resetpass_forbidden": "تێپەڕوشەکە ناگۆڕدرێت",
"resetpass-no-info": "بۆ گەیشتنی راستەوخۆ بەم پەڕە ئەشێ بچیتە ژوورەوە.",
"resetpass-submit-loggedin": "تێپەڕوشە بگۆڕە",
"rcfilters-invalid-filter": "Invalid filter",
"rcfilters-empty-filter": "No active filters. All contributions are shown.",
"rcfilters-filterlist-title": "Filters",
+ "rcfilters-filterlist-feedbacklink": "Provide feedback on the new (beta) filters",
"rcfilters-highlightbutton-title": "Highlight results",
"rcfilters-highlightmenu-title": "Select a color",
"rcfilters-filterlist-noresults": "No filters found",
"logentry-patrol-patrol": "$1(e)k $3 orrialdearen $4 berrikuspena patruilatutzat {{GENDER:$2|markatu}} du",
"logentry-newusers-newusers": "$1 erabiltzaile kontua {{GENDER:$2|sortu da}}",
"logentry-newusers-create": "$1 erabiltzaile kontua {{GENDER:$2|sortu da}}",
- "logentry-newusers-create2": "$1 wikilariak $3 erabiltzaile kontua sortu du",
+ "logentry-newusers-create2": "$1 wikilariak $3 erabiltzaile kontua {{GENDER:$2|sortu}} du",
"logentry-newusers-byemail": "$1(e)k $3 erabiltzaile kontua {{GENDER:$2|sortu du}} eta pasahitza emailez bidali da",
"logentry-newusers-autocreate": "$1 erabiltzaile kontua automatikoki {{GENDER:$2|sortu da}}",
"logentry-upload-upload": "$1(e)k $3 {{GENDER:$2|igo du}}",
"recentchanges-label-minor": "Manja izmjena",
"recentchanges-label-bot": "Izmjenu napravio bot",
"recentchanges-label-unpatrolled": "Nepregledana izmjena",
- "recentchanges-label-plusminus": "Promjena veličine stranice (u bajtovima)",
+ "recentchanges-label-plusminus": "Promjena veličine stranice u bajtovima",
"recentchanges-legend-heading": "<strong>Legenda:</strong>",
"recentchanges-legend-newpage": "Nova stranica",
"recentchanges-legend-plusminus": "(<em>±123</em>)",
"tog-enotifminoredits": "ОагIонашта а файлашта даь хувцамаш геттара зIамига дале а хоам бе сога",
"tog-enotifrevealaddr": "ДIахайта хоамбараш чу бIаргадейта са почта адрес",
"tog-shownumberswatching": "Шоаш зем бу оагIонашта юкъе ер оагIув чуяьккха доакьошхоша таьрахь гойта",
- "tog-oldsig": "ХIанзара яздаь кулг:",
+ "tog-oldsig": "Хьа карара кулг яздар:",
"tog-fancysig": "Кулг яздара ший йола вики-разметка (автоматически тIахьожаярг йоацаш)",
"tog-uselivepreview": "Пайда эца сиха дола хьалххе бIаргтохар",
"tog-forceeditsummary": "ДIахьалхадаккха, нагахьа санна хувцама йоазонца сурт оттадара моттиг хьалъйизанза яле",
"category-file-count-limited": "Укх категори чу {{PLURAL:$1|$1 файл|$1 файлаш|1=цаI мара файл яц}}.",
"listingcontinuesabbrev": "(дIахо)",
"index-category": "Индекс оттаеш оагIонаш",
- "noindex-category": "Индекс ца оттаеш оагIонаш",
+ "noindex-category": "Индекс оттайинза оагIонаш",
"broken-file-category": "Файла тIахьожаяргаш болхбеш йоаца оагIонаш",
"about": "Сурт оттадар",
"article": "Статья",
"newwindow": " (керда кора чу)",
"cancel": "Юхадаккха",
"moredotdotdot": "ДIахо...",
- "morenotlisted": "Ð\95Ñ\80 Ñ\81пиÑ\81ок Ñ\85Ñ\8cалйиза Ñ\8fÑ\86.",
+ "morenotlisted": "Ð\95Ñ\80 Ñ\85Ñ\8cаÑ\8fзÑ\8fÑ\8cÑ\80 Ñ\85Ñ\8cалйизанза Ñ\85ила мегаÑ\88 Ñ\8f.",
"mypage": "ОагIув",
"mytalk": "Дувца оттадар",
"anontalk": "Дувца оттадар",
"showpreview": "Хьалххе бIаргтохар",
"showdiff": "Даь дола хувцамаш",
"anoneditwarning": "<strong>Теркам бе!</strong> Хьо автор хинна система чуваьннавац. Нагахьа санна Iа моллагIа хувцам бой, Хьа IP-адрес дийла массанен бIаргагуш хургда. Нагахьа санна Хьо <strong>[$1 хьачувоале]</strong> е <strong>[$2 дагара йоазув хьакхолле]</strong>, нийсдараш (хувцамаш) бувзам болаш хургда Хьа доакъашхой цIерца, иштта кхыдола толажагIи гIойленагIи дола дикаьш хургда Хьона.",
- "summary-preview": "СÑ\83Ñ\80Ñ\82 оÑ\82Ñ\82адаÑ\80 Ñ\85Ñ\83Ñ\80гда:",
- "subject-preview": "Ð\94аÑ\8cкÑ\8aа Ñ\86Iи Ñ\85Ñ\83Ñ\80гÑ\8cÑ\8f иÑ\88Ñ\82Ñ\82а:",
+ "summary-preview": "Ð¥Ñ\83вÑ\86ама Ñ\81Ñ\83Ñ\80Ñ\82 оÑ\82Ñ\82адаÑ\80а Ñ\85Ñ\8cалÑ\85е бIаÑ\80гÑ\82оÑ\85аÑ\80:",
+ "subject-preview": "Теман/коÑ\80Ñ\82баÑ\80а Ñ\85Ñ\8cалÑ\85Ñ\85е бIаÑ\80гÑ\82оÑ\85аÑ\80:",
"blockedtitle": "Доакъашхочун чIега техаб",
"blockednoreason": "бахьан белгалдаьккха дац",
"loginreqlink": "довзийта",
"notextmatches": "ОагIонай тексташта юкъе цхьатара хилар дац",
"prevn": "{{PLURAL:$1|1=хьалхайогIар|хьалхайогIараш}} $1",
"nextn": "{{PLURAL:$1|1=тIехьайоагIар|тIехьайоагIараш}} $1",
- "prevn-title": "{{PLURAL:$1|1=$1 хьалхара йоазув|$1 хьалхара йоазувнаш}}",
+ "prevn-title": "{{PLURAL:$1|ХьалхадоагIа $1 дIаяздар}}",
"nextn-title": "{{PLURAL:$1|ТIадоагIа $1 яздар|ТIадоагIа $1 яздараш}}",
"shown-title": "Гойта $1 {{PLURAL:$1|яздаьр|яздаьраш}} укх оáгIон тIа",
"viewprevnext": "ДIахьажа ($1 {{int:pipe-separator}} $2) ($3)",
- "searchmenu-exists": "'''Укх вики чу йолаш я оагӀув «[[:$1]]»'''",
+ "searchmenu-exists": "'''Укх вики чу я иштта йола оагӀув «[[:$1]]»'''",
"searchmenu-new": "<strong>Хьакхолла оагIув «[[:$1]]» укх вики-проекте!</strong>\n{{PLURAL:$2|0=|Иштта хьажа Iайха лийха оагIонга.|Иштта хьажа хьай лахара хьахиннарашка.}}",
"searchprofile-articles": "Кертера оагIонаш",
"searchprofile-images": "Мультимедиа",
"searchprofile-everything-tooltip": "Массайола оагIонаш тIа лахар (дувцар оттадара оагIонаш чулоацаш)",
"searchprofile-advanced-tooltip": "Iочуязаяь цIерий аренашка лаха",
"search-result-size": "$1 ({{PLURAL:$2|$2 дош|$2 дешаш}})",
- "search-result-category-size": "{{PLURAL:$1|1=$1 дакъа|$1 дакъаш}} ({{PLURAL:$2|1=$2 кIалцатег|$2 кIалцатегаш}}, {{PLURAL:$3|1=$3 паьла|$3 паьлий}})",
+ "search-result-category-size": "$1 {{PLURAL:$1|юкъедахар}} ($2 {{PLURAL:$2|кIалкатегори}}, $3 {{PLURAL:$3|файл}})",
"search-redirect": "(дIа-хьахьожадар $1 тIара)",
"search-section": "(дáкъа «$1»)",
"search-suggest": "Хьона эшар ер хила мега: $1",
"prefs-signature": "Кулг яздар",
"prefs-preview": "Хьалххе бIаргтохар",
"userrights-user-editname": "Iочуязъе доакъашхочун цӀи:",
- "editusergroup": "Ð¥Ñ\83вÑ\86а {{GENDER:$1|доакÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н}} тоабаш",
+ "editusergroup": "Ð\99оÑ\82Ñ\82а доакÑ\8aаÑ\88Ñ\85ой тоабаш",
"saveusergroups": "ДIаязъе {{GENDER:$1|доакъашхочун}} тоабаш",
"userrights-groupsmember": "Дакъа лоаца тоабаш чу:",
"userrights-reason": "Бахьан:",
"recentchanges-label-plusminus": "байташкахь боарам хувцар",
"recentchanges-legend-heading": "<strong>Легенда: </strong>",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (хьажа иштта [[Special:NewPages|керда оагIонашка]])",
- "rcnotefrom": "КIалхагIа хувцамаш хьахьекха я <strong>$2</strong> денза (<strong>$1</strong> кхачалца).",
+ "rcnotefrom": "КIалхагIа {{PLURAL:$5|хувцам белгалбаьккхаб}} <strong>$3, $4</strong> тIера (хьахьекхабац <strong>$1</strong>-л дукхагIа).",
"rclistfrom": "$3 $2 денза даь хувцамаш хьахьокха",
"rcshowhideminor": "$1 зIамига нийсдараш",
"rcshowhideminor-show": "Хьахьокха",
"newpages": "Керда оагIонаш",
"move": "ЦIи хувца",
"movethispage": "ЦIи хувца укх оагIон",
- "pager-newer-n": "{{PLURAL:$1|кердагIа дара|кердагIа дараш|кердагIа долачаьрахь}} $1",
+ "pager-newer-n": "$1 дукхагIа {{PLURAL:$1|керда}}",
"pager-older-n": "{{PLURAL:$1|къаьнара дара|къаьнара дараш|къаьнара долaчарех}} $1",
"booksources": "Джейнай хьасташ (источники)",
"booksources-search-legend": "Джейнах лаьца хоам лахар",
"protect_expiry_old": "Чакхадалара ха — дахáр да.",
"protect-text": "Хьа йиш я оагIон '''$1''' лорадара лагIа бIаргтоха a, хувца a .",
"protect-locked-access": "Хьа дагара йоазонга тоъал бокъо яц оагIон лорадара лагIа хувца. '''$1''' оагIон карара оттадараш:",
- "protect-cascadeon": "{{PLURAL:$1|1=КIалхахь хьагойташ йола оагIувчу|КIалхахь хьагойташ йола оагIувнашчу}} ер оагIув чуяккха халарахь, лорам Iоттая я, хурхала лорам Iоттая я. Укх оагIувни лорама лагIа хувца йийш йолаш я, амма хурхала лорам хувцлургдац.",
+ "protect-cascadeon": "Каскадни лорадар оттадаь йолча {{PLURAL:$1|1=кIалхагIа белгалъяь оагIон чу|кIалхагIа белгалъяь оагIонаш чу}} юкъеяьккха хилара бахьане ер оагIув хIанза лораяь я. Укх оагIон лорадара дарж хувцаро каскадни лорадар меттахдоаккхадац.",
"protect-default": "Лорадар доацаш",
"protect-fallback": "Могадаьд алхха ше «$1» волача доакъашхошта",
"protect-level-autoconfirmed": "Могадаьд алхха ше-ше къоабалбаь хинна доакъашхошта",
"unblocklogentry": "чIега баьстаб $1",
"block-log-flags-nocreate": "дагара йоазонаш кхоллар пурам деннадац",
"move-page-legend": "ОагIон цIи хувцар",
- "movepagetext": "КIалхара кепаца болхабеча, оаш оагIувни цIи хувцаргья, цунна хувцамий тептар кхыйола меттиге дIачудоаккхаш.\nКIаьнара цIерахь керда цIерий дIачудаккхам хургда.\nКIаьнара цIера тIа даь дола дIачудаккхамаш, шун ший лоIамахь кердадаккха йийш хургья.\nИз оаш ца дой, дехар да, [[Special:DoubleRedirects|шолха]] кхы [[Special:BrokenRedirects|вIашагIаяккха дIачудаккхамий]] кардоламахь хьажа.\nОаш жоп лу, шоай чуяккха йола Iинкаш, даим болхбеш хургдолга.\n\nЗем бахка, оагIувни цIи хувцалургьяц, изза мо цIи йолаш оагIув хилача. \nЙолаш йола оагIув хувца йийш яц, амма хийца йола оагIув юха хьахувца йийш я. \n\n'''Хоамхайтар'''\n\nЦIи хувцар, йовзаш йола оагIувнаший, доккха а цаьхха а хувцамшка дIатIадала мегаш да.\nДехар да, оаш дIахо болх белаьхь, хургдола хIама кхеташ долга, кхеталаш.",
- "movepagetalktext": "ТIаÑ\82еÑ\85а дÑ\83вÑ\86ама оагIÑ\83в, Ñ\88ий лоIамаÑ\85Ñ\8c Ñ\86Iи Ñ\85Ñ\83влÑ\83Ñ\80гÑ\8cÑ\8f, '''еÑ\80 дага а доаÑ\86аÑ\80, доаÑ\86а:'''\n\n*Ð\98зза мо Ñ\86Iи йолаÑ\88 Ñ\8fÑ\8cÑ\81Ñ\81а дÑ\83вÑ\86ама оагIÑ\83в Ñ\8f е\n*Ð\9eаÑ\88 кIалÑ\85аÑ\85Ñ\8c белгало даÑ\8cдаÑ\86.\n\nÐ\98з иÑ\88Ñ\82Ñ\82а дале, кÑ\83лги новкÑ\8aоÑ\81Ñ\82алÑ\86а оагIÑ\83внаÑ\88 вIаÑ\88агIаÑ\82оÑ\85а е дIадеÑ\85Ñ\8cаÑ\8fккÑ\85а деза Ñ\88Ñ\83н.",
+ "movepagetext": "КIалха белгаляьча формах пайда ийца Iа оагIон цIи хувцаргья, цун хувцамий тептар кхыйола моттиге оттаярца цхьанна.\nКъаьнарча цIерах хургья кердача цIера дIа-сахьожадар.\nХьа аьттув ба къаьнарча цIера хинна дIа-сахьожадараш ше-ше кердадаккха.\nНагахьа санна Iа из ца дой, дехар ду, [[Special:DoubleRedirects|шолха]] а [[Special:BrokenRedirects|хеттанза дIа-сахьожадараш]] долаш дий тахка.\nХьо бехктокхаме ва тIахьожаяргаш шоаш тIахьожаде дезача нийса хилар.\n\nТеркам бе, оагIон цIи <strong>хувцалургьйоацалга</strong> нагахьа санна изза мо цIи йола оагIув йолаш яле. Чу хIама доацача оагIонашта е дIа-сахьожадарашта, кхы а цар хувцамий истори йице, из новкъа дац. Из яхилга да, нагахьа Iа харца цIи хувцар даь дале, ше хинна цIи юхадIахувца йиш я, амма бакъда йолаш йола оагIув ца ховш дIаяккха аьттув бац. \n\n<strong>Белгалдоахар:</strong>\nГIоряьннача оагIонай цIи хувцаро тIехдоккхеи цIаьххеи хувцамаш доаладе мега.\nБоккъала, дIахо хье дIавахалехьа, кхета, хила мегаш дар хургдолга.",
+ "movepagetalktext": "Ð\9dагаÑ\85Ñ\8cа Ñ\81анна Iа еÑ\80 пÑ\83нкÑ\82 белгалÑ\8aйой, Ñ\86Ñ\83нÑ\86а бÑ\83взам бола дÑ\83вÑ\86а оÑ\82Ñ\82адаÑ\80а оагIÑ\83в иÑ\88Ñ\82Ñ\82а Ñ\88е-Ñ\88е Ñ\86Iи Ñ\85ийÑ\86а Ñ\85Ñ\83Ñ\80гÑ\8cÑ\8f, нагаÑ\85Ñ\8cа Ñ\81анна изза мо Ñ\86Iи йола Ñ\8fÑ\8cÑ\81Ñ\81а йоаÑ\86а дÑ\83вÑ\86а оÑ\82Ñ\82адаÑ\80а оагIÑ\83в йолаÑ\88 йиÑ\86е.\n\nÐ\98з иÑ\88Ñ\82Ñ\82а дале, нагаÑ\85Ñ\8cа из Ñ\8dÑ\88аÑ\88 дале, IайÑ\85а оагIон Ñ\86Iи дIаÑ\85Ñ\83вÑ\86а.",
"newtitle": "Керда цIи:",
"move-watch": "Ер оагIув зем бара хьаязъяьра юкъеяьккха",
"movepagebtn": "ОагIон цIи хувца",
"nextn-title": "{{PLURAL:$1|Risultato successivo|$1 risultati successivi}}",
"shown-title": "Mostra {{PLURAL:$1|un risultato|$1 risultati}} per pagina",
"viewprevnext": "Vedi ($1 {{int:pipe-separator}} $2) ($3).",
- "searchmenu-exists": "'''Sul sito esiste una pagina il cui nome è \"[[:$1]]\"'''",
+ "searchmenu-exists": "<strong>Su questo wiki esiste una pagina il cui nome è \"[[:$1]]\".</strong> {{PLURAL:$2|0=|Vedi anche gli altri risultati trovati.}}",
"searchmenu-new": "<strong>Crea la pagina \"[[:$1]]\" su questo wiki!</strong> {{PLURAL:$2|0=|Vedi anche la pagina trovata con la tua ricerca|Vedi anche i risultati della ricerca}}",
"searchprofile-articles": "Pagine di contenuti",
"searchprofile-images": "Multimedia",
"Gi777ga",
"Matma Rex",
"Sopopruidze",
- "Dixtosa"
+ "Dixtosa",
+ "OpusDEI"
]
},
"tog-underline": "ბმულების ხაზგასმა:",
"tog-showhiddencats": "დამალული კატეგორიების ჩვენება",
"tog-norollbackdiff": "ცვლილების გაუქმებისას არ მანახო ცვლილებათა განსხვავება",
"tog-useeditwarning": "გამაფრთხილე, როდესაც დავტოვებ რედაქტირებად გვერდს, დაუმახსოვრებელი ცვლილებებით",
- "tog-prefershttps": "á\83£á\83¡á\83\90á\83¤á\83 á\83\97á\83®á\83\9d á\83\99á\83\90á\83\95á\83¨á\83\98á\83 á\83\98á\83¡ á\83\9bá\83£á\83\93á\83\90á\83\9b გამოყენება ავტორიზაციის შემდეგ",
+ "tog-prefershttps": "á\83\9bá\83£á\83\93á\83\90á\83\9b á\83£á\83¡á\83\90á\83¤á\83 á\83\97á\83®á\83\9d á\83\99á\83\90á\83\95á\83¨á\83\98á\83 á\83\98á\83¡ გამოყენება ავტორიზაციის შემდეგ",
"underline-always": "მუდამ",
"underline-never": "არასდროს",
"underline-default": "დამოკიდებული მომხმარებელზე ან ბრაუზერის არჩევანზე",
"category-file-count-limited": "შემდეგი {{PLURAL:$1|ფაილი|$1 ფაილები}} ამ კატეგორიაშია.",
"listingcontinuesabbrev": "გაგრძ.",
"index-category": "გვერდების ინდექსაცია",
- "noindex-category": "არ არსებობს ინდექსირებული გვერდები",
+ "noindex-category": "არაინდექსირებული გვერდები",
"broken-file-category": "გვერდები ფაილების არასწორი ბმულებით",
"categoryviewer-pagedlinks": "($1) ($2)",
"category-header-numerals": "$1–$2",
"newwindow": "(ახალ ფანჯარაში)",
"cancel": "გაუქმება",
"moredotdotdot": "ვრცლად...",
- "morenotlisted": "á\83\94á\83¡ á\83\90á\83 á\83\90á\83¡á\83 á\83£á\83\9aá\83\98 á\83¡á\83\98á\83\90á\83\90.",
+ "morenotlisted": "á\83\94á\83¡ á\83¡á\83\98á\83\90 á\83¨á\83\94á\83\98á\83«á\83\9aá\83\94á\83\91á\83\90 á\83\98á\83§á\83\9dá\83¡ á\83\90á\83 á\83\90á\83¡á\83 á\83£á\83\9aá\83\98.",
"mypage": "გვერდი",
"mytalk": "განხილვა",
"anontalk": "განხილვა",
"searcharticle": "გვერდი",
"history": "გვერდის ისტორია",
"history_short": "ისტორია",
+ "history_small": "ისტორია",
"updatedmarker": "განახლდა ჩემი ბოლო შემოსვლის შემდეგ",
"printableversion": "დასაბეჭდი ვერსია",
"permalink": "მუდმივი ბმული",
"viewyourtext": "თქვენ შეგიძლიათ იხილოთ და დააკოპიროთ <strong>თქვენი რედაქტირებების</strong> საწყისი ტექსტი ამ გვერდზე:",
"protectedinterface": "ეს გვერდი წარმოადგენს ტექსტურ ინტერფეისს პროგრამული უზრუნველყოფისათვის და დაცულია ვანდალიზმის აღკვეთის მიზნით.",
"editinginterface": "'''ყურადღება:''' თქვენ არედაქტირებთ გვერდს, რომელიც პროგრამის ინტერფეისის ტექსტს შეიცავს. \nამ გვერდზე განხორციელებული რედაქტირება გამოიწვევს ამ ვიკის სხვა მომხმარებელთა სამუშაო ინტერფეისის შეცვლასაც. \nიმისათვის, რომ დაამატოთ ან შეცვალოთ თარგმანები ყველა ვიკიში, გთხოვთ, გამოიყენოთ მედიავიკის ლოკალიზაციის პროექტი [https://translatewiki.net/ translatewiki.net].",
- "translateinterface": "თარგმანების ყველა ვიკიში დასამატებლად ან შესაცვლელად, გთხოვთ გამოიყენოთ მედიავიკებისლოკალიზაციის პროექტი [https://translatewiki.net/ translatewiki.net].",
+ "translateinterface": "თარგმანების ყველა ვიკიში დასამატებლად ან შესაცვლელად, გთხოვთ გამოიყენოთ მედიავიკების ლოკალიზაციის პროექტი [https://translatewiki.net/ translatewiki.net].",
"cascadeprotected": "ეს გვერდი რედაქტირებისგან დაცულია, რადგან იგი ჩართულია შემდეგ {{PLURAL:$1|გვერდში, რომლის|გვერდებში, რომელთა}} დასაცავადაც ჩართულია პარამეტრი \"იერარქიული\":\n$2",
"namespaceprotected": "თქვენ არ გაქვთ '''$1''' სახელთა სივრცეში გვერდების რედაქტირების უფლება.",
"customcssprotected": "თქვენ არ გაქვთ ამ CSS გვერდის რედაქტირების უფლება, ვინაიდან ის სხვა მომხმარებლის პირად კონფიგურაციას შეიცავს.",
"group-bot-member": "бот",
"grouppage-bot": "{{ns:project}}:Бот-влак",
"grouppage-sysop": "{{ns:project}}:Сайтвиктарыше-влак",
+ "right-writeapi": "Возымашлан API-ым кучылтмаш",
"newuserlogpage": "У пайдаланыше регистрацийым эртарыме журнал",
"rightslog": "Участникын праваже-влакым ончыктышо журнал",
"action-edit": "тиде лаштыкым тӧрлаташ",
"minoreditletter": "и",
"newpageletter": "У",
"boteditletter": "б",
+ "rc-change-size-new": "Вашталтымаш деч вара $1 {{PLURAL:$1|байт}} лийын",
"rc-enhanced-expand": "Тичмашын ончыкташ",
"rc-enhanced-hide": "Рашлык-влакым шылташ",
"recentchangeslinked": "Ваш кылдалтше тӧрлатымаш-влак",
"file-nohires": "Кугурак чаплык уке.",
"svg-long-desc": "SVG файл, шкенжын кугытшо: $1 × $2 пиксел, файлын кугытшо: $3",
"show-big-image": "Тӱҥалтыш файл",
+ "show-big-image-preview": "Ончылгоч ончымо годым кугыт: $1",
"show-big-image-size": "$1 × $2 пиксел",
"newimages-legend": "Фильтр",
"ilsubmit": "Кычал",
"specialpages-group-pagetools": "Лаштык ӱзгар-влак",
"specialpages-group-redirects": "Вес вере колтышо спецлаштык-влак",
"external_image_whitelist": " #Оставьте эту строчку такой, как она есть<pre>\n#Разместите здесь фрагменты регулярных выражений (ту часть, что находится между //)\n#они будут соотнесены с URL внешних изображений.\n#Подходящие будут показаны как изображения, остальные будут показаны как ссылки на изображения.\n#Строки, начинающиеся с # считаются комментариями.\n#Строки не чувствительны к регистру\n\n#Размещайте фрагменты регулярных выражений над этой строчкой. Оставьте эту строчку такой, как она есть.</pre>",
+ "tag-filter": "[[Special:Tags|Метке]] фильтр:",
"logentry-delete-delete": "$1 {{GENDER:$2|шӧрен|шӧрен}} лаштыкым $3",
+ "logentry-newusers-create": "Пайдаланыше {{GENDER:$2}} $1 лаштыкым ыштен.",
"revdelete-summary": "тӧрлатымаш-влакым возен ончыктымаш",
"searchsuggest-search": "{{SITENAME}} сайтым кычалаш",
"expand_templates_ok": "Йӧра",
"eauthentsent": "На назначената адреса е испратена потврдна порака.\nПред да се испрати друга порака на корисничката сметка, ќе морате да ги проследите напатствијата во пораката, за да потврдите дека таа корисничка сметка е навистина ваша.",
"throttled-mailpassword": "Веќе е испратена порака за измена на лозинката во {{PLURAL:$1|изминатиов час|изминативе $1 часа}}.\nЗа да се спречи злоупотреба, само едно потсетување може да се праќа на {{PLURAL:$1|секој час|секои $1 часа}}.",
"mailerror": "Грешка при испраќање на е-поштата: $1",
- "acct_creation_throttle_hit": "Посетители на ова вики користејќи ја вашата IP-адреса создале {{PLURAL:$1|1 сметка|$1 сметки}} во последниве $2, при што е достигнат најголемиот допуштен број на кориснички сметки предвиден и овозможен за овој период.\nКако резултат на ова, посетителите кои ја користат оваа IP-адреса во моментов нема да можат да создаваат нови сметки.",
+ "acct_creation_throttle_hit": "Посетители на ова вики користејќи ја вашата IP-адреса создале {{PLURAL:$1|1 сметка|$1 сметки}} во последниве $2, при што е достигнат најголемиот допуштен број на кориснички сметки предвиден и овозможен за овој период.\nКако последица на ова, посетителите кои ја користат оваа IP-адреса во моментов нема да можат да создаваат нови сметки.",
"emailauthenticated": "Вашата е-пошта адреса е потврдена на $2 во $3 ч.",
"emailnotauthenticated": "Вашата е-поштенска адреса сè уште не е потврдена.\nНема да биде испратена е-пошта во ниту еден од следниве случаи.",
"noemailprefs": "Наведете е-поштенска адреса за да функционираат следниве својства.",
"nextn": "{{PLURAL:следна $1|следни $1}}",
"prev-page": "претходна страница",
"next-page": "следна страница",
- "prevn-title": "{{PLURAL:$1|Ð\9fÑ\80еÑ\82Ñ\85оден|Ð\9fÑ\80еÑ\82Ñ\85одни}} $1 {{PLURAL:$1|Ñ\80езÑ\83лÑ\82аÑ\82|Ñ\80езÑ\83лÑ\82аÑ\82и}}",
- "nextn-title": "{{PLURAL:$1|Следен|Следни}} $1 {{PLURAL:$1|Ñ\80езÑ\83лÑ\82аÑ\82|Ñ\80езÑ\83лÑ\82аÑ\82и}}",
- "shown-title": "Ð\9fÑ\80икажи $1 {{PLURAL:$1|Ñ\80езÑ\83лÑ\82аÑ\82|Ñ\80езÑ\83лÑ\82аÑ\82и}} на страница",
+ "prevn-title": "{{PLURAL:$1|Ð\9fÑ\80еÑ\82Ñ\85одна|Ð\9fÑ\80еÑ\82Ñ\85одни}} $1 {{PLURAL:$1|Ñ\81Ñ\82авка|Ñ\81Ñ\82авки}}",
+ "nextn-title": "{{PLURAL:$1|Следна|Следни}} $1 {{PLURAL:$1|Ñ\81Ñ\82авка|Ñ\81Ñ\82авки}}",
+ "shown-title": "Ð\9fÑ\80икажи $1 {{PLURAL:$1|Ñ\81Ñ\82авка|Ñ\81Ñ\82авки}} по страница",
"viewprevnext": "Погледајте ($1 {{int:pipe-separator}} $2) ($3).",
"searchmenu-exists": "'''На ова вики има страница со наслов „[[:$1]]“'''",
"searchmenu-new": "<strong>Создајте ја страницата „[[:$1]]“ на ова вики!</strong> {{PLURAL:$2|0=|Погледајте ја и страницата најдена со пребарувањето.|Погледајте го и најденото од пребарувањето.}}",
"search-relatedarticle": "Поврзано",
"searchrelated": "поврзано",
"searchall": "сè",
- "showingresults": "Подолу {{PLURAL:$1|е прикажан '''1''' резултат|се прикажани '''$1''' резултати}} почнувајќи од бр. '''$2'''.",
- "showingresultsinrange": "Ð\94олÑ\83 {{PLURAL:$1|е пÑ\80икажан до <strong>еден</strong> Ñ\80езÑ\83лÑ\82аÑ\82|Ñ\81е пÑ\80икажани до <strong>$1</strong> Ñ\80езÑ\83лÑ\82аÑ\82и}} во опсег од <strong>$2</strong> до <strong>$3</strong>.",
- "search-showingresults": "{{PLURAL:$4|РезÑ\83лÑ\82аÑ\82 <strong>$1</strong> од <strong>$3</strong>|РезÑ\83лÑ\82аÑ\82и <strong>$1 - $2</strong> од <strong>$3</strong>}}",
- "search-nonefound": "Нема резултати што одговараат на бараното.",
- "search-nonefound-thiswiki": "Ð\9dема Ñ\80езÑ\83лÑ\82аÑ\82и што одговараат на бараното на ова мрежно место.",
+ "showingresults": "Подолу {{PLURAL:$1|е прикажана <strong>1</strong> ставка|се прикажани <strong>$1</strong> ставки}} почнувајќи од бр. <strong>$2</strong>.",
+ "showingresultsinrange": "Ð\9fодолÑ\83 {{PLURAL:$1|е пÑ\80икажана до <strong>една</strong> Ñ\81Ñ\82авка|Ñ\81е пÑ\80икажани до <strong>$1</strong> Ñ\81Ñ\82авки}} во опсег од <strong>$2</strong> до <strong>$3</strong>.",
+ "search-showingresults": "{{PLURAL:$4|СÑ\82авка <strong>$1</strong> од <strong>$3</strong>|СÑ\82авки <strong>$1 - $2</strong> од <strong>$3</strong>}}",
+ "search-nonefound": "Нема исходни ставки што одговараат на бараното.",
+ "search-nonefound-thiswiki": "Ð\9dема Ñ\81Ñ\82авки што одговараат на бараното на ова мрежно место.",
"powersearch-legend": "Напредно пребарување",
"powersearch-ns": "Пребарај во следниве именски простори:",
"powersearch-togglelabel": "Избор:",
"wantedcategories": "Потребни категории",
"wantedpages": "Потребни страници",
"wantedpages-summary": "Список на непостоечки страници со највеќе врски што водат до нив, исклучувајќи страниците до кои водат само пренасочувања. Список на непостоечки страници до кои водат пренасочувања ќе најдете на [[{{#special:BrokenRedirects}}|списокот на прекинати пренасочувања]].",
- "wantedpages-badtitle": "Ð\9dевалиден наÑ\81лов во Ñ\80езÑ\83лÑ\82аÑ\82ите: $1",
+ "wantedpages-badtitle": "Ð\9dеважеÑ\87ки наÑ\81лов во Ñ\81Ñ\82авките: $1",
"wantedfiles": "Потребни податотеки",
"wantedfiletext-cat": "Следниве податотеки се користат, но не постојат. Податотеките од други складишта може да се наведени дури и ако постојат. Таквите ќе бидат <del>поништени</del> од списокот. Покрај ова, страниците што содржат податотеки кои не постојат се наведени на [[:$1]].",
"wantedfiletext-cat-noforeign": "Следниве податотеки се користат, но не постојат. Покрај ова, страниците што ги содржат непостоечките податотеки се наведени во [[:$1]].",
"feedback-external-bug-report-button": "Поднеси техничка задача",
"feedback-dialog-title": "Поднеси мислење",
"feedback-dialog-intro": "Послужете се со едноставниот образец подолу за да го поднесете вашето мислење. Коментарот ќе ви биде додаден на страницата „$1“, заедно со вашето корисничко име.",
- "feedback-error1": "Грешка: Непрепознаен резултат од извршникот",
+ "feedback-error1": "Грешка: Непрепознаен исход од извршникот",
"feedback-error2": "Грешка: Уредувањето не успеа",
"feedback-error3": "Грешка: Извршникот не одговара",
"feedback-error4": "Грешка: Не можам да објавам под дадениот наслов",
"expand_templates_html_output": "Сиров HTML-извод",
"expand_templates_ok": "ОК",
"expand_templates_remove_comments": "Отстрани коментари",
- "expand_templates_remove_nowiki": "Притаи <nowiki> ознаки во резултатот",
+ "expand_templates_remove_nowiki": "Притаи <nowiki> ознаки во исходот",
"expand_templates_generate_xml": "Прикажи XML-дрво на расчленувањето",
"expand_templates_generate_rawhtml": "Прикажувај сиров HTML",
"expand_templates_preview": "Преглед",
"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-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-filterlist-noresults": "Message showing no results found for searching a filter.",
"virus-scanfailed": "неуспешно скенирање (код $1)",
"virus-unknownscanner": "непознати антивирус:",
"logouttext": "<strong>Одјављени сте.</strong>\n\nИмајте на уму да неке странице могу наставити да се приказују као да сте још пријављени, све док не очистите привремену меморију свог прегледача.",
+ "cannotlogoutnow-title": "Одјава тренутно није могућа",
+ "cannotlogoutnow-text": "Одјава није могућа током употребе $1.",
"welcomeuser": "Добро дошли, $1!",
"welcomecreation-msg": "Ваш налог је отворен.\nНе заборавите да промените своја [[Special:Preferences|подешавања]].",
"yourname": "Корисничко име:",
"changepassword-success": "Ваша лозинка је успешно промењена!",
"changepassword-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
"botpasswords": "Лозинке ботова",
+ "botpasswords-disabled": "Лозинке ботова су онемогућене.",
"botpasswords-label-appid": "Име бота:",
"botpasswords-label-create": "Направи",
"botpasswords-label-update": "Ажурирај",
"hr_tip": "Водоравна линија (користити ретко)",
"summary": "Опис измене:",
"subject": "Тема:",
- "minoredit": "мања измена",
- "watchthis": "надгледај ову страницу",
+ "minoredit": "Ð\9eво Ñ\98е маÑ\9aа измена",
+ "watchthis": "Ð\9dадгледај ову страницу",
"savearticle": "Сачувај страницу",
"savechanges": "Сачувај измене",
"publishpage": "Објави страницу",
"difference-multipage": "(разлике између страница)",
"lineno": "Ред $1:",
"compareselectedversions": "Упореди изабране измене",
- "showhideselectedversions": "Ð\9fÑ\80икажи/Ñ\81акÑ\80иÑ\98 изабÑ\80ане измене",
+ "showhideselectedversions": "Ð\9fÑ\80омени видÑ\99ивоÑ\81Ñ\82 изабÑ\80аниÑ\85 измена",
"editundo": "поништи",
"diff-empty": "(Нема разлике)",
"diff-multi-sameuser": "({{PLURAL:$1|Једна међуизмена истог корисника није приказана|$1 међуизмене истог корисника није приказано|$1 међуизмена истог корисника није приказано}})",
"saveusergroups": "Сачувај {{GENDER:$1|корисничке}} групе",
"userrights-groupsmember": "Члан:",
"userrights-groupsmember-auto": "Подразумевано члан и:",
- "userrights-groups-help": "Можете променити групе којима овај корисник припада.\n* Означен квадратић означава да се корисник налази у тој групи.\n* Неозначен квадратић означава да се корисник не налази у тој групи.\n* Звездица означава да не можете уклонити групу ако је додате и обратно.",
+ "userrights-groups-help": "Можете променити групе којима овај корисник припада.\n* Означен квадратић означава да се корисник налази у тој групи.\n* Неозначен квадратић означава да се корисник не налази у тој групи.\n* Звездица (*) означава да не можете уклонити групу ако је додате и обратно.\n* Тараба (#) означава да једино можете одложити време истека ове групе; не можете га убрзати.",
"userrights-reason": "Разлог:",
"userrights-no-interwiki": "Немате овлашћења да мењате корисничка права на другим викијима.",
"userrights-nodatabase": "База података $1 не постоји или није локална.",
"recentchangeslinked-page": "Назив странице:",
"recentchangeslinked-to": "Прикажи измене страница које су повезане с датом страницом",
"recentchanges-page-added-to-category": "[[:$1]] је додата у категорију",
- "recentchanges-page-added-to-category-bundled": "[[:$1]] и још [[Special:WhatLinksHere/$1|{{PLURAL:$2|једна страница|$2 странице}}]] су додате у категорију",
+ "recentchanges-page-added-to-category-bundled": "[[:$1]] је додана у категорију, [[Special:WhatLinksHere/$1|ова страница је повезана са другим страницама]]",
"recentchanges-page-removed-from-category": "[[:$1]] је уклоњена из категорије",
- "recentchanges-page-removed-from-category-bundled": "[[:$1]] и још [[Special:WhatLinksHere/$1|{{PLURAL:$2|једна страница|$2 странице}}]] су уклоњене из категорије",
+ "recentchanges-page-removed-from-category-bundled": "[[:$1]] је уклоњена из категорије, [[Special:WhatLinksHere/$1|ова страница је повезана са другим страницама]]",
"autochange-username": "Медијавики аутоматска измена",
"upload": "Отпреми датотеку",
"uploadbtn": "Отпреми датотеку",
"emailccsubject": "Копија ваше поруке кориснику $1: $2",
"emailsent": "Имејл је послат",
"emailsenttext": "Ваша имејл порука је послата.",
- "emailuserfooter": "Овај имејл је {{GENDER:$1|послао|послала}} $1 {{GENDER:$2|кориснику|корисници}} $2 помоћу „{{int:emailuser}}“ с викија {{SITENAME}}.",
+ "emailuserfooter": "Овај имејл је {{GENDER:$1|послао|послала}} $1 {{GENDER:$2|кориснику|корисници}} $2 помоћу „{{int:emailuser}}“ с викија {{SITENAME}}. Ако одговорите на овај имејл, {{GENDER:$2|Ваш}} имејл ће бити непосредно прослеђен ка {{GENDER:$1|првобитном пошиљаоцу}}, чиме ће те {{GENDER:$2|му|јој}} открити {{GENDER:$2|Вашу}} имејл адресу.",
"usermessage-summary": "Слање системске поруке.",
"usermessage-editor": "Уређивач системских порука",
"usermessage-template": "MediaWiki:UserMessage",
"editcomment": "Опис измене: <em>$1</em>.",
"revertpage": "Враћене измене [[Special:Contribs/$2|$2]] ([[User talk:$2|разговор]]) на последњу измену корисника [[User:$1|$1]]",
"revertpage-nouser": "Враћене су измене скривеног корисника на последњу измену {{GENDER:$1|корисника|кориснице}} [[User:$1|$1]]",
- "rollback-success": "Враћене су измене {{GENDER:$1|корисника|кориснице}} $1\nна последњу измену {{GENDER:$2|корисника|кориснице}} $2.",
+ "rollback-success": "Враћене су измене {{GENDER:$1|корисника|кориснице}} {{GENDER:$3|$1}}\nна последњу измену {{GENDER:$2|корисника|кориснице}} {{GENDER:$4|$2}}.",
"sessionfailure-title": "Сесија је окончана",
"sessionfailure": "Изгледа да постоји проблем с вашом сесијом;\nова радња је отказана да би се избегла злоупотреба.\nВратите се на претходну страницу, поново је учитајте и покушајте поново.",
"changecontentmodel": "Промени модел садржаја странице",
"watchlistedit-clear-removed": "{{PLURAL:$1|1 наслов је уклоњен|$1 наслова су уклоњена|$1 наслова је уклоњено}}:",
"watchlistedit-too-many": "Има превише страница за приказ овде.",
"watchlisttools-clear": "испразни списак надгледања",
- "watchlisttools-view": "прикажи сродне измене",
+ "watchlisttools-view": "Ð\9fрикажи сродне измене",
"watchlisttools-edit": "прикажи и уреди списак надгледања",
"watchlisttools-raw": "измени сиров списак надгледања",
"iranian-calendar-m1": "Фарвардин",
"special-characters-group-ipa": "ИПА",
"special-characters-group-symbols": "симболи",
"special-characters-group-greek": "грчки",
+ "special-characters-group-greekextended": "проширени грчки",
"special-characters-group-cyrillic": "ћирилица",
"special-characters-group-arabic": "арапски",
"special-characters-group-arabicextended": "проширени арапски",
"tog-watchdefault": "Dodaj stranice i datoteke koje izmenim u spisak nadgledanja",
"tog-watchmoves": "Dodaj stranice i datoteke koje premestim u spisak nadgledanja",
"tog-watchdeletion": "Dodaj stranice i datoteke koje obrišem u spisak nadgledanja",
+ "tog-watchuploads": "Dodaj datoteke koje otpremim u spisak nadgledanja",
"tog-watchrollback": "Dodaj stranice na kojima sam vratio izmene u spisak nadgledanja",
"tog-minordefault": "Označavaj sve izmene kao manje",
"tog-previewontop": "Prikaži pregled pre okvira za uređivanje",
"tog-shownumberswatching": "Prikaži broj korisnika koji nadgledaju",
"tog-oldsig": "Tekući potpis:",
"tog-fancysig": "Smatraj potpis kao vikitekst (bez samopovezivanja)",
- "tog-uselivepreview": "Koristi trenutan pregled",
+ "tog-uselivepreview": "Koristi trenutni pregled",
"tog-forceeditsummary": "Upozori me kada ne unesem opis izmene",
"tog-watchlisthideown": "Sakrij moje izmene sa spiska nadgledanja",
"tog-watchlisthidebots": "Sakrij izmene botova sa spiska nadgledanja",
"tog-ccmeonemails": "Pošalji mi kopije imejlova koje pošaljem drugim korisnicima",
"tog-diffonly": "Ne prikazuj sadržaj stranice ispod razlika",
"tog-showhiddencats": "Prikaži skrivene kategorije",
- "tog-norollbackdiff": "Izostavi razliku nakon izvršenog vraćanja",
+ "tog-norollbackdiff": "Ne prikazuj razliku nakon izvršenog vraćanja",
"tog-useeditwarning": "Upozori me kada napuštam stranicu sa nesačuvanim promenama",
"tog-prefershttps": "Uvek koristi sigurnu konekciju kada sam prijavljen.",
"underline-always": "uvek podvlači",
"hr_tip": "Vodoravna linija (koristiti retko)",
"summary": "Opis izmene:",
"subject": "Tema:",
- "minoredit": "manja izmena",
- "watchthis": "nadgledaj ovu stranicu",
+ "minoredit": "Ovo je manja izmena",
+ "watchthis": "Nadgledaj ovu stranicu",
"savearticle": "Sačuvaj stranicu",
"savechanges": "Sačuvaj izmene",
"publishpage": "Objavi stranicu",
"difference-multipage": "(razlike između stranica)",
"lineno": "Red $1:",
"compareselectedversions": "Uporedi izabrane izmene",
- "showhideselectedversions": "Prikaži/sakrij izabrane izmene",
+ "showhideselectedversions": "Promeni vidljivost izabranih izmena",
"editundo": "poništi",
"diff-empty": "(Nema razlike)",
"diff-multi-sameuser": "({{PLURAL:$1|Jedna međuizmena istog korisnika nije prikazana|$1 međuizmene istog korisnika nije prikazano|$1 međuizmena istog korisnika nije prikazano}})",
"username": "{{GENDER:$1|Korisničko ime}}:",
"prefs-memberingroups": "{{PLURAL:$1|Grupa|Grupe}}:",
"prefs-memberingroups-type": "$1",
- "prefs-registration": "Vreme upisa:",
+ "prefs-registration": "Vreme registracije:",
"prefs-registration-date-time": "$1",
"yourrealname": "Pravo ime:",
"yourlanguage": "Jezik:",
"tooltip-watchlistedit-raw-submit": "Ažuriraj spisak",
"tooltip-recreate": "Ponovo napravite stranicu iako je obrisana",
"tooltip-upload": "Započnite otpremanje",
- "tooltip-rollback": "Opcija „Vrati“ vraća izmene poslednjeg korisnika",
+ "tooltip-rollback": "„Vrati“ vraća izmene poslednjeg korisnika jednim klikom",
"tooltip-undo": "Poništava ovu izmenu i otvara obrazac za uređivanje.",
"tooltip-preferences-save": "Sačuvaj postavke",
"tooltip-summary": "Unesite kratak opis",
"watchlistedit-clear-removed": "{{PLURAL:$1|1 naslov je uklonjen|$1 naslova su uklonjena|$1 naslova je uklonjeno}}:",
"watchlistedit-too-many": "Ima previše stranica za prikaz ovde.",
"watchlisttools-clear": "isprazni spisak nadgledanja",
- "watchlisttools-view": "prikaži srodne izmene",
+ "watchlisttools-view": "Prikaži srodne izmene",
"watchlisttools-edit": "prikaži i uredi spisak nadgledanja",
"watchlisttools-raw": "izmeni sirov spisak nadgledanja",
"iranian-calendar-m1": "Farvardin",
"special-characters-group-ipa": "IPA",
"special-characters-group-symbols": "Simboli",
"special-characters-group-greek": "grčki",
+ "special-characters-group-greekextended": "prošireni grčki",
"special-characters-group-cyrillic": "ćirilica",
"special-characters-group-arabic": "arapski",
"special-characters-group-arabicextended": "prošireni arapski",
"saveprefs": "Шыгжаары",
"restoreprefs": "Шупту баштайгы ниити шилилгелерни restore",
"prefs-editing": "Өскертир",
- "rows": "Одуруглар:",
- "columns": "Баганалар:",
"searchresultshead": "Дилээр",
"timezoneuseserverdefault": "Викиниң ниити шилилгезин ажыглаары ($1)",
"servertime": "Серверниң шагы:",
"hours": "{{PLURAL:$1|1=$1 шак|$1 шак}}",
"days": "{{PLURAL:$1|1=$1 хүн|$1 хүн}}",
"ago": "$1 бурунгаар",
- "bad_image_list": "ФоÑ\80мадÑ\8b мÑ\8bндÑ\8bг бооÑ\80 Ñ\83жÑ\83Ñ\80лÑ\83г:\n\nЧүгле даңзÑ\8bнÑ\8bÒ£ идегеÑ\82Ñ\82еÑ\80и (Ñ\8dлеменÑ\82илеÑ\80и) Ñ\81анаÑ\82Ñ\8bнаÑ\80 бооÑ\80 (* деп демдекÑ\82ен Ñ\8dгелÑ\8dÑ\8dн одÑ\83Ñ\80Ñ\83глаÑ\80).\nÐ\9eдÑ\83Ñ\80Ñ\83гнÑ\83Ò£ биÑ\80ги Ñ\88өлүдүү Ñ\81алдÑ\8bнмаÑ\81 Ñ\87Ñ\83Ñ\80Ñ\83малÑ\87е Ñ\88өлүдүг болÑ\83Ñ\80Ñ\83 албан.\nÐ\9eл-ла одÑ\83Ñ\80Ñ\83гнÑ\83Ò£ аÑ\80Ñ\82кан Ñ\88өлүдүглеÑ\80и онзагай кÑ\8bлдÑ\8bÑ\80 азÑ\8b Ñ\87Ñ\83Ñ\80Ñ\83мал капÑ\81Ñ\8bÑ\80Ñ\8bп болÑ\83Ñ\80 Ñ\87үүлдеÑ\80 кÑ\8bлдÑ\8bÑ\80 Ñ\81анаÑ\82Ñ\82Ñ\8bнар.",
+ "bad_image_list": "ФоÑ\80мадÑ\8b мÑ\8bндÑ\8bг болÑ\83Ñ\80 Ñ\83жÑ\83Ñ\80лÑ\83г:\n\nÐ\94аңзÑ\8bда Ñ\87үгле Ñ\8dлеменÑ\82илеÑ\80 Ñ\81анаÑ\82Ñ\8bнаÑ\80 (* деп демдекÑ\82ен Ñ\8dгелÑ\8dÑ\8dн одÑ\83Ñ\80Ñ\83глаÑ\80).\nÐ\9eдÑ\83Ñ\80Ñ\83гда биÑ\80 дÑ\83гааÑ\80 айÑ\82Ñ\8bг болза кииÑ\80 бижиÑ\82Ñ\82инмеÑ\81 Ñ\87Ñ\83Ñ\80Ñ\83кÑ\87е айÑ\82Ñ\8bÑ\80 Ñ\83жÑ\83Ñ\80лÑ\83г.\nÐ\9eл-ла одÑ\83Ñ\80Ñ\83гнÑ\83Ò£ Ó©Ñ\81ке айÑ\82Ñ\8bглаÑ\80Ñ\8b, Ñ\87Ñ\83Ñ\80Ñ\83кÑ\82аÑ\80нÑ\8b кииÑ\80 бижидип болÑ\83Ñ\80 аÑ\80Ñ\8bннаÑ\80же айÑ\82Ñ\8bп Ñ\82Ñ\83Ñ\80ар.",
"metadata": "Чурумал дугайында медээлер",
"metadata-help": "Бо файлда цифралыг камераларның болгаш сканерлерниң немеп каары немелде медээлер бар. Файлды кылган соонда эдип турган болза, ооң чамдык параметрлери ооң амгы чуруунга дүүшпес бооп болур.",
"metadata-fields": "Бо даңзыда айыткан чурумалдар метаданныйларның кезектери чурумалдың арынынга көстүп кээр, метаданныйлар таблицазын дүрүп каан болур. \nАрткан кезектер аайлаан ёзугаар чажыт көстүр.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"Silovan",
"David1010",
"Macofe",
- "Nemo bis"
+ "Nemo bis",
+ "Otogi"
]
},
"tog-underline": "რცხუეფიშ ათოღაზუა:",
"viewyourtext": "თქვა შეილებუნა ქოძირათ '''თქვანი რედაქტირაფეფიშ''' დაჭყაფური ტექსტი თე ხასჷლას დო გეჭოფათ თიშ ანგი.",
"protectedinterface": "ეს გვერდი წარმოადგენს ტექსტურ ინტერფეისს პროგრამული უზრუნველყოფისათვის და დაცულია ვანდალიზმის აღკვეთის მიზნით.",
"editinginterface": "<strong>ყურადღება:</strong> თქვენ არედაქტირებთ გვერდს, რომელიც პროგრამის ინტერფეისის ტექსტს შეიცავს. \nამ გვერდზე განხორციელებული რედაქტირება გამოიწვევს ამ ვიკის სხვა მომხმარებელთა სამუშაო ინტერფეისის შეცვლასაც.",
- "translateinterface": "თარგმანების ყველა ვიკიში დასამატებლად ან შესაცვლელად, გთხოვთ გამოიყენოთ მედიავიკებისლოკალიზაციის პროექტი [https://translatewiki.net/ translatewiki.net].",
+ "translateinterface": "თარგმანების ყველა ვიკიში დასამატებლად ან შესაცვლელად, გთხოვთ გამოიყენოთ მედიავიკების ლოკალიზაციის პროექტი [https://translatewiki.net/ translatewiki.net].",
"cascadeprotected": "ეს გვერდი რედაქტირებისგან დაცულია, რადგან იგი ჩართულია შემდეგ {{PLURAL:$1|გვერდში, რომლის |გვერდებში, რომელთა}} დასაცავადაც ჩართულია პარამეტრი \"იერარქიული\":\n$2",
"namespaceprotected": "თქვენ არ გაქვთ '''$1''' სახელთა სივრცეში გვერდების რედაქტირების უფლება.",
"customcssprotected": "თქვენ არ გაქვთ ამ CSS გვერდის რედაქტირების უფლება, ვინაიდან ის სხვა მომხმარებლის პირად კონფიგურაციას შეიცავს.",
"editusergroup": "載入使用者群組",
"editinguser": "變更{{GENDER:$1|使用者}} <strong>[[User:$1|$1]]</strong> 的使用者權限 $2",
"viewinguserrights": "檢視{{GENDER:$1|使用者}}<strong>[[User:$1|$1]]</strong>的使用者權限 $2",
- "userrights-editusergroup": "編輯使用者群組",
+ "userrights-editusergroup": "編輯{{GENDER:$1|使用者}}群組",
"userrights-viewusergroup": "檢視{{GENDER:$1|使用者}}群組",
"saveusergroups": "儲存{{GENDER:$1|使用者}}群組",
"userrights-groupsmember": "所屬群組:",
"editcomment": "編輯摘要為:<em>$1</em>。",
"revertpage": "已還原 [[Special:Contributions/$2|$2]] ([[User talk:$2|對話]]) 的編輯為最後由 [[User:$1|$1]] 所修訂的版本",
"revertpage-nouser": "已還隱藏使用者的編輯為最後 {{GENDER:$1|[[User:$1|$1]]}} 修訂的版本",
- "rollback-success": "已還原 $1 所做的編輯;\n變更回由 $2 修訂的最後一個版本。",
+ "rollback-success": "已還原 {{GENDER:$3|$1}} 所做的編輯;\n變更回由 {{GENDER:$4|$2}} 修訂的最後一個版本。",
"rollback-success-notify": "已還原 $1 所做的編輯;\n變更回由 $2 修訂的最後一個版本。[$3 顯示變更]",
"sessionfailure-title": "連線階段失敗",
"sessionfailure": "您的登入連線階段似乎有問題,\n為了預防連線階段受到劫持攻擊,此動作已經被取消。\n請返回上一頁,重新讀取該頁面再試一次。",
'rcfilters-invalid-filter',
'rcfilters-empty-filter',
'rcfilters-filterlist-title',
+ 'rcfilters-filterlist-feedbacklink',
'rcfilters-filterlist-noresults',
'rcfilters-filtergroup-registration',
'rcfilters-filter-registered-label',
'mediawiki.rcfilters.filters.dm',
'oojs-ui.styles.icons-moderation',
'oojs-ui.styles.icons-editing-core',
+ 'oojs-ui.styles.icons-interactions',
],
],
'mediawiki.special' => [
"ooui-dialog-process-retry": "ز نۉ تلاش کونين",
"ooui-dialog-process-continue": "ديندا گرهڌن",
"ooui-selectfile-button-select": "گولإڤورچين کردن جانیا",
- "ooui-selectfile-placeholder": "هيژ جانيایي گولإ ڤورچين نڤابيڌإ"
+ "ooui-selectfile-placeholder": "هيژ جانيایي گولإ ڤورچين نڤابيڌإ",
+ "ooui-selectfile-dragdrop-placeholder": "جانيانأ ڤأنين ايچو"
}
"ooui-dialog-process-error": "Un dra bennak a-dreuz a zo bet",
"ooui-dialog-process-dismiss": "Disteurel",
"ooui-dialog-process-retry": "Klask en-dro",
- "ooui-dialog-process-continue": "Kenderc'hel"
+ "ooui-dialog-process-continue": "Kenderc'hel",
+ "ooui-selectfile-button-select": "Diuzañ ur restr",
+ "ooui-selectfile-not-supported": "N'eo ket skoret an diuzañ restroù",
+ "ooui-selectfile-placeholder": "N'eus bet diuzet restr ebet",
+ "ooui-selectfile-dragdrop-placeholder": "Lezel ar restr amañ"
}
"authors": [
"Jagwar"
]
- }
+ },
+ "ooui-outline-control-move-down": "Hampidina ilay zavatra",
+ "ooui-outline-control-move-up": "Hampiakatra ilay zavatra",
+ "ooui-outline-control-remove": "Hanala iay zavatra",
+ "ooui-toolbar-more": "Be kokoa",
+ "ooui-toolgroup-expand": "Be kokoa",
+ "ooui-toolgroup-collapse": "Kely kokoa",
+ "ooui-dialog-message-accept": "OK",
+ "ooui-dialog-message-reject": "Avela",
+ "ooui-dialog-process-error": "Nisy hadisoana nitranga",
+ "ooui-dialog-process-dismiss": "Esorina",
+ "ooui-dialog-process-retry": "Andramana indray",
+ "ooui-dialog-process-continue": "Tohizana",
+ "ooui-selectfile-button-select": "Misafidia rakitra iray",
+ "ooui-selectfile-not-supported": "Tsy zaka ny fisafidiana rakitra",
+ "ooui-selectfile-placeholder": "Tsy misy rakitra voafidy",
+ "ooui-selectfile-dragdrop-placeholder": "Hametraka rakitra eto"
}
},
"ooui-outline-control-move-down": "Flytt element ned",
"ooui-outline-control-move-up": "Flytt element opp",
- "ooui-toolbar-more": "Fleire",
+ "ooui-toolbar-more": "Meir",
+ "ooui-toolgroup-expand": "Meir",
+ "ooui-toolgroup-collapse": "Færre",
+ "ooui-dialog-message-reject": "Bryt av",
+ "ooui-dialog-process-error": "Noko gjekk gale",
+ "ooui-dialog-process-dismiss": "Lat att",
+ "ooui-dialog-process-continue": "Hald fram",
"ooui-selectfile-button-select": "Vel ei fil",
"ooui-selectfile-placeholder": "Inga fil er vald"
}
{
"@metadata": {
"authors": [
- "Saanvel"
+ "Saanvel",
+ "Abbas dhothar"
]
},
"ooui-outline-control-move-down": "شیہ تھلے کرو",
"ooui-outline-control-remove": "شیہ مٹاؤ",
"ooui-toolbar-more": "ہور",
"ooui-toolgroup-expand": "ہور",
+ "ooui-toolgroup-collapse": "گھٹ",
"ooui-dialog-message-accept": "OK",
"ooui-dialog-message-reject": "مکاؤ",
"ooui-dialog-process-error": "کوئی رپھڑ پے گیا اے۔",
"ooui-dialog-process-dismiss": "צומאַכן",
"ooui-dialog-process-retry": "פרובירט נאכאמאל",
"ooui-dialog-process-continue": "פֿארזעצן",
+ "ooui-selectfile-button-select": "קלויבט א טעקע",
"ooui-selectfile-not-supported": "טעקע אויסווייל נישט געשטיצט",
"ooui-selectfile-placeholder": "קיין טעקע נישט אויסגעוויילט"
}
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:20Z
+ * Date: 2017-02-28T23:19:40Z
*/
( function ( OO ) {
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:25Z
+ * Date: 2017-02-28T23:19:44Z
*/
+/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */
+/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */
.oo-ui-element-hidden {
display: none !important;
/* stylelint-disable-line declaration-no-important */
cursor: default;
}
.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
-.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
display: inline-block;
vertical-align: middle;
}
}
.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover,
.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus {
- outline: none;
+ outline: 0;
}
.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-iconElement-icon,
.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-iconElement-icon {
.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
border-color: #aaa;
- outline: none;
+ outline: 0;
}
.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
margin-left: -0.5em;
margin-right: -0.5em;
+ display: inline-block;
+ vertical-align: middle;
}
.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
margin-right: 0.3em;
position: relative;
}
.oo-ui-panelLayout-scrollable {
- overflow-y: auto;
+ overflow: auto;
-webkit-transform: translateZ(0);
transform: translateZ(0);
}
}
.oo-ui-popupWidget {
position: absolute;
- left: 0;
}
.oo-ui-popupWidget-popup {
position: relative;
display: block;
position: absolute;
/* `top` property is to be set in theme's selector due to specific `@size-anchor` values */
- left: 0;
background-repeat: no-repeat;
}
.oo-ui-popupWidget-head {
.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover,
.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus {
border-color: rgba(0, 0, 0, 0.2);
- outline: none;
+ outline: 0;
}
.oo-ui-dropdownInputWidget.oo-ui-widget-disabled select {
color: #ccc;
-webkit-transition: border-color 250ms ease, box-shadow 250ms ease;
-moz-transition: border-color 250ms ease, box-shadow 250ms ease;
transition: border-color 250ms ease, box-shadow 250ms ease;
+ /* stylelint-disable indentation */
+ /* stylelint-enable indentation */
}
.oo-ui-textInputWidget input.oo-ui-pendingElement-pending,
.oo-ui-textInputWidget textarea.oo-ui-pendingElement-pending {
background-color: transparent;
}
+.oo-ui-textInputWidget input::-webkit-input-placeholder,
+.oo-ui-textInputWidget textarea::-webkit-input-placeholder {
+ color: #72777d;
+ opacity: 1;
+}
+.oo-ui-textInputWidget input:-ms-input-placeholder,
+.oo-ui-textInputWidget textarea:-ms-input-placeholder {
+ color: #72777d;
+ opacity: 1;
+}
+.oo-ui-textInputWidget input::-moz-placeholder,
+.oo-ui-textInputWidget textarea::-moz-placeholder {
+ color: #72777d;
+ opacity: 1;
+}
+.oo-ui-textInputWidget input:-moz-placeholder,
+.oo-ui-textInputWidget textarea:-moz-placeholder {
+ color: #72777d;
+ opacity: 1;
+}
+.oo-ui-textInputWidget input::placeholder,
+.oo-ui-textInputWidget textarea::placeholder {
+ color: #72777d;
+ opacity: 1;
+}
.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
- outline: none;
+ outline: 0;
border-color: #a7dcff;
box-shadow: 0 0 0.3em #a7dcff, 0 0 0 #fff;
}
-moz-box-sizing: border-box;
box-sizing: border-box;
}
-.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon,
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
position: absolute;
+ top: 0;
+ height: 100%;
}
.oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle {
cursor: pointer;
.oo-ui-dropdownWidget-handle:hover {
border-color: rgba(0, 0, 0, 0.2);
}
-.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
- top: 0;
- right: 0;
- margin: 0.775em;
-}
.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
- top: 0;
left: 0.25em;
- margin: 0.3em;
+ margin: 0 0.3em;
}
.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
line-height: 2.5em;
margin: 0 0.5em;
}
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
+ right: 0;
+ margin: 0 0.775em;
+}
.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-dropdownWidget-handle {
color: #ccc;
text-shadow: 0 1px 1px #fff;
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:25Z
+ * Date: 2017-02-28T23:19:44Z
*/
+/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */
+/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */
.oo-ui-element-hidden {
display: none !important;
/* stylelint-disable-line declaration-no-important */
cursor: default;
}
.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
-.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
display: inline-block;
vertical-align: middle;
}
.oo-ui-buttonElement > .oo-ui-buttonElement-button:focus::-moz-focus-inner {
border-color: transparent;
}
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- margin-left: 0;
-}
.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
margin-right: 0.25em;
margin-left: 0.46875em;
padding-left: 2.4em;
}
.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
- padding: 0.546875em 1em;
+ position: relative;
min-height: 2.5em;
- min-width: 3.125em;
border-radius: 2px;
- position: relative;
+ padding: 0.546875em 1em;
+}
+.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button {
+ min-width: 3.125em;
+}
+.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
+ min-width: 0;
}
.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
line-height: 1.25;
}
.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ display: block;
position: absolute;
- top: 0.2em;
+ top: 0;
+ height: 100%;
left: 0.5625em;
}
.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
position: relative;
}
.oo-ui-panelLayout-scrollable {
- overflow-y: auto;
+ overflow: auto;
-webkit-transform: translateZ(0);
transform: translateZ(0);
}
margin-right: 0;
}
.oo-ui-horizontalLayout > .oo-ui-layout {
- margin-bottom: 0;
+ margin-top: 0;
}
.oo-ui-optionWidget {
position: relative;
}
.oo-ui-popupWidget {
position: absolute;
- left: 0;
}
.oo-ui-popupWidget-popup {
position: relative;
display: block;
position: absolute;
/* `top` property is to be set in theme's selector due to specific `@size-anchor` values */
- left: 0;
background-repeat: no-repeat;
}
.oo-ui-popupWidget-head {
-moz-box-sizing: border-box;
box-sizing: border-box;
}
+.oo-ui-dropdownInputWidget-php {
+ border-right: 1px solid #a2a9b1;
+ border-radius: 2px;
+ overflow-x: hidden;
+}
.oo-ui-dropdownInputWidget select {
- background-color: #fff;
- height: 2.275em;
- font-size: inherit;
- font-family: inherit;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
border: 1px solid #a2a9b1;
border-radius: 2px;
- padding-left: 1em;
+ padding: 0.5em 1em;
+ font-size: inherit;
+ font-family: inherit;
vertical-align: middle;
}
.oo-ui-dropdownInputWidget option {
height: 1.5em;
padding: 0.5em 1em;
}
-.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover,
+.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select {
+ background-color: #f8f9fa;
+ background-position: -9999em 0;
+ background-repeat: no-repeat;
+ color: #222;
+ -webkit-transition: background-color 100ms, border-color 100ms, box-shadow 100ms;
+ -moz-transition: background-color 100ms, border-color 100ms, box-shadow 100ms;
+ transition: background-color 100ms, border-color 100ms, box-shadow 100ms;
+}
+.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover {
+ background-color: #fff;
+ color: #444;
+ border-color: #a2a9b1;
+}
+.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:active {
+ color: #000;
+ border-color: #72777d;
+}
.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:focus {
+ border-color: #36c;
outline: 0;
+ box-shadow: inset 0 0 0 1px #36c;
+}
+.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select::-ms-expand {
+ display: none;
+}
+.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:not( [no-ie] ) {
+ background-position: right 1.75em center;
+ width: calc( 100% + 1em );
+ height: 2.5em;
+ padding: 0 0 0 1em;
}
.oo-ui-dropdownInputWidget.oo-ui-widget-disabled select {
+ background-color: #eaecf0;
color: #72777d;
border-color: #c8ccd1;
- background-color: #eaecf0;
}
.oo-ui-radioInputWidget {
position: relative;
-webkit-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
-moz-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+ /* stylelint-disable indentation */
+ /* stylelint-enable indentation */
}
.oo-ui-textInputWidget.oo-ui-widget-enabled input:hover,
.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:hover {
border-color: #c8ccd1;
box-shadow: inset 0 0 0 1px #c8ccd1;
}
-@media screen and (min-width: 0) {
- .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
- outline: 1px solid #36c;
- outline-offset: -2px;
- }
-}
-.oo-ui-textInputWidget.oo-ui-widget-enabled :-moz-placeholder {
+.oo-ui-textInputWidget.oo-ui-widget-enabled input::-webkit-input-placeholder,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea::-webkit-input-placeholder {
color: #72777d;
opacity: 1;
}
-.oo-ui-textInputWidget.oo-ui-widget-enabled ::-moz-placeholder {
+.oo-ui-textInputWidget.oo-ui-widget-enabled input:-ms-input-placeholder,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:-ms-input-placeholder {
color: #72777d;
opacity: 1;
}
-.oo-ui-textInputWidget.oo-ui-widget-enabled :-ms-input-placeholder {
+.oo-ui-textInputWidget.oo-ui-widget-enabled input::-moz-placeholder,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea::-moz-placeholder {
color: #72777d;
+ opacity: 1;
}
-.oo-ui-textInputWidget.oo-ui-widget-enabled ::-webkit-input-placeholder {
+.oo-ui-textInputWidget.oo-ui-widget-enabled input:-moz-placeholder,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:-moz-placeholder {
color: #72777d;
+ opacity: 1;
}
-.oo-ui-textInputWidget.oo-ui-widget-enabled :placeholder-shown {
+.oo-ui-textInputWidget.oo-ui-widget-enabled input::placeholder,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea::placeholder {
color: #72777d;
+ opacity: 1;
+}
+@media screen and (min-width: 0) {
+ .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
+ outline: 1px solid #36c;
+ outline-offset: -2px;
+ }
}
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input,
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea {
}
.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
left: 0;
- height: 100%;
max-height: 2.375em;
margin-left: 0.5em;
background-position: right center;
}
.oo-ui-textInputWidget > .oo-ui-labelElement-label {
color: #72777d;
- padding: 0.4em;
- line-height: 1.5;
+ margin-top: 1px;
+ padding: 0.625em 0.546875em 0.546875em;
+ line-height: 1.172em;
}
.oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label {
margin-right: 2.0875em;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
-.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
+.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon,
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
position: absolute;
+ top: 0;
+ height: 100%;
}
.oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle {
cursor: pointer;
border-radius: 2px;
}
.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
- top: 0;
right: 0;
- margin: 0.775em;
+ margin: 0 0.775em;
}
.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
- top: 0;
left: 0.25em;
- margin: 0.3em;
+ margin: 0 0.3em;
}
.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
margin: 0 1em;
.oo-ui-comboBoxInputWidget-php > .oo-ui-indicatorElement-indicator {
pointer-events: none;
}
-.oo-ui-comboBoxInputWidget input,
-.oo-ui-comboBoxInputWidget textarea {
+.oo-ui-comboBoxInputWidget input {
height: 2.5em;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
-.oo-ui-comboBoxInputWidget.oo-ui-comboBoxInputWidget-empty input,
-.oo-ui-comboBoxInputWidget.oo-ui-comboBoxInputWidget-empty textarea {
+.oo-ui-comboBoxInputWidget.oo-ui-comboBoxInputWidget-empty input {
border-right-width: 1px;
}
.oo-ui-comboBoxInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:20Z
+ * Date: 2017-02-28T23:19:40Z
*/
( function ( OO ) {
}
};
+/**
+ * Get the number of pixels that an element's content is scrolled to the left.
+ *
+ * Adapted from <https://github.com/othree/jquery.rtl-scroll-type>.
+ * Original code copyright 2012 Wei-Ko Kao, licensed under the MIT License.
+ *
+ * This function smooths out browser inconsistencies (nicely described in the README at
+ * <https://github.com/othree/jquery.rtl-scroll-type>) and produces a result consistent
+ * with Firefox's 'scrollLeft', which seems the sanest.
+ *
+ * @static
+ * @method
+ * @param {HTMLElement|Window} el Element to measure
+ * @return {number} Scroll position from the left.
+ * If the element's direction is LTR, this is a positive number between `0` (initial scroll position)
+ * and `el.scrollWidth - el.clientWidth` (furthest possible scroll position).
+ * If the element's direction is RTL, this is a negative number between `0` (initial scroll position)
+ * and `-el.scrollWidth + el.clientWidth` (furthest possible scroll position).
+ */
+OO.ui.Element.static.getScrollLeft = ( function () {
+ var rtlScrollType = null;
+
+ function test() {
+ var $definer = $( '<div dir="rtl" style="font-size: 14px; width: 1px; height: 1px; position: absolute; top: -1000px; overflow: scroll">A</div>' ),
+ definer = $definer[ 0 ];
+
+ $definer.appendTo( 'body' );
+ if ( definer.scrollLeft > 0 ) {
+ // Safari, Chrome
+ rtlScrollType = 'default';
+ } else {
+ definer.scrollLeft = 1;
+ if ( definer.scrollLeft === 0 ) {
+ // Firefox, old Opera
+ rtlScrollType = 'negative';
+ } else {
+ // Internet Explorer, Edge
+ rtlScrollType = 'reverse';
+ }
+ }
+ $definer.remove();
+ }
+
+ return function getScrollLeft( el ) {
+ var isRoot = el.window === el ||
+ el === el.ownerDocument.body ||
+ el === el.ownerDocument.documentElement,
+ scrollLeft = isRoot ? $( window ).scrollLeft() : el.scrollLeft,
+ // All browsers use the correct scroll type ('negative') on the root, so don't
+ // do any fixups when looking at the root element
+ direction = isRoot ? 'ltr' : $( el ).css( 'direction' );
+
+ if ( direction === 'rtl' ) {
+ if ( rtlScrollType === null ) {
+ test();
+ }
+ if ( rtlScrollType === 'reverse' ) {
+ scrollLeft = -scrollLeft;
+ } else if ( rtlScrollType === 'default' ) {
+ scrollLeft = scrollLeft - el.scrollWidth + el.clientWidth;
+ }
+ }
+
+ return scrollLeft;
+ };
+}() );
+
/**
* Get scrollable object parent
*
*/
OO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension ) {
var i, val,
- // props = [ 'overflow' ] doesn't work due to https://bugzilla.mozilla.org/show_bug.cgi?id=889091
+ // Browsers do not correctly return the computed value of 'overflow' when 'overflow-x' and
+ // 'overflow-y' have different values, so we need to check the separate properties.
props = [ 'overflow-x', 'overflow-y' ],
$parent = $( el ).parent();
i = props.length;
while ( i-- ) {
val = $parent.css( props[ i ] );
+ // We assume that elements with 'overflow' (in any direction) set to 'hidden' will never be
+ // scrolled in that direction, but they can actually be scrolled programatically. The user can
+ // unintentionally perform a scroll in such case even if the application doesn't scroll
+ // programatically, e.g. when jumping to an anchor, or when using built-in find functionality.
+ // This could cause funny issues...
if ( val === 'auto' || val === 'scroll' ) {
return $parent[ 0 ];
}
if ( this.input instanceof OO.ui.InputWidget ) {
if ( this.input.getInputId() ) {
this.$element.attr( 'for', this.input.getInputId() );
+ } else {
+ this.$label.on( 'click', function () {
+ this.fieldWidget.focus();
+ return false;
+ }.bind( this ) );
}
}
this.$element.addClass( 'oo-ui-labelWidget' );
};
/**
- * Element that will stick under a specified container, even when it is inserted elsewhere in the
- * document (for example, in a OO.ui.Window's $overlay).
+ * Element that will stick adjacent to a specified container, even when it is inserted elsewhere
+ * in the document (for example, in an OO.ui.Window's $overlay).
*
* The elements's position is automatically calculated and maintained when window is resized or the
* page is scrolled. If you reposition the container manually, you have to call #position to make
* @constructor
* @param {Object} [config] Configuration options
* @cfg {jQuery} [$floatable] Node to position, assigned to #$floatable, omit to use #$element
- * @cfg {jQuery} [$floatableContainer] Node to position below
+ * @cfg {jQuery} [$floatableContainer] Node to position adjacent to
+ * @cfg {string} [verticalPosition='below'] Where to position $floatable vertically:
+ * 'below': Directly below $floatableContainer, aligning f's top edge with fC's bottom edge
+ * 'above': Directly above $floatableContainer, aligning f's bottom edge with fC's top edge
+ * 'top': Align the top edge with $floatableContainer's top edge
+ * 'bottom': Align the bottom edge with $floatableContainer's bottom edge
+ * 'center': Vertically align the center with $floatableContainer's center
+ * @cfg {string} [horizontalPosition='start'] Where to position $floatable horizontally:
+ * 'before': Directly before $floatableContainer, aligning f's end edge with fC's start edge
+ * 'after': Directly after $floatableContainer, algining f's start edge with fC's end edge
+ * 'start': Align the start (left in LTR, right in RTL) edge with $floatableContainer's start edge
+ * 'end': Align the end (right in LTR, left in RTL) edge with $floatableContainer's end edge
+ * 'center': Horizontally align the center with $floatableContainer's center
*/
OO.ui.mixin.FloatableElement = function OoUiMixinFloatableElement( config ) {
// Configuration initialization
// Initialization
this.setFloatableContainer( config.$floatableContainer );
this.setFloatableElement( config.$floatable || this.$element );
+ this.setVerticalPosition( config.verticalPosition || 'below' );
+ this.setHorizontalPosition( config.horizontalPosition || 'start' );
};
/* Methods */
/**
* Set floatable container.
*
- * The element will be always positioned under the specified container.
+ * The element will be positioned relative to the specified container.
*
* @param {jQuery|null} $floatableContainer Container to keep visible, or null to unset
*/
}
};
+/**
+ * Change how the element is positioned vertically.
+ *
+ * @param {string} position 'below', 'above', 'top', 'bottom' or 'center'
+ */
+OO.ui.mixin.FloatableElement.prototype.setVerticalPosition = function ( position ) {
+ if ( [ 'below', 'above', 'top', 'bottom', 'center' ].indexOf( position ) === -1 ) {
+ throw new Error( 'Invalid value for vertical position: ' + position );
+ }
+ this.verticalPosition = position;
+ if ( this.$floatable ) {
+ this.position();
+ }
+};
+
+/**
+ * Change how the element is positioned horizontally.
+ *
+ * @param {string} position 'before', 'after', 'start', 'end' or 'center'
+ */
+OO.ui.mixin.FloatableElement.prototype.setHorizontalPosition = function ( position ) {
+ if ( [ 'before', 'after', 'start', 'end', 'center' ].indexOf( position ) === -1 ) {
+ throw new Error( 'Invalid value for horizontal position: ' + position );
+ }
+ this.horizontalPosition = position;
+ if ( this.$floatable ) {
+ this.position();
+ }
+};
+
/**
* Toggle positioning.
*
positioning = positioning === undefined ? !this.positioning : !!positioning;
+ if ( positioning && !this.warnedUnattached && !this.isElementAttached() ) {
+ OO.ui.warnDeprecation( 'FloatableElement#togglePositioning: Before calling this method, the element must be attached to the DOM.' );
+ this.warnedUnattached = true;
+ }
+
if ( this.positioning !== positioning ) {
this.positioning = positioning;
+ this.needsCustomPosition =
+ this.verticalPostion !== 'below' ||
+ this.horizontalPosition !== 'start' ||
+ !OO.ui.contains( this.$floatableContainer[ 0 ], this.$floatable[ 0 ] );
+
closestScrollableOfContainer = OO.ui.Element.static.getClosestScrollableContainer( this.$floatableContainer[ 0 ] );
- this.needsCustomPosition = !OO.ui.contains( this.$floatableContainer[ 0 ], this.$floatable[ 0 ] );
// If the scrollable is the root, we have to listen to scroll events
// on the window because of browser inconsistencies.
if ( $( closestScrollableOfContainer ).is( 'html, body' ) ) {
* @return {boolean}
*/
OO.ui.mixin.FloatableElement.prototype.isElementInViewport = function ( $element, $container ) {
- var elemRect, contRect,
- leftEdgeInBounds = false,
- bottomEdgeInBounds = false,
- rightEdgeInBounds = false;
+ var elemRect, contRect, topEdgeInBounds, bottomEdgeInBounds, leftEdgeInBounds, rightEdgeInBounds,
+ startEdgeInBounds, endEdgeInBounds,
+ direction = $element.css( 'direction' );
elemRect = $element[ 0 ].getBoundingClientRect();
if ( $container[ 0 ] === window ) {
contRect = $container[ 0 ].getBoundingClientRect();
}
- // For completeness, if we still cared about topEdgeInBounds, that'd be:
- // elemRect.top >= contRect.top && elemRect.top <= contRect.bottom
- if ( elemRect.left >= contRect.left && elemRect.left <= contRect.right ) {
- leftEdgeInBounds = true;
+ topEdgeInBounds = elemRect.top >= contRect.top && elemRect.top <= contRect.bottom;
+ bottomEdgeInBounds = elemRect.bottom >= contRect.top && elemRect.bottom <= contRect.bottom;
+ leftEdgeInBounds = elemRect.left >= contRect.left && elemRect.left <= contRect.right;
+ rightEdgeInBounds = elemRect.right >= contRect.left && elemRect.right <= contRect.right;
+ if ( direction === 'rtl' ) {
+ startEdgeInBounds = rightEdgeInBounds;
+ endEdgeInBounds = leftEdgeInBounds;
+ } else {
+ startEdgeInBounds = leftEdgeInBounds;
+ endEdgeInBounds = rightEdgeInBounds;
}
- if ( elemRect.bottom >= contRect.top && elemRect.bottom <= contRect.bottom ) {
- bottomEdgeInBounds = true;
+
+ if ( this.verticalPosition === 'below' && !bottomEdgeInBounds ) {
+ return false;
}
- if ( elemRect.right >= contRect.left && elemRect.right <= contRect.right ) {
- rightEdgeInBounds = true;
+ if ( this.verticalPosition === 'above' && !topEdgeInBounds ) {
+ return false;
+ }
+ if ( this.horizontalPosition === 'before' && !startEdgeInBounds ) {
+ return false;
+ }
+ if ( this.horizontalPosition === 'after' && !endEdgeInBounds ) {
+ return false;
}
- // We only care that any part of the bottom edge is visible
- return bottomEdgeInBounds && ( leftEdgeInBounds || rightEdgeInBounds );
+ // The other positioning values are all about being inside the container,
+ // so in those cases all we care about is that any part of the container is visible.
+ return elemRect.top <= contRect.bottom && elemRect.bottom >= contRect.top &&
+ elemRect.left <= contRect.right && elemRect.right >= contRect.left;
};
/**
* @chainable
*/
OO.ui.mixin.FloatableElement.prototype.position = function () {
- var pos;
+ var containerPos, direction, $offsetParent, isBody, scrollableX, scrollableY,
+ horizScrollbarHeight, vertScrollbarWidth, scrollTop, scrollLeft,
+ newPos = { top: '', left: '', bottom: '', right: '' };
if ( !this.positioning ) {
return this;
return;
}
- pos = OO.ui.Element.static.getRelativePosition( this.$floatableContainer, this.$floatable.offsetParent() );
- // Position under container
- pos.top += this.$floatableContainer.height();
- // In LTR, we position from the left, and pos.left is already set
- // In RTL, we position from the right instead.
- if ( this.$floatableContainer.css( 'direction' ) === 'rtl' ) {
- pos.right = this.$floatable.offsetParent().width() - pos.left - this.$floatableContainer.outerWidth();
- delete pos.left;
+ direction = this.$floatableContainer.css( 'direction' );
+ $offsetParent = this.$floatable.offsetParent();
+ if ( $offsetParent.is( 'html' ) ) {
+ // The innerHeight/Width and clientHeight/Width calculations don't work well on the
+ // <html> element, but they do work on the <body>
+ $offsetParent = $( $offsetParent[ 0 ].ownerDocument.body );
+ }
+ isBody = $offsetParent.is( 'body' );
+ scrollableX = $offsetParent.css( 'overflow-x' ) === 'scroll' || $offsetParent.css( 'overflow-x' ) === 'auto';
+ scrollableY = $offsetParent.css( 'overflow-y' ) === 'scroll' || $offsetParent.css( 'overflow-y' ) === 'auto';
+
+ vertScrollbarWidth = $offsetParent.innerWidth() - $offsetParent.prop( 'clientWidth' );
+ horizScrollbarHeight = $offsetParent.innerHeight() - $offsetParent.prop( 'clientHeight' );
+ // We don't need to compute and add scrollTop and scrollLeft if the scrollable container is the body,
+ // or if it isn't scrollable
+ scrollTop = scrollableY && !isBody ? $offsetParent.scrollTop() : 0;
+ scrollLeft = scrollableX && !isBody ? OO.ui.Element.static.getScrollLeft( $offsetParent[ 0 ] ) : 0;
+
+ // Avoid passing the <body> to getRelativePosition(), because it won't return what we expect
+ // if the <body> has a margin
+ containerPos = isBody ?
+ this.$floatableContainer.offset() :
+ OO.ui.Element.static.getRelativePosition( this.$floatableContainer, $offsetParent );
+ containerPos.bottom = containerPos.top + this.$floatableContainer.outerHeight();
+ containerPos.right = containerPos.left + this.$floatableContainer.outerWidth();
+ containerPos.start = direction === 'rtl' ? containerPos.right : containerPos.left;
+ containerPos.end = direction === 'rtl' ? containerPos.left : containerPos.right;
+
+ if ( this.verticalPosition === 'below' ) {
+ newPos.top = containerPos.bottom;
+ } else if ( this.verticalPosition === 'above' ) {
+ newPos.bottom = $offsetParent.outerHeight() - containerPos.top;
+ } else if ( this.verticalPosition === 'top' ) {
+ newPos.top = containerPos.top;
+ } else if ( this.verticalPosition === 'bottom' ) {
+ newPos.bottom = $offsetParent.outerHeight() - containerPos.bottom;
+ } else if ( this.verticalPosition === 'center' ) {
+ newPos.top = containerPos.top +
+ ( this.$floatableContainer.height() - this.$floatable.height() ) / 2;
+ }
+
+ if ( this.horizontalPosition === 'before' ) {
+ newPos.end = containerPos.start;
+ } else if ( this.horizontalPosition === 'after' ) {
+ newPos.start = containerPos.end;
+ } else if ( this.horizontalPosition === 'start' ) {
+ newPos.start = containerPos.start;
+ } else if ( this.horizontalPosition === 'end' ) {
+ newPos.end = containerPos.end;
+ } else if ( this.horizontalPosition === 'center' ) {
+ newPos.left = containerPos.left +
+ ( this.$floatableContainer.width() - this.$floatable.width() ) / 2;
+ }
+
+ if ( newPos.start !== undefined ) {
+ if ( direction === 'rtl' ) {
+ newPos.right = ( isBody ? $( $offsetParent[ 0 ].ownerDocument.documentElement ) : $offsetParent ).outerWidth() - newPos.start;
+ } else {
+ newPos.left = newPos.start;
+ }
+ delete newPos.start;
+ }
+ if ( newPos.end !== undefined ) {
+ if ( direction === 'rtl' ) {
+ newPos.left = newPos.end;
+ } else {
+ newPos.right = ( isBody ? $( $offsetParent[ 0 ].ownerDocument.documentElement ) : $offsetParent ).outerWidth() - newPos.end;
+ }
+ delete newPos.end;
+ }
+
+ // Account for scroll position
+ if ( newPos.top !== '' ) {
+ newPos.top += scrollTop;
+ }
+ if ( newPos.bottom !== '' ) {
+ newPos.bottom -= scrollTop;
+ }
+ if ( newPos.left !== '' ) {
+ newPos.left += scrollLeft;
+ }
+ if ( newPos.right !== '' ) {
+ newPos.right -= scrollLeft;
}
- this.$floatable.css( pos );
+
+ // Account for scrollbar gutter
+ if ( newPos.bottom !== '' ) {
+ newPos.bottom -= horizScrollbarHeight;
+ }
+ if ( direction === 'rtl' ) {
+ if ( newPos.left !== '' ) {
+ newPos.left -= vertScrollbarWidth;
+ }
+ } else {
+ if ( newPos.right !== '' ) {
+ newPos.right -= vertScrollbarWidth;
+ }
+ }
+
+ this.$floatable.css( newPos );
// We updated the position, so re-evaluate the clipping state.
// (ClippableElement does not listen to 'scroll' events on $floatableContainer's parent, and so
OO.ui.mixin.ClippableElement.prototype.toggleClipping = function ( clipping ) {
clipping = clipping === undefined ? !this.clipping : !!clipping;
+ if ( clipping && !this.warnedUnattached && !this.isElementAttached() ) {
+ OO.ui.warnDeprecation( 'ClippableElement#toggleClipping: Before calling this method, the element must be attached to the DOM.' );
+ this.warnedUnattached = true;
+ }
+
if ( this.clipping !== clipping ) {
this.clipping = clipping;
if ( clipping ) {
* By default, each popup has an anchor that points toward its origin.
* Please see the [OOjs UI documentation on Mediawiki] [1] for more information and examples.
*
+ * Unlike most widgets, PopupWidget is initially hidden and must be shown by calling #toggle.
+ *
* @example
* // A popup widget.
* var popup = new OO.ui.PopupWidget( {
};
/**
+ * Toggle visibility of the popup. The popup is initially hidden and must be shown by calling
+ * `.toggle( true )` after its #$element is attached to the DOM.
+ *
+ * Do not show the popup while it is not attached to the DOM. The calculations required to display
+ * it in the right place and with the right dimensions only work correctly while it is attached.
+ * Side-effects may include broken interface and exceptions being thrown. This wasn't always
+ * strictly enforced, so currently it only generates a warning in the browser console.
+ *
* @inheritdoc
*/
OO.ui.PopupWidget.prototype.toggle = function ( show ) {
change = show !== this.isVisible();
+ if ( show && !this.warnedUnattached && !this.isElementAttached() ) {
+ OO.ui.warnDeprecation( 'PopupWidget#toggle: Before calling this method, the popup must be attached to the DOM.' );
+ this.warnedUnattached = true;
+ }
+
// Parent method
OO.ui.PopupWidget.parent.prototype.toggle.call( this, show );
* - Down-arrow key: highlight the next menu option
* - Esc key: hide the menu
*
+ * Unlike most widgets, MenuSelectWidget is initially hidden and must be shown by calling #toggle.
+ *
* Please see the [OOjs UI documentation on MediaWiki][1] for more information.
* [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options
*
* that toggles the menu's visibility on click, the menu will be hidden then re-shown when the user clicks
* that button, unless the button (or its parent widget) is passed in here.
* @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu.
+ * @cfg {boolean} [hideOnChoose=true] Hide the menu when the user chooses an option.
* @cfg {boolean} [filterFromInput=false] Filter the displayed options from the input
*/
OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
// Properties
this.autoHide = config.autoHide === undefined || !!config.autoHide;
+ this.hideOnChoose = config.hideOnChoose === undefined || !!config.hideOnChoose;
this.filterFromInput = !!config.filterFromInput;
this.$input = config.$input ? config.$input : config.input ? config.input.$input : null;
this.$widget = config.widget ? config.widget.$element : null;
/**
* Choose an item.
*
- * When a user chooses an item, the menu is closed.
+ * When a user chooses an item, the menu is closed, unless the hideOnChoose config option is set to false.
*
* Note that ‘choose’ should never be modified programmatically. A user can choose an option with the keyboard
* or mouse and it becomes selected. To select an item programmatically, use the #selectItem method.
*/
OO.ui.MenuSelectWidget.prototype.chooseItem = function ( item ) {
OO.ui.MenuSelectWidget.parent.prototype.chooseItem.call( this, item );
- this.toggle( false );
+ if ( this.hideOnChoose ) {
+ this.toggle( false );
+ }
return this;
};
};
/**
+ * Toggle visibility of the menu. The menu is initially hidden and must be shown by calling
+ * `.toggle( true )` after its #$element is attached to the DOM.
+ *
+ * Do not show the menu while it is not attached to the DOM. The calculations required to display
+ * it in the right place and with the right dimensions only work correctly while it is attached.
+ * Side-effects may include broken interface and exceptions being thrown. This wasn't always
+ * strictly enforced, so currently it only generates a warning in the browser console.
+ *
* @inheritdoc
*/
OO.ui.MenuSelectWidget.prototype.toggle = function ( visible ) {
visible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;
change = visible !== this.isVisible();
+ if ( visible && !this.warnedUnattached && !this.isElementAttached() ) {
+ OO.ui.warnDeprecation( 'MenuSelectWidget#toggle: Before calling this method, the menu must be attached to the DOM.' );
+ this.warnedUnattached = true;
+ }
+
// Parent method
OO.ui.MenuSelectWidget.parent.prototype.toggle.call( this, visible );
* @cfg {string|OO.ui.HtmlSnippet} [help] Help text. When help text is specified, a "help" icon will appear
* in the upper-right corner of the rendered field; clicking it will display the text in a popup.
* For important messages, you are advised to use `notices`, as they are always shown.
+ * @cfg {jQuery} [$overlay] Passed to OO.ui.PopupButtonWidget for help popup, if `help` is given.
*
* @throws {Error} An error is thrown if no widget is specified
*/
this.align = null;
if ( config.help ) {
this.popupButtonWidget = new OO.ui.PopupButtonWidget( {
+ $overlay: config.$overlay,
popup: {
padded: true
},
if ( fieldWidget.constructor.static.supportsSimpleLabel ) {
if ( this.fieldWidget.getInputId() ) {
this.$label.attr( 'for', this.fieldWidget.getInputId() );
+ } else {
+ this.$label.on( 'click', function () {
+ this.fieldWidget.focus();
+ return false;
+ }.bind( this ) );
}
}
this.$element
* @cfg {string|OO.ui.HtmlSnippet} [help] Help text. When help text is specified, a "help" icon will appear
* in the upper-right corner of the rendered field; clicking it will display the text in a popup.
* For important messages, you are advised to use `notices`, as they are always shown.
+ * @cfg {jQuery} [$overlay] Passed to OO.ui.PopupButtonWidget for help popup, if `help` is given.
*/
OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {
// Configuration initialization
this.$header = $( '<div>' );
if ( config.help ) {
this.popupButtonWidget = new OO.ui.PopupButtonWidget( {
+ $overlay: config.$overlay,
popup: {
padded: true
},
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:20Z
+ * Date: 2017-02-28T23:19:40Z
*/
( function ( OO ) {
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:25Z
+ * Date: 2017-02-28T23:19:44Z
*/
+/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */
+/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */
.oo-ui-popupTool .oo-ui-popupWidget-popup,
.oo-ui-popupTool .oo-ui-popupWidget-anchor {
z-index: 4;
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:25Z
+ * Date: 2017-02-28T23:19:44Z
*/
+/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */
+/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */
.oo-ui-tool.oo-ui-widget-enabled {
-webkit-transition: background-color 100ms;
-moz-transition: background-color 100ms;
height: 2.5em;
width: 1.875em;
}
-.oo-ui-toolGroupTool > .oo-ui-popupToolGroup.oo-ui-labelElement > .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
- line-height: 2.1;
-}
.oo-ui-toolGroup {
display: inline-block;
vertical-align: middle;
width: 1.875em;
min-width: 1.875em;
}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title,
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel {
- line-height: 2;
-}
.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
padding-left: 0.5em;
color: #222;
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:20Z
+ * Date: 2017-02-28T23:19:40Z
*/
( function ( OO ) {
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:25Z
+ * Date: 2017-02-28T23:19:44Z
*/
+/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */
+/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */
.oo-ui-draggableElement-handle,
.oo-ui-draggableElement-handle.oo-ui-widget {
cursor: move;
display: inline-block;
}
.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable {
- overflow-y: hidden;
+ overflow: hidden;
}
.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
width: 100%;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
-.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-padded {
- padding: 2em;
-}
.oo-ui-bookletLayout-outlinePanel-editable > .oo-ui-outlineSelectWidget {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 3em;
- overflow-y: auto;
+ overflow: auto;
}
.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
position: absolute;
.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
position: absolute;
+ top: 0;
+ height: 100%;
}
.oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
cursor: default;
border-width: 1px 0 1px 1px;
}
.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
- top: 0;
left: 0;
- height: 2.3em;
margin-left: 0.3em;
}
.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
- top: 0;
right: 0;
- height: 2.3em;
margin-right: 0.775em;
}
.oo-ui-selectFileWidget-label {
background-color: #a7dcff;
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-important {
- font-weight: bold;
-}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
- opacity: 0.5;
-}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label {
- color: #777;
-}
.oo-ui-outlineControlsWidget {
height: 3em;
background-color: #fff;
display: block;
position: relative;
}
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon,
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+ position: absolute;
+ top: 0;
+ height: 100%;
+}
.oo-ui-capsuleMultiselectWidget-content {
position: relative;
}
.oo-ui-capsuleMultiselectWidget-handle:last-child {
margin-right: 0;
}
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator,
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon {
- position: absolute;
-}
.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input {
border: 0;
line-height: 1.675em;
background-color: transparent;
color: #000;
vertical-align: middle;
+ /* stylelint-disable indentation */
+ /* stylelint-enable indentation */
}
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:focus {
- outline: none;
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-webkit-input-placeholder {
+ color: #72777d;
+ opacity: 1;
}
-.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle {
- padding-right: 2.4875em;
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:-ms-input-placeholder {
+ color: #72777d;
+ opacity: 1;
}
-.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
- right: 0;
- top: 0;
- margin: 0.775em;
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-moz-placeholder {
+ color: #72777d;
+ opacity: 1;
+}
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:-moz-placeholder {
+ color: #72777d;
+ opacity: 1;
+}
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::placeholder {
+ color: #72777d;
+ opacity: 1;
+}
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:focus {
+ outline: 0;
}
.oo-ui-capsuleMultiselectWidget.oo-ui-iconElement .oo-ui-capsuleMultiselectWidget-handle {
padding-left: 2.475em;
}
.oo-ui-capsuleMultiselectWidget.oo-ui-iconElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon {
left: 0;
- top: 0;
- margin: 0.3em;
+ margin: 0 0.3em;
+}
+.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle {
+ padding-right: 2.4875em;
+}
+.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+ right: 0;
+ margin: 0 0.775em;
}
.oo-ui-capsuleMultiselectWidget:hover .oo-ui-capsuleMultiselectWidget-handle {
border-color: rgba(0, 0, 0, 0.2);
cursor: text;
}
.oo-ui-capsuleItemWidget:focus {
- outline: none;
+ outline: 0;
border-color: #087ecc;
}
.oo-ui-capsuleItemWidget.oo-ui-widget-disabled {
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:25Z
+ * Date: 2017-02-28T23:19:44Z
*/
+/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */
+/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */
.oo-ui-draggableElement-handle,
.oo-ui-draggableElement-handle.oo-ui-widget {
cursor: move;
.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement {
display: inline-block;
}
+.oo-ui-draggableElement-handle:focus {
+ border-radius: 2px;
+ box-shadow: inset 0 0 0 1px #36c, 0 0 0 1px #36c;
+ outline: 0;
+}
.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous > .oo-ui-panelLayout-scrollable {
- overflow-y: hidden;
+ overflow: hidden;
}
.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
width: 100%;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
-.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-.oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout-padded {
- padding: 2em;
-}
.oo-ui-bookletLayout-outlinePanel-editable > .oo-ui-outlineSelectWidget {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 3em;
- overflow-y: auto;
+ overflow: auto;
}
.oo-ui-bookletLayout-outlinePanel > .oo-ui-outlineControlsWidget {
position: absolute;
.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
position: absolute;
+ top: 0;
+ height: 100%;
}
.oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
cursor: default;
}
.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
left: 0;
- top: 0;
- height: 2.3em;
margin-left: 0.5em;
}
.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
- top: 0;
right: 0;
- height: 2.3em;
margin-right: 0.775em;
}
.oo-ui-selectFileWidget-label {
.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-label {
right: 2em;
}
-.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop.oo-ui-selectFileWidget-dropTarget {
- background-color: #eaf3ff;
-}
.oo-ui-selectFileWidget-dropTarget {
background-color: #fff;
border: 1px solid #a2a9b1;
+ border-radius: 2px;
vertical-align: middle;
overflow: hidden;
- border-radius: 2px;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-selectButton > .oo-ui-buttonElement-button {
border-radius: 2px;
white-space: normal;
}
.oo-ui-selectFileWidget-empty.oo-ui-widget-enabled.oo-ui-selectFileWidget-dropTarget {
- background-color: #eee;
+ background-color: #fff;
border-style: dashed;
+ -webkit-transition: background-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+ -moz-transition: background-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+ transition: background-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+}
+.oo-ui-selectFileWidget-empty.oo-ui-widget-enabled.oo-ui-selectFileWidget-dropTarget:hover {
+ border-color: #72777d;
+}
+.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop.oo-ui-selectFileWidget-dropTarget {
+ background-color: #eaf3ff;
+ color: #36c;
}
.oo-ui-selectFileWidget.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
.oo-ui-outlineOptionWidget-level-2 .oo-ui-iconElement-icon {
left: 4em;
}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-important {
- font-weight: bold;
-}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
- opacity: 0.5;
-}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label {
- color: #777;
-}
.oo-ui-outlineControlsWidget {
height: 3em;
background-color: #fff;
display: block;
position: relative;
}
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon,
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+ position: absolute;
+ top: 0;
+ height: 100%;
+}
.oo-ui-capsuleMultiselectWidget-content {
position: relative;
}
.oo-ui-capsuleMultiselectWidget-handle:last-child {
margin-right: 0;
}
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator,
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon {
- position: absolute;
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input {
+ border: 0;
+ line-height: 1.675;
+ margin: 0 0 0 0.2em;
+ padding: 0;
+ font-size: inherit;
+ font-family: inherit;
+ background-color: transparent;
+ color: #000;
+ vertical-align: middle;
+ /* stylelint-disable indentation */
+ /* stylelint-enable indentation */
}
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content :-moz-placeholder {
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-webkit-input-placeholder {
color: #72777d;
opacity: 1;
}
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content ::-moz-placeholder {
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:-ms-input-placeholder {
color: #72777d;
opacity: 1;
}
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content :-ms-input-placeholder {
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-moz-placeholder {
color: #72777d;
+ opacity: 1;
}
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content ::-webkit-input-placeholder {
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:-moz-placeholder {
color: #72777d;
+ opacity: 1;
}
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content :placeholder-shown {
+.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::placeholder {
color: #72777d;
-}
-.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input {
- border: 0;
- line-height: 1.675;
- margin: 0 0 0 0.2em;
- padding: 0;
- font-size: inherit;
- font-family: inherit;
- background-color: transparent;
- color: #000;
- vertical-align: middle;
+ opacity: 1;
}
.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:focus {
outline: 0;
}
-.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle {
- padding-right: 2.4875em;
-}
-.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
- right: 0;
- top: 0;
- margin: 0.775em;
-}
.oo-ui-capsuleMultiselectWidget.oo-ui-iconElement .oo-ui-capsuleMultiselectWidget-handle {
padding-left: 2.475em;
}
.oo-ui-capsuleMultiselectWidget.oo-ui-iconElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon {
left: 0;
- top: 0;
- margin: 0.3em;
+ margin: 0 0.3em;
+}
+.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle {
+ padding-right: 2.4875em;
+}
+.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+ right: 0;
+ margin: 0 0.775em;
}
.oo-ui-capsuleMultiselectWidget-popup {
margin-top: -1px;
display: inline-block;
cursor: default;
white-space: nowrap;
- width: auto;
- max-width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
- vertical-align: middle;
+ width: auto;
+ max-width: 100%;
height: 1.7em;
- line-height: 1.7;
- background-color: #eee;
- color: #222;
margin: 0.1em;
border: 1px solid #a2a9b1;
border-radius: 2px;
padding: 0 0.4em;
+ line-height: 1.7;
+ vertical-align: middle;
}
.oo-ui-capsuleItemWidget.oo-ui-labelElement .oo-ui-labelElement-label {
display: inline-block;
overflow: hidden;
cursor: text;
}
-.oo-ui-capsuleItemWidget:focus {
- outline: 0;
- border-color: #36c;
- box-shadow: inset 0 0 0 1px #36c;
-}
-.oo-ui-capsuleItemWidget.oo-ui-widget-disabled {
- background-color: #eaecf0;
- color: #72777d;
- border-color: #c8ccd1;
- text-shadow: 0 1px 1px #fff;
-}
-.oo-ui-capsuleItemWidget > .oo-ui-buttonElement {
- display: none;
-}
.oo-ui-capsuleItemWidget.oo-ui-widget-enabled {
+ background-color: #f8f9fa;
+ color: #222;
padding-right: 1.5375em;
+ -webkit-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
+ -moz-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
+ transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
+}
+.oo-ui-capsuleItemWidget.oo-ui-widget-enabled:hover {
+ background-color: #fff;
+ color: #444;
+ border-color: #a2a9b1;
+}
+.oo-ui-capsuleItemWidget.oo-ui-widget-enabled:focus {
+ border-color: #36c;
+ box-shadow: inset 0 0 0 1px #36c;
+ outline: 0;
}
.oo-ui-capsuleItemWidget.oo-ui-widget-enabled > .oo-ui-buttonElement {
display: block;
bottom: 0;
height: auto;
}
+.oo-ui-capsuleItemWidget.oo-ui-widget-disabled {
+ background-color: #eaecf0;
+ color: #72777d;
+ border-color: #c8ccd1;
+ text-shadow: 0 1px 1px #fff;
+}
+.oo-ui-capsuleItemWidget.oo-ui-widget-disabled > .oo-ui-buttonElement {
+ display: none;
+}
.oo-ui-searchWidget-query {
position: absolute;
top: 0;
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:20Z
+ * Date: 2017-02-28T23:19:40Z
*/
( function ( OO ) {
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:25Z
+ * Date: 2017-02-28T23:19:44Z
*/
+/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */
+/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */
.oo-ui-actionWidget.oo-ui-pendingElement-pending {
background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
}
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:25Z
+ * Date: 2017-02-28T23:19:44Z
*/
+/* stylelint-disable selector-no-vendor-prefix, at-rule-no-unknown */
+/* stylelint-enable selector-no-vendor-prefix, at-rule-no-unknown */
.oo-ui-window {
background: transparent;
}
.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless:active {
background-color: rgba(0, 0, 0, 0.1);
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover,
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover {
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive:hover,
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:hover {
background-color: rgba(8, 126, 204, 0.05);
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active,
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active {
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive:active,
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive:active {
background-color: rgba(8, 126, 204, 0.1);
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label {
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label {
font-weight: bold;
}
.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive:hover,
/*!
- * OOjs UI v0.19.2
+ * OOjs UI v0.19.4
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-02-14T22:47:20Z
+ * Date: 2017-02-28T23:19:40Z
*/
( function ( OO ) {
"rtl": "images/icons/articleRedirect-rtl.svg"
} },
"searchCaseSensitive": { "file": "images/icons/case-sensitive.svg" },
+ "searchDiacritics": { "file": "images/icons/diacritic.svg" },
"searchRegularExpression": { "file": "images/icons/regular-expression.svg" },
"specialCharacter": { "file": "images/icons/specialCharacter.svg" },
"table": { "file": "images/icons/table.svg" },
} },
"clear": { "file": "images/icons/clear.svg" },
"clock": { "file": "images/icons/clock.svg" },
+ "feedback": { "file": {
+ "ltr": "images/icons/feedback-ltr.svg",
+ "rtl": "images/icons/feedback-rtl.svg"
+ } },
"funnel": { "file": {
"ltr": "images/icons/funnel-ltr.svg",
"rtl": "images/icons/funnel-rtl.svg"
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="regular-expression">
+ <g id="case-sensitive">
<path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
<path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.662.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.336.87 1.008.87.48 0 .865-.137 1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
</g>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="diacritic">
+ <path id="letter-a" d="M13.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 2.134.66.546.446.82 1.12.82 2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.337.87 1.01.87.48 0 .864-.138 1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
+ <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61 1.228-.61.203 0 .406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 .75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 3.107 0 0 1-.678-.373z"/>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
+ <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
+</g></svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
+ <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+</g></svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+</svg>
"rtl": "images/icons/articleRedirect-rtl.svg"
} },
"searchCaseSensitive": { "file": "images/icons/case-sensitive.svg" },
+ "searchDiacritics": { "file": "images/icons/diacritic.svg" },
"searchRegularExpression": { "file": "images/icons/regular-expression.svg" },
"specialCharacter": { "file": "images/icons/specialCharacter.svg" },
"table": { "file": "images/icons/table.svg" },
} },
"clear": { "file": "images/icons/clear.svg" },
"clock": { "file": "images/icons/clock.svg" },
+ "feedback": {
+ "file": {
+ "ltr": "images/icons/feedback-ltr.svg",
+ "rtl": "images/icons/feedback-rtl.svg"
+ },
+ "variants": [ "progressive" ]
+ },
"funnel": { "file": {
"ltr": "images/icons/funnel-ltr.svg",
"rtl": "images/icons/funnel-rtl.svg"
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
- <g id="regular-expression">
+ <g id="case-sensitive">
<path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
<path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.662.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.336.87 1.008.87.48 0 .865-.137 1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
</g>
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
- <g id="regular-expression">
+ <g id="case-sensitive">
<path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
<path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.662.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.336.87 1.008.87.48 0 .865-.137 1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
</g>
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
- <g id="regular-expression">
+ <g id="case-sensitive">
<path id="upper-case" d="M7.53 7L4 17h2.063l.72-2.406h3.624l.72 2.406h2.062L9.65 7h-2.12zm1.064 1.53L9.938 13H7.25l1.344-4.47z"/>
<path id="lower-case" d="M18.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.564 0-.955-.208-1.377-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.322-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.688-1.4c.877-.46 1.85-.69 2.916-.69 1.024 0 1.59.22 2.134.662.545.445.818 1.12.818 2.03V17h-1.45m-.394-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.336.87 1.008.87.48 0 .865-.137 1.152-.414.29-.277.436-.645.436-1.103v-.627"/>
</g>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
+ <g id="diacritic">
+ <path id="letter-a" d="M13.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 2.134.66.546.446.82 1.12.82 2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.337.87 1.01.87.48 0 .864-.138 1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
+ <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61 1.228-.61.203 0 .406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 .75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 3.107 0 0 1-.678-.373z"/>
+ </g>
+</g></svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
+ <g id="diacritic">
+ <path id="letter-a" d="M13.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 2.134.66.546.446.82 1.12.82 2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.337.87 1.01.87.48 0 .864-.138 1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
+ <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61 1.228-.61.203 0 .406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 .75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 3.107 0 0 1-.678-.373z"/>
+ </g>
+</g></svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="diacritic">
+ <path id="letter-a" d="M13.55 17l-.184-1.035h-.055c-.35.44-.71.747-1.08.92-.37.167-.85.25-1.44.25-.563 0-.954-.208-1.376-.625-.42-.418-.627-1.012-.627-1.784 0-.808.283-1.403.846-1.784.568-.386 1.193-.607 2.208-.64l1.323-.04v-.335c0-.772-.396-1.158-1.187-1.158-.61 0-1.325.18-2.147.55l-.69-1.4c.878-.46 1.85-.69 2.917-.69 1.024 0 1.59.22 2.134.66.546.446.82 1.12.82 2.03V17h-1.45m-.395-3.527l-.802.027c-.604.018-1.054.127-1.35.327-.294.2-.442.504-.442.912 0 .58.337.87 1.01.87.48 0 .864-.138 1.15-.415.29-.277.437-.645.437-1.103v-.627"/>
+ <path id="tilde" d="M12.012 7.527l-.466-.306a.832.832 0 0 1-.085-.048c-.264-.17-.467-.256-.608-.256a.518.518 0 0 0-.466.256c-.107.17-.16.418-.16.743v.066H9.047c0-.748.144-1.326.432-1.733.294-.407.703-.61 1.228-.61.203 0 .406.037.61.114.208.073.43.19.66.357l.517.355c.124.082.237.146.338.19a.77.77 0 0 0 .288.066c.204 0 .362-.088.475-.265.113-.176.17-.42.17-.735v-.066h1.177c0 .75-.147 1.327-.44 1.735-.29.407-.695.61-1.22.61-.203 0-.4-.032-.593-.098a3.107 3.107 0 0 1-.678-.373z"/>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
+ <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
+</g></svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
+ <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
+</g></svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
+ <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+</g></svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
+ <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+</g></svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
+</svg>
-@import "mediawiki.mixins";
+@import 'mediawiki.mixins';
/* Table Sorting */
/* Styles for the JavaScript enhancements of the history page */
-#pagehistory li.before input[name="oldid"],
-#pagehistory li.after input[name="diff"] {
+#pagehistory li.before input[name='oldid'],
+#pagehistory li.after input[name='diff'] {
visibility: hidden;
}
-@import "mediawiki.mixins";
+@import 'mediawiki.mixins';
.mw-category {
.column-count(3);
/* Expand URLs for printing */
.mw-body a.external.text:after,
.mw-body a.external.autonumber:after {
- content: " (" attr( href ) ")";
+ content: ' (' attr( href ) ')';
word-break: break-all;
word-wrap: break-word;
}
/* Expand protocol-relative URLs for printing */
.mw-body a.external.text[href^='//']:after,
.mw-body a.external.autonumber[href^='//']:after {
- content: " (https:" attr( href ) ")";
+ content: ' (https:' attr( href ) ')';
}
a,
/* Input types that should follow user direction, like buttons */
/* TODO: What about buttons in wikipage content ? */
-input[type="submit"],
-input[type="button"],
-input[type="reset"],
-input[type="file"] {
+input[type='submit'],
+input[type='button'],
+input[type='reset'],
+input[type='file'] {
direction: ltr;
}
/* Override default values */
-textarea[dir="ltr"],
-input[dir="ltr"] {
+textarea[dir='ltr'],
+input[dir='ltr'] {
/* @noflip */
direction: ltr;
}
-textarea[dir="rtl"],
-input[dir="rtl"] {
+textarea[dir='rtl'],
+input[dir='rtl'] {
/* @noflip */
direction: rtl;
}
// Common Less mixin library for MediaWiki
//
// By default the folder containing this file is included in $wgResourceLoaderLESSImportPaths,
-// which makes this file importable by all less files via '@import "mediawiki.mixins";'.
+// which makes this file importable by all less files via `@import 'mediawiki.mixins';`.
//
// The mixins included below are considered a public interface for MediaWiki extensions.
// The signatures of parametrized mixins should be kept as stable as possible.
}
.flex-display( @display: flex ) {
- display: ~"-webkit-@{display}"; // iOS 6-, Safari 3.1-6
- display: ~"-moz-@{display}"; // Firefox 21-
- display: ~"-ms-@{display}box"; // IE 10
+ display: ~'-webkit-@{display}'; // iOS 6-, Safari 3.1-6
+ display: ~'-moz-@{display}'; // Firefox 21-
+ display: ~'-ms-@{display}box'; // IE 10
display: @display;
}
// This is a separate file because importing the mixin causes
// the keyframes blocks to be included in the output, regardless
// of whether .rotation is used.
-@import "mediawiki.mixins.animation";
+@import 'mediawiki.mixins.animation';
.rotate-frames() {
from {
line-height: normal;
font-weight: normal;
- & > input[type="checkbox"],
- & > input[type="radio"] {
+ & > input[type='checkbox'],
+ & > input[type='radio'] {
width: auto;
height: auto;
margin: 0 0.1em 0 0;
/* Methods */
+ /**
+ * Return the representation of the state of this item.
+ *
+ * @return {Object} State of the object
+ */
+ mw.rcfilters.dm.FilterItem.prototype.getState = function () {
+ return {
+ selected: this.isSelected(),
+ included: this.isIncluded(),
+ conflicted: this.isConflicted(),
+ fullyCovered: this.isFullyCovered()
+ };
+ };
+
/**
* Get the name of this filter
*
-@import "mediawiki.mixins";
-@import "mw.rcfilters.variables";
+@import 'mediawiki.mixins';
+@import 'mw.rcfilters.variables';
// This is a general mixin for a color circle
.mw-rcfilters-mixin-circle( @color: white, @diameter: 2em, @padding: 0.5em, @border: false ) {
// a color class on its parent element
.result-circle( @colorName: 'none' ) {
&-@{colorName} {
- .mw-rcfilters-mixin-circle( ~"@{highlight-@{colorName}}", @result-circle-diameter, 0 );
+ .mw-rcfilters-mixin-circle( ~'@{highlight-@{colorName}}', @result-circle-diameter, 0 );
display: none;
.mw-rcfilters-highlight-color-@{colorName} & {
// This mixin produces color mixes for two, three and four colors
.highlight-color-mix( @color1, @color2, @color3: false, @color4: false ) {
- @highlight-color-class-var: ~".mw-rcfilters-highlight-color-@{color1}.mw-rcfilters-highlight-color-@{color2}";
+ @highlight-color-class-var: ~'.mw-rcfilters-highlight-color-@{color1}.mw-rcfilters-highlight-color-@{color2}';
// The nature of these variables and them being inside
// a 'tint' and 'average' LESS functions is such where
// the parsing is failing if it is done inside those functions.
// Instead, we first construct their LESS variable names,
// and then we call them inside those functions by calling @@var
- @c1var: ~"highlight-@{color1}";
- @c2var: ~"highlight-@{color2}";
+ @c1var: ~'highlight-@{color1}';
+ @c2var: ~'highlight-@{color2}';
// Two colors
@{highlight-color-class-var} when ( @color3 = false ) and ( @color4 = false ) and not ( @color1 = false ), ( @color2 = false ) {
}
// Three colors
@{highlight-color-class-var}.mw-rcfilters-highlight-color-@{color3} when ( @color4 = false ) and not ( @color3 = false ) {
- @c3var: ~"highlight-@{color3}";
+ @c3var: ~'highlight-@{color3}';
background-color: tint( mix( @@c1var, average( @@c2var, @@c3var ), 33% ), 30% );
}
// Four colors
@{highlight-color-class-var}.mw-rcfilters-highlight-color-@{color3}.mw-rcfilters-highlight-color-@{color4} when not ( @color4 = false ) {
- @c3var: ~"highlight-@{color3}";
- @c4var: ~"highlight-@{color4}";
+ @c3var: ~'highlight-@{color3}';
+ @c4var: ~'highlight-@{color4}';
background-color: tint( mix( @@c1var, mix( @@c2var, average( @@c3var, @@c4var ), 25% ), 25% ), 25% );
}
}
-@import "mw.rcfilters.mixins";
+@import 'mw.rcfilters.mixins';
.mw-rcfilters-ui-capsuleItemWidget {
+ background-color: #fff;
+ border-color: #979797;
+ color: #222;
+
+ &-muted {
+ // Muted state
+ background-color: #eaecf0;
+ border-color: #c8ccd1;
+ .oo-ui-labelElement-label {
+ color: #72777d;
+ }
+
+ .oo-ui-buttonWidget {
+ opacity: @muted-opacity;
+ }
+ }
+
+ &-selected {
+ background-color: #eaf3ff;
+ border-color: #36c;
+ }
+
&-popup-content {
padding: 0.5em;
color: #54595d;
cursor: pointer;
}
- &-muted {
- // Muted state
- // We want everything muted except the circle
- background-color: rgba( 255, 255, 255, @muted-opacity );
-
- .oo-ui-labelElement-label,
- .oo-ui-buttonWidget {
- opacity: @muted-opacity;
- }
- }
-
&-highlight {
display: none;
padding-right: 0.5em;
}
- &[data-color="c1"] {
- .mw-rcfilters-mixin-circle( @highlight-c1, 0.7em, ~"0 0.5em 0 0" );
+ &[data-color='c1'] {
+ .mw-rcfilters-mixin-circle( @highlight-c1, 0.7em, ~'0 0.5em 0 0' );
}
- &[data-color="c2"] {
- .mw-rcfilters-mixin-circle( @highlight-c2, 0.7em, ~"0 0.5em 0 0" );
+ &[data-color='c2'] {
+ .mw-rcfilters-mixin-circle( @highlight-c2, 0.7em, ~'0 0.5em 0 0' );
}
- &[data-color="c3"] {
- .mw-rcfilters-mixin-circle( @highlight-c3, 0.7em, ~"0 0.5em 0 0" );
+ &[data-color='c3'] {
+ .mw-rcfilters-mixin-circle( @highlight-c3, 0.7em, ~'0 0.5em 0 0' );
}
- &[data-color="c4"] {
- .mw-rcfilters-mixin-circle( @highlight-c4, 0.7em, ~"0 0.5em 0 0" );
+ &[data-color='c4'] {
+ .mw-rcfilters-mixin-circle( @highlight-c4, 0.7em, ~'0 0.5em 0 0' );
}
- &[data-color="c5"] {
- .mw-rcfilters-mixin-circle( @highlight-c5, 0.7em, ~"0 0.5em 0 0" );
+ &[data-color='c5'] {
+ .mw-rcfilters-mixin-circle( @highlight-c5, 0.7em, ~'0 0.5em 0 0' );
}
}
}
list-style: none;
// Each li's margin-left should be the width of the highlights
// element + the margin
- margin-left: ~"calc( ( @{result-circle-diameter} + @{result-circle-margin} ) * 5 + @{result-circle-general-margin} )";
+ margin-left: ~'calc( ( @{result-circle-diameter} + @{result-circle-margin} ) * 5 + @{result-circle-general-margin} )';
}
}
// Correction for Enhanced RC
// This is outside the scope of the 'highlights' wrapper
table.mw-enhanced-rc {
- margin-left: ~"calc( ( @{result-circle-diameter} + @{result-circle-margin} ) * 5 + @{result-circle-general-margin} )";
+ margin-left: ~'calc( ( @{result-circle-diameter} + @{result-circle-margin} ) * 5 + @{result-circle-general-margin} )';
td:last-child {
width: 100%;
text-align: right;
// The width is 5 circles times their diameter + individual margin
// and then plus the general margin
- width: ~"calc( ( @{result-circle-diameter} + @{result-circle-margin} ) * 5 )";
+ width: ~'calc( ( @{result-circle-diameter} + @{result-circle-margin} ) * 5 )';
// And we want to shift the entire block to the left of the li
position: absolute;
left: 0;
text-align: right;
padding-left: 0.5em;
}
-
- .oo-ui-capsuleItemWidget {
- color: #222;
- background-color: #fff;
- }
}
-@import "mediawiki.mixins";
+@import 'mediawiki.mixins';
.mw-rcfilters-ui-filterGroupWidget {
padding-bottom: 0.5em;
-@import "mw.rcfilters.mixins";
+@import 'mw.rcfilters.mixins';
.mw-rcfilters-ui-filterItemHighlightButton {
-@import "mediawiki.mixins";
+@import 'mediawiki.mixins';
.mw-rcfilters-ui-filterItemWidget {
padding: 0 0.5em;
.oo-ui-popupWidget-body {
max-height: 70vh;
}
+
+ .oo-ui-popupWidget-footer {
+ background-color: #f8f9fa;
+ text-align: right;
+ padding: 0.5em;
+ }
}
&-search {
-@import "mw.rcfilters.mixins";
+@import 'mw.rcfilters.mixins';
.mw-rcfilters-ui-highlightColorPickerWidget {
&-label {
&-none {
.mw-rcfilters-mixin-circle( @highlight-none, 2em, 0.5em, true );
+ // Override border to dashed
+ border: 1px dashed #565656;
&.oo-ui-buttonOptionWidget.oo-ui-buttonElement-active,
&.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
this.model = model;
this.$overlay = config.$overlay || this.$element;
this.positioned = false;
+ this.popupTimeoutShow = null;
+ this.popupTimeoutHide = null;
// Parent constructor
mw.rcfilters.ui.CapsuleItemWidget.parent.call( this, $.extend( {
.prepend( this.$highlight )
.attr( 'aria-haspopup', 'true' )
.addClass( 'mw-rcfilters-ui-capsuleItemWidget' )
- .on( 'mouseover', this.onHover.bind( this, true ) )
- .on( 'mouseout', this.onHover.bind( this, false ) );
+ .on( 'mouseenter', this.onMouseEnter.bind( this ) )
+ .on( 'mouseleave', this.onMouseLeave.bind( this ) );
this.setCurrentMuteState();
this.setHighlightColor();
};
/**
- * Respond to hover event on the capsule item.
- *
- * @param {boolean} isHovering Mouse is hovering on the item
+ * Respond to mouse enter event
*/
- mw.rcfilters.ui.CapsuleItemWidget.prototype.onHover = function ( isHovering ) {
+ mw.rcfilters.ui.CapsuleItemWidget.prototype.onMouseEnter = function () {
if ( this.model.getDescription() ) {
- this.popup.toggle( isHovering );
-
- if ( isHovering && !this.positioned ) {
+ if ( !this.positioned ) {
// Recalculate position to be center of the capsule item
this.popup.$element.css( 'margin-left', ( this.$element.width() / 2 ) );
this.positioned = true;
}
+
+ // Set timeout for the popup to show
+ this.popupTimeoutShow = setTimeout( function () {
+ this.popup.toggle( true );
+ }.bind( this ), 500 );
+
+ // Cancel the hide timeout
+ clearTimeout( this.popupTimeoutHide );
+ this.popupTimeoutHide = null;
+ }
+ };
+
+ /**
+ * Respond to mouse leave event
+ */
+ mw.rcfilters.ui.CapsuleItemWidget.prototype.onMouseLeave = function () {
+ this.popupTimeoutHide = setTimeout( function () {
+ this.popup.toggle( false );
+ }.bind( this ), 250 );
+
+ // Clear the show timeout
+ clearTimeout( this.popupTimeoutShow );
+ this.popupTimeoutShow = null;
+ };
+
+ /**
+ * Set selected state on this widget
+ *
+ * @param {boolean} [isSelected] Widget is selected
+ */
+ mw.rcfilters.ui.CapsuleItemWidget.prototype.toggleSelected = function ( isSelected ) {
+ isSelected = isSelected !== undefined ? isSelected : !this.selected;
+
+ if ( this.selected !== isSelected ) {
+ this.selected = isSelected;
+
+ this.$element.toggleClass( 'mw-rcfilters-ui-capsuleItemWidget-selected', this.selected );
}
};
this.model = model;
this.filterInput = filterInput;
this.isSelecting = false;
+ this.selected = null;
this.resetButton = new OO.ui.ButtonWidget( {
icon: 'trash',
this.emptyFilterMessage.toggle( currFiltersAreEmpty );
};
+ /**
+ * Mark an item widget as selected
+ *
+ * @param {mw.rcfilters.ui.CapsuleItemWidget} item Capsule widget
+ */
+ mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.select = function ( item ) {
+ if ( this.selected !== item ) {
+ // Unselect previous
+ if ( this.selected ) {
+ this.selected.toggleSelected( false );
+ }
+
+ // Select new one
+ this.selected = item;
+ if ( this.selected ) {
+ item.toggleSelected( true );
+ }
+ }
+ };
+
+ /**
+ * Reset selection and remove selected states from all items
+ */
+ mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.resetSelection = function () {
+ if ( this.selected !== null ) {
+ this.selected = null;
+ this.getItems().forEach( function ( capsuleWidget ) {
+ capsuleWidget.toggleSelected( false );
+ } );
+ }
+ };
+
/**
* @inheritdoc
*/
anchor: false,
padded: true,
align: 'backwards',
+ horizontalPosition: 'end',
+ $floatableContainer: this.$element,
width: 290,
$content: this.colorPickerWidget.$element
}
'mw-rcfilters-ui-filterItemWidget-muted',
this.model.isConflicted() ||
this.model.isIncluded() ||
- this.model.isFullyCovered() ||
(
// Item is also muted when any of the items in its group is active
this.model.getGroupModel().isActive() &&
* @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
*/
mw.rcfilters.ui.FilterWrapperWidget = function MwRcfiltersUiFilterWrapperWidget( controller, model, config ) {
+ var $footer = $( '<div>' );
config = config || {};
// Parent
}
);
+ $footer.append(
+ new OO.ui.ButtonWidget( {
+ framed: false,
+ icon: 'feedback',
+ flags: [ 'progressive' ],
+ label: mw.msg( 'rcfilters-filterlist-feedbacklink' ),
+ href: 'https://www.mediawiki.org/wiki/Help_talk:Edit_Review_Improvements/RC_filters'
+ } ).$element
+ );
+
this.textInput = new OO.ui.TextInputWidget( {
classes: [ 'mw-rcfilters-ui-filterWrapperWidget-search' ],
icon: 'search',
$overlay: this.$overlay,
popup: {
$content: this.filterPopup.$element,
+ $footer: $footer,
classes: [ 'mw-rcfilters-ui-filterWrapperWidget-popup' ],
width: 650
}
// Highlight item
this.filterPopup.select( filterName );
+ this.capsule.select( item );
this.scrollToTop( filterWidget.$element );
};
mw.rcfilters.ui.FilterWrapperWidget.prototype.onCapsulePopupToggle = function ( isVisible ) {
if ( !isVisible ) {
this.filterPopup.resetSelection();
+ this.capsule.resetSelection();
} else {
this.scrollToTop( this.capsule.$element, 10 );
}
padding-right: 15px;
}
-.mw-body a.external[href^="mailto:"],
+.mw-body a.external[href^='mailto:'],
.link-mailto {
background: url( images/mail.png ) center right no-repeat;
/* @embed */
padding-right: 15px;
}
-.mw-body a.external[href^="ftp://"],
+.mw-body a.external[href^='ftp://'],
.link-ftp {
background: url( images/ftp-ltr.png ) center right no-repeat;
/* @embed */
padding-right: 15px;
}
-.mw-body a.external[href^="irc://"],
-.mw-body a.external[href^="ircs://"],
+.mw-body a.external[href^='irc://'],
+.mw-body a.external[href^='ircs://'],
.link-irc {
background: url( images/chat-ltr.png ) center right no-repeat;
/* @embed */
padding-right: 15px;
}
-.mw-body a.external[href$=".ogg"],
-.mw-body a.external[href$=".OGG"],
-.mw-body a.external[href$=".mid"],
-.mw-body a.external[href$=".MID"],
-.mw-body a.external[href$=".midi"],
-.mw-body a.external[href$=".MIDI"],
-.mw-body a.external[href$=".mp3"],
-.mw-body a.external[href$=".MP3"],
-.mw-body a.external[href$=".wav"],
-.mw-body a.external[href$=".WAV"],
-.mw-body a.external[href$=".wma"],
-.mw-body a.external[href$=".WMA"],
+.mw-body a.external[href$='.ogg'],
+.mw-body a.external[href$='.OGG'],
+.mw-body a.external[href$='.mid'],
+.mw-body a.external[href$='.MID'],
+.mw-body a.external[href$='.midi'],
+.mw-body a.external[href$='.MIDI'],
+.mw-body a.external[href$='.mp3'],
+.mw-body a.external[href$='.MP3'],
+.mw-body a.external[href$='.wav'],
+.mw-body a.external[href$='.WAV'],
+.mw-body a.external[href$='.wma'],
+.mw-body a.external[href$='.WMA'],
.link-audio {
background: url( images/audio-ltr.png ) center right no-repeat;
/* @embed */
padding-right: 15px;
}
-.mw-body a.external[href$=".ogm"],
-.mw-body a.external[href$=".OGM"],
-.mw-body a.external[href$=".avi"],
-.mw-body a.external[href$=".AVI"],
-.mw-body a.external[href$=".mpeg"],
-.mw-body a.external[href$=".MPEG"],
-.mw-body a.external[href$=".mpg"],
-.mw-body a.external[href$=".MPG"],
+.mw-body a.external[href$='.ogm'],
+.mw-body a.external[href$='.OGM'],
+.mw-body a.external[href$='.avi'],
+.mw-body a.external[href$='.AVI'],
+.mw-body a.external[href$='.mpeg'],
+.mw-body a.external[href$='.MPEG'],
+.mw-body a.external[href$='.mpg'],
+.mw-body a.external[href$='.MPG'],
.link-video {
background: url( images/video.png ) center right no-repeat;
/* @embed */
padding-right: 15px;
}
-.mw-body a.external[href$=".pdf"],
-.mw-body a.external[href$=".PDF"],
-.mw-body a.external[href*=".pdf#"],
-.mw-body a.external[href*=".PDF#"],
-.mw-body a.external[href*=".pdf?"],
-.mw-body a.external[href*=".PDF?"],
+.mw-body a.external[href$='.pdf'],
+.mw-body a.external[href$='.PDF'],
+.mw-body a.external[href*='.pdf#'],
+.mw-body a.external[href*='.PDF#'],
+.mw-body a.external[href*='.pdf?'],
+.mw-body a.external[href*='.PDF?'],
.link-document {
background: url( images/document-ltr.png ) center right no-repeat;
/* @embed */
counter-reset: mw-NumberedExtLink;
}
-.mw-body-content a[rel~="mw:ExtLink"]:empty:after {
- content: "[" counter( mw-NumberedExtLink ) "]";
+.mw-body-content a[rel~='mw:ExtLink']:empty:after {
+ content: '[' counter( mw-NumberedExtLink ) ']';
counter-increment: mw-NumberedExtLink;
}
}
/* Hide the caption for frameless and plain floated images */
-figure[typeof~="mw:Image/Frameless"] > figcaption,
-figure[typeof~="mw:Image"] > figcaption {
+figure[typeof~='mw:Image/Frameless'] > figcaption,
+figure[typeof~='mw:Image'] > figcaption {
display: none;
}
* Styling for Special:Block
*/
-label[for="mw-input-wpConfirm"] {
+label[for='mw-input-wpConfirm'] {
font-weight: bold;
}
-@import "mediawiki.mixins";
+@import 'mediawiki.mixins';
.mw-special-ComparePages .mw-htmlform-ooui-wrapper {
width: 100%;
visibility: hidden;
display: block;
font-size: 0;
- content: " ";
+ content: ' ';
clear: both;
height: 0;
}
visibility: hidden;
display: block;
font-size: 0;
- content: " ";
+ content: ' ';
clear: both;
height: 0;
}
-@import "mediawiki.mixins";
+@import 'mediawiki.mixins';
#mw-editbutton-bold {
- .background-image("images/@{button-bold}");
+ .background-image('images/@{button-bold}');
}
#mw-editbutton-italic {
- .background-image("images/@{button-italic}");
+ .background-image('images/@{button-italic}');
}
#mw-editbutton-link {
- .background-image("images/@{button-link}");
+ .background-image('images/@{button-link}');
}
#mw-editbutton-extlink {
- .background-image("images/@{button-extlink}");
+ .background-image('images/@{button-extlink}');
}
#mw-editbutton-headline {
- .background-image("images/@{button-headline}");
+ .background-image('images/@{button-headline}');
}
#mw-editbutton-image {
- .background-image("images/@{button-image}");
+ .background-image('images/@{button-image}');
}
#mw-editbutton-media {
- .background-image("images/@{button-media}");
+ .background-image('images/@{button-media}');
}
#mw-editbutton-nowiki {
- .background-image("images/@{button-nowiki}");
+ .background-image('images/@{button-nowiki}');
}
// Who decided to make only this single one different than the name of the data item?
#mw-editbutton-signature {
- .background-image("images/@{button-sig}");
+ .background-image('images/@{button-sig}');
}
#mw-editbutton-hr {
- .background-image("images/@{button-hr}");
+ .background-image('images/@{button-hr}');
}
-@import "mediawiki.mixins";
-@import "mediawiki.ui/variables";
-@import "mediawiki.ui/mixins";
+@import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
+@import 'mediawiki.ui/mixins';
// Helpers
.mixin-mw-ui-anchor-styles( @mainColor ) {
-@import "mediawiki.mixins";
-@import "mediawiki.ui/variables";
-@import "mediawiki.ui/mixins";
+@import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
+@import 'mediawiki.ui/mixins';
// Buttons
//
-@import "mediawiki.mixins";
-@import "mediawiki.ui/variables";
+@import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
// Checkbox
//
vertical-align: middle;
}
- input[type="checkbox"] {
+ input[type='checkbox'] {
// we hide the input element as instead we will style the label that follows
// we use opacity so that VoiceOver software can still identify it
opacity: 0;
- // Render "on top of" the label, so that it's still clickable (T98905)
+ // Render *on top of* the label, so that it's still clickable (T98905)
z-index: 1;
position: relative;
// ensure the invisible checkbox takes up the required width
// Form elements and layouts
-@import "mediawiki.mixins";
-@import "mediawiki.ui/variables";
-@import "mediawiki.ui/mixins";
+@import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
+@import 'mediawiki.ui/mixins';
// --------------------------------------------------------------------------
// Layouts
}
// Override input styling just for checkboxes and radio inputs.
- input[type="radio"] {
+ input[type='radio'] {
display: inline;
.box-sizing( content-box );
width: auto;
-@import "mediawiki.mixins";
-@import "mediawiki.ui/variables";
+@import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
// Mixins
.mixin-mw-ui-icon-bgimage( @iconSvg, @iconPng ) {
// Inputs
-@import "mediawiki.mixins";
-@import "mediawiki.ui/variables";
-@import "mediawiki.ui/mixins";
+@import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
+@import 'mediawiki.ui/mixins';
// Text inputs
//
}
// Normalize styling for `<input type="search">`
- &[type="search"] {
+ &[type='search'] {
// Correct the odd appearance in Chrome and Safari 5
-webkit-appearance: textfield;
// <button class="mw-ui-button mw-ui-progressive">Submit</button>
//
// Styleguide 1.2.
-input[type="number"],
+input[type='number'],
.mw-ui-input-inline {
display: inline-block;
width: auto;
-@import "mediawiki.mixins";
-@import "mediawiki.ui/variables";
+@import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
// Radio
//
vertical-align: middle;
}
- input[type="radio"] {
+ input[type='radio'] {
// we hide the input element as instead we will style the label that follows
// we use opacity so that VoiceOver software can still identify it
opacity: 0;
-@import "mediawiki.mixins";
-@import "mediawiki.ui/variables";
-@import "mediawiki.ui/mixins";
+@import 'mediawiki.mixins';
+@import 'mediawiki.ui/variables';
+@import 'mediawiki.ui/mixins';
/*
Text & Anchors
/**
* Provide Agora appearance for mw-ui-* classes.
*/
-@import "components/forms";
-@import "components/utilities";
+@import 'components/forms';
+@import 'components/utilities';
/* stylelint-disable no-duplicate-selectors */
-@import "mediawiki.widgets.datetime.definitions";
+@import 'mediawiki.widgets.datetime.definitions';
.mw-widgets-datetime-calendarWidget {
display: inline-block;
/* stylelint-disable no-duplicate-selectors */
-@import "mediawiki.widgets.datetime.definitions";
+@import 'mediawiki.widgets.datetime.definitions';
.mw-widgets-datetime-dateTimeInputWidget {
display: inline-block;
}
.oo-ui-transition( @value1, @value2: X, ... ) {
- @value: ~`"@{arguments}".replace(/[\[\]]|\,\sX/g, '')`; // stylelint-disable-line function-comma-space-after, function-parentheses-space-inside, function-whitespace-after
+ @value: ~`'@{arguments}'.replace(/[\[\]]|\,\sX/g, '')`; // stylelint-disable-line function-comma-space-after, function-parentheses-space-inside, function-whitespace-after
-webkit-transition: @value;
-moz-transition: @value;
transition: @value;
-@import "mediawiki.ui/variables";
+@import 'mediawiki.ui/variables';
.mediawiki-filewarning {
visibility: hidden;
-@import "mediawiki.mixins";
+@import 'mediawiki.mixins';
#mw-indicator-mw-helplink a {
.background-image-svg('images/help.svg', 'images/help.png');
}
/* Generate interpuncts */
.hlist dt:after {
- content: ":";
+ content: ':';
}
.hlist dd:after,
.hlist li:after {
- content: " ·";
+ content: ' ·';
font-weight: bold;
}
.hlist dd:last-child:after,
.hlist li dd:first-child:before,
.hlist li dt:first-child:before,
.hlist li li:first-child:before {
- content: "(";
+ content: '(';
font-weight: normal;
}
.hlist dd dd:last-child:after,
.hlist li dd:last-child:after,
.hlist li dt:last-child:after,
.hlist li li:last-child:after {
- content: ")";
+ content: ')';
font-weight: normal;
}
/* For IE8 */
.hlist li dd.hlist-last-child:after,
.hlist li dt.hlist-last-child:after,
.hlist li li.hlist-last-child:after {
- content: ")";
+ content: ')';
font-weight: normal;
}
/* Put ordinals in front of ordered list items */
counter-increment: list-item;
}
.hlist ol > li:before {
- content: counter( list-item ) " ";
+ content: counter( list-item ) ' ';
}
.hlist dd ol > li:first-child:before,
.hlist dt ol > li:first-child:before,
.hlist li ol > li:first-child:before {
- content: "(" counter( list-item ) " ";
+ content: '(' counter( list-item ) ' ';
}
/* General-purpose icons via CSS. Classes here should be named "mw-icon-*". */
-@import "mediawiki.mixins";
+@import 'mediawiki.mixins';
/* For the collapsed and expanded arrows, we also provide selectors to make it
* easy to use them with jquery.makeCollapsible. */
* in MediaWiki (used e.g. on Special:ListFiles).
*/
-@import "mediawiki.mixins";
+@import 'mediawiki.mixins';
.TablePager {
min-width: 80%;
},
/**
- * Get an automatically generated random ID (stored in a session cookie)
+ * Get an automatically generated random ID (persisted in sessionStorage)
*
- * This ID is ephemeral for everyone, staying in their browser only until they close
- * their browser.
+ * This ID is ephemeral for everyone, staying in their browser only until they
+ * close their browsing session.
*
* @return {string} Random session ID
*/
sessionId: function () {
- var sessionId = mw.cookie.get( 'mwuser-sessionId' );
- if ( sessionId === null ) {
+ var sessionId = mw.storage.session.get( 'mwuser-sessionId' );
+ if ( !sessionId ) {
sessionId = mw.user.generateRandomSessionId();
- mw.cookie.set( 'mwuser-sessionId', sessionId, { expires: null } );
+ mw.storage.session.set( 'mwuser-sessionId', sessionId );
}
return sessionId;
},
+++ /dev/null
-<?php
-
-/**
- * Tests timestamp parsing and output.
- */
-class ConvertibleTimestampTest extends PHPUnit_Framework_TestCase {
- /**
- * @covers ConvertibleTimestamp::__construct
- */
- public function testConstructWithNoTimestamp() {
- $timestamp = new ConvertibleTimestamp();
- $this->assertInternalType( 'string', $timestamp->getTimestamp() );
- $this->assertNotEmpty( $timestamp->getTimestamp() );
- $this->assertNotEquals( false, strtotime( $timestamp->getTimestamp( TS_MW ) ) );
- }
-
- /**
- * @covers ConvertibleTimestamp::__toString
- */
- public function testToString() {
- $timestamp = new ConvertibleTimestamp( '1406833268' ); // Equivalent to 20140731190108
- $this->assertEquals( '1406833268', $timestamp->__toString() );
- }
-
- public static function provideValidTimestampDifferences() {
- return [
- [ '1406833268', '1406833269', '00 00 00 01' ],
- [ '1406833268', '1406833329', '00 00 01 01' ],
- [ '1406833268', '1406836929', '00 01 01 01' ],
- [ '1406833268', '1406923329', '01 01 01 01' ],
- ];
- }
-
- /**
- * @dataProvider provideValidTimestampDifferences
- * @covers ConvertibleTimestamp::diff
- */
- public function testDiff( $timestamp1, $timestamp2, $expected ) {
- $timestamp1 = new ConvertibleTimestamp( $timestamp1 );
- $timestamp2 = new ConvertibleTimestamp( $timestamp2 );
- $diff = $timestamp1->diff( $timestamp2 );
- $this->assertEquals( $expected, $diff->format( '%D %H %I %S' ) );
- }
-
- /**
- * Test parsing of valid timestamps and outputing to MW format.
- * @dataProvider provideValidTimestamps
- * @covers ConvertibleTimestamp::getTimestamp
- */
- public function testValidParse( $format, $original, $expected ) {
- $timestamp = new ConvertibleTimestamp( $original );
- $this->assertEquals( $expected, $timestamp->getTimestamp( TS_MW ) );
- }
-
- /**
- * Test outputting valid timestamps to different formats.
- * @dataProvider provideValidTimestamps
- * @covers ConvertibleTimestamp::getTimestamp
- */
- public function testValidOutput( $format, $expected, $original ) {
- $timestamp = new ConvertibleTimestamp( $original );
- $this->assertEquals( $expected, (string)$timestamp->getTimestamp( $format ) );
- }
-
- /**
- * Test an invalid timestamp.
- * @expectedException TimestampException
- * @covers ConvertibleTimestamp
- */
- public function testInvalidParse() {
- new ConvertibleTimestamp( "This is not a timestamp." );
- }
-
- /**
- * @dataProvider provideValidTimestamps
- * @covers ConvertibleTimestamp::convert
- */
- public function testConvert( $format, $expected, $original ) {
- $this->assertSame( $expected, ConvertibleTimestamp::convert( $format, $original ) );
- }
-
- /**
- * Format an invalid timestamp.
- * @covers ConvertibleTimestamp::convert
- */
- public function testConvertInvalid() {
- $this->assertSame( false, ConvertibleTimestamp::convert( 'Not a timestamp', 0 ) );
- }
-
- /**
- * Test an out of range timestamp
- * @dataProvider provideOutOfRangeTimestamps
- * @expectedException TimestampException
- * @covers ConvertibleTimestamp
- */
- public function testOutOfRangeTimestamps( $format, $input ) {
- $timestamp = new ConvertibleTimestamp( $input );
- $timestamp->getTimestamp( $format );
- }
-
- /**
- * Test requesting an invalid output format.
- * @expectedException TimestampException
- * @covers ConvertibleTimestamp::getTimestamp
- */
- public function testInvalidOutput() {
- $timestamp = new ConvertibleTimestamp( '1343761268' );
- $timestamp->getTimestamp( 98 );
- }
-
- /**
- * Returns a list of valid timestamps in the format:
- * [ type, timestamp_of_type, timestamp_in_MW ]
- */
- public static function provideValidTimestamps() {
- return [
- // Various formats
- [ TS_UNIX, '1343761268', '20120731190108' ],
- [ TS_MW, '20120731190108', '20120731190108' ],
- [ TS_DB, '2012-07-31 19:01:08', '20120731190108' ],
- [ TS_ISO_8601, '2012-07-31T19:01:08Z', '20120731190108' ],
- [ TS_ISO_8601_BASIC, '20120731T190108Z', '20120731190108' ],
- [ TS_EXIF, '2012:07:31 19:01:08', '20120731190108' ],
- [ TS_RFC2822, 'Tue, 31 Jul 2012 19:01:08 GMT', '20120731190108' ],
- [ TS_ORACLE, '31-07-2012 19:01:08.000000', '20120731190108' ],
- [ TS_POSTGRES, '2012-07-31 19:01:08 GMT', '20120731190108' ],
- // Some extremes and weird values
- [ TS_ISO_8601, '9999-12-31T23:59:59Z', '99991231235959' ],
- [ TS_UNIX, '-62135596801', '00001231235959' ]
- ];
- }
-
- /**
- * Returns a list of out of range timestamps in the format:
- * [ type, timestamp_of_type ]
- */
- public static function provideOutOfRangeTimestamps() {
- return [
- // Various formats
- [ TS_MW, '-62167219201' ], // -0001-12-31T23:59:59Z
- [ TS_MW, '253402300800' ], // 10000-01-01T00:00:00Z
- ];
- }
-}
'tests/qunit/suites/resources/mediawiki.api/mediawiki.ForeignApi.test.js',
'tests/qunit/suites/resources/mediawiki.special/mediawiki.special.recentchanges.test.js',
'tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js',
+ 'tests/qunit/suites/resources/mediawiki.rcfilters/dm.FilterItem.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.cookie.test.js',
--- /dev/null
+( function ( mw ) {
+ QUnit.module( 'mediawiki.rcfilters - FilterItem' );
+
+ QUnit.test( 'Initializing filter item', function ( assert ) {
+ var item,
+ group1 = new mw.rcfilters.dm.FilterGroup( 'group1' );
+
+ item = new mw.rcfilters.dm.FilterItem( 'filter1', group1 );
+ assert.equal(
+ item.getName(),
+ 'filter1',
+ 'Filter name is retained.'
+ );
+ assert.equal(
+ item.getGroupName(),
+ 'group1',
+ 'Group name is retained.'
+ );
+
+ item = new mw.rcfilters.dm.FilterItem(
+ 'filter1',
+ group1,
+ {
+ label: 'test label',
+ description: 'test description'
+ }
+ );
+ assert.equal(
+ item.getLabel(),
+ 'test label',
+ 'Label information is retained.'
+ );
+ assert.equal(
+ item.getLabel(),
+ 'test label',
+ 'Description information is retained.'
+ );
+
+ item = new mw.rcfilters.dm.FilterItem(
+ 'filter1',
+ group1,
+ {
+ selected: true
+ }
+ );
+ assert.equal(
+ item.isSelected(),
+ true,
+ 'Item can be selected in the config.'
+ );
+ item.toggleSelected( true );
+ assert.equal(
+ item.isSelected(),
+ true,
+ 'Item can toggle its selected state.'
+ );
+
+ // Subsets
+ item = new mw.rcfilters.dm.FilterItem(
+ 'filter1',
+ group1,
+ {
+ subset: [ 'sub1', 'sub2', 'sub3' ]
+ }
+ );
+ assert.deepEqual(
+ item.getSubset(),
+ [ 'sub1', 'sub2', 'sub3' ],
+ 'Subset information is retained.'
+ );
+ assert.equal(
+ item.existsInSubset( 'sub1' ),
+ true,
+ 'Specific item exists in subset.'
+ );
+ assert.equal(
+ item.existsInSubset( 'sub10' ),
+ false,
+ 'Specific item does not exists in subset.'
+ );
+ assert.equal(
+ item.isIncluded(),
+ false,
+ 'Initial state of "included" is false.'
+ );
+
+ item.toggleIncluded( true );
+ assert.equal(
+ item.isIncluded(),
+ true,
+ 'Item toggles its included state.'
+ );
+
+ // Conflicts
+ item = new mw.rcfilters.dm.FilterItem(
+ 'filter1',
+ group1,
+ {
+ conflicts: [ 'conflict1', 'conflict2', 'conflict3' ]
+ }
+ );
+ assert.deepEqual(
+ item.getConflicts(),
+ [ 'conflict1', 'conflict2', 'conflict3' ],
+ 'Conflict information is retained.'
+ );
+ assert.equal(
+ // TODO: Consider allowing for either a FilterItem or a filter name
+ // in this method, so it is consistent with the subset one
+ item.existsInConflicts( new mw.rcfilters.dm.FilterItem( 'conflict1', group1 ) ),
+ true,
+ 'Specific item exists in conflicts.'
+ );
+ assert.equal(
+ item.existsInConflicts( new mw.rcfilters.dm.FilterItem( 'conflict10', group1 ) ),
+ false,
+ 'Specific item does not exists in conflicts.'
+ );
+ assert.equal(
+ item.isConflicted(),
+ false,
+ 'Initial state of "conflicted" is false.'
+ );
+
+ item.toggleConflicted( true );
+ assert.equal(
+ item.isConflicted(),
+ true,
+ 'Item toggles its conflicted state.'
+ );
+
+ // Fully covered
+ item = new mw.rcfilters.dm.FilterItem( 'filter1', group1 );
+ assert.equal(
+ item.isFullyCovered(),
+ false,
+ 'Initial state of "full coverage" is false.'
+ );
+ item.toggleFullyCovered( true );
+ assert.equal(
+ item.isFullyCovered(),
+ true,
+ 'Item toggles its fully coverage state.'
+ );
+
+ } );
+
+ QUnit.test( 'Emitting events', function ( assert ) {
+ var group1 = new mw.rcfilters.dm.FilterGroup( 'group1' ),
+ item = new mw.rcfilters.dm.FilterItem( 'filter1', group1 ),
+ events = [];
+
+ // Listen to update events
+ item.on( 'update', function () {
+ events.push( item.getState() );
+ } );
+
+ // Do stuff
+ item.toggleSelected( true ); // { selected: true, included: false, conflicted: false, fullyCovered: false }
+ item.toggleSelected( true ); // No event (duplicate state)
+ item.toggleIncluded( true ); // { selected: true, included: true, conflicted: false, fullyCovered: false }
+ item.toggleConflicted( true ); // { selected: true, included: true, conflicted: true, fullyCovered: false }
+ item.toggleFullyCovered( true ); // { selected: true, included: true, conflicted: true, fullyCovered: true }
+ item.toggleSelected(); // { selected: false, included: true, conflicted: true, fullyCovered: true }
+
+ // Check emitted events
+ assert.deepEqual(
+ events,
+ [
+ { selected: true, included: false, conflicted: false, fullyCovered: false },
+ { selected: true, included: true, conflicted: false, fullyCovered: false },
+ { selected: true, included: true, conflicted: true, fullyCovered: false },
+ { selected: true, included: true, conflicted: true, fullyCovered: true },
+ { selected: false, included: true, conflicted: true, fullyCovered: true }
+ ],
+ 'Events emitted successfully.'
+ );
+ } );
+}( mediaWiki ) );
result2 = mw.user.generateRandomSessionId();
assert.notEqual( result, result2, 'different when called multiple times' );
+ } );
+ QUnit.test( 'sessionId', function ( assert ) {
+ var result = mw.user.sessionId(),
+ result2 = mw.user.sessionId();
+ assert.equal( typeof result, 'string', 'type' );
+ assert.equal( $.trim( result ), result, 'no leading or trailing whitespace' );
+ assert.equal( result2, result, 'retained' );
} );
}( mediaWiki, jQuery ) );