Return false to stop further processing of the tag
$reader: XMLReader object
-'ImportHandleUnknownUser': When a user does exist locally, this hook is called
+'ImportHandleUnknownUser': When a user doesn't exist locally, this hook is called
to give extensions an opportunity to auto-create it. If the auto-creation is
successful, return false.
$name: User name
}
}
-Autoloader::$psr4Namespaces = AutoLoader::getAutoloadNamespaces();
+AutoLoader::$psr4Namespaces = AutoLoader::getAutoloadNamespaces();
spl_autoload_register( [ 'AutoLoader', 'autoload' ] );
$op = $x['op'];
++$p;
switch ( $op ) {
- case self::XDL_BDOP_INS:
- $x = unpack( 'Csize', substr( $diff, $p, 1 ) );
- $p++;
- $out .= substr( $diff, $p, $x['size'] );
- $p += $x['size'];
- break;
- case self::XDL_BDOP_INSB:
- $x = unpack( 'Vcsize', substr( $diff, $p, 4 ) );
- $p += 4;
- $out .= substr( $diff, $p, $x['csize'] );
- $p += $x['csize'];
- break;
- case self::XDL_BDOP_CPY:
- $x = unpack( 'Voff/Vcsize', substr( $diff, $p, 8 ) );
- $p += 8;
- $out .= substr( $base, $x['off'], $x['csize'] );
- break;
- default:
- wfDebug( __METHOD__ . ": invalid op\n" );
- return false;
+ case self::XDL_BDOP_INS:
+ $x = unpack( 'Csize', substr( $diff, $p, 1 ) );
+ $p++;
+ $out .= substr( $diff, $p, $x['size'] );
+ $p += $x['size'];
+ break;
+ case self::XDL_BDOP_INSB:
+ $x = unpack( 'Vcsize', substr( $diff, $p, 4 ) );
+ $p += 4;
+ $out .= substr( $diff, $p, $x['csize'] );
+ $p += $x['csize'];
+ break;
+ case self::XDL_BDOP_CPY:
+ $x = unpack( 'Voff/Vcsize', substr( $diff, $p, 8 ) );
+ $p += 8;
+ $out .= substr( $base, $x['off'], $x['csize'] );
+ break;
+ default:
+ wfDebug( __METHOD__ . ": invalid op\n" );
+ return false;
}
}
return $out;
*
* @file
*/
+use MediaWiki\MediaWikiServices;
use Wikimedia\Timestamp\TimestampException;
use Wikimedia\Rdbms\IDatabase;
}
$this->dest->invalidateCache(); // update histories
+ // Duplicate watchers of the old article to the new article on history merge
+ $store = MediaWikiServices::getInstance()->getWatchedItemStore();
+ $store->duplicateAllAssociatedEntries( $this->source, $this->dest );
+
// Update our logs
$logEntry = new ManualLogEntry( 'merge', 'merge' );
$logEntry->setPerformer( $user );
*/
protected function formatPlaintext( $plaintext, $format ) {
switch ( $format ) {
- case self::FORMAT_TEXT:
- case self::FORMAT_PLAIN:
- return $plaintext;
-
- case self::FORMAT_PARSE:
- case self::FORMAT_BLOCK_PARSE:
- case self::FORMAT_ESCAPED:
- default:
- return htmlspecialchars( $plaintext, ENT_QUOTES );
-
+ case self::FORMAT_TEXT:
+ case self::FORMAT_PLAIN:
+ return $plaintext;
+
+ case self::FORMAT_PARSE:
+ case self::FORMAT_BLOCK_PARSE:
+ case self::FORMAT_ESCAPED:
+ default:
+ return htmlspecialchars( $plaintext, ENT_QUOTES );
}
}
// used. We'll need to assess expected fallout before doing that.
}
- $dbw = $this->getDBConnection( DB_REPLICA );
+ $dbw = $this->getDBConnection( DB_MASTER );
$old_id = $dbw->nextSequenceValue( 'text_old_id_seq' );
$dbw->insert(
$id = Sanitizer::escapeIdForAttribute( 'main/datatypes', Sanitizer::ID_PRIMARY );
$idFallback = Sanitizer::escapeIdForAttribute( 'main/datatypes', Sanitizer::ID_FALLBACK );
$headline = Linker::makeHeadline( min( 6, $level ),
- ' class="apihelp-header"',
+ ' class="apihelp-header">',
$id,
$header,
'',
$id = Sanitizer::escapeIdForAttribute( 'main/credits', Sanitizer::ID_PRIMARY );
$idFallback = Sanitizer::escapeIdForAttribute( 'main/credits', Sanitizer::ID_FALLBACK );
$headline = Linker::makeHeadline( min( 6, $level ),
- ' class="apihelp-header"',
+ ' class="apihelp-header">',
$id,
$header,
'',
"api-help-param-direction": "En que dirección enumerar:\n;newer:Lista os máis antigos primeiro. Nota: $1start ten que estar antes que $1end.\n;older:Lista os máis novos primeiro (por defecto). Nota: $1start ten que estar despois que $1end.",
"api-help-param-continue": "Cando estean dispoñibles máis resultados, use isto para continuar.",
"api-help-param-no-description": "<span class=\"apihelp-empty\">(sen descrición)</span>",
+ "api-help-param-maxbytes": "Non pode ser máis longo que $1 {{PLURAL:$1|byte|bytes}}.",
+ "api-help-param-maxchars": "Non pode ser máis longo que $1 {{PLURAL:$1|carácter|caracteres}}.",
"api-help-examples": "{{PLURAL:$1|Exemplo|Exemplos}}:",
"api-help-permissions": "{{PLURAL:$1|Permiso|Permisos}}:",
"api-help-permissions-granted-to": "{{PLURAL:$1|Concedida a|Concedidas a}}: $2",
"apihelp-query+logevents-param-prop": "Kurias savybes gauti:",
"apihelp-query+logevents-paramvalue-prop-ids": "Prideda žurnalo įvykio ID.",
"apihelp-query+logevents-paramvalue-prop-type": "Prideda žurnalo įvykio tipą.",
+ "apihelp-query+search-paramvalue-prop-extensiondata": "Prideda papildomus duomenis, sugeneruotus plėtinių.",
"apihelp-query+transcludedin-paramvalue-prop-pageid": "Kiekvieno puslapio ID.",
"apihelp-query+transcludedin-paramvalue-prop-title": "Kiekvieno puslapio pavadinimas.",
"apihelp-query+transcludedin-param-limit": "Kiek gražinti.",
"apihelp-query-param-indexpageids": "Incluir uma secção adicional de identificadores de página que lista todos os identificadores de página devolvidos.",
"apihelp-query-param-export": "Exportar as revisões atuais de todas as páginas fornecidas ou geradas.",
"apihelp-query-param-exportnowrap": "Devolver o XML de exportação sem envolvê-lo num resultado XML (o mesmo formato que [[Special:Export]]). Só pode ser usado com $1export.",
- "apihelp-query-param-iwurl": "Indica se deve ser obtido o URL completo quando o título é um ''link'' interwikis.",
+ "apihelp-query-param-iwurl": "Indica se deve ser obtido o URL completo quando o título é uma hiperligação interwikis.",
"apihelp-query-param-rawcontinue": "Devolver os dados em bruto de <samp>query-continue</samp> para continuar.",
"apihelp-query-example-revisions": "Obter [[Special:ApiHelp/query+siteinfo|informação do ''site'']] e as [[Special:ApiHelp/query+revisions|revisões]] da página <kbd>Main Page</kbd>.",
"apihelp-query-example-allpages": "Obter as revisões das páginas que começam por <kbd>API/</kbd>.",
"apihelp-query+allimages-example-mimetypes": "Mostrar uma lista dos ficheiros com os tipos MIME <kbd>image/png</kbd> ou <kbd>image/gif</kbd>.",
"apihelp-query+allimages-example-generator": "Mostrar informação sobre 4 ficheiros, começando pela letra <kbd>T</kbd>.",
"apihelp-query+alllinks-summary": "Enumerar todos os ''links'' que apontam para um determinado espaço nominal.",
- "apihelp-query+alllinks-param-from": "O título do ''link'' a partir do qual será começada a enumeração.",
+ "apihelp-query+alllinks-param-from": "O título da hiperligação a partir da qual será começada a enumeração.",
"apihelp-query+alllinks-param-to": "O título do ''link'' no qual será terminada a enumeração.",
"apihelp-query+alllinks-param-prefix": "Procurar todos os títulos ligados que começam por este valor.",
"apihelp-query+alllinks-param-unique": "Mostrar só títulos ligados únicos. Não pode ser usado com <kbd>$1prop=ids</kbd>.\nAo ser usado como gerador, produz páginas de destino em vez de páginas de origem.",
"apihelp-query+alllinks-param-prop": "As informações que devem ser incluídas:",
"apihelp-query+alllinks-paramvalue-prop-ids": "Adiciona o identificador da página que contém a ligação (não pode ser usado com <var>$1unique</var>).",
- "apihelp-query+alllinks-paramvalue-prop-title": "Adiciona o título do ''link''.",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Adiciona o título da hiperligação.",
"apihelp-query+alllinks-param-namespace": "O espaço nominal a ser enumerado.",
"apihelp-query+alllinks-param-limit": "O número total de entradas a serem devolvidas.",
"apihelp-query+alllinks-param-dir": "A direção de listagem.",
"apihelp-query+iwbacklinks-summary": "Encontrar todas as páginas que contêm ''links'' para as páginas indicadas.",
"apihelp-query+iwbacklinks-extended-description": "Pode ser usado para encontrar todos os ''links'' com um prefixo, ou todos os ''links'' para um título (com um prefixo especificado). Se nenhum parâmetro for usado, isso efetivamente significa \"todos os ''links'' interwikis\".",
"apihelp-query+iwbacklinks-param-prefix": "O prefixo interwikis.",
- "apihelp-query+iwbacklinks-param-title": "O ''link'' interwikis a ser procurado. Tem de ser usado em conjunto com <var>$1blprefix</var>.",
+ "apihelp-query+iwbacklinks-param-title": "A hiperligação interwikis a ser procurada. Tem de ser usado em conjunto com <var>$1blprefix</var>.",
"apihelp-query+iwbacklinks-param-limit": "O número total de páginas a serem devolvidas.",
"apihelp-query+iwbacklinks-param-prop": "As propriedades a serem obtidas:",
"apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Adiciona o prefixo do ''link'' interwikis.",
"apihelp-query+iwbacklinks-example-generator": "Obter informação sobre as páginas que contêm ligações para [[wikibooks:Test]].",
"apihelp-query+iwlinks-summary": "Devolve todos os ''links'' interwikis das páginas indicadas.",
"apihelp-query+iwlinks-param-url": "Indica se deve ser obtido o URL completo (não pode ser usado com $1prop).",
- "apihelp-query+iwlinks-param-prop": "As propriedades adicionais que devem ser obtidas para cada ''link'' interlínguas:",
+ "apihelp-query+iwlinks-param-prop": "As propriedades adicionais que devem ser obtidas para cada hiperligação interlínguas:",
"apihelp-query+iwlinks-paramvalue-prop-url": "Adiciona o URL completo.",
"apihelp-query+iwlinks-param-limit": "O número de ''links'' interwikis a serem devolvidos.",
"apihelp-query+iwlinks-param-prefix": "Devolver só os ''links'' interwikis com este prefixo.",
- "apihelp-query+iwlinks-param-title": "Link interwikis a ser procurado. Tem de ser usado em conjunto com <var>$1prefix</var>.",
+ "apihelp-query+iwlinks-param-title": "Hiperligação interwikis a ser procurada. Tem de ser usado em conjunto com <var>$1prefix</var>.",
"apihelp-query+iwlinks-param-dir": "A direção de listagem.",
"apihelp-query+iwlinks-example-simple": "Obter os ''links'' interwikis da página <kbd>Main Page</kbd>.",
"apihelp-query+langbacklinks-summary": "Encontrar todas as páginas que contêm ''links'' para o ''link'' interlínguas indicado.",
"apihelp-query+langbacklinks-extended-description": "Pode ser usado para encontrar todos os ''links'' para um determinado código de língua, ou todos os ''links'' para um determinado título (de uma língua). Se nenhum for usado, isso efetivamente significa \"todos os ''links'' interlínguas\".\n\nNote que os ''links'' interlínguas adicionados por extensões podem não ser considerados.",
- "apihelp-query+langbacklinks-param-lang": "A língua do ''link'' interlínguas.",
- "apihelp-query+langbacklinks-param-title": "Link interlínguas a ser procurado. Tem de ser usado com $1lang.",
+ "apihelp-query+langbacklinks-param-lang": "A língua da hiperligação da língua.",
+ "apihelp-query+langbacklinks-param-title": "Hiperligação interlínguas a ser procurada. Tem de ser usado com $1lang.",
"apihelp-query+langbacklinks-param-limit": "O número total de páginas a serem devolvidas.",
"apihelp-query+langbacklinks-param-prop": "As propriedades a serem obtidas:",
"apihelp-query+langbacklinks-paramvalue-prop-lllang": "Adiciona o código de língua da ligação interlínguas.",
"apihelp-query+langlinks-summary": "Devolve todos os ''links'' interlínguas das páginas indicadas.",
"apihelp-query+langlinks-param-limit": "O número de ''links'' interlínguas a serem devolvidos.",
"apihelp-query+langlinks-param-url": "Indica se deve ser obtido o URL completo (não pode ser usado com $1prop).",
- "apihelp-query+langlinks-param-prop": "As propriedades adicionais que devem ser obtidas para cada ''link'' interlínguas:",
+ "apihelp-query+langlinks-param-prop": "As propriedades adicionais que devem ser obtidas para cada hiperligação interlínguas:",
"apihelp-query+langlinks-paramvalue-prop-url": "Adiciona o URL completo.",
"apihelp-query+langlinks-paramvalue-prop-langname": "Adiciona o nome da língua localizado (melhor esforço). Usar <var>$1inlanguagecode</var> para controlar a língua.",
"apihelp-query+langlinks-paramvalue-prop-autonym": "Adiciona o nome nativo da língua.",
"apihelp-query+langlinks-param-lang": "Devolver só os ''links'' interlínguas com este código de língua.",
- "apihelp-query+langlinks-param-title": "''Link'' a ser procurado. Tem de ser usado com <var>$1lang</var>.",
+ "apihelp-query+langlinks-param-title": "A hiperligação a ser procurada. Tem de ser usado com <var>$1lang</var>.",
"apihelp-query+langlinks-param-dir": "A direção de listagem.",
"apihelp-query+langlinks-param-inlanguagecode": "O código de língua para os nomes de língua localizados.",
"apihelp-query+langlinks-example-simple": "Obter os ''links'' interlínguas da página <kbd>Main Page</kbd>.",
$data = $encoded[1];
switch ( $type ) {
- case 'v':
- return $data;
- case 's':
- return unserialize( $data );
- case 'a':
- return array_map( function ( $v ) {
- return LCStoreStaticArray::decode( $v );
- }, $data );
- default:
- throw new RuntimeException(
- 'Unable to decode ' . var_export( $encoded, true ) );
+ case 'v':
+ return $data;
+ case 's':
+ return unserialize( $data );
+ case 'a':
+ return array_map( function ( $v ) {
+ return LCStoreStaticArray::decode( $v );
+ }, $data );
+ default:
+ throw new RuntimeException(
+ 'Unable to decode ' . var_export( $encoded, true ) );
}
}
* @param FormOptions $opts
* @return bool
*/
- public function activelyInConflictWithFilter( ChangeslistFilter $filter, FormOptions $opts ) {
+ public function activelyInConflictWithFilter( ChangesListFilter $filter, FormOptions $opts ) {
if ( $this->isSelected( $opts ) && $filter->isSelected( $opts ) ) {
/** @var ChangesListFilter $siblingFilter */
foreach ( $this->getSiblings() as $siblingFilter ) {
return false;
}
- private function hasConflictWithFilter( ChangeslistFilter $filter ) {
+ private function hasConflictWithFilter( ChangesListFilter $filter ) {
return in_array( $filter, $this->getConflictingFilters() );
}
*/
protected function processReadBuffer() {
switch ( $this->readState ) {
- case 'idle':
- return 'done';
- case 'status':
- case 'header':
- $lines = explode( "\r\n", $this->readBuffer, 2 );
- if ( count( $lines ) < 2 ) {
+ case 'idle':
return 'done';
- }
- if ( $this->readState == 'status' ) {
- $this->processStatusLine( $lines[0] );
- } else { // header
- $this->processHeaderLine( $lines[0] );
- }
- $this->readBuffer = $lines[1];
- return 'continue';
- case 'body':
- if ( $this->bodyRemaining !== null ) {
- if ( $this->bodyRemaining > strlen( $this->readBuffer ) ) {
- $this->bodyRemaining -= strlen( $this->readBuffer );
- $this->readBuffer = '';
+ case 'status':
+ case 'header':
+ $lines = explode( "\r\n", $this->readBuffer, 2 );
+ if ( count( $lines ) < 2 ) {
return 'done';
+ }
+ if ( $this->readState == 'status' ) {
+ $this->processStatusLine( $lines[0] );
+ } else { // header
+ $this->processHeaderLine( $lines[0] );
+ }
+ $this->readBuffer = $lines[1];
+ return 'continue';
+ case 'body':
+ if ( $this->bodyRemaining !== null ) {
+ if ( $this->bodyRemaining > strlen( $this->readBuffer ) ) {
+ $this->bodyRemaining -= strlen( $this->readBuffer );
+ $this->readBuffer = '';
+ return 'done';
+ } else {
+ $this->readBuffer = substr( $this->readBuffer, $this->bodyRemaining );
+ $this->bodyRemaining = 0;
+ $this->nextRequest();
+ return 'continue';
+ }
} else {
- $this->readBuffer = substr( $this->readBuffer, $this->bodyRemaining );
- $this->bodyRemaining = 0;
- $this->nextRequest();
- return 'continue';
+ // No content length, read all data to EOF
+ $this->readBuffer = '';
+ return 'done';
}
- } else {
- // No content length, read all data to EOF
- $this->readBuffer = '';
- return 'done';
- }
- default:
- throw new MWException( __METHOD__ . ': unexpected state' );
+ default:
+ throw new MWException( __METHOD__ . ': unexpected state' );
}
}
$tooltipAttribs = [
'class' => "mw-htmlform-tooltip $tooltipClass",
'title' => $this->mParams['tooltips'][$rowLabel],
+ 'aria-label' => $this->mParams['tooltips'][$rowLabel]
];
$rowLabel .= ' ' . Html::element( 'span', $tooltipAttribs, '' );
}
$buffer = "";
while ( $this->reader->read() ) {
switch ( $this->reader->nodeType ) {
- case XMLReader::TEXT:
- case XMLReader::CDATA:
- case XMLReader::SIGNIFICANT_WHITESPACE:
- $buffer .= $this->reader->value;
- break;
- case XMLReader::END_ELEMENT:
- return $buffer;
+ case XMLReader::TEXT:
+ case XMLReader::CDATA:
+ case XMLReader::SIGNIFICANT_WHITESPACE:
+ $buffer .= $this->reader->value;
+ break;
+ case XMLReader::END_ELEMENT:
+ return $buffer;
}
}
"config-email-auth-help": "Si esta opción está habilitada, los usuarios tienen que confirmar su dirección de correo electrónico mediante un enlace que se les envía a ellos cuando éstos lo establecen o lo cambian.\nSolo las direcciones de correo electrónico autenticadas pueden recibir correos electrónicos de otros usuarios o correos electrónicos de notificación de cambios.\nEsta opción está '''recomendada''' para wikis públicos debido a posibles abusos de las características del correo electrónico.",
"config-email-sender": "Dirección de correo electrónico de retorno:",
"config-email-sender-help": "Escribe la dirección de correo electrónico que se usará como dirección de retorno en los mensajes electrónicos de salida.\nAquí llegarán los correos electrónicos que no lleguen a su destino.\nMuchos servidores de correo electrónico exigen que por lo menos la parte del nombre del dominio sea válida.",
- "config-upload-settings": "Subidas de imágenes y archivos",
+ "config-upload-settings": "Cargas de imágenes y archivos",
"config-upload-enable": "Habilitar la subida de archivos",
"config-upload-help": "La subida de archivos potencialmente expone tu servidor a riesgos de seguridad.\nPara obtener más información, consulta la [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security sección de seguridad] en el manual.\n\nPara activar la subida de archivos, cambia el modo en el subdirectorio <code>images</code> bajo el directorio raíz de MediaWiki para que el servidor web pueda escribir en él.\nLuego, activa esta opción.",
"config-upload-deleted": "Directorio para los archivos eliminados:",
"config-install-mainpage-failed": "Non se puido inserir a páxina principal: $1",
"config-install-done": "<strong>Parabéns!</strong>\nInstalou MediaWiki.\n\nO programa de instalación xerou un ficheiro <code>LocalSettings.php</code>.\nEste ficheiro contén toda a súa configuración.\n\nTerá que descargalo e poñelo na base da instalación do seu wiki (no mesmo directorio ca index.php). A descarga debería comezar automaticamente.\n\nSe non comezou a descarga ou se a cancelou, pode facer que comece de novo premendo na ligazón que aparece a continuación:\n\n$3\n\n<strong>Nota:</strong> Se non fai iso agora, este ficheiro de configuración xerado non estará dispoñible máis adiante se sae da instalación sen descargalo.\n\nCando faga todo isto, xa poderá <strong>[$2 entrar no seu wiki]</strong>.",
"config-install-done-path": "<strong>Parabéns!</strong>\nInstalou MediaWiki.\n\nO instalador xerou un ficheiro <code>LocalSettings.php</code>.\nEste contén toda a súa configuración.\n\nDeberá descargalo e poñerlo en <code>$4</code>. A descarga debería ter comezado automaticamente.\n\nSe non comenzou a descarga, ou se a cancelou, podes reiniciala descarga premendo na seguinte ligazón:\n\n$3\n\n<strong>Nota</strong>: se non fai isto agora, este ficheiro de configuración xerado non estará dispoñible máis tarde se sae da instalación sen descargarlo.\n\nCando o teña feito, poderá <strong>[$2 entrar na súa wiki]</strong>.",
+ "config-install-success": "MediaWiki instalouse con éxito. Agora podes \nvisitar <$1$2> para ver a túa wiki.\nSe tes dúbidas, revisa a nosa lista de preguntas frecuentes:\n<https://www.mediawiki.org/wiki/Manual:FAQ> ou usa un dos\nforos de axuda ligados nesa páxina.",
"config-download-localsettings": "Descargar o <code>LocalSettings.php</code>",
"config-help": "axuda",
"config-help-tooltip": "prema para expandir",
"Diniscoelho",
"Ruila",
"Seb35",
- "MokaAkashiyaPT"
+ "MokaAkashiyaPT",
+ "Athena in Wonderland"
]
},
"config-desc": "O instalador do MediaWiki",
}
switch ( gettype( $value ) ) {
- case 'NULL':
- return "\xC0";
+ case 'NULL':
+ return "\xC0";
- case 'boolean':
- return $value ? "\xC3" : "\xC2";
+ case 'boolean':
+ return $value ? "\xC3" : "\xC2";
- case 'double':
- case 'float':
- return self::$bigendian
- ? "\xCB" . pack( 'd', $value )
- : "\xCB" . strrev( pack( 'd', $value ) );
+ case 'double':
+ case 'float':
+ return self::$bigendian
+ ? "\xCB" . pack( 'd', $value )
+ : "\xCB" . strrev( pack( 'd', $value ) );
- case 'string':
- $length = strlen( $value );
- if ( $length < 32 ) {
- return pack( 'Ca*', 0xA0 | $length, $value );
- } elseif ( $length <= 0xFFFF ) {
- return pack( 'Cna*', 0xDA, $length, $value );
- } elseif ( $length <= 0xFFFFFFFF ) {
- return pack( 'CNa*', 0xDB, $length, $value );
- }
- throw new InvalidArgumentException( __METHOD__
- . ": string too long (length: $length; max: 4294967295)" );
-
- case 'integer':
- if ( $value >= 0 ) {
- if ( $value <= 0x7F ) {
- // positive fixnum
- return chr( $value );
- }
- if ( $value <= 0xFF ) {
- // uint8
- return pack( 'CC', 0xCC, $value );
- }
- if ( $value <= 0xFFFF ) {
- // uint16
- return pack( 'Cn', 0xCD, $value );
- }
- if ( $value <= 0xFFFFFFFF ) {
- // uint32
- return pack( 'CN', 0xCE, $value );
- }
- if ( $value <= 0xFFFFFFFFFFFFFFFF ) {
- // uint64
- $hi = ( $value & 0xFFFFFFFF00000000 ) >> 32;
- $lo = $value & 0xFFFFFFFF;
- return self::$bigendian
- ? pack( 'CNN', 0xCF, $lo, $hi )
- : pack( 'CNN', 0xCF, $hi, $lo );
- }
- } else {
- if ( $value >= -32 ) {
- // negative fixnum
- return pack( 'c', $value );
- }
- if ( $value >= -0x80 ) {
- // int8
- return pack( 'Cc', 0xD0, $value );
- }
- if ( $value >= -0x8000 ) {
- // int16
- $p = pack( 's', $value );
- return self::$bigendian
- ? pack( 'Ca2', 0xD1, $p )
- : pack( 'Ca2', 0xD1, strrev( $p ) );
- }
- if ( $value >= -0x80000000 ) {
- // int32
- $p = pack( 'l', $value );
- return self::$bigendian
- ? pack( 'Ca4', 0xD2, $p )
- : pack( 'Ca4', 0xD2, strrev( $p ) );
- }
- if ( $value >= -0x8000000000000000 ) {
- // int64
- // pack() does not support 64-bit ints either so pack into two 32-bits
- $p1 = pack( 'l', $value & 0xFFFFFFFF );
- $p2 = pack( 'l', ( $value >> 32 ) & 0xFFFFFFFF );
- return self::$bigendian
- ? pack( 'Ca4a4', 0xD3, $p1, $p2 )
- : pack( 'Ca4a4', 0xD3, strrev( $p2 ), strrev( $p1 ) );
+ case 'string':
+ $length = strlen( $value );
+ if ( $length < 32 ) {
+ return pack( 'Ca*', 0xA0 | $length, $value );
+ } elseif ( $length <= 0xFFFF ) {
+ return pack( 'Cna*', 0xDA, $length, $value );
+ } elseif ( $length <= 0xFFFFFFFF ) {
+ return pack( 'CNa*', 0xDB, $length, $value );
}
- }
- throw new InvalidArgumentException( __METHOD__ . ": invalid integer '$value'" );
-
- case 'array':
- $buffer = '';
- $length = count( $value );
- if ( $length > 0xFFFFFFFF ) {
throw new InvalidArgumentException( __METHOD__
- . ": array too long (length: $length, max: 4294967295)" );
- }
+ . ": string too long (length: $length; max: 4294967295)" );
- $index = 0;
- foreach ( $value as $k => $v ) {
- if ( $index !== $k || $index === $length ) {
- break;
+ case 'integer':
+ if ( $value >= 0 ) {
+ if ( $value <= 0x7F ) {
+ // positive fixnum
+ return chr( $value );
+ }
+ if ( $value <= 0xFF ) {
+ // uint8
+ return pack( 'CC', 0xCC, $value );
+ }
+ if ( $value <= 0xFFFF ) {
+ // uint16
+ return pack( 'Cn', 0xCD, $value );
+ }
+ if ( $value <= 0xFFFFFFFF ) {
+ // uint32
+ return pack( 'CN', 0xCE, $value );
+ }
+ if ( $value <= 0xFFFFFFFFFFFFFFFF ) {
+ // uint64
+ $hi = ( $value & 0xFFFFFFFF00000000 ) >> 32;
+ $lo = $value & 0xFFFFFFFF;
+ return self::$bigendian
+ ? pack( 'CNN', 0xCF, $lo, $hi )
+ : pack( 'CNN', 0xCF, $hi, $lo );
+ }
} else {
- $index++;
+ if ( $value >= -32 ) {
+ // negative fixnum
+ return pack( 'c', $value );
+ }
+ if ( $value >= -0x80 ) {
+ // int8
+ return pack( 'Cc', 0xD0, $value );
+ }
+ if ( $value >= -0x8000 ) {
+ // int16
+ $p = pack( 's', $value );
+ return self::$bigendian
+ ? pack( 'Ca2', 0xD1, $p )
+ : pack( 'Ca2', 0xD1, strrev( $p ) );
+ }
+ if ( $value >= -0x80000000 ) {
+ // int32
+ $p = pack( 'l', $value );
+ return self::$bigendian
+ ? pack( 'Ca4', 0xD2, $p )
+ : pack( 'Ca4', 0xD2, strrev( $p ) );
+ }
+ if ( $value >= -0x8000000000000000 ) {
+ // int64
+ // pack() does not support 64-bit ints either so pack into two 32-bits
+ $p1 = pack( 'l', $value & 0xFFFFFFFF );
+ $p2 = pack( 'l', ( $value >> 32 ) & 0xFFFFFFFF );
+ return self::$bigendian
+ ? pack( 'Ca4a4', 0xD3, $p1, $p2 )
+ : pack( 'Ca4a4', 0xD3, strrev( $p2 ), strrev( $p1 ) );
+ }
}
- }
- $associative = $index !== $length;
+ throw new InvalidArgumentException( __METHOD__ . ": invalid integer '$value'" );
- if ( $associative ) {
- if ( $length < 16 ) {
- $buffer .= pack( 'C', 0x80 | $length );
- } elseif ( $length <= 0xFFFF ) {
- $buffer .= pack( 'Cn', 0xDE, $length );
- } else {
- $buffer .= pack( 'CN', 0xDF, $length );
+ case 'array':
+ $buffer = '';
+ $length = count( $value );
+ if ( $length > 0xFFFFFFFF ) {
+ throw new InvalidArgumentException( __METHOD__
+ . ": array too long (length: $length, max: 4294967295)" );
}
+
+ $index = 0;
foreach ( $value as $k => $v ) {
- $buffer .= self::pack( $k );
- $buffer .= self::pack( $v );
+ if ( $index !== $k || $index === $length ) {
+ break;
+ } else {
+ $index++;
+ }
}
- } else {
- if ( $length < 16 ) {
- $buffer .= pack( 'C', 0x90 | $length );
- } elseif ( $length <= 0xFFFF ) {
- $buffer .= pack( 'Cn', 0xDC, $length );
+ $associative = $index !== $length;
+
+ if ( $associative ) {
+ if ( $length < 16 ) {
+ $buffer .= pack( 'C', 0x80 | $length );
+ } elseif ( $length <= 0xFFFF ) {
+ $buffer .= pack( 'Cn', 0xDE, $length );
+ } else {
+ $buffer .= pack( 'CN', 0xDF, $length );
+ }
+ foreach ( $value as $k => $v ) {
+ $buffer .= self::pack( $k );
+ $buffer .= self::pack( $v );
+ }
} else {
- $buffer .= pack( 'CN', 0xDD, $length );
- }
- foreach ( $value as $v ) {
- $buffer .= self::pack( $v );
+ if ( $length < 16 ) {
+ $buffer .= pack( 'C', 0x90 | $length );
+ } elseif ( $length <= 0xFFFF ) {
+ $buffer .= pack( 'Cn', 0xDC, $length );
+ } else {
+ $buffer .= pack( 'CN', 0xDD, $length );
+ }
+ foreach ( $value as $v ) {
+ $buffer .= self::pack( $v );
+ }
}
- }
- return $buffer;
+ return $buffer;
- default:
- throw new InvalidArgumentException( __METHOD__ . ': unsupported type ' . gettype( $value ) );
+ default:
+ throw new InvalidArgumentException( __METHOD__ . ': unsupported type ' . gettype( $value ) );
}
}
}
continue;
}
switch ( $field ) {
- case 'typepublic':
- case 'typesystem':
- $parsed['type'] = $value;
- break;
- case 'pubquote':
- case 'pubapos':
- $parsed['publicid'] = $value;
- break;
- case 'pubsysquote':
- case 'pubsysapos':
- case 'sysquote':
- case 'sysapos':
- $parsed['systemid'] = $value;
- break;
- case 'internal':
- $parsed['internal'] = $value;
- break;
+ case 'typepublic':
+ case 'typesystem':
+ $parsed['type'] = $value;
+ break;
+ case 'pubquote':
+ case 'pubapos':
+ $parsed['publicid'] = $value;
+ break;
+ case 'pubsysquote':
+ case 'pubsysapos':
+ case 'sysquote':
+ case 'sysapos':
+ $parsed['systemid'] = $value;
+ break;
+ case 'internal':
+ $parsed['internal'] = $value;
+ break;
}
}
return $parsed;
*/
protected function imageMagickSubsampling( $pixelFormat ) {
switch ( $pixelFormat ) {
- case 'yuv444':
- return [ '1x1', '1x1', '1x1' ];
- case 'yuv422':
- return [ '2x1', '1x1', '1x1' ];
- case 'yuv420':
- return [ '2x2', '1x1', '1x1' ];
- default:
- throw new MWException( 'Invalid pixel format for JPEG output' );
+ case 'yuv444':
+ return [ '1x1', '1x1', '1x1' ];
+ case 'yuv422':
+ return [ '2x1', '1x1', '1x1' ];
+ case 'yuv420':
+ return [ '2x2', '1x1', '1x1' ];
+ default:
+ throw new MWException( 'Invalid pixel format for JPEG output' );
}
}
// Unclear from base media type if it has an alpha layer,
// so just assume that it does since it "potentially" could.
switch ( $header['base_type'] ) {
- case 0:
- $metadata['colorType'] = 'truecolour-alpha';
- break;
- case 1:
- $metadata['colorType'] = 'greyscale-alpha';
- break;
- case 2:
- $metadata['colorType'] = 'index-coloured';
- break;
- default:
- $metadata['colorType'] = 'unknown';
-
+ case 0:
+ $metadata['colorType'] = 'truecolour-alpha';
+ break;
+ case 1:
+ $metadata['colorType'] = 'greyscale-alpha';
+ break;
+ case 2:
+ $metadata['colorType'] = 'index-coloured';
+ break;
+ default:
+ $metadata['colorType'] = 'unknown';
}
} else {
// Marker to prevent repeated attempted extraction
*/
private static function convertSelectType( $type ) {
switch ( $type ) {
- case 'fromdb':
- return self::READ_NORMAL;
- case 'fromdbmaster':
- return self::READ_LATEST;
- case 'forupdate':
- return self::READ_LOCKING;
- default:
- // It may already be an integer or whatever else
- return $type;
+ case 'fromdb':
+ return self::READ_NORMAL;
+ case 'fromdbmaster':
+ return self::READ_LATEST;
+ case 'forupdate':
+ return self::READ_LOCKING;
+ default:
+ // It may already be an integer or whatever else
+ return $type;
}
}
$c = $str[$i];
switch ( $state ) {
- case self::COLON_STATE_TEXT:
- switch ( $c ) {
- case "<":
- # Could be either a <start> tag or an </end> tag
- $state = self::COLON_STATE_TAGSTART;
- break;
- case ":":
- if ( $ltLevel === 0 ) {
- # We found it!
- $before = substr( $str, 0, $i );
- $after = substr( $str, $i + 1 );
- return $i;
+ case self::COLON_STATE_TEXT:
+ switch ( $c ) {
+ case "<":
+ # Could be either a <start> tag or an </end> tag
+ $state = self::COLON_STATE_TAGSTART;
+ break;
+ case ":":
+ if ( $ltLevel === 0 ) {
+ # We found it!
+ $before = substr( $str, 0, $i );
+ $after = substr( $str, $i + 1 );
+ return $i;
+ }
+ # Embedded in a tag; don't break it.
+ break;
+ default:
+ # Skip ahead looking for something interesting
+ if ( !preg_match( '/:|<|-\{/', $str, $m, PREG_OFFSET_CAPTURE, $i ) ) {
+ # Nothing else interesting
+ return false;
+ }
+ if ( $m[0][0] === '-{' ) {
+ $state = self::COLON_STATE_LC;
+ $lcLevel++;
+ $i = $m[0][1] + 1;
+ } else {
+ # Skip ahead to next interesting character.
+ $i = $m[0][1] - 1;
+ }
+ break;
}
- # Embedded in a tag; don't break it.
break;
- default:
- # Skip ahead looking for something interesting
- if ( !preg_match( '/:|<|-\{/', $str, $m, PREG_OFFSET_CAPTURE, $i ) ) {
- # Nothing else interesting
- return false;
- }
- if ( $m[0][0] === '-{' ) {
- $state = self::COLON_STATE_LC;
+ case self::COLON_STATE_LC:
+ # In language converter markup -{ ... }-
+ if ( !preg_match( '/-\{|\}-/', $str, $m, PREG_OFFSET_CAPTURE, $i ) ) {
+ # Nothing else interesting to find; abort!
+ # We're nested in language converter markup, but there
+ # are no close tags left. Abort!
+ break 2;
+ } elseif ( $m[0][0] === '-{' ) {
+ $i = $m[0][1] + 1;
$lcLevel++;
+ } elseif ( $m[0][0] === '}-' ) {
$i = $m[0][1] + 1;
- } else {
- # Skip ahead to next interesting character.
- $i = $m[0][1] - 1;
+ $lcLevel--;
+ if ( $lcLevel === 0 ) {
+ $state = self::COLON_STATE_TEXT;
+ }
}
break;
- }
- break;
- case self::COLON_STATE_LC:
- # In language converter markup -{ ... }-
- if ( !preg_match( '/-\{|\}-/', $str, $m, PREG_OFFSET_CAPTURE, $i ) ) {
- # Nothing else interesting to find; abort!
- # We're nested in language converter markup, but there
- # are no close tags left. Abort!
- break 2;
- } elseif ( $m[0][0] === '-{' ) {
- $i = $m[0][1] + 1;
- $lcLevel++;
- } elseif ( $m[0][0] === '}-' ) {
- $i = $m[0][1] + 1;
- $lcLevel--;
- if ( $lcLevel === 0 ) {
- $state = self::COLON_STATE_TEXT;
+ case self::COLON_STATE_TAG:
+ # In a <tag>
+ switch ( $c ) {
+ case ">":
+ $ltLevel++;
+ $state = self::COLON_STATE_TEXT;
+ break;
+ case "/":
+ # Slash may be followed by >?
+ $state = self::COLON_STATE_TAGSLASH;
+ break;
+ default:
+ # ignore
}
- }
- break;
- case self::COLON_STATE_TAG:
- # In a <tag>
- switch ( $c ) {
- case ">":
- $ltLevel++;
- $state = self::COLON_STATE_TEXT;
break;
- case "/":
- # Slash may be followed by >?
- $state = self::COLON_STATE_TAGSLASH;
+ case self::COLON_STATE_TAGSTART:
+ switch ( $c ) {
+ case "/":
+ $state = self::COLON_STATE_CLOSETAG;
+ break;
+ case "!":
+ $state = self::COLON_STATE_COMMENT;
+ break;
+ case ">":
+ # Illegal early close? This shouldn't happen D:
+ $state = self::COLON_STATE_TEXT;
+ break;
+ default:
+ $state = self::COLON_STATE_TAG;
+ }
break;
- default:
- # ignore
- }
- break;
- case self::COLON_STATE_TAGSTART:
- switch ( $c ) {
- case "/":
- $state = self::COLON_STATE_CLOSETAG;
+ case self::COLON_STATE_CLOSETAG:
+ # In a </tag>
+ if ( $c === ">" ) {
+ if ( $ltLevel > 0 ) {
+ $ltLevel--;
+ } else {
+ # ignore the excess close tag, but keep looking for
+ # colons. (This matches Parsoid behavior.)
+ wfDebug( __METHOD__ . ": Invalid input; too many close tags\n" );
+ }
+ $state = self::COLON_STATE_TEXT;
+ }
break;
- case "!":
- $state = self::COLON_STATE_COMMENT;
+ case self::COLON_STATE_TAGSLASH:
+ if ( $c === ">" ) {
+ # Yes, a self-closed tag <blah/>
+ $state = self::COLON_STATE_TEXT;
+ } else {
+ # Probably we're jumping the gun, and this is an attribute
+ $state = self::COLON_STATE_TAG;
+ }
break;
- case ">":
- # Illegal early close? This shouldn't happen D:
- $state = self::COLON_STATE_TEXT;
+ case self::COLON_STATE_COMMENT:
+ if ( $c === "-" ) {
+ $state = self::COLON_STATE_COMMENTDASH;
+ }
break;
- default:
- $state = self::COLON_STATE_TAG;
- }
- break;
- case self::COLON_STATE_CLOSETAG:
- # In a </tag>
- if ( $c === ">" ) {
- if ( $ltLevel > 0 ) {
- $ltLevel--;
+ case self::COLON_STATE_COMMENTDASH:
+ if ( $c === "-" ) {
+ $state = self::COLON_STATE_COMMENTDASHDASH;
} else {
- # ignore the excess close tag, but keep looking for
- # colons. (This matches Parsoid behavior.)
- wfDebug( __METHOD__ . ": Invalid input; too many close tags\n" );
+ $state = self::COLON_STATE_COMMENT;
}
- $state = self::COLON_STATE_TEXT;
- }
- break;
- case self::COLON_STATE_TAGSLASH:
- if ( $c === ">" ) {
- # Yes, a self-closed tag <blah/>
- $state = self::COLON_STATE_TEXT;
- } else {
- # Probably we're jumping the gun, and this is an attribute
- $state = self::COLON_STATE_TAG;
- }
- break;
- case self::COLON_STATE_COMMENT:
- if ( $c === "-" ) {
- $state = self::COLON_STATE_COMMENTDASH;
- }
- break;
- case self::COLON_STATE_COMMENTDASH:
- if ( $c === "-" ) {
- $state = self::COLON_STATE_COMMENTDASHDASH;
- } else {
- $state = self::COLON_STATE_COMMENT;
- }
- break;
- case self::COLON_STATE_COMMENTDASHDASH:
- if ( $c === ">" ) {
- $state = self::COLON_STATE_TEXT;
- } else {
- $state = self::COLON_STATE_COMMENT;
- }
- break;
- default:
- throw new MWException( "State machine error in " . __METHOD__ );
+ break;
+ case self::COLON_STATE_COMMENTDASHDASH:
+ if ( $c === ">" ) {
+ $state = self::COLON_STATE_TEXT;
+ } else {
+ $state = self::COLON_STATE_COMMENT;
+ }
+ break;
+ default:
+ throw new MWException( "State machine error in " . __METHOD__ );
}
}
if ( $ltLevel > 0 || $lcLevel > 0 ) {
$paramName = $paramMap[$magicName];
switch ( $paramName ) {
- case 'gallery-internal-alt':
- $alt = $this->stripAltText( $match, false );
- break;
- case 'gallery-internal-link':
- $linkValue = strip_tags( $this->replaceLinkHoldersText( $match ) );
- $chars = self::EXT_LINK_URL_CLASS;
- $addr = self::EXT_LINK_ADDR;
- $prots = $this->mUrlProtocols;
- // check to see if link matches an absolute url, if not then it must be a wiki link.
- if ( preg_match( '/^-{R|(.*)}-$/', $linkValue ) ) {
- // Result of LanguageConverter::markNoConversion
- // invoked on an external link.
- $linkValue = substr( $linkValue, 4, -2 );
- }
- if ( preg_match( "/^($prots)$addr$chars*$/u", $linkValue ) ) {
- $link = $linkValue;
- $this->mOutput->addExternalLink( $link );
- } else {
- $localLinkTitle = Title::newFromText( $linkValue );
- if ( $localLinkTitle !== null ) {
- $this->mOutput->addLink( $localLinkTitle );
- $link = $localLinkTitle->getLinkURL();
+ case 'gallery-internal-alt':
+ $alt = $this->stripAltText( $match, false );
+ break;
+ case 'gallery-internal-link':
+ $linkValue = strip_tags( $this->replaceLinkHoldersText( $match ) );
+ $chars = self::EXT_LINK_URL_CLASS;
+ $addr = self::EXT_LINK_ADDR;
+ $prots = $this->mUrlProtocols;
+ // check to see if link matches an absolute url, if not then it must be a wiki link.
+ if ( preg_match( '/^-{R|(.*)}-$/', $linkValue ) ) {
+ // Result of LanguageConverter::markNoConversion
+ // invoked on an external link.
+ $linkValue = substr( $linkValue, 4, -2 );
+ }
+ if ( preg_match( "/^($prots)$addr$chars*$/u", $linkValue ) ) {
+ $link = $linkValue;
+ $this->mOutput->addExternalLink( $link );
+ } else {
+ $localLinkTitle = Title::newFromText( $linkValue );
+ if ( $localLinkTitle !== null ) {
+ $this->mOutput->addLink( $localLinkTitle );
+ $link = $localLinkTitle->getLinkURL();
+ }
+ }
+ break;
+ default:
+ // Must be a handler specific parameter.
+ if ( $handler->validateParam( $paramName, $match ) ) {
+ $handlerOptions[$paramName] = $match;
+ } else {
+ // Guess not, consider it as caption.
+ wfDebug( "$parameterMatch failed parameter validation\n" );
+ $label = '|' . $parameterMatch;
}
- }
- break;
- default:
- // Must be a handler specific parameter.
- if ( $handler->validateParam( $paramName, $match ) ) {
- $handlerOptions[$paramName] = $match;
- } else {
- // Guess not, consider it as caption.
- wfDebug( "$parameterMatch failed parameter validation\n" );
- $label = '|' . $parameterMatch;
- }
}
} else {
} else {
# Validate internal parameters
switch ( $paramName ) {
- case 'manualthumb':
- case 'alt':
- case 'class':
- # @todo FIXME: Possibly check validity here for
- # manualthumb? downstream behavior seems odd with
- # missing manual thumbs.
- $validated = true;
- $value = $this->stripAltText( $value, $holders );
- break;
- case 'link':
- $chars = self::EXT_LINK_URL_CLASS;
- $addr = self::EXT_LINK_ADDR;
- $prots = $this->mUrlProtocols;
- if ( $value === '' ) {
- $paramName = 'no-link';
- $value = true;
+ case 'manualthumb':
+ case 'alt':
+ case 'class':
+ # @todo FIXME: Possibly check validity here for
+ # manualthumb? downstream behavior seems odd with
+ # missing manual thumbs.
$validated = true;
- } elseif ( preg_match( "/^((?i)$prots)/", $value ) ) {
- if ( preg_match( "/^((?i)$prots)$addr$chars*$/u", $value, $m ) ) {
- $paramName = 'link-url';
- $this->mOutput->addExternalLink( $value );
- if ( $this->mOptions->getExternalLinkTarget() ) {
- $params[$type]['link-target'] = $this->mOptions->getExternalLinkTarget();
- }
- $validated = true;
- }
- } else {
- $linkTitle = Title::newFromText( $value );
- if ( $linkTitle ) {
- $paramName = 'link-title';
- $value = $linkTitle;
- $this->mOutput->addLink( $linkTitle );
+ $value = $this->stripAltText( $value, $holders );
+ break;
+ case 'link':
+ $chars = self::EXT_LINK_URL_CLASS;
+ $addr = self::EXT_LINK_ADDR;
+ $prots = $this->mUrlProtocols;
+ if ( $value === '' ) {
+ $paramName = 'no-link';
+ $value = true;
$validated = true;
+ } elseif ( preg_match( "/^((?i)$prots)/", $value ) ) {
+ if ( preg_match( "/^((?i)$prots)$addr$chars*$/u", $value, $m ) ) {
+ $paramName = 'link-url';
+ $this->mOutput->addExternalLink( $value );
+ if ( $this->mOptions->getExternalLinkTarget() ) {
+ $params[$type]['link-target'] = $this->mOptions->getExternalLinkTarget();
+ }
+ $validated = true;
+ }
+ } else {
+ $linkTitle = Title::newFromText( $value );
+ if ( $linkTitle ) {
+ $paramName = 'link-title';
+ $value = $linkTitle;
+ $this->mOutput->addLink( $linkTitle );
+ $validated = true;
+ }
}
- }
- break;
- case 'frameless':
- case 'framed':
- case 'thumbnail':
- // use first appearing option, discard others.
- $validated = !$seenformat;
- $seenformat = true;
- break;
- default:
- # Most other things appear to be empty or numeric...
- $validated = ( $value === false || is_numeric( trim( $value ) ) );
+ break;
+ case 'frameless':
+ case 'framed':
+ case 'thumbnail':
+ // use first appearing option, discard others.
+ $validated = !$seenformat;
+ $seenformat = true;
+ break;
+ default:
+ # Most other things appear to be empty or numeric...
+ $validated = ( $value === false || is_numeric( trim( $value ) ) );
}
}
# Replace unnecessary URL escape codes with the referenced character
# This prevents spammers from hiding links from the filters
- $url = parser::normalizeLinkUrl( $url );
+ $url = Parser::normalizeLinkUrl( $url );
$registerExternalLink = true;
if ( !$wgRegisterInternalExternals ) {
continue;
}
switch ( $child[self::NAME] ) {
- case 'name':
- $bits['name'] = new self( $children, $i );
- break;
- case 'attr':
- $bits['attr'] = new self( $children, $i );
- break;
- case 'inner':
- $bits['inner'] = new self( $children, $i );
- break;
- case 'close':
- $bits['close'] = new self( $children, $i );
- break;
+ case 'name':
+ $bits['name'] = new self( $children, $i );
+ break;
+ case 'attr':
+ $bits['attr'] = new self( $children, $i );
+ break;
+ case 'inner':
+ $bits['inner'] = new self( $children, $i );
+ break;
+ case 'close':
+ $bits['close'] = new self( $children, $i );
+ break;
}
}
if ( !isset( $bits['name'] ) ) {
continue;
}
switch ( $child[self::NAME] ) {
- case 'title':
- $bits['title'] = new self( $children, $i );
- break;
- case 'part':
- $parts[] = new self( $children, $i );
- break;
- case '@lineStart':
- $bits['lineStart'] = '1';
- break;
+ case 'title':
+ $bits['title'] = new self( $children, $i );
+ break;
+ case 'part':
+ $parts[] = new self( $children, $i );
+ break;
+ case '@lineStart':
+ $bits['lineStart'] = '1';
+ break;
}
}
if ( !isset( $bits['title'] ) ) {
}
if ( isset( $info['autoloaderNS'] ) ) {
- Autoloader::$psr4Namespaces += $info['autoloaderNS'];
+ AutoLoader::$psr4Namespaces += $info['autoloaderNS'];
}
foreach ( $info['defines'] as $name => $val ) {
*/
public function supports( $feature ) {
switch ( $feature ) {
- case 'search-update':
- return true;
- case 'title-suffix-filter':
- default:
- return false;
+ case 'search-update':
+ return true;
+ case 'title-suffix-filter':
+ default:
+ return false;
}
}
public function supports( $feature ) {
switch ( $feature ) {
- case 'title-suffix-filter':
- return true;
- default:
- return parent::supports( $feature );
+ case 'title-suffix-filter':
+ return true;
+ default:
+ return parent::supports( $feature );
}
}
continue;
}
switch ( $boxName ) {
- case 'SEARCH':
- // Search is a special case, skins should custom implement this
- $boxes[$boxName] = [
- 'id' => 'p-search',
- 'header' => $this->getMsg( 'search' )->text(),
- 'generated' => false,
- 'content' => true,
- ];
- break;
- case 'TOOLBOX':
- $msgObj = $this->getMsg( 'toolbox' );
- $boxes[$boxName] = [
- 'id' => 'p-tb',
- 'header' => $msgObj->exists() ? $msgObj->text() : 'toolbox',
- 'generated' => false,
- 'content' => $this->getToolbox(),
- ];
- break;
- case 'LANGUAGES':
- if ( $this->data['language_urls'] !== false ) {
- $msgObj = $this->getMsg( 'otherlanguages' );
+ case 'SEARCH':
+ // Search is a special case, skins should custom implement this
$boxes[$boxName] = [
- 'id' => 'p-lang',
- 'header' => $msgObj->exists() ? $msgObj->text() : 'otherlanguages',
+ 'id' => 'p-search',
+ 'header' => $this->getMsg( 'search' )->text(),
'generated' => false,
- 'content' => $this->data['language_urls'] ?: [],
+ 'content' => true,
];
- }
- break;
- default:
- $msgObj = $this->getMsg( $boxName );
- $boxes[$boxName] = [
- 'id' => "p-$boxName",
- 'header' => $msgObj->exists() ? $msgObj->text() : $boxName,
- 'generated' => true,
- 'content' => $content,
- ];
- break;
+ break;
+ case 'TOOLBOX':
+ $msgObj = $this->getMsg( 'toolbox' );
+ $boxes[$boxName] = [
+ 'id' => 'p-tb',
+ 'header' => $msgObj->exists() ? $msgObj->text() : 'toolbox',
+ 'generated' => false,
+ 'content' => $this->getToolbox(),
+ ];
+ break;
+ case 'LANGUAGES':
+ if ( $this->data['language_urls'] !== false ) {
+ $msgObj = $this->getMsg( 'otherlanguages' );
+ $boxes[$boxName] = [
+ 'id' => 'p-lang',
+ 'header' => $msgObj->exists() ? $msgObj->text() : 'otherlanguages',
+ 'generated' => false,
+ 'content' => $this->data['language_urls'] ?: [],
+ ];
+ }
+ break;
+ default:
+ $msgObj = $this->getMsg( $boxName );
+ $boxes[$boxName] = [
+ 'id' => "p-$boxName",
+ 'header' => $msgObj->exists() ? $msgObj->text() : $boxName,
+ 'generated' => true,
+ 'content' => $content,
+ ];
+ break;
}
}
// Used by "live update" and "view newest" to check
// if there's new changes with minimal data transfer
if ( $this->getRequest()->getBool( 'peek' ) ) {
- $code = $rows->numRows() > 0 ? 200 : 204;
+ $code = $rows->numRows() > 0 ? 200 : 204;
$this->getOutput()->setStatusCode( $code );
+
+ if ( $this->getUser()->isAnon() !==
+ $this->getRequest()->getFuzzyBool( 'isAnon' )
+ ) {
+ $this->getOutput()->setStatusCode( 205 );
+ }
+
return;
}
return true;
} elseif ( $token === 'tag' ) {
switch ( $value ) {
- case 'font':
- if ( isset( $attribs['color'] )
- || isset( $attribs['face'] )
- || isset( $attribs['size'] )
- ) {
- break;
- }
- // otherwise, fall through
- case 'b':
- case 'big':
- case 'blockquote':
- case 'body':
- case 'br':
- case 'center':
- case 'code':
- case 'dd':
- case 'div':
- case 'dl':
- case 'dt':
- case 'em':
- case 'embed':
- case 'h1':
- case 'h2':
- case 'h3':
- case 'h4':
- case 'h5':
- case 'h6':
- case 'head':
- case 'hr':
- case 'i':
- case 'img':
- case 'li':
- case 'listing':
- case 'menu':
- case 'meta':
- case 'nobr':
- case 'ol':
- case 'p':
- case 'pre':
- case 'ruby':
- case 's':
- case 'small':
- case 'span':
- case 'strong':
- case 'strike':
- case 'sub':
- case 'sup':
- case 'table':
- case 'tt':
- case 'u':
- case 'ul':
- case 'var':
- if ( $this->fragmentContext ) {
- break;
- }
- while ( true ) {
- $this->stack->pop();
- $node = $this->stack->currentNode;
- if (
- $node->isMathmlTextIntegrationPoint() ||
- $node->isHtmlIntegrationPoint() ||
- $node->isHtml()
+ case 'font':
+ if ( isset( $attribs['color'] )
+ || isset( $attribs['face'] )
+ || isset( $attribs['size'] )
) {
break;
}
- }
- return $this->insertToken( $token, $value, $attribs, $selfClose );
+ // otherwise, fall through
+ case 'b':
+ case 'big':
+ case 'blockquote':
+ case 'body':
+ case 'br':
+ case 'center':
+ case 'code':
+ case 'dd':
+ case 'div':
+ case 'dl':
+ case 'dt':
+ case 'em':
+ case 'embed':
+ case 'h1':
+ case 'h2':
+ case 'h3':
+ case 'h4':
+ case 'h5':
+ case 'h6':
+ case 'head':
+ case 'hr':
+ case 'i':
+ case 'img':
+ case 'li':
+ case 'listing':
+ case 'menu':
+ case 'meta':
+ case 'nobr':
+ case 'ol':
+ case 'p':
+ case 'pre':
+ case 'ruby':
+ case 's':
+ case 'small':
+ case 'span':
+ case 'strong':
+ case 'strike':
+ case 'sub':
+ case 'sup':
+ case 'table':
+ case 'tt':
+ case 'u':
+ case 'ul':
+ case 'var':
+ if ( $this->fragmentContext ) {
+ break;
+ }
+ while ( true ) {
+ $this->stack->pop();
+ $node = $this->stack->currentNode;
+ if (
+ $node->isMathmlTextIntegrationPoint() ||
+ $node->isHtmlIntegrationPoint() ||
+ $node->isHtml()
+ ) {
+ break;
+ }
+ }
+ return $this->insertToken( $token, $value, $attribs, $selfClose );
}
// "Any other start tag"
$adjusted = ( $this->fragmentContext && $this->stack->length() === 1 ) ?
}
if ( $node->isHtml() ) {
switch ( $node->localName ) {
- case 'select':
- $stackLength = $this->stack->length();
- for ( $j = $i + 1; $j < $stackLength - 1; $j++ ) {
- $ancestor = $this->stack->node( $stackLength - $j - 1 );
- if ( $ancestor->isHtmlNamed( 'template' ) ) {
- break;
+ case 'select':
+ $stackLength = $this->stack->length();
+ for ( $j = $i + 1; $j < $stackLength - 1; $j++ ) {
+ $ancestor = $this->stack->node( $stackLength - $j - 1 );
+ if ( $ancestor->isHtmlNamed( 'template' ) ) {
+ break;
+ }
+ if ( $ancestor->isHtmlNamed( 'table' ) ) {
+ $this->switchMode( 'inSelectInTableMode' );
+ return;
+ }
}
- if ( $ancestor->isHtmlNamed( 'table' ) ) {
- $this->switchMode( 'inSelectInTableMode' );
- return;
- }
- }
- $this->switchMode( 'inSelectMode' );
- return;
- case 'tr':
- $this->switchMode( 'inRowMode' );
- return;
- case 'tbody':
- case 'tfoot':
- case 'thead':
- $this->switchMode( 'inTableBodyMode' );
- return;
- case 'caption':
- $this->switchMode( 'inCaptionMode' );
- return;
- case 'colgroup':
- $this->switchMode( 'inColumnGroupMode' );
- return;
- case 'table':
- $this->switchMode( 'inTableMode' );
- return;
- case 'template':
- $this->switchMode(
- array_slice( $this->templateInsertionModes, -1 )[0]
- );
- return;
- case 'body':
- $this->switchMode( 'inBodyMode' );
- return;
- // OMITTED: <frameset>
- // OMITTED: <html>
- // OMITTED: <head>
- default:
- if ( !$last ) {
- // OMITTED: <head>
- if ( $node->isA( BalanceSets::$tableCellSet ) ) {
- $this->switchMode( 'inCellMode' );
- return;
+ $this->switchMode( 'inSelectMode' );
+ return;
+ case 'tr':
+ $this->switchMode( 'inRowMode' );
+ return;
+ case 'tbody':
+ case 'tfoot':
+ case 'thead':
+ $this->switchMode( 'inTableBodyMode' );
+ return;
+ case 'caption':
+ $this->switchMode( 'inCaptionMode' );
+ return;
+ case 'colgroup':
+ $this->switchMode( 'inColumnGroupMode' );
+ return;
+ case 'table':
+ $this->switchMode( 'inTableMode' );
+ return;
+ case 'template':
+ $this->switchMode(
+ array_slice( $this->templateInsertionModes, -1 )[0]
+ );
+ return;
+ case 'body':
+ $this->switchMode( 'inBodyMode' );
+ return;
+ // OMITTED: <frameset>
+ // OMITTED: <html>
+ // OMITTED: <head>
+ default:
+ if ( !$last ) {
+ // OMITTED: <head>
+ if ( $node->isA( BalanceSets::$tableCellSet ) ) {
+ $this->switchMode( 'inCellMode' );
+ return;
+ }
}
- }
}
}
if ( $last ) {
// Fall through to handle non-whitespace below.
} elseif ( $token === 'tag' ) {
switch ( $value ) {
- case 'meta':
- // OMITTED: in a full HTML parser, this might change the encoding.
- // falls through
- // OMITTED: <html>
- case 'base':
- case 'basefont':
- case 'bgsound':
- case 'link':
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->stack->pop();
- return true;
- // OMITTED: <title>
- // OMITTED: <noscript>
- case 'noframes':
- case 'style':
- return $this->parseRawText( $value, $attribs );
- // OMITTED: <script>
- case 'template':
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->afe->insertMarker();
- // OMITTED: frameset_ok
- $this->switchMode( 'inTemplateMode' );
- $this->templateInsertionModes[] = $this->parseMode;
- return true;
- // OMITTED: <head>
+ case 'meta':
+ // OMITTED: in a full HTML parser, this might change the encoding.
+ // falls through
+ // OMITTED: <html>
+ case 'base':
+ case 'basefont':
+ case 'bgsound':
+ case 'link':
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->stack->pop();
+ return true;
+ // OMITTED: <title>
+ // OMITTED: <noscript>
+ case 'noframes':
+ case 'style':
+ return $this->parseRawText( $value, $attribs );
+ // OMITTED: <script>
+ case 'template':
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->afe->insertMarker();
+ // OMITTED: frameset_ok
+ $this->switchMode( 'inTemplateMode' );
+ $this->templateInsertionModes[] = $this->parseMode;
+ return true;
+ // OMITTED: <head>
}
} elseif ( $token === 'endtag' ) {
switch ( $value ) {
- // OMITTED: <head>
- // OMITTED: <body>
- // OMITTED: <html>
- case 'br':
- break; // handle at the bottom of the function
- case 'template':
- if ( $this->stack->indexOf( $value ) < 0 ) {
- return true; // Ignore the token.
- }
- $this->stack->generateImpliedEndTags( null, true /* thorough */ );
- $this->stack->popTag( $value );
- $this->afe->clearToMarker();
- array_pop( $this->templateInsertionModes );
- $this->resetInsertionMode();
- return true;
- default:
- // ignore any other end tag
- return true;
+ // OMITTED: <head>
+ // OMITTED: <body>
+ // OMITTED: <html>
+ case 'br':
+ break; // handle at the bottom of the function
+ case 'template':
+ if ( $this->stack->indexOf( $value ) < 0 ) {
+ return true; // Ignore the token.
+ }
+ $this->stack->generateImpliedEndTags( null, true /* thorough */ );
+ $this->stack->popTag( $value );
+ $this->afe->clearToMarker();
+ array_pop( $this->templateInsertionModes );
+ $this->resetInsertionMode();
+ return true;
+ default:
+ // ignore any other end tag
+ return true;
}
} elseif ( $token === 'comment' ) {
$this->stack->insertComment( $value );
return true;
} elseif ( $token === 'tag' ) {
switch ( $value ) {
- // OMITTED: <html>
- case 'base':
- case 'basefont':
- case 'bgsound':
- case 'link':
- case 'meta':
- case 'noframes':
- // OMITTED: <script>
- case 'style':
- case 'template':
- // OMITTED: <title>
- return $this->inHeadMode( $token, $value, $attribs, $selfClose );
- // OMITTED: <body>
- // OMITTED: <frameset>
-
- case 'address':
- case 'article':
- case 'aside':
- case 'blockquote':
- case 'center':
- case 'details':
- case 'dialog':
- case 'dir':
- case 'div':
- case 'dl':
- case 'fieldset':
- case 'figcaption':
- case 'figure':
- case 'footer':
- case 'header':
- case 'hgroup':
- case 'main':
- case 'nav':
- case 'ol':
- case 'p':
- case 'section':
- case 'summary':
- case 'ul':
- if ( $this->stack->inButtonScope( 'p' ) ) {
- $this->inBodyMode( 'endtag', 'p' );
- }
- $this->stack->insertHTMLElement( $value, $attribs );
- return true;
-
- case 'menu':
- if ( $this->stack->inButtonScope( "p" ) ) {
- $this->inBodyMode( 'endtag', 'p' );
- }
- if ( $this->stack->currentNode->isHtmlNamed( 'menuitem' ) ) {
- $this->stack->pop();
- }
- $this->stack->insertHTMLElement( $value, $attribs );
- return true;
+ // OMITTED: <html>
+ case 'base':
+ case 'basefont':
+ case 'bgsound':
+ case 'link':
+ case 'meta':
+ case 'noframes':
+ // OMITTED: <script>
+ case 'style':
+ case 'template':
+ // OMITTED: <title>
+ return $this->inHeadMode( $token, $value, $attribs, $selfClose );
+ // OMITTED: <body>
+ // OMITTED: <frameset>
- case 'h1':
- case 'h2':
- case 'h3':
- case 'h4':
- case 'h5':
- case 'h6':
- if ( $this->stack->inButtonScope( 'p' ) ) {
- $this->inBodyMode( 'endtag', 'p' );
- }
- if ( $this->stack->currentNode->isA( BalanceSets::$headingSet ) ) {
- $this->stack->pop();
- }
- $this->stack->insertHTMLElement( $value, $attribs );
- return true;
+ case 'address':
+ case 'article':
+ case 'aside':
+ case 'blockquote':
+ case 'center':
+ case 'details':
+ case 'dialog':
+ case 'dir':
+ case 'div':
+ case 'dl':
+ case 'fieldset':
+ case 'figcaption':
+ case 'figure':
+ case 'footer':
+ case 'header':
+ case 'hgroup':
+ case 'main':
+ case 'nav':
+ case 'ol':
+ case 'p':
+ case 'section':
+ case 'summary':
+ case 'ul':
+ if ( $this->stack->inButtonScope( 'p' ) ) {
+ $this->inBodyMode( 'endtag', 'p' );
+ }
+ $this->stack->insertHTMLElement( $value, $attribs );
+ return true;
- case 'pre':
- case 'listing':
- if ( $this->stack->inButtonScope( 'p' ) ) {
- $this->inBodyMode( 'endtag', 'p' );
- }
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->ignoreLinefeed = true;
- // OMITTED: frameset_ok
- return true;
+ case 'menu':
+ if ( $this->stack->inButtonScope( "p" ) ) {
+ $this->inBodyMode( 'endtag', 'p' );
+ }
+ if ( $this->stack->currentNode->isHtmlNamed( 'menuitem' ) ) {
+ $this->stack->pop();
+ }
+ $this->stack->insertHTMLElement( $value, $attribs );
+ return true;
- case 'form':
- if (
- $this->formElementPointer &&
- $this->stack->indexOf( 'template' ) < 0
- ) {
- return true; // in a form, not in a template.
- }
- if ( $this->stack->inButtonScope( "p" ) ) {
- $this->inBodyMode( 'endtag', 'p' );
- }
- $elt = $this->stack->insertHTMLElement( $value, $attribs );
- if ( $this->stack->indexOf( 'template' ) < 0 ) {
- $this->formElementPointer = $elt;
- }
- return true;
+ case 'h1':
+ case 'h2':
+ case 'h3':
+ case 'h4':
+ case 'h5':
+ case 'h6':
+ if ( $this->stack->inButtonScope( 'p' ) ) {
+ $this->inBodyMode( 'endtag', 'p' );
+ }
+ if ( $this->stack->currentNode->isA( BalanceSets::$headingSet ) ) {
+ $this->stack->pop();
+ }
+ $this->stack->insertHTMLElement( $value, $attribs );
+ return true;
- case 'li':
- // OMITTED: frameset_ok
- foreach ( $this->stack as $node ) {
- if ( $node->isHtmlNamed( 'li' ) ) {
- $this->inBodyMode( 'endtag', 'li' );
- break;
+ case 'pre':
+ case 'listing':
+ if ( $this->stack->inButtonScope( 'p' ) ) {
+ $this->inBodyMode( 'endtag', 'p' );
}
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->ignoreLinefeed = true;
+ // OMITTED: frameset_ok
+ return true;
+
+ case 'form':
if (
- $node->isA( BalanceSets::$specialSet ) &&
- !$node->isA( BalanceSets::$addressDivPSet )
+ $this->formElementPointer &&
+ $this->stack->indexOf( 'template' ) < 0
) {
- break;
+ return true; // in a form, not in a template.
}
- }
- if ( $this->stack->inButtonScope( 'p' ) ) {
- $this->inBodyMode( 'endtag', 'p' );
- }
- $this->stack->insertHTMLElement( $value, $attribs );
- return true;
-
- case 'dd':
- case 'dt':
- // OMITTED: frameset_ok
- foreach ( $this->stack as $node ) {
- if ( $node->isHtmlNamed( 'dd' ) ) {
- $this->inBodyMode( 'endtag', 'dd' );
- break;
+ if ( $this->stack->inButtonScope( "p" ) ) {
+ $this->inBodyMode( 'endtag', 'p' );
}
- if ( $node->isHtmlNamed( 'dt' ) ) {
- $this->inBodyMode( 'endtag', 'dt' );
- break;
+ $elt = $this->stack->insertHTMLElement( $value, $attribs );
+ if ( $this->stack->indexOf( 'template' ) < 0 ) {
+ $this->formElementPointer = $elt;
}
- if (
- $node->isA( BalanceSets::$specialSet ) &&
- !$node->isA( BalanceSets::$addressDivPSet )
- ) {
- break;
+ return true;
+
+ case 'li':
+ // OMITTED: frameset_ok
+ foreach ( $this->stack as $node ) {
+ if ( $node->isHtmlNamed( 'li' ) ) {
+ $this->inBodyMode( 'endtag', 'li' );
+ break;
+ }
+ if (
+ $node->isA( BalanceSets::$specialSet ) &&
+ !$node->isA( BalanceSets::$addressDivPSet )
+ ) {
+ break;
+ }
}
- }
- if ( $this->stack->inButtonScope( 'p' ) ) {
- $this->inBodyMode( 'endtag', 'p' );
- }
- $this->stack->insertHTMLElement( $value, $attribs );
- return true;
+ if ( $this->stack->inButtonScope( 'p' ) ) {
+ $this->inBodyMode( 'endtag', 'p' );
+ }
+ $this->stack->insertHTMLElement( $value, $attribs );
+ return true;
- // OMITTED: <plaintext>
+ case 'dd':
+ case 'dt':
+ // OMITTED: frameset_ok
+ foreach ( $this->stack as $node ) {
+ if ( $node->isHtmlNamed( 'dd' ) ) {
+ $this->inBodyMode( 'endtag', 'dd' );
+ break;
+ }
+ if ( $node->isHtmlNamed( 'dt' ) ) {
+ $this->inBodyMode( 'endtag', 'dt' );
+ break;
+ }
+ if (
+ $node->isA( BalanceSets::$specialSet ) &&
+ !$node->isA( BalanceSets::$addressDivPSet )
+ ) {
+ break;
+ }
+ }
+ if ( $this->stack->inButtonScope( 'p' ) ) {
+ $this->inBodyMode( 'endtag', 'p' );
+ }
+ $this->stack->insertHTMLElement( $value, $attribs );
+ return true;
- case 'button':
- if ( $this->stack->inScope( 'button' ) ) {
- $this->inBodyMode( 'endtag', 'button' );
- return $this->insertToken( $token, $value, $attribs, $selfClose );
- }
- $this->afe->reconstruct( $this->stack );
- $this->stack->insertHTMLElement( $value, $attribs );
- return true;
+ // OMITTED: <plaintext>
- case 'a':
- $activeElement = $this->afe->findElementByTag( 'a' );
- if ( $activeElement ) {
- $this->inBodyMode( 'endtag', 'a' );
- if ( $this->afe->isInList( $activeElement ) ) {
- $this->afe->remove( $activeElement );
- // Don't flatten here, since when we fall
- // through below we might foster parent
- // the new <a> tag inside this one.
- $this->stack->removeElement( $activeElement, false );
+ case 'button':
+ if ( $this->stack->inScope( 'button' ) ) {
+ $this->inBodyMode( 'endtag', 'button' );
+ return $this->insertToken( $token, $value, $attribs, $selfClose );
}
- }
- // Falls through
- case 'b':
- case 'big':
- case 'code':
- case 'em':
- case 'font':
- case 'i':
- case 's':
- case 'small':
- case 'strike':
- case 'strong':
- case 'tt':
- case 'u':
- $this->afe->reconstruct( $this->stack );
- $this->afe->push( $this->stack->insertHTMLElement( $value, $attribs ) );
- return true;
-
- case 'nobr':
- $this->afe->reconstruct( $this->stack );
- if ( $this->stack->inScope( 'nobr' ) ) {
- $this->inBodyMode( 'endtag', 'nobr' );
$this->afe->reconstruct( $this->stack );
- }
- $this->afe->push( $this->stack->insertHTMLElement( $value, $attribs ) );
- return true;
-
- case 'applet':
- case 'marquee':
- case 'object':
- $this->afe->reconstruct( $this->stack );
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->afe->insertMarker();
- // OMITTED: frameset_ok
- return true;
+ $this->stack->insertHTMLElement( $value, $attribs );
+ return true;
- case 'table':
- // The document is never in "quirks mode"; see simplifications
- // above.
- if ( $this->stack->inButtonScope( 'p' ) ) {
- $this->inBodyMode( 'endtag', 'p' );
- }
- $this->stack->insertHTMLElement( $value, $attribs );
- // OMITTED: frameset_ok
- $this->switchMode( 'inTableMode' );
- return true;
+ case 'a':
+ $activeElement = $this->afe->findElementByTag( 'a' );
+ if ( $activeElement ) {
+ $this->inBodyMode( 'endtag', 'a' );
+ if ( $this->afe->isInList( $activeElement ) ) {
+ $this->afe->remove( $activeElement );
+ // Don't flatten here, since when we fall
+ // through below we might foster parent
+ // the new <a> tag inside this one.
+ $this->stack->removeElement( $activeElement, false );
+ }
+ }
+ // Falls through
+ case 'b':
+ case 'big':
+ case 'code':
+ case 'em':
+ case 'font':
+ case 'i':
+ case 's':
+ case 'small':
+ case 'strike':
+ case 'strong':
+ case 'tt':
+ case 'u':
+ $this->afe->reconstruct( $this->stack );
+ $this->afe->push( $this->stack->insertHTMLElement( $value, $attribs ) );
+ return true;
- case 'area':
- case 'br':
- case 'embed':
- case 'img':
- case 'keygen':
- case 'wbr':
- $this->afe->reconstruct( $this->stack );
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->stack->pop();
- // OMITTED: frameset_ok
- return true;
+ case 'nobr':
+ $this->afe->reconstruct( $this->stack );
+ if ( $this->stack->inScope( 'nobr' ) ) {
+ $this->inBodyMode( 'endtag', 'nobr' );
+ $this->afe->reconstruct( $this->stack );
+ }
+ $this->afe->push( $this->stack->insertHTMLElement( $value, $attribs ) );
+ return true;
- case 'input':
- $this->afe->reconstruct( $this->stack );
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->stack->pop();
- // OMITTED: frameset_ok
- // (hence we don't need to examine the tag's "type" attribute)
- return true;
+ case 'applet':
+ case 'marquee':
+ case 'object':
+ $this->afe->reconstruct( $this->stack );
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->afe->insertMarker();
+ // OMITTED: frameset_ok
+ return true;
- case 'param':
- case 'source':
- case 'track':
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->stack->pop();
- return true;
+ case 'table':
+ // The document is never in "quirks mode"; see simplifications
+ // above.
+ if ( $this->stack->inButtonScope( 'p' ) ) {
+ $this->inBodyMode( 'endtag', 'p' );
+ }
+ $this->stack->insertHTMLElement( $value, $attribs );
+ // OMITTED: frameset_ok
+ $this->switchMode( 'inTableMode' );
+ return true;
- case 'hr':
- if ( $this->stack->inButtonScope( 'p' ) ) {
- $this->inBodyMode( 'endtag', 'p' );
- }
- if ( $this->stack->currentNode->isHtmlNamed( 'menuitem' ) ) {
+ case 'area':
+ case 'br':
+ case 'embed':
+ case 'img':
+ case 'keygen':
+ case 'wbr':
+ $this->afe->reconstruct( $this->stack );
+ $this->stack->insertHTMLElement( $value, $attribs );
$this->stack->pop();
- }
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->stack->pop();
- return true;
-
- case 'image':
- // warts!
- return $this->inBodyMode( $token, 'img', $attribs, $selfClose );
-
- case 'textarea':
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->ignoreLinefeed = true;
- $this->inRCDATA = $value; // emulate rcdata tokenizer mode
- // OMITTED: frameset_ok
- return true;
-
- // OMITTED: <xmp>
- // OMITTED: <iframe>
- // OMITTED: <noembed>
- // OMITTED: <noscript>
-
- case 'select':
- $this->afe->reconstruct( $this->stack );
- $this->stack->insertHTMLElement( $value, $attribs );
- switch ( $this->parseMode ) {
- case 'inTableMode':
- case 'inCaptionMode':
- case 'inTableBodyMode':
- case 'inRowMode':
- case 'inCellMode':
- $this->switchMode( 'inSelectInTableMode' );
+ // OMITTED: frameset_ok
return true;
- default:
- $this->switchMode( 'inSelectMode' );
+
+ case 'input':
+ $this->afe->reconstruct( $this->stack );
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->stack->pop();
+ // OMITTED: frameset_ok
+ // (hence we don't need to examine the tag's "type" attribute)
return true;
- }
- case 'optgroup':
- case 'option':
- if ( $this->stack->currentNode->isHtmlNamed( 'option' ) ) {
- $this->inBodyMode( 'endtag', 'option' );
- }
- $this->afe->reconstruct( $this->stack );
- $this->stack->insertHTMLElement( $value, $attribs );
- return true;
+ case 'param':
+ case 'source':
+ case 'track':
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->stack->pop();
+ return true;
- case 'menuitem':
- if ( $this->stack->currentNode->isHtmlNamed( 'menuitem' ) ) {
+ case 'hr':
+ if ( $this->stack->inButtonScope( 'p' ) ) {
+ $this->inBodyMode( 'endtag', 'p' );
+ }
+ if ( $this->stack->currentNode->isHtmlNamed( 'menuitem' ) ) {
+ $this->stack->pop();
+ }
+ $this->stack->insertHTMLElement( $value, $attribs );
$this->stack->pop();
- }
- $this->afe->reconstruct( $this->stack );
- $this->stack->insertHTMLElement( $value, $attribs );
- return true;
+ return true;
- case 'rb':
- case 'rtc':
- if ( $this->stack->inScope( 'ruby' ) ) {
- $this->stack->generateImpliedEndTags();
- }
- $this->stack->insertHTMLElement( $value, $attribs );
- return true;
+ case 'image':
+ // warts!
+ return $this->inBodyMode( $token, 'img', $attribs, $selfClose );
- case 'rp':
- case 'rt':
- if ( $this->stack->inScope( 'ruby' ) ) {
- $this->stack->generateImpliedEndTags( 'rtc' );
- }
- $this->stack->insertHTMLElement( $value, $attribs );
- return true;
+ case 'textarea':
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->ignoreLinefeed = true;
+ $this->inRCDATA = $value; // emulate rcdata tokenizer mode
+ // OMITTED: frameset_ok
+ return true;
- case 'math':
- $this->afe->reconstruct( $this->stack );
- // We skip the spec's "adjust MathML attributes" and
- // "adjust foreign attributes" steps, since the browser will
- // do this later when it parses the output and it doesn't affect
- // balancing.
- $this->stack->insertForeignElement(
- BalanceSets::MATHML_NAMESPACE, $value, $attribs
- );
- if ( $selfClose ) {
- // emit explicit </math> tag.
- $this->stack->pop();
- }
- return true;
+ // OMITTED: <xmp>
+ // OMITTED: <iframe>
+ // OMITTED: <noembed>
+ // OMITTED: <noscript>
- case 'svg':
- $this->afe->reconstruct( $this->stack );
- // We skip the spec's "adjust SVG attributes" and
- // "adjust foreign attributes" steps, since the browser will
- // do this later when it parses the output and it doesn't affect
- // balancing.
- $this->stack->insertForeignElement(
- BalanceSets::SVG_NAMESPACE, $value, $attribs
- );
- if ( $selfClose ) {
- // emit explicit </svg> tag.
- $this->stack->pop();
- }
- return true;
+ case 'select':
+ $this->afe->reconstruct( $this->stack );
+ $this->stack->insertHTMLElement( $value, $attribs );
+ switch ( $this->parseMode ) {
+ case 'inTableMode':
+ case 'inCaptionMode':
+ case 'inTableBodyMode':
+ case 'inRowMode':
+ case 'inCellMode':
+ $this->switchMode( 'inSelectInTableMode' );
+ return true;
+ default:
+ $this->switchMode( 'inSelectMode' );
+ return true;
+ }
- case 'caption':
- case 'col':
- case 'colgroup':
- // OMITTED: <frame>
- case 'head':
- case 'tbody':
- case 'td':
- case 'tfoot':
- case 'th':
- case 'thead':
- case 'tr':
- // Ignore table tags if we're not inTableMode
- return true;
- }
+ case 'optgroup':
+ case 'option':
+ if ( $this->stack->currentNode->isHtmlNamed( 'option' ) ) {
+ $this->inBodyMode( 'endtag', 'option' );
+ }
+ $this->afe->reconstruct( $this->stack );
+ $this->stack->insertHTMLElement( $value, $attribs );
+ return true;
- // Handle any other start tag here
- $this->afe->reconstruct( $this->stack );
- $this->stack->insertHTMLElement( $value, $attribs );
- return true;
- } elseif ( $token === 'endtag' ) {
- switch ( $value ) {
- // </body>,</html> are unsupported.
-
- case 'template':
- return $this->inHeadMode( $token, $value, $attribs, $selfClose );
-
- case 'address':
- case 'article':
- case 'aside':
- case 'blockquote':
- case 'button':
- case 'center':
- case 'details':
- case 'dialog':
- case 'dir':
- case 'div':
- case 'dl':
- case 'fieldset':
- case 'figcaption':
- case 'figure':
- case 'footer':
- case 'header':
- case 'hgroup':
- case 'listing':
- case 'main':
- case 'menu':
- case 'nav':
- case 'ol':
- case 'pre':
- case 'section':
- case 'summary':
- case 'ul':
- // Ignore if there is not a matching open tag
- if ( !$this->stack->inScope( $value ) ) {
+ case 'menuitem':
+ if ( $this->stack->currentNode->isHtmlNamed( 'menuitem' ) ) {
+ $this->stack->pop();
+ }
+ $this->afe->reconstruct( $this->stack );
+ $this->stack->insertHTMLElement( $value, $attribs );
return true;
- }
- $this->stack->generateImpliedEndTags();
- $this->stack->popTag( $value );
- return true;
- case 'form':
- if ( $this->stack->indexOf( 'template' ) < 0 ) {
- $openform = $this->formElementPointer;
- $this->formElementPointer = null;
- if ( !$openform || !$this->stack->inScope( $openform ) ) {
- return true;
+ case 'rb':
+ case 'rtc':
+ if ( $this->stack->inScope( 'ruby' ) ) {
+ $this->stack->generateImpliedEndTags();
}
- $this->stack->generateImpliedEndTags();
- // Don't flatten yet if we're removing a <form> element
- // out-of-order. (eg. `<form><div></form>`)
- $flatten = ( $this->stack->currentNode === $openform );
- $this->stack->removeElement( $openform, $flatten );
- } else {
- if ( !$this->stack->inScope( 'form' ) ) {
- return true;
+ $this->stack->insertHTMLElement( $value, $attribs );
+ return true;
+
+ case 'rp':
+ case 'rt':
+ if ( $this->stack->inScope( 'ruby' ) ) {
+ $this->stack->generateImpliedEndTags( 'rtc' );
}
- $this->stack->generateImpliedEndTags();
- $this->stack->popTag( 'form' );
- }
- return true;
+ $this->stack->insertHTMLElement( $value, $attribs );
+ return true;
- case 'p':
- if ( !$this->stack->inButtonScope( 'p' ) ) {
- $this->inBodyMode( 'tag', 'p', [] );
- return $this->insertToken( $token, $value, $attribs, $selfClose );
- }
- $this->stack->generateImpliedEndTags( $value );
- $this->stack->popTag( $value );
- return true;
+ case 'math':
+ $this->afe->reconstruct( $this->stack );
+ // We skip the spec's "adjust MathML attributes" and
+ // "adjust foreign attributes" steps, since the browser will
+ // do this later when it parses the output and it doesn't affect
+ // balancing.
+ $this->stack->insertForeignElement(
+ BalanceSets::MATHML_NAMESPACE, $value, $attribs
+ );
+ if ( $selfClose ) {
+ // emit explicit </math> tag.
+ $this->stack->pop();
+ }
+ return true;
- case 'li':
- if ( !$this->stack->inListItemScope( $value ) ) {
- return true; // ignore
- }
- $this->stack->generateImpliedEndTags( $value );
- $this->stack->popTag( $value );
- return true;
+ case 'svg':
+ $this->afe->reconstruct( $this->stack );
+ // We skip the spec's "adjust SVG attributes" and
+ // "adjust foreign attributes" steps, since the browser will
+ // do this later when it parses the output and it doesn't affect
+ // balancing.
+ $this->stack->insertForeignElement(
+ BalanceSets::SVG_NAMESPACE, $value, $attribs
+ );
+ if ( $selfClose ) {
+ // emit explicit </svg> tag.
+ $this->stack->pop();
+ }
+ return true;
- case 'dd':
- case 'dt':
- if ( !$this->stack->inScope( $value ) ) {
- return true; // ignore
- }
- $this->stack->generateImpliedEndTags( $value );
- $this->stack->popTag( $value );
- return true;
+ case 'caption':
+ case 'col':
+ case 'colgroup':
+ // OMITTED: <frame>
+ case 'head':
+ case 'tbody':
+ case 'td':
+ case 'tfoot':
+ case 'th':
+ case 'thead':
+ case 'tr':
+ // Ignore table tags if we're not inTableMode
+ return true;
+ }
- case 'h1':
- case 'h2':
- case 'h3':
- case 'h4':
- case 'h5':
- case 'h6':
- if ( !$this->stack->inScope( BalanceSets::$headingSet ) ) {
- return true; // ignore
- }
- $this->stack->generateImpliedEndTags();
- $this->stack->popTag( BalanceSets::$headingSet );
- return true;
+ // Handle any other start tag here
+ $this->afe->reconstruct( $this->stack );
+ $this->stack->insertHTMLElement( $value, $attribs );
+ return true;
+ } elseif ( $token === 'endtag' ) {
+ switch ( $value ) {
+ // </body>,</html> are unsupported.
- case 'sarcasm':
- // Take a deep breath, then:
- break;
+ case 'template':
+ return $this->inHeadMode( $token, $value, $attribs, $selfClose );
+
+ case 'address':
+ case 'article':
+ case 'aside':
+ case 'blockquote':
+ case 'button':
+ case 'center':
+ case 'details':
+ case 'dialog':
+ case 'dir':
+ case 'div':
+ case 'dl':
+ case 'fieldset':
+ case 'figcaption':
+ case 'figure':
+ case 'footer':
+ case 'header':
+ case 'hgroup':
+ case 'listing':
+ case 'main':
+ case 'menu':
+ case 'nav':
+ case 'ol':
+ case 'pre':
+ case 'section':
+ case 'summary':
+ case 'ul':
+ // Ignore if there is not a matching open tag
+ if ( !$this->stack->inScope( $value ) ) {
+ return true;
+ }
+ $this->stack->generateImpliedEndTags();
+ $this->stack->popTag( $value );
+ return true;
- case 'a':
- case 'b':
- case 'big':
- case 'code':
- case 'em':
- case 'font':
- case 'i':
- case 'nobr':
- case 's':
- case 'small':
- case 'strike':
- case 'strong':
- case 'tt':
- case 'u':
- if ( $this->stack->adoptionAgency( $value, $this->afe ) ) {
- return true; // If we did something, we're done.
- }
- break; // Go to the "any other end tag" case.
+ case 'form':
+ if ( $this->stack->indexOf( 'template' ) < 0 ) {
+ $openform = $this->formElementPointer;
+ $this->formElementPointer = null;
+ if ( !$openform || !$this->stack->inScope( $openform ) ) {
+ return true;
+ }
+ $this->stack->generateImpliedEndTags();
+ // Don't flatten yet if we're removing a <form> element
+ // out-of-order. (eg. `<form><div></form>`)
+ $flatten = ( $this->stack->currentNode === $openform );
+ $this->stack->removeElement( $openform, $flatten );
+ } else {
+ if ( !$this->stack->inScope( 'form' ) ) {
+ return true;
+ }
+ $this->stack->generateImpliedEndTags();
+ $this->stack->popTag( 'form' );
+ }
+ return true;
- case 'applet':
- case 'marquee':
- case 'object':
- if ( !$this->stack->inScope( $value ) ) {
- return true; // ignore
- }
- $this->stack->generateImpliedEndTags();
- $this->stack->popTag( $value );
- $this->afe->clearToMarker();
- return true;
+ case 'p':
+ if ( !$this->stack->inButtonScope( 'p' ) ) {
+ $this->inBodyMode( 'tag', 'p', [] );
+ return $this->insertToken( $token, $value, $attribs, $selfClose );
+ }
+ $this->stack->generateImpliedEndTags( $value );
+ $this->stack->popTag( $value );
+ return true;
- case 'br':
- // Turn </br> into <br>
- return $this->inBodyMode( 'tag', $value, [] );
+ case 'li':
+ if ( !$this->stack->inListItemScope( $value ) ) {
+ return true; // ignore
+ }
+ $this->stack->generateImpliedEndTags( $value );
+ $this->stack->popTag( $value );
+ return true;
+
+ case 'dd':
+ case 'dt':
+ if ( !$this->stack->inScope( $value ) ) {
+ return true; // ignore
+ }
+ $this->stack->generateImpliedEndTags( $value );
+ $this->stack->popTag( $value );
+ return true;
+
+ case 'h1':
+ case 'h2':
+ case 'h3':
+ case 'h4':
+ case 'h5':
+ case 'h6':
+ if ( !$this->stack->inScope( BalanceSets::$headingSet ) ) {
+ return true; // ignore
+ }
+ $this->stack->generateImpliedEndTags();
+ $this->stack->popTag( BalanceSets::$headingSet );
+ return true;
+
+ case 'sarcasm':
+ // Take a deep breath, then:
+ break;
+
+ case 'a':
+ case 'b':
+ case 'big':
+ case 'code':
+ case 'em':
+ case 'font':
+ case 'i':
+ case 'nobr':
+ case 's':
+ case 'small':
+ case 'strike':
+ case 'strong':
+ case 'tt':
+ case 'u':
+ if ( $this->stack->adoptionAgency( $value, $this->afe ) ) {
+ return true; // If we did something, we're done.
+ }
+ break; // Go to the "any other end tag" case.
+
+ case 'applet':
+ case 'marquee':
+ case 'object':
+ if ( !$this->stack->inScope( $value ) ) {
+ return true; // ignore
+ }
+ $this->stack->generateImpliedEndTags();
+ $this->stack->popTag( $value );
+ $this->afe->clearToMarker();
+ return true;
+
+ case 'br':
+ // Turn </br> into <br>
+ return $this->inBodyMode( 'tag', $value, [] );
}
// Any other end tag goes here
return true;
} elseif ( $token === 'tag' ) {
switch ( $value ) {
- case 'caption':
- $this->afe->insertMarker();
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->switchMode( 'inCaptionMode' );
- return true;
- case 'colgroup':
- $this->stack->clearToContext( BalanceSets::$tableContextSet );
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->switchMode( 'inColumnGroupMode' );
- return true;
- case 'col':
- $this->inTableMode( 'tag', 'colgroup', [] );
- return $this->insertToken( $token, $value, $attribs, $selfClose );
- case 'tbody':
- case 'tfoot':
- case 'thead':
- $this->stack->clearToContext( BalanceSets::$tableContextSet );
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->switchMode( 'inTableBodyMode' );
- return true;
- case 'td':
- case 'th':
- case 'tr':
- $this->inTableMode( 'tag', 'tbody', [] );
- return $this->insertToken( $token, $value, $attribs, $selfClose );
- case 'table':
- if ( !$this->stack->inTableScope( $value ) ) {
- return true; // Ignore this tag.
- }
- $this->inTableMode( 'endtag', $value );
- return $this->insertToken( $token, $value, $attribs, $selfClose );
-
- case 'style':
- // OMITTED: <script>
- case 'template':
- return $this->inHeadMode( $token, $value, $attribs, $selfClose );
+ case 'caption':
+ $this->afe->insertMarker();
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->switchMode( 'inCaptionMode' );
+ return true;
+ case 'colgroup':
+ $this->stack->clearToContext( BalanceSets::$tableContextSet );
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->switchMode( 'inColumnGroupMode' );
+ return true;
+ case 'col':
+ $this->inTableMode( 'tag', 'colgroup', [] );
+ return $this->insertToken( $token, $value, $attribs, $selfClose );
+ case 'tbody':
+ case 'tfoot':
+ case 'thead':
+ $this->stack->clearToContext( BalanceSets::$tableContextSet );
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->switchMode( 'inTableBodyMode' );
+ return true;
+ case 'td':
+ case 'th':
+ case 'tr':
+ $this->inTableMode( 'tag', 'tbody', [] );
+ return $this->insertToken( $token, $value, $attribs, $selfClose );
+ case 'table':
+ if ( !$this->stack->inTableScope( $value ) ) {
+ return true; // Ignore this tag.
+ }
+ $this->inTableMode( 'endtag', $value );
+ return $this->insertToken( $token, $value, $attribs, $selfClose );
- case 'input':
- if ( !isset( $attribs['type'] ) || strcasecmp( $attribs['type'], 'hidden' ) !== 0 ) {
- break; // Handle this as "everything else"
- }
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->stack->pop();
- return true;
+ case 'style':
+ // OMITTED: <script>
+ case 'template':
+ return $this->inHeadMode( $token, $value, $attribs, $selfClose );
- case 'form':
- if (
- $this->formElementPointer ||
- $this->stack->indexOf( 'template' ) >= 0
- ) {
- return true; // ignore this token
- }
- $this->formElementPointer =
+ case 'input':
+ if ( !isset( $attribs['type'] ) || strcasecmp( $attribs['type'], 'hidden' ) !== 0 ) {
+ break; // Handle this as "everything else"
+ }
$this->stack->insertHTMLElement( $value, $attribs );
- $this->stack->popTag( $this->formElementPointer );
- return true;
+ $this->stack->pop();
+ return true;
+
+ case 'form':
+ if (
+ $this->formElementPointer ||
+ $this->stack->indexOf( 'template' ) >= 0
+ ) {
+ return true; // ignore this token
+ }
+ $this->formElementPointer =
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->stack->popTag( $this->formElementPointer );
+ return true;
}
// Fall through for "anything else" clause.
} elseif ( $token === 'endtag' ) {
switch ( $value ) {
- case 'table':
- if ( !$this->stack->inTableScope( $value ) ) {
- return true; // Ignore.
- }
- $this->stack->popTag( $value );
- $this->resetInsertionMode();
- return true;
- // OMITTED: <body>
- case 'caption':
- case 'col':
- case 'colgroup':
- // OMITTED: <html>
- case 'tbody':
- case 'td':
- case 'tfoot':
- case 'th':
- case 'thead':
- case 'tr':
- return true; // Ignore the token.
- case 'template':
- return $this->inHeadMode( $token, $value, $attribs, $selfClose );
+ case 'table':
+ if ( !$this->stack->inTableScope( $value ) ) {
+ return true; // Ignore.
+ }
+ $this->stack->popTag( $value );
+ $this->resetInsertionMode();
+ return true;
+ // OMITTED: <body>
+ case 'caption':
+ case 'col':
+ case 'colgroup':
+ // OMITTED: <html>
+ case 'tbody':
+ case 'td':
+ case 'tfoot':
+ case 'th':
+ case 'thead':
+ case 'tr':
+ return true; // Ignore the token.
+ case 'template':
+ return $this->inHeadMode( $token, $value, $attribs, $selfClose );
}
// Fall through for "anything else" clause.
} elseif ( $token === 'comment' ) {
private function inCaptionMode( $token, $value, $attribs = null, $selfClose = false ) {
if ( $token === 'tag' ) {
switch ( $value ) {
- case 'caption':
- case 'col':
- case 'colgroup':
- case 'tbody':
- case 'td':
- case 'tfoot':
- case 'th':
- case 'thead':
- case 'tr':
- if ( $this->endCaption() ) {
- $this->insertToken( $token, $value, $attribs, $selfClose );
- }
- return true;
+ case 'caption':
+ case 'col':
+ case 'colgroup':
+ case 'tbody':
+ case 'td':
+ case 'tfoot':
+ case 'th':
+ case 'thead':
+ case 'tr':
+ if ( $this->endCaption() ) {
+ $this->insertToken( $token, $value, $attribs, $selfClose );
+ }
+ return true;
}
// Fall through to "anything else" case.
} elseif ( $token === 'endtag' ) {
switch ( $value ) {
- case 'caption':
- $this->endCaption();
- return true;
- case 'table':
- if ( $this->endCaption() ) {
- $this->insertToken( $token, $value, $attribs, $selfClose );
- }
- return true;
- case 'body':
- case 'col':
- case 'colgroup':
- // OMITTED: <html>
- case 'tbody':
- case 'td':
- case 'tfoot':
- case 'th':
- case 'thead':
- case 'tr':
- // Ignore the token
- return true;
+ case 'caption':
+ $this->endCaption();
+ return true;
+ case 'table':
+ if ( $this->endCaption() ) {
+ $this->insertToken( $token, $value, $attribs, $selfClose );
+ }
+ return true;
+ case 'body':
+ case 'col':
+ case 'colgroup':
+ // OMITTED: <html>
+ case 'tbody':
+ case 'td':
+ case 'tfoot':
+ case 'th':
+ case 'thead':
+ case 'tr':
+ // Ignore the token
+ return true;
}
// Fall through to "anything else" case.
}
// Fall through to handle non-whitespace below.
} elseif ( $token === 'tag' ) {
switch ( $value ) {
- // OMITTED: <html>
- case 'col':
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->stack->pop();
- return true;
- case 'template':
- return $this->inHeadMode( $token, $value, $attribs, $selfClose );
+ // OMITTED: <html>
+ case 'col':
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->stack->pop();
+ return true;
+ case 'template':
+ return $this->inHeadMode( $token, $value, $attribs, $selfClose );
}
// Fall through for "anything else".
} elseif ( $token === 'endtag' ) {
switch ( $value ) {
- case 'colgroup':
- if ( !$this->stack->currentNode->isHtmlNamed( 'colgroup' ) ) {
+ case 'colgroup':
+ if ( !$this->stack->currentNode->isHtmlNamed( 'colgroup' ) ) {
+ return true; // Ignore the token.
+ }
+ $this->stack->pop();
+ $this->switchMode( 'inTableMode' );
+ return true;
+ case 'col':
return true; // Ignore the token.
- }
- $this->stack->pop();
- $this->switchMode( 'inTableMode' );
- return true;
- case 'col':
- return true; // Ignore the token.
- case 'template':
- return $this->inHeadMode( $token, $value, $attribs, $selfClose );
+ case 'template':
+ return $this->inHeadMode( $token, $value, $attribs, $selfClose );
}
// Fall through for "anything else".
} elseif ( $token === 'eof' ) {
private function inTableBodyMode( $token, $value, $attribs = null, $selfClose = false ) {
if ( $token === 'tag' ) {
switch ( $value ) {
- case 'tr':
- $this->stack->clearToContext( BalanceSets::$tableBodyContextSet );
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->switchMode( 'inRowMode' );
- return true;
- case 'th':
- case 'td':
- $this->inTableBodyMode( 'tag', 'tr', [] );
- $this->insertToken( $token, $value, $attribs, $selfClose );
- return true;
- case 'caption':
- case 'col':
- case 'colgroup':
- case 'tbody':
- case 'tfoot':
- case 'thead':
- if ( $this->endSection() ) {
+ case 'tr':
+ $this->stack->clearToContext( BalanceSets::$tableBodyContextSet );
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->switchMode( 'inRowMode' );
+ return true;
+ case 'th':
+ case 'td':
+ $this->inTableBodyMode( 'tag', 'tr', [] );
$this->insertToken( $token, $value, $attribs, $selfClose );
- }
- return true;
+ return true;
+ case 'caption':
+ case 'col':
+ case 'colgroup':
+ case 'tbody':
+ case 'tfoot':
+ case 'thead':
+ if ( $this->endSection() ) {
+ $this->insertToken( $token, $value, $attribs, $selfClose );
+ }
+ return true;
}
} elseif ( $token === 'endtag' ) {
switch ( $value ) {
- case 'table':
- if ( $this->endSection() ) {
- $this->insertToken( $token, $value, $attribs, $selfClose );
- }
- return true;
- case 'tbody':
- case 'tfoot':
- case 'thead':
- if ( $this->stack->inTableScope( $value ) ) {
- $this->endSection();
- }
- return true;
- // OMITTED: <body>
- case 'caption':
- case 'col':
- case 'colgroup':
- // OMITTED: <html>
- case 'td':
- case 'th':
- case 'tr':
- return true; // Ignore the token.
+ case 'table':
+ if ( $this->endSection() ) {
+ $this->insertToken( $token, $value, $attribs, $selfClose );
+ }
+ return true;
+ case 'tbody':
+ case 'tfoot':
+ case 'thead':
+ if ( $this->stack->inTableScope( $value ) ) {
+ $this->endSection();
+ }
+ return true;
+ // OMITTED: <body>
+ case 'caption':
+ case 'col':
+ case 'colgroup':
+ // OMITTED: <html>
+ case 'td':
+ case 'th':
+ case 'tr':
+ return true; // Ignore the token.
}
}
// Anything else:
private function inRowMode( $token, $value, $attribs = null, $selfClose = false ) {
if ( $token === 'tag' ) {
switch ( $value ) {
- case 'th':
- case 'td':
- $this->stack->clearToContext( BalanceSets::$tableRowContextSet );
- $this->stack->insertHTMLElement( $value, $attribs );
- $this->switchMode( 'inCellMode' );
- $this->afe->insertMarker();
- return true;
- case 'caption':
- case 'col':
- case 'colgroup':
- case 'tbody':
- case 'tfoot':
- case 'thead':
- case 'tr':
- if ( $this->endRow() ) {
- $this->insertToken( $token, $value, $attribs, $selfClose );
- }
- return true;
+ case 'th':
+ case 'td':
+ $this->stack->clearToContext( BalanceSets::$tableRowContextSet );
+ $this->stack->insertHTMLElement( $value, $attribs );
+ $this->switchMode( 'inCellMode' );
+ $this->afe->insertMarker();
+ return true;
+ case 'caption':
+ case 'col':
+ case 'colgroup':
+ case 'tbody':
+ case 'tfoot':
+ case 'thead':
+ case 'tr':
+ if ( $this->endRow() ) {
+ $this->insertToken( $token, $value, $attribs, $selfClose );
+ }
+ return true;
}
} elseif ( $token === 'endtag' ) {
switch ( $value ) {
- case 'tr':
- $this->endRow();
- return true;
- case 'table':
- if ( $this->endRow() ) {
- $this->insertToken( $token, $value, $attribs, $selfClose );
- }
- return true;
- case 'tbody':
- case 'tfoot':
- case 'thead':
- if (
- $this->stack->inTableScope( $value ) &&
- $this->endRow()
- ) {
- $this->insertToken( $token, $value, $attribs, $selfClose );
- }
- return true;
- // OMITTED: <body>
- case 'caption':
- case 'col':
- case 'colgroup':
- // OMITTED: <html>
- case 'td':
- case 'th':
- return true; // Ignore the token.
+ case 'tr':
+ $this->endRow();
+ return true;
+ case 'table':
+ if ( $this->endRow() ) {
+ $this->insertToken( $token, $value, $attribs, $selfClose );
+ }
+ return true;
+ case 'tbody':
+ case 'tfoot':
+ case 'thead':
+ if (
+ $this->stack->inTableScope( $value ) &&
+ $this->endRow()
+ ) {
+ $this->insertToken( $token, $value, $attribs, $selfClose );
+ }
+ return true;
+ // OMITTED: <body>
+ case 'caption':
+ case 'col':
+ case 'colgroup':
+ // OMITTED: <html>
+ case 'td':
+ case 'th':
+ return true; // Ignore the token.
}
}
// Anything else:
private function inCellMode( $token, $value, $attribs = null, $selfClose = false ) {
if ( $token === 'tag' ) {
switch ( $value ) {
- case 'caption':
- case 'col':
- case 'colgroup':
- case 'tbody':
- case 'td':
- case 'tfoot':
- case 'th':
- case 'thead':
- case 'tr':
- if ( $this->endCell() ) {
- $this->insertToken( $token, $value, $attribs, $selfClose );
- }
- return true;
+ case 'caption':
+ case 'col':
+ case 'colgroup':
+ case 'tbody':
+ case 'td':
+ case 'tfoot':
+ case 'th':
+ case 'thead':
+ case 'tr':
+ if ( $this->endCell() ) {
+ $this->insertToken( $token, $value, $attribs, $selfClose );
+ }
+ return true;
}
} elseif ( $token === 'endtag' ) {
switch ( $value ) {
- case 'td':
- case 'th':
- if ( $this->stack->inTableScope( $value ) ) {
- $this->stack->generateImpliedEndTags();
- $this->stack->popTag( $value );
- $this->afe->clearToMarker();
- $this->switchMode( 'inRowMode' );
- }
- return true;
- // OMITTED: <body>
- case 'caption':
- case 'col':
- case 'colgroup':
- // OMITTED: <html>
- return true;
+ case 'td':
+ case 'th':
+ if ( $this->stack->inTableScope( $value ) ) {
+ $this->stack->generateImpliedEndTags();
+ $this->stack->popTag( $value );
+ $this->afe->clearToMarker();
+ $this->switchMode( 'inRowMode' );
+ }
+ return true;
+ // OMITTED: <body>
+ case 'caption':
+ case 'col':
+ case 'colgroup':
+ // OMITTED: <html>
+ return true;
- case 'table':
- case 'tbody':
- case 'tfoot':
- case 'thead':
- case 'tr':
- if ( $this->stack->inTableScope( $value ) ) {
- $this->stack->generateImpliedEndTags();
- $this->stack->popTag( BalanceSets::$tableCellSet );
- $this->afe->clearToMarker();
- $this->switchMode( 'inRowMode' );
- $this->insertToken( $token, $value, $attribs, $selfClose );
- }
- return true;
+ case 'table':
+ case 'tbody':
+ case 'tfoot':
+ case 'thead':
+ case 'tr':
+ if ( $this->stack->inTableScope( $value ) ) {
+ $this->stack->generateImpliedEndTags();
+ $this->stack->popTag( BalanceSets::$tableCellSet );
+ $this->afe->clearToMarker();
+ $this->switchMode( 'inRowMode' );
+ $this->insertToken( $token, $value, $attribs, $selfClose );
+ }
+ return true;
}
}
// Anything else:
return $this->inBodyMode( $token, $value, $attribs, $selfClose );
} elseif ( $token === 'tag' ) {
switch ( $value ) {
- // OMITTED: <html>
- case 'option':
- if ( $this->stack->currentNode->isHtmlNamed( 'option' ) ) {
- $this->stack->pop();
- }
- $this->stack->insertHTMLElement( $value, $attribs );
- return true;
- case 'optgroup':
- if ( $this->stack->currentNode->isHtmlNamed( 'option' ) ) {
- $this->stack->pop();
- }
- if ( $this->stack->currentNode->isHtmlNamed( 'optgroup' ) ) {
- $this->stack->pop();
- }
- $this->stack->insertHTMLElement( $value, $attribs );
- return true;
- case 'select':
- $this->inSelectMode( 'endtag', $value ); // treat it like endtag
- return true;
- case 'input':
- case 'keygen':
- case 'textarea':
- if ( !$this->stack->inSelectScope( 'select' ) ) {
- return true; // ignore token (fragment case)
- }
- $this->inSelectMode( 'endtag', 'select' );
- return $this->insertToken( $token, $value, $attribs, $selfClose );
- case 'script':
- case 'template':
- return $this->inHeadMode( $token, $value, $attribs, $selfClose );
+ // OMITTED: <html>
+ case 'option':
+ if ( $this->stack->currentNode->isHtmlNamed( 'option' ) ) {
+ $this->stack->pop();
+ }
+ $this->stack->insertHTMLElement( $value, $attribs );
+ return true;
+ case 'optgroup':
+ if ( $this->stack->currentNode->isHtmlNamed( 'option' ) ) {
+ $this->stack->pop();
+ }
+ if ( $this->stack->currentNode->isHtmlNamed( 'optgroup' ) ) {
+ $this->stack->pop();
+ }
+ $this->stack->insertHTMLElement( $value, $attribs );
+ return true;
+ case 'select':
+ $this->inSelectMode( 'endtag', $value ); // treat it like endtag
+ return true;
+ case 'input':
+ case 'keygen':
+ case 'textarea':
+ if ( !$this->stack->inSelectScope( 'select' ) ) {
+ return true; // ignore token (fragment case)
+ }
+ $this->inSelectMode( 'endtag', 'select' );
+ return $this->insertToken( $token, $value, $attribs, $selfClose );
+ case 'script':
+ case 'template':
+ return $this->inHeadMode( $token, $value, $attribs, $selfClose );
}
} elseif ( $token === 'endtag' ) {
switch ( $value ) {
- case 'optgroup':
- if (
- $this->stack->currentNode->isHtmlNamed( 'option' ) &&
- $this->stack->length() >= 2 &&
- $this->stack->node( $this->stack->length() - 2 )->isHtmlNamed( 'optgroup' )
- ) {
- $this->stack->pop();
- }
- if ( $this->stack->currentNode->isHtmlNamed( 'optgroup' ) ) {
- $this->stack->pop();
- }
- return true;
- case 'option':
- if ( $this->stack->currentNode->isHtmlNamed( 'option' ) ) {
- $this->stack->pop();
- }
- return true;
- case 'select':
- if ( !$this->stack->inSelectScope( $value ) ) {
- return true; // fragment case
- }
- $this->stack->popTag( $value );
- $this->resetInsertionMode();
- return true;
- case 'template':
- return $this->inHeadMode( $token, $value, $attribs, $selfClose );
+ case 'optgroup':
+ if (
+ $this->stack->currentNode->isHtmlNamed( 'option' ) &&
+ $this->stack->length() >= 2 &&
+ $this->stack->node( $this->stack->length() - 2 )->isHtmlNamed( 'optgroup' )
+ ) {
+ $this->stack->pop();
+ }
+ if ( $this->stack->currentNode->isHtmlNamed( 'optgroup' ) ) {
+ $this->stack->pop();
+ }
+ return true;
+ case 'option':
+ if ( $this->stack->currentNode->isHtmlNamed( 'option' ) ) {
+ $this->stack->pop();
+ }
+ return true;
+ case 'select':
+ if ( !$this->stack->inSelectScope( $value ) ) {
+ return true; // fragment case
+ }
+ $this->stack->popTag( $value );
+ $this->resetInsertionMode();
+ return true;
+ case 'template':
+ return $this->inHeadMode( $token, $value, $attribs, $selfClose );
}
} elseif ( $token === 'comment' ) {
$this->stack->insertComment( $value );
private function inSelectInTableMode( $token, $value, $attribs = null, $selfClose = false ) {
switch ( $value ) {
- case 'caption':
- case 'table':
- case 'tbody':
- case 'tfoot':
- case 'thead':
- case 'tr':
- case 'td':
- case 'th':
- if ( $token === 'tag' ) {
- $this->inSelectInTableMode( 'endtag', 'select' );
- return $this->insertToken( $token, $value, $attribs, $selfClose );
- } elseif ( $token === 'endtag' ) {
- if ( $this->stack->inTableScope( $value ) ) {
+ case 'caption':
+ case 'table':
+ case 'tbody':
+ case 'tfoot':
+ case 'thead':
+ case 'tr':
+ case 'td':
+ case 'th':
+ if ( $token === 'tag' ) {
$this->inSelectInTableMode( 'endtag', 'select' );
return $this->insertToken( $token, $value, $attribs, $selfClose );
+ } elseif ( $token === 'endtag' ) {
+ if ( $this->stack->inTableScope( $value ) ) {
+ $this->inSelectInTableMode( 'endtag', 'select' );
+ return $this->insertToken( $token, $value, $attribs, $selfClose );
+ }
+ return true;
}
- return true;
- }
}
// anything else
return $this->inSelectMode( $token, $value, $attribs, $selfClose );
return true;
} elseif ( $token === 'tag' ) {
switch ( $value ) {
- case 'base':
- case 'basefont':
- case 'bgsound':
- case 'link':
- case 'meta':
- case 'noframes':
- // OMITTED: <script>
- case 'style':
- case 'template':
- // OMITTED: <title>
- return $this->inHeadMode( $token, $value, $attribs, $selfClose );
+ case 'base':
+ case 'basefont':
+ case 'bgsound':
+ case 'link':
+ case 'meta':
+ case 'noframes':
+ // OMITTED: <script>
+ case 'style':
+ case 'template':
+ // OMITTED: <title>
+ return $this->inHeadMode( $token, $value, $attribs, $selfClose );
- case 'caption':
- case 'colgroup':
- case 'tbody':
- case 'tfoot':
- case 'thead':
- return $this->switchModeAndReprocess(
- 'inTableMode', $token, $value, $attribs, $selfClose
- );
+ case 'caption':
+ case 'colgroup':
+ case 'tbody':
+ case 'tfoot':
+ case 'thead':
+ return $this->switchModeAndReprocess(
+ 'inTableMode', $token, $value, $attribs, $selfClose
+ );
- case 'col':
- return $this->switchModeAndReprocess(
- 'inColumnGroupMode', $token, $value, $attribs, $selfClose
- );
+ case 'col':
+ return $this->switchModeAndReprocess(
+ 'inColumnGroupMode', $token, $value, $attribs, $selfClose
+ );
- case 'tr':
- return $this->switchModeAndReprocess(
- 'inTableBodyMode', $token, $value, $attribs, $selfClose
- );
+ case 'tr':
+ return $this->switchModeAndReprocess(
+ 'inTableBodyMode', $token, $value, $attribs, $selfClose
+ );
- case 'td':
- case 'th':
- return $this->switchModeAndReprocess(
- 'inRowMode', $token, $value, $attribs, $selfClose
- );
+ case 'td':
+ case 'th':
+ return $this->switchModeAndReprocess(
+ 'inRowMode', $token, $value, $attribs, $selfClose
+ );
}
return $this->switchModeAndReprocess(
'inBodyMode', $token, $value, $attribs, $selfClose
);
} elseif ( $token === 'endtag' ) {
switch ( $value ) {
- case 'template':
- return $this->inHeadMode( $token, $value, $attribs, $selfClose );
+ case 'template':
+ return $this->inHeadMode( $token, $value, $attribs, $selfClose );
}
return true;
} else {
* @param string[] $paths
*/
public function setExcludePaths( array $paths ) {
- $this->excludePaths = $paths;
+ foreach ( $paths as $path ) {
+ $this->excludePaths[] = self::normalizePathSeparator( $path );
+ }
}
/**
// Note: When changing class name discovery logic,
// AutoLoaderTest.php may also need to be updated.
switch ( $token[0] ) {
- case T_NAMESPACE:
- case T_CLASS:
- case T_INTERFACE:
- case T_TRAIT:
- case T_DOUBLE_COLON:
- $this->startToken = $token;
- break;
- case T_STRING:
- if ( $token[1] === 'class_alias' ) {
+ case T_NAMESPACE:
+ case T_CLASS:
+ case T_INTERFACE:
+ case T_TRAIT:
+ case T_DOUBLE_COLON:
$this->startToken = $token;
- $this->alias = [];
- }
+ break;
+ case T_STRING:
+ if ( $token[1] === 'class_alias' ) {
+ $this->startToken = $token;
+ $this->alias = [];
+ }
}
}
*/
protected function tryEndExpect( $token ) {
switch ( $this->startToken[0] ) {
- case T_DOUBLE_COLON:
- // Skip over T_CLASS after T_DOUBLE_COLON because this is something like
- // "self::static" which accesses the class name. It doens't define a new class.
- $this->startToken = null;
- break;
- case T_NAMESPACE:
- if ( $token === ';' || $token === '{' ) {
- $this->namespace = $this->implodeTokens() . '\\';
- } else {
- $this->tokens[] = $token;
- }
- break;
-
- case T_STRING:
- if ( $this->alias !== null ) {
- // Flow 1 - Two string literals:
- // - T_STRING class_alias
- // - '('
- // - T_CONSTANT_ENCAPSED_STRING 'TargetClass'
- // - ','
- // - T_WHITESPACE
- // - T_CONSTANT_ENCAPSED_STRING 'AliasName'
- // - ')'
- // Flow 2 - Use of ::class syntax for first parameter
- // - T_STRING class_alias
- // - '('
- // - T_STRING TargetClass
- // - T_DOUBLE_COLON ::
- // - T_CLASS class
- // - ','
- // - T_WHITESPACE
- // - T_CONSTANT_ENCAPSED_STRING 'AliasName'
- // - ')'
- if ( $token === '(' ) {
- // Start of a function call to class_alias()
- $this->alias = [ 'target' => false, 'name' => false ];
- } elseif ( $token === ',' ) {
- // Record that we're past the first parameter
- if ( $this->alias['target'] === false ) {
- $this->alias['target'] = true;
- }
- } elseif ( is_array( $token ) && $token[0] === T_CONSTANT_ENCAPSED_STRING ) {
- if ( $this->alias['target'] === true ) {
- // We already saw a first argument, this must be the second.
- // Strip quotes from the string literal.
- $this->alias['name'] = substr( $token[1], 1, -1 );
+ case T_DOUBLE_COLON:
+ // Skip over T_CLASS after T_DOUBLE_COLON because this is something like
+ // "self::static" which accesses the class name. It doens't define a new class.
+ $this->startToken = null;
+ break;
+ case T_NAMESPACE:
+ if ( $token === ';' || $token === '{' ) {
+ $this->namespace = $this->implodeTokens() . '\\';
+ } else {
+ $this->tokens[] = $token;
+ }
+ break;
+
+ case T_STRING:
+ if ( $this->alias !== null ) {
+ // Flow 1 - Two string literals:
+ // - T_STRING class_alias
+ // - '('
+ // - T_CONSTANT_ENCAPSED_STRING 'TargetClass'
+ // - ','
+ // - T_WHITESPACE
+ // - T_CONSTANT_ENCAPSED_STRING 'AliasName'
+ // - ')'
+ // Flow 2 - Use of ::class syntax for first parameter
+ // - T_STRING class_alias
+ // - '('
+ // - T_STRING TargetClass
+ // - T_DOUBLE_COLON ::
+ // - T_CLASS class
+ // - ','
+ // - T_WHITESPACE
+ // - T_CONSTANT_ENCAPSED_STRING 'AliasName'
+ // - ')'
+ if ( $token === '(' ) {
+ // Start of a function call to class_alias()
+ $this->alias = [ 'target' => false, 'name' => false ];
+ } elseif ( $token === ',' ) {
+ // Record that we're past the first parameter
+ if ( $this->alias['target'] === false ) {
+ $this->alias['target'] = true;
+ }
+ } elseif ( is_array( $token ) && $token[0] === T_CONSTANT_ENCAPSED_STRING ) {
+ if ( $this->alias['target'] === true ) {
+ // We already saw a first argument, this must be the second.
+ // Strip quotes from the string literal.
+ $this->alias['name'] = substr( $token[1], 1, -1 );
+ }
+ } elseif ( $token === ')' ) {
+ // End of function call
+ $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;
}
- } elseif ( $token === ')' ) {
- // End of function call
- $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;
-
- case T_CLASS:
- case T_INTERFACE:
- case T_TRAIT:
- $this->tokens[] = $token;
- if ( is_array( $token ) && $token[0] === T_STRING ) {
- $this->classes[] = $this->namespace . $this->implodeTokens();
- }
+ break;
+
+ case T_CLASS:
+ case T_INTERFACE:
+ case T_TRAIT:
+ $this->tokens[] = $token;
+ if ( is_array( $token ) && $token[0] === T_STRING ) {
+ $this->classes[] = $this->namespace . $this->implodeTokens();
+ }
}
}
*/
public static function getErrors( AvroSchema $schema, $datum ) {
switch ( $schema->type ) {
- case AvroSchema::NULL_TYPE:
- if ( !is_null( $datum ) ) {
- return self::wrongType( 'null', $datum );
- }
- return [];
- case AvroSchema::BOOLEAN_TYPE:
- if ( !is_bool( $datum ) ) {
- return self::wrongType( 'boolean', $datum );
- }
- return [];
- case AvroSchema::STRING_TYPE:
- case AvroSchema::BYTES_TYPE:
- if ( !is_string( $datum ) ) {
- return self::wrongType( 'string', $datum );
- }
- return [];
- case AvroSchema::INT_TYPE:
- if ( !is_int( $datum ) ) {
- return self::wrongType( 'integer', $datum );
- }
- if ( AvroSchema::INT_MIN_VALUE > $datum
- || $datum > AvroSchema::INT_MAX_VALUE
- ) {
- return self::outOfRange(
- AvroSchema::INT_MIN_VALUE,
- AvroSchema::INT_MAX_VALUE,
- $datum
- );
- }
- return [];
- case AvroSchema::LONG_TYPE:
- if ( !is_int( $datum ) ) {
- return self::wrongType( 'integer', $datum );
- }
- if ( AvroSchema::LONG_MIN_VALUE > $datum
- || $datum > AvroSchema::LONG_MAX_VALUE
- ) {
- return self::outOfRange(
- AvroSchema::LONG_MIN_VALUE,
- AvroSchema::LONG_MAX_VALUE,
- $datum
- );
- }
- return [];
- case AvroSchema::FLOAT_TYPE:
- case AvroSchema::DOUBLE_TYPE:
- if ( !is_float( $datum ) && !is_int( $datum ) ) {
- return self::wrongType( 'float or integer', $datum );
- }
- return [];
- case AvroSchema::ARRAY_SCHEMA:
- if ( !is_array( $datum ) ) {
- return self::wrongType( 'array', $datum );
- }
- $errors = [];
- foreach ( $datum as $d ) {
- $result = self::getErrors( $schema->items(), $d );
- if ( $result ) {
+ case AvroSchema::NULL_TYPE:
+ if ( !is_null( $datum ) ) {
+ return self::wrongType( 'null', $datum );
+ }
+ return [];
+ case AvroSchema::BOOLEAN_TYPE:
+ if ( !is_bool( $datum ) ) {
+ return self::wrongType( 'boolean', $datum );
+ }
+ return [];
+ case AvroSchema::STRING_TYPE:
+ case AvroSchema::BYTES_TYPE:
+ if ( !is_string( $datum ) ) {
+ return self::wrongType( 'string', $datum );
+ }
+ return [];
+ case AvroSchema::INT_TYPE:
+ if ( !is_int( $datum ) ) {
+ return self::wrongType( 'integer', $datum );
+ }
+ if ( AvroSchema::INT_MIN_VALUE > $datum
+ || $datum > AvroSchema::INT_MAX_VALUE
+ ) {
+ return self::outOfRange(
+ AvroSchema::INT_MIN_VALUE,
+ AvroSchema::INT_MAX_VALUE,
+ $datum
+ );
+ }
+ return [];
+ case AvroSchema::LONG_TYPE:
+ if ( !is_int( $datum ) ) {
+ return self::wrongType( 'integer', $datum );
+ }
+ if ( AvroSchema::LONG_MIN_VALUE > $datum
+ || $datum > AvroSchema::LONG_MAX_VALUE
+ ) {
+ return self::outOfRange(
+ AvroSchema::LONG_MIN_VALUE,
+ AvroSchema::LONG_MAX_VALUE,
+ $datum
+ );
+ }
+ return [];
+ case AvroSchema::FLOAT_TYPE:
+ case AvroSchema::DOUBLE_TYPE:
+ if ( !is_float( $datum ) && !is_int( $datum ) ) {
+ return self::wrongType( 'float or integer', $datum );
+ }
+ return [];
+ case AvroSchema::ARRAY_SCHEMA:
+ if ( !is_array( $datum ) ) {
+ return self::wrongType( 'array', $datum );
+ }
+ $errors = [];
+ foreach ( $datum as $d ) {
+ $result = self::getErrors( $schema->items(), $d );
+ if ( $result ) {
+ $errors[] = $result;
+ }
+ }
+ return $errors;
+ case AvroSchema::MAP_SCHEMA:
+ if ( !is_array( $datum ) ) {
+ return self::wrongType( 'array', $datum );
+ }
+ $errors = [];
+ foreach ( $datum as $k => $v ) {
+ if ( !is_string( $k ) ) {
+ $errors[] = self::wrongType( 'string key', $k );
+ }
+ $result = self::getErrors( $schema->values(), $v );
+ if ( $result ) {
+ $errors[$k] = $result;
+ }
+ }
+ return $errors;
+ case AvroSchema::UNION_SCHEMA:
+ $errors = [];
+ foreach ( $schema->schemas() as $schema ) {
+ $result = self::getErrors( $schema, $datum );
+ if ( !$result ) {
+ return [];
+ }
$errors[] = $result;
}
- }
- return $errors;
- case AvroSchema::MAP_SCHEMA:
- if ( !is_array( $datum ) ) {
- return self::wrongType( 'array', $datum );
- }
- $errors = [];
- foreach ( $datum as $k => $v ) {
- if ( !is_string( $k ) ) {
- $errors[] = self::wrongType( 'string key', $k );
- }
- $result = self::getErrors( $schema->values(), $v );
- if ( $result ) {
- $errors[$k] = $result;
- }
- }
- return $errors;
- case AvroSchema::UNION_SCHEMA:
- $errors = [];
- foreach ( $schema->schemas() as $schema ) {
- $result = self::getErrors( $schema, $datum );
- if ( !$result ) {
- return [];
- }
- $errors[] = $result;
- }
- if ( $errors ) {
- return [ "Expected any one of these to be true", $errors ];
- }
- return "No schemas provided to union";
- case AvroSchema::ENUM_SCHEMA:
- if ( !in_array( $datum, $schema->symbols() ) ) {
- $symbols = implode( ', ', $schema->symbols );
- return "Expected one of $symbols but recieved $datum";
- }
- return [];
- case AvroSchema::FIXED_SCHEMA:
- if ( !is_string( $datum ) ) {
- return self::wrongType( 'string', $datum );
- }
- $len = strlen( $datum );
- if ( $len !== $schema->size() ) {
- return "Expected string of length {$schema->size()}, "
- . "but recieved one of length $len";
- }
- return [];
- case AvroSchema::RECORD_SCHEMA:
- case AvroSchema::ERROR_SCHEMA:
- case AvroSchema::REQUEST_SCHEMA:
- if ( !is_array( $datum ) ) {
- return self::wrongType( 'array', $datum );
- }
- $errors = [];
- foreach ( $schema->fields() as $field ) {
- $name = $field->name();
- if ( !array_key_exists( $name, $datum ) ) {
- $errors[$name] = 'Missing expected field';
- continue;
- }
- $result = self::getErrors( $field->type(), $datum[$name] );
- if ( $result ) {
- $errors[$name] = $result;
- }
- }
- return $errors;
- default:
- return "Unknown avro schema type: {$schema->type}";
+ if ( $errors ) {
+ return [ "Expected any one of these to be true", $errors ];
+ }
+ return "No schemas provided to union";
+ case AvroSchema::ENUM_SCHEMA:
+ if ( !in_array( $datum, $schema->symbols() ) ) {
+ $symbols = implode( ', ', $schema->symbols );
+ return "Expected one of $symbols but recieved $datum";
+ }
+ return [];
+ case AvroSchema::FIXED_SCHEMA:
+ if ( !is_string( $datum ) ) {
+ return self::wrongType( 'string', $datum );
+ }
+ $len = strlen( $datum );
+ if ( $len !== $schema->size() ) {
+ return "Expected string of length {$schema->size()}, "
+ . "but recieved one of length $len";
+ }
+ return [];
+ case AvroSchema::RECORD_SCHEMA:
+ case AvroSchema::ERROR_SCHEMA:
+ case AvroSchema::REQUEST_SCHEMA:
+ if ( !is_array( $datum ) ) {
+ return self::wrongType( 'array', $datum );
+ }
+ $errors = [];
+ foreach ( $schema->fields() as $field ) {
+ $name = $field->name();
+ if ( !array_key_exists( $name, $datum ) ) {
+ $errors[$name] = 'Missing expected field';
+ continue;
+ }
+ $result = self::getErrors( $field->type(), $datum[$name] );
+ if ( $result ) {
+ $errors[$name] = $result;
+ }
+ }
+ return $errors;
+ default:
+ return "Unknown avro schema type: {$schema->type}";
}
}
*/
function getArrow( $direction = 'forwards' ) {
switch ( $direction ) {
- case 'forwards':
- return $this->isRTL() ? '←' : '→';
- case 'backwards':
- return $this->isRTL() ? '→' : '←';
- case 'left':
- return '←';
- case 'right':
- return '→';
- case 'up':
- return '↑';
- case 'down':
- return '↓';
+ case 'forwards':
+ return $this->isRTL() ? '←' : '→';
+ case 'backwards':
+ return $this->isRTL() ? '→' : '←';
+ case 'left':
+ return '←';
+ case 'right':
+ return '→';
+ case 'up':
+ return '↑';
+ case 'down':
+ return '↓';
}
}
}
switch ( $case ) {
- case 'ainmlae':
- switch ( $word ) {
- case 'an Domhnach':
- $word = 'Dé Domhnaigh';
- break;
- case 'an Luan':
- $word = 'Dé Luain';
- break;
- case 'an Mháirt':
- $word = 'Dé Mháirt';
- break;
- case 'an Chéadaoin':
- $word = 'Dé Chéadaoin';
- break;
- case 'an Déardaoin':
- $word = 'Déardaoin';
- break;
- case 'an Aoine':
- $word = 'Dé hAoine';
- break;
- case 'an Satharn':
- $word = 'Dé Sathairn';
- break;
- }
+ case 'ainmlae':
+ switch ( $word ) {
+ case 'an Domhnach':
+ $word = 'Dé Domhnaigh';
+ break;
+ case 'an Luan':
+ $word = 'Dé Luain';
+ break;
+ case 'an Mháirt':
+ $word = 'Dé Mháirt';
+ break;
+ case 'an Chéadaoin':
+ $word = 'Dé Chéadaoin';
+ break;
+ case 'an Déardaoin':
+ $word = 'Déardaoin';
+ break;
+ case 'an Aoine':
+ $word = 'Dé hAoine';
+ break;
+ case 'an Satharn':
+ $word = 'Dé Sathairn';
+ break;
+ }
}
return $word;
}
}
switch ( $case ) {
- case 'genitive':
- // only a few declensions, and even for those mostly the singular only
- $in = [
- '/u[ms]$/', # 2nd declension singular
- '/ommunia$/', # 3rd declension neuter plural (partly)
- '/a$/', # 1st declension singular
- '/libri$/', '/nuntii$/', '/datae$/', # 2nd declension plural (partly)
- '/tio$/', '/ns$/', '/as$/', # 3rd declension singular (partly)
- '/es$/' # 5th declension singular
- ];
- $out = [
- 'i',
- 'ommunium',
- 'ae',
- 'librorum', 'nuntiorum', 'datorum',
- 'tionis', 'ntis', 'atis',
- 'ei'
- ];
- return preg_replace( $in, $out, $word );
- case 'accusative':
- // only a few declensions, and even for those mostly the singular only
- $in = [
- '/u[ms]$/', # 2nd declension singular
- '/a$/', # 1st declension singular
- '/ommuniam$/', # 3rd declension neuter plural (partly)
- '/libri$/', '/nuntii$/', '/datam$/', # 2nd declension plural (partly)
- '/tio$/', '/ns$/', '/as$/', # 3rd declension singular (partly)
- '/es$/' # 5th declension singular
- ];
- $out = [
- 'um',
- 'am',
- 'ommunia',
- 'libros', 'nuntios', 'data',
- 'tionem', 'ntem', 'atem',
- 'em'
- ];
- return preg_replace( $in, $out, $word );
- case 'ablative':
- // only a few declensions, and even for those mostly the singular only
- $in = [
- '/u[ms]$/', # 2nd declension singular
- '/ommunia$/', # 3rd declension neuter plural (partly)
- '/a$/', # 1st declension singular
- '/libri$/', '/nuntii$/', '/data$/', # 2nd declension plural (partly)
- '/tio$/', '/ns$/', '/as$/', # 3rd declension singular (partly)
- '/es$/' # 5th declension singular
- ];
- $out = [
- 'o',
- 'ommunibus',
- 'a',
- 'libris', 'nuntiis', 'datis',
- 'tione', 'nte', 'ate',
- 'e'
- ];
- return preg_replace( $in, $out, $word );
- default:
- return $word;
+ case 'genitive':
+ // only a few declensions, and even for those mostly the singular only
+ $in = [
+ '/u[ms]$/', # 2nd declension singular
+ '/ommunia$/', # 3rd declension neuter plural (partly)
+ '/a$/', # 1st declension singular
+ '/libri$/', '/nuntii$/', '/datae$/', # 2nd declension plural (partly)
+ '/tio$/', '/ns$/', '/as$/', # 3rd declension singular (partly)
+ '/es$/' # 5th declension singular
+ ];
+ $out = [
+ 'i',
+ 'ommunium',
+ 'ae',
+ 'librorum', 'nuntiorum', 'datorum',
+ 'tionis', 'ntis', 'atis',
+ 'ei'
+ ];
+ return preg_replace( $in, $out, $word );
+ case 'accusative':
+ // only a few declensions, and even for those mostly the singular only
+ $in = [
+ '/u[ms]$/', # 2nd declension singular
+ '/a$/', # 1st declension singular
+ '/ommuniam$/', # 3rd declension neuter plural (partly)
+ '/libri$/', '/nuntii$/', '/datam$/', # 2nd declension plural (partly)
+ '/tio$/', '/ns$/', '/as$/', # 3rd declension singular (partly)
+ '/es$/' # 5th declension singular
+ ];
+ $out = [
+ 'um',
+ 'am',
+ 'ommunia',
+ 'libros', 'nuntios', 'data',
+ 'tionem', 'ntem', 'atem',
+ 'em'
+ ];
+ return preg_replace( $in, $out, $word );
+ case 'ablative':
+ // only a few declensions, and even for those mostly the singular only
+ $in = [
+ '/u[ms]$/', # 2nd declension singular
+ '/ommunia$/', # 3rd declension neuter plural (partly)
+ '/a$/', # 1st declension singular
+ '/libri$/', '/nuntii$/', '/data$/', # 2nd declension plural (partly)
+ '/tio$/', '/ns$/', '/as$/', # 3rd declension singular (partly)
+ '/es$/' # 5th declension singular
+ ];
+ $out = [
+ 'o',
+ 'ommunibus',
+ 'a',
+ 'libris', 'nuntiis', 'datis',
+ 'tione', 'nte', 'ate',
+ 'e'
+ ];
+ return preg_replace( $in, $out, $word );
+ default:
+ return $word;
}
}
}
"right-siteadmin": "غلق ورفع غلق قاعدة البيانات",
"right-override-export-depth": "تصدير الصفحات متضمنة الصفحات الموصولة حتى عمق 5",
"right-sendemail": "إرسال رسائل بريد إلكتروني إلى مستخدمين آخرين",
+ "right-sendemail-new-users": "إرسال رسالة بريد إلكتروني للمستخدمين الذين ليس لديهم أفعال في السجلات",
"right-managechangetags": "إنشاء وتعطيل [[Special:Tags|الوسوم]]",
"right-applychangetags": "تطبيق [[Special:Tags|الوسوم]] مع التغييرات التي أجريتها.",
"right-changetags": "إضافة وإزالة [[Special:Tags|وسوم]] في مراجعات ومدخلات سجل فردية",
"rcfilters-preference-label": "أخف النسخة المحسنة من أحدث التغييرات",
"rcfilters-preference-help": "يسترجع عملية إعادة تصميم الواجهة لعام 2017 وكل الأدوات التي أضيفت منذ ذلك الوقت.",
"rcfilters-filter-showlinkedfrom-label": "عرض التغييرات في الصفحات الموصولة من",
- "rcfilters-filter-showlinkedfrom-option-label": "أظÙ\87ر اÙ\84تغÙ\8aÙ\8aرات Ù\81Ù\8a اÙ\84صÙ\81Øات اÙ\84Ù\85رتبطة <strong>من</strong> صفحة",
+ "rcfilters-filter-showlinkedfrom-option-label": "عرض اÙ\84تغÙ\8aÙ\8aرات Ù\81Ù\8a اÙ\84صÙ\81Øات اÙ\84Ù\85Ù\88صÙ\88Ù\84ة <strong>من</strong> صفحة",
"rcfilters-filter-showlinkedto-label": "أظهر التغييرات في الصفحات الموصولة بصفحة",
- "rcfilters-filter-showlinkedto-option-label": "اظÙ\87ر اÙ\84تغÙ\8aÙ\8aرات Ù\81Ù\8a اÙ\84صÙ\81Øات اÙ\84Ù\85رتبطة <strong>Ø¥Ù\84Ù\89</strong> اÙ\84صفحة",
+ "rcfilters-filter-showlinkedto-option-label": "عرض اÙ\84تغÙ\8aÙ\8aرات Ù\81Ù\8a اÙ\84صÙ\81Øات اÙ\84Ù\85Ù\88صÙ\88Ù\84Ø© <strong>Ø¥Ù\84Ù\89</strong> صفحة",
"rcfilters-target-page-placeholder": "أدخل اسم صفحة",
"rcnotefrom": "بالأسفل {{PLURAL:$5|التغيير|التغييرات}} منذ <strong>$2</strong> (إلى <strong>$1</strong> معروضة).",
"rclistfromreset": "إعادة ضبط خيار التاريخ",
"uploadstash-not-logged-in": "Удзельнік не ўвайшоў у сыстэму, файлы мусяць належаць удзельнікам.",
"uploadstash-wrong-owner": "Гэты файл ($1) не належыць цяперашняму ўдзельніку.",
"uploadstash-no-such-key": "Няма такога ключа ($1), немагчыма выдаліць.",
+ "uploadstash-no-extension": "Пустое пашырэньне.",
+ "uploadstash-zero-length": "Файл мае нулявую даўжыню.",
"invalid-chunk-offset": "Няслушнае зрушэньне фрагмэнту",
"img-auth-accessdenied": "Доступ забаронены",
"img-auth-nopathinfo": "Адсутнічае PATH_INFO.\nВаш сэрвэр не ўстаноўлены на пропуск гэтай інфармацыі.\nМагчма, ён працуе праз CGI і не падтрымлівае img_auth.\nГлядзіце https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
"import-mapping-namespace": "Імпарт у прастору назваў:",
"import-mapping-subpage": "Імпарт у якасьці падстаронак наступнай старонкі:",
"import-upload-filename": "Назва файла:",
+ "import-upload-username-prefix": "Прэфікс інтэрвікі:",
+ "import-assign-known-users": "Прызначаць праўкі лякальным удзельнікам, калі ўдзельнік з такім імем існуе лякальна",
"import-comment": "Камэнтар:",
"importtext": "Калі ласка, экспартуйце файл з крынічнай вікі з дапамогай [[Special:Export|прылады экспарту]].\nЗахавайце яго на свой кампутар, а потым загрузіце сюды.",
"importstart": "Імпартаваньне старонак…",
"tog-shownumberswatching": "Показване на броя на потребителите, наблюдаващи дадена страница",
"tog-oldsig": "Вашият текущ подпис:",
"tog-fancysig": "Без превръщане на подписа в препратка към потребителската страница",
- "tog-uselivepreview": "Ð\98зползване на бÑ\8aÑ\80з пÑ\80едваÑ\80иÑ\82елен пÑ\80еглед",
+ "tog-uselivepreview": "Ð\9fоказване на пÑ\80едваÑ\80иÑ\82елен пÑ\80еглед без пÑ\80езаÑ\80еждане на Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а",
"tog-forceeditsummary": "Предупреждаване при празно поле за резюме на редакцията",
"tog-watchlisthideown": "Скриване на моите редакции в списъка ми за наблюдение",
"tog-watchlisthidebots": "Скриване на редакциите на ботове в списъка ми за наблюдение",
"anoneditwarning": "<strong>Внимание:</strong> Не сте влезли в системата. Ако направите редакция IP-адресът Ви ще бъде публично видим. Ако <strong>[$1 влезете]</strong> или си <strong>[$2 създадете акаунт]</strong>, редакциите Ви ще бъдат свързани с потребителското Ви име, заедно с други преимущества.",
"anonpreviewwarning": "<em>Не сте влезли в системата. Ако съхраните редакцията си, тя ще бъде записана в историята на страницата с вашия IP-адрес.</em>",
"missingsummary": "<strong>Напомняне:</strong> Не е въведено кратко описание на промените.\nПри повторно натискане на бутона „$1“, редакцията ще бъде съхранена без резюме.",
- "missingcommenttext": "Ð\9fо-долÑ\83 вÑ\8aведеÑ\82е ваÑ\88еÑ\82о Ñ\81Ñ\8aобÑ\89ение.",
+ "missingcommenttext": "Ð\9cолÑ\8f, вÑ\8aведеÑ\82е коменÑ\82аÑ\80.",
"missingcommentheader": "<strong>Напомняне:</strong> Не е въведено заглавие на коментара.\nПри повторно натискане на „$1“, редакцията ще бъде записана без коментар.",
"summary-preview": "Предварителен преглед на резюмето:",
"subject-preview": "Предварителен преглед на заглавието:",
"prefs-editwatchlist-clear": "Изчистване на списъка за наблюдение",
"prefs-watchlist-days": "Брой дни, които да се показват в списъка за наблюдение:",
"prefs-watchlist-days-max": "Най-много $1 {{PLURAL:$1|ден|дни}}",
- "prefs-watchlist-edits": "Ð\91Ñ\80ой Ñ\80едакÑ\86ии, коиÑ\82о Ñ\81е показваÑ\82 в Ñ\80азÑ\88иÑ\80ениÑ\8f Ñ\81пиÑ\81Ñ\8aк за наблюдение:",
+ "prefs-watchlist-edits": "Ð\9cакÑ\81имален бÑ\80ой Ñ\80едакÑ\86ии в Ñ\81пиÑ\81Ñ\8aка за наблюдение:",
"prefs-watchlist-edits-max": "Максимален брой: 1000",
"prefs-watchlist-token": "Уникален идентификатор на списъка за наблюдение:",
"prefs-misc": "Други",
"recentchangeslinked-feed": "Свързани промени",
"recentchangeslinked-toolbox": "Свързани промени",
"recentchangeslinked-title": "Промени, свързани с „$1“",
- "recentchangeslinked-summary": "Тук се показват последните промени на страниците, към които се препраща от дадена страница. При избиране на категория, се показват промените по страниците, влизащи в нея. ''Пример:'' Ако изберете страницата '''А''', която съдържа препратки към '''Б''' и '''В''', тогава ще можете да прегледате промените по '''Б''' и '''В'''.\n\nАко пък сложите отметка пред '''Обръщане на релацията''', ще можете да прегледате промените в обратна посока: ще се включат тези страници, които съдържат препратки към посочената страница.\n\nСтраниците от списъка ви за наблюдение се показват в '''получер'''.",
+ "recentchangeslinked-summary": "Тук се показват последните промени на страниците, към които се препраща от дадена страница. При избиране на категория, се показват промените по страниците, влизащи в нея. ''Пример:'' Ако изберете страницата '''А''', която съдържа препратки към '''Б''' и '''В''', тогава ще можете да прегледате промените по '''Б''' и '''В'''.\n\nАко пък сложите отметка пред '''Обръщане на релацията''', ще можете да прегледате промените в обратна посока: ще се включат тези страници, които съдържат препратки към посочената страница.\n\nСтраниците от [[Special:Watchlist|списъка ви за наблюдение]] се показват в <strong>получер</strong>.",
"recentchangeslinked-page": "Име на страницата:",
"recentchangeslinked-to": "Обръщане на релацията, така че да се показват промените на страниците, сочещи към избраната страница",
"recentchanges-page-added-to-category": "[[:$1]] е добавена към категория",
"timezoneregion-indian": "ভারত মহাসাগর",
"timezoneregion-pacific": "প্রশান্ত মহাসাগর",
"allowemail": "অন্য ব্যবহারকারীদেরকে আমাকে ইমেল করতে অনুমতি দিন",
+ "email-allow-new-users-label": "নতুন ব্যবহারকারীদেরকে ইমেলের অনুমতি দিন",
"email-blacklist-label": "আমাকে ইমেইল পাঠানো থেকে এই ব্যবহারকারীদের বিরত রাখুন:",
"prefs-searchoptions": "অনুসন্ধান",
"prefs-namespaces": "নামস্থানসমূহ",
"anonpreviewwarning": "''Niste prijavljeni. Nakon spremanja izmjena vaša IP adresa će biti zapisana u historiji uređivanja ove stranice.''",
"missingsummary": "<strong>Napomena:</strong> Niste unijeli sažetak izmjene.\nAko ponovo kliknete na \"$1\", Vaša izmjena će biti sačuvana bez sažetka.",
"selfredirect": "<strong>Upozorenje:</strong> Preusmjerili ste stranicu na samu sebe.\nMožda ste naveli pogrešan cilj preusmjeravanja ili ste uređivali pogrešnu stranicu.\nAko ponovno kliknete \"$1\", ipak će nastati preusmjerenje.",
- "missingcommenttext": "Unesite komentar ispod.",
+ "missingcommenttext": "Unesite komentar.",
"missingcommentheader": "<strong>Napomena:</strong> Niste napisali naslov ovog komentara.\nAko ponovo kliknete na \"$1\", Vaša izmjena će biti sačuvana bez naslova.",
"summary-preview": "Pregled sažetka:",
"subject-preview": "Pregled teme:",
"contentmodelediterror": "Ne možete urediti ovu izmjenu jer je njen model sadržaja <code>$1</code>, što se razlikuje od trenutnog modela sadržaja stranice <code>$2</code>.",
"recreate-moveddeleted-warn": "<strong>Upozorenje: Ponovo pravite stranicu koja je prethodno obrisana.</strong>\n\nRazmotrite je li prikladno nastaviti s uređivanjem ove stranice.\nOvdje je naveden zapisnik brisanja i premještanja:",
"moveddeleted-notice": "Ova stranica je obrisana.\nZapisnik brisanja, zaštite i premještanja stranice prikazan je ispod.",
- "moveddeleted-notice-recent": "Žao nam je, ova stranica je nedavno obrisana (u prethodna 24 sata).\nNiže su navedeni zapisnici brisanja i premještanja.",
+ "moveddeleted-notice-recent": "Žao nam je, ova stranica je nedavno obrisana (u prethodna 24 sata).\nNiže su navedeni zapisnici brisanja, zaštite i premještanja.",
"log-fulllog": "Prikaži cijeli zapisnik",
"edit-hook-aborted": "Izmjena je poništena putem interfejsa.\nNije ponuđeno nikakvo objašnjenje.",
"edit-gone-missing": "Stranica se nije mogla osvježiti.\nIzgleda da je obrisana.",
"diff-multi-sameuser": "({{PLURAL:$1|Nije prikazana jedna međuizmjena|Nisu prikazane $1 međuizmjene|Nije prikazano $1 međuizmjena}} istog korisnika)",
"diff-multi-otherusers": "(Nije prikazana {{PLURAL:$1|jedna međuverzija|$1 međuverzija}} {{PLURAL:$2|drugog korisnika|$2 korisnika}})",
"diff-multi-manyusers": "({{PLURAL:$1|Jedna međurevizija|$1 međurevizije|$1 međurevizija}} od više od $2 {{PLURAL:$2|korisnika|korisnika}} {{PLURAL:$1|nije prikazana|nisu prikazane}})",
+ "diff-paragraph-moved-tonew": "Pasus je premješten. Kliknite da pređete na njegovo novo mjesto.",
+ "diff-paragraph-moved-toold": "Pasus je premješten. Kliknite da pređete na njegovo staro mjesto.",
"difference-missing-revision": "{{PLURAL:$2|Jedna izmjena|$2 izmjene}} od ove razlike ($1) ne {{PLURAL:$2|postoji|postoje}}.\n\nOvo se obično dešava kada pratite zastarjelu vezu na stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokol brisanja].",
"searchresults": "Rezultati pretrage",
"searchresults-title": "Rezultati pretrage za \"$1\"",
"uploadstash-refresh": "Osvježi spisak datoteka",
"uploadstash-thumbnail": "pogledaj minijaturu",
"uploadstash-exception": "Ne mogu sačuvati datoteku u skladište ($1): \"$2\".",
+ "uploadstash-bad-path": "Putanja ne postoji.",
+ "uploadstash-bad-path-invalid": "Putanja nije ispravna.",
+ "uploadstash-bad-path-unknown-type": "Nepoznata vrsta \"$1\".",
+ "uploadstash-bad-path-bad-format": "Ključ \"$1\" nije u odgovarajućem formatu.",
+ "uploadstash-file-not-found-no-thumb": "Ne mogu dobiti minijaturu.",
+ "uploadstash-file-not-found-no-local-path": "Nema lokalne putanje za umanjenu stavku.",
+ "uploadstash-file-not-found-no-object": "Ne mogu napraviti lokalni podatkovni objekt za minijaturu.",
+ "uploadstash-file-not-found-no-remote-thumb": "Dobavljanje minijature nije uspjelo: $1\nURL = $2",
+ "uploadstash-file-not-found-missing-content-type": "Nedostaje zaglavlje za vrstu sadržaja.",
+ "uploadstash-file-not-found-not-exists": "Ne mogu naći putanju ili ovo nije obična datoteka.",
+ "uploadstash-file-too-large": "Ne mogu poslužiti datoteku veću od $1 {{PLURAL:$1|bajta|bajtova}}",
+ "uploadstash-not-logged-in": "Niko nije prijavljen. Datoteke moraju pripadati korisnicima.",
+ "uploadstash-wrong-owner": "Ova datoteka ($1) ne pripada trenutnom korisniku.",
+ "uploadstash-no-such-key": "Nema takvog ključa ($1). Ne mogu ukloniti.",
+ "uploadstash-no-extension": "Proširenje je prazno.",
+ "uploadstash-zero-length": "Datoteka ima nultu dužinu.",
"invalid-chunk-offset": "Neispravna polazna tačka",
"img-auth-accessdenied": "Pristup onemogućen",
"img-auth-nopathinfo": "Nedostaje PATH_INFO.\nVaš server nije postavljen da daje ovu informaciju.\nMožda je zasnovan na CGI koji ne podržava img_auth.\nPogledajte https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
"enotif_lastdiff": "Da vidite ovu izmjenu, pogledajte $1",
"enotif_anon_editor": "anonimni korisnik $1",
"enotif_body": "Poštovani $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nSažetak urednika: $PAGESUMMARY $PAGEMINOREDIT\n\nKontaktirajte urednika:\ne-pošta: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNeće biti drugih obavještenja u slučaju daljnjih izmjena osim ako prijavljeni ponovno posjetite stranicu. Također možete poništiti oznake obavijesti za sve praćene stranice koje imate na vašem spisku praćenja.\n\nVaš prijateljski {{SITENAME}} sistem obavještavanja\n\n--\nZa promjenu vaših postavki email obavijesti, posjetite\n{{canonicalurl:{{#special:Preferences}}}}\n\nZa promjenu postavki vašeg praćenja, posjetite\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nDa obrišete stranicu sa vašeg spiska praćenja, posjetite\n$UNWATCHURL\n\nPovratne informacije i daljnja pomoć:\n$HELPPAGE",
+ "enotif_minoredit": "Ovo je manja izmjena",
"created": "napravljena",
"changed": "izmijenjena",
"deletepage": "Obriši stranicu",
"undelete-search-title": "Pretraga obrisanih stranica",
"undelete-search-box": "Pretraga obrisanih stranica",
"undelete-search-prefix": "Prikaži stranice koje počinju sa:",
+ "undelete-search-full": "Prikaži naslove koji sadrže:",
"undelete-search-submit": "Traži",
"undelete-no-results": "Nije pronađena odgovarajuća stranica u arhivi brisanja.",
"undelete-filename-mismatch": "Ne može se vratiti revizija datoteke od $1: pogrešno ime datoteke",
"ipb_blocked_as_range": "Greška: IP adresa $1 nije direktno blokirana i ne može se deblokirati.\nMeđutim, možda je blokirana kao dio bloka $2, koji se ne može deblokirati.",
"ip_range_invalid": "Netačan opseg IP-adresa.",
"ip_range_toolarge": "Nisu dopuštene blokade veće od /$1.",
+ "ip_range_exceeded": "IP-opseg prekoračuje gornju granicu. Dozvoljeni opseg: /$1.",
+ "ip_range_toolow": "IP-opsezi nisu dozvoljeni.",
"proxyblocker": "Zaštita od proxya",
"proxyblockreason": "Vaša IP adresa je blokirana jer je ona otvoreni proxy.\nMolimo vas da kontaktirate vašeg davatelja internetskih usluga ili tehničku podršku i obavijestite ih o ovom ozbiljnom sigurnosnom problemu.",
"sorbsreason": "Vaša IP adresa je prikazana kao otvoreni proxy u DNSBL koji koristi {{SITENAME}}.",
"delete_and_move_text": "Odredišna stranica \"[[:$1]]\" već postoji.\nŽelite li je obrisati da biste oslobodili mjesto za premještanje?",
"delete_and_move_confirm": "Da, obriši stranicu",
"delete_and_move_reason": "Obrisano da se oslobodi mjesto za premještanje iz \"[[$1]]\"",
- "selfmove": "Izvorni i ciljani naziv su isti; strana ne može da se premjesti preko same sebe.",
+ "selfmove": "Naziv je isti;\nne mogu premjestiti stranicu preko same sebe.",
"immobile-source-namespace": "Ne mogu premjestiti stranice u imenski prostor \"$1\"",
"immobile-target-namespace": "Ne mogu se premjestiti stranice u imenski prostor \"$1\"",
"immobile-target-namespace-iw": "Međuwiki link nije ispravno odredište premještanja stranice.",
"import-mapping-namespace": "Uvezi u imenski prostor:",
"import-mapping-subpage": "Uvezi kao podstranice sljedeće stranice:",
"import-upload-filename": "Naziv datoteke:",
+ "import-upload-username-prefix": "Međuwiki-prefiks:",
"import-comment": "Komentar:",
"importtext": "Izvezite datoteku iz izvornog wikija koristeći [[Special:Export|alat za izvoz]].\nSačuvajte je na svoj računar i postavite je ovdje.",
"importstart": "Uvozim stranice...",
"imported-log-entries": "{{PLURAL:$1|Uvezena $1 stavka zapisnika|Uvezene $1 stavke zapisnika|Uvezeno $1 stavki zapisnika}}.",
"importfailed": "Uvoz nije uspio: $1",
"importunknownsource": "Nepoznat izvorni tip uvoza",
+ "importnoprefix": "Nije naveden međuwiki-prefiks",
"importcantopen": "Ne mogu otvoriti datoteku za uvoz",
"importbadinterwiki": "Loš interwiki link",
"importsuccess": "Uspješno ste uvezli stranicu!",
"autosumm-blank": "Uklonjen cjelokupan sadržaj stranice",
"autosumm-replace": "Zamijenjen sadržaj stranice sa \"$1\"",
"autoredircomment": "Preusmjereno na [[$1]]",
+ "autosumm-removed-redirect": "Uklonjeno preusmjerenje na [[$1]]",
+ "autosumm-changed-redirect-target": "Izmijenjeno odredište preusmjerenja sa [[$1]] na [[$2]]",
"autosumm-new": "Nova stranica: $1",
"autosumm-newblank": "Napravljena prazna stranica",
"size-bytes": "$1 {{PLURAL:$1|bajt|bajta|bajtova}}",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|oznaka|oznake}}]]: $2)",
"tag-mw-contentmodelchange": "promjena modela sadržaja",
"tag-mw-contentmodelchange-description": "Izmjena kojom se [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel mijenja model sadržaja] stranice",
+ "tag-mw-new-redirect": "novo preusmjerenje",
+ "tag-mw-removed-redirect": "uklonjeno preusmjerenje",
+ "tag-mw-changed-redirect-target": "izmijenjena odredišna stranica preusmjerenja",
+ "tag-mw-blank": "pražnjenje",
+ "tag-mw-replace": "zamijenjeno",
+ "tag-mw-rollback": "vraćanje",
"tags-title": "Oznake",
"tags-intro": "Ova stranica prikazuje spisak oznaka koje softver može staviti na svaku izmjenu i njihovo značenje.",
"tags-tag": "Naziv oznake",
"undelete-cantedit": "Ne možete vratiti ovu stranicu jer Vam nije dozvoljeno da je uređujete.",
"undelete-cantcreate": "Ne možete vratiti stranicu jer ne postoji stranica s tim nazivom i nije Vam dozvoljeno da je napravite.",
"pagedata-title": "Podaci o stranici",
+ "pagedata-not-acceptable": "Nije pronađen odgovarajući format. Podržane MIME-vrste: $1",
"pagedata-bad-title": "Neispravan naslov: $1."
}
"uploadstash-thumbnail": "mostra una miniatura",
"uploadstash-bad-path": "El camí no existeix.",
"uploadstash-bad-path-invalid": "El camí no és vàlid.",
+ "uploadstash-bad-path-unknown-type": "El tipus «$1» és desconegut.",
"invalid-chunk-offset": "El desplaçament del fragment no és vàlid",
"img-auth-accessdenied": "Accés denegat",
"img-auth-nopathinfo": "Hi manca PATH_INFO.\nEl servidor no està configurat per passar aquesta informació.\nPot estar basat en CGI i no ser compatible amb img_auth.\nConsulteu https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
"timezoneregion-indian": "Indický oceán",
"timezoneregion-pacific": "Tichý oceán",
"allowemail": "Dovolit ostatním uživatelům posílat mi e-maily",
+ "email-allow-new-users-label": "Povolit e-maily od zcela nových uživatelů",
"email-blacklist-label": "Znemožnit těmto uživatelům posílat mi e-maily:",
"prefs-searchoptions": "Vyhledávání",
"prefs-namespaces": "Jmenné prostory",
"right-siteadmin": "Zamykání a odemykání databáze",
"right-override-export-depth": "Exportovat stránky včetně odkazovaných stránek až do hloubky 5",
"right-sendemail": "Odesílání e-mailů ostatním uživatelům",
+ "right-sendemail-new-users": "Posílání e-mailů uživatelům bez zaznamenaných činností",
"right-managechangetags": "Vytváření a (de)aktivace [[Special:Tags|značek]]",
"right-applychangetags": "Přidávání [[Special:Tags|značek]] k vlastním změnám",
"right-changetags": "Přidávání libovolných [[Special:Tags|značek]] na jednotlivé revize a protokolovací záznamy a jejich odebírání",
"recentchangeslinked-feed": "Související změny",
"recentchangeslinked-toolbox": "Související změny",
"recentchangeslinked-title": "Související změny pro stránku „$1“",
- "recentchangeslinked-summary": "Níže je seznam nedávných změn stránek odkazovaných ze zadané stránky (nebo patřících do dané kategorie). Vaše [[Special:Watchlist|sledované stránky]] jsou '''zvýrazněny'''.",
+ "recentchangeslinked-summary": "Vložením názvu stránky uvidíte změny stránek, které na stránku odkazují nebo na které stránka odkazuje. (Pro stránky zařazené do kategorie vložte Kategorie:Název kategorie.) Vámi [[Special:Watchlist|sledované stránky]] jsou <strong>zvýrazněny</strong>.",
"recentchangeslinked-page": "Název stránky:",
"recentchangeslinked-to": "Zobrazit změny na stránkách odkazujících na zadanou stránku",
"recentchanges-page-added-to-category": "Stránka [[:$1]] zařazena do kategorie",
"tag-mw-replace": "Nahrazeno",
"tag-mw-replace-description": "Editace, které odstraňují více než 90 % obsahu stránky",
"tag-mw-rollback": "Rychlý revert",
+ "tag-mw-rollback-description": "Editace, jimiž byly předchozí editace vráceny zpět pomocí rychlého revertu",
"tags-title": "Značky",
"tags-intro": "Tato stránka obsahuje seznam značek, kterými může software označovat jednotlivé editace, a jejich významy.",
"tags-tag": "Název značky",
"minoredit": "To je drobnô edicjô",
"watchthis": "Ùzérôj",
"savearticle": "Zapiszë artikel",
+ "publishchanges": "Òpùblikùj zmianë",
"preview": "Pòdzérk",
"showpreview": "Wëskrzëni pòdzérk",
"showdiff": "Wëskrzëni zjinaczi",
"recentchanges-label-plusminus": "Zjinaczonô wiôlgòsc starnë (lëczba bajtów)",
"recentchanges-legend-heading": "<strong>Légenda:</strong>",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (òbaczë téż [[Special:NewPages|lëstã nowëch strón]])",
+ "rcfilters-legend-heading": "<strong>Ùżëté skrócënczi:</strong>",
+ "rcfilters-other-review-tools": "Jiné nôrzãdza przezéru zjinaków",
+ "rcfilters-activefilters": "Aktiwné filtrë",
+ "rcfilters-savedqueries-add-new-title": "Zapiszë aktualné ùstôwë filtrów.",
+ "rcfilters-clear-all-filters": "Wëczëszczë filtrë",
+ "rcfilters-search-placeholder": "Fitruj nowé zjinaczi (ùżij do te menu abò wëszukôj pòdle pòzwë filtra)",
+ "rcfilters-filterlist-title": "Filtrë",
+ "rcfilters-filterlist-feedbacklink": "Napiszë, jak cë sã widzą te nowé nôrzãdza filtrowaniô.",
+ "rcfilters-highlightbutton-title": "Pòdsztrichnąc wëniczi",
+ "rcfilters-filtergroup-authorship": "Aùtorstwò wkładu",
+ "rcfilters-filter-editsbyself-label": "Zjinaczi, chtërne zrobił jem jô.",
+ "rcfilters-filter-editsbyself-description": "Twòje gwôsné dzejania.",
+ "rcfilters-filter-editsbyother-label": "Zjinaczi, chtërne zrobilë jinszi brëkòwnicë.",
+ "rcfilters-filter-editsbyother-description": "Wszëtczé zjinaczi, òkróm twòjich.",
+ "rcfilters-filtergroup-userExpLevel": "Registracjô brëkòwnika i jegò doswiôdczenié",
+ "rcfilters-filter-user-experience-level-registered-label": "Zaregistrowóni",
+ "rcfilters-filter-user-experience-level-registered-description": "Zalogòwóni brëkòwnicë",
+ "rcfilters-filter-user-experience-level-unregistered-label": "Niezaregistrowóni",
+ "rcfilters-filter-user-experience-level-unregistered-description": "Niezalogòwóni brëkòwnicë",
+ "rcfilters-filter-user-experience-level-newcomer-label": "Pòczãtniczi",
+ "rcfilters-filter-user-experience-level-newcomer-description": "Zalogòwóni brëkòwnicë, jaczi mają mni jak 10 edicjów abò mni jak 4 dni aktiwnoscë.",
+ "rcfilters-filter-user-experience-level-learner-label": "Karno ùczącëch sã",
+ "rcfilters-filter-user-experience-level-learner-description": "Zaregistrowóni brëkòwnicë z doswiôdczenim wikszim niż „Pòczãtniczi”, ale miészim niż „Doswiôdczony brëkòwnicë”.",
+ "rcfilters-filter-user-experience-level-experienced-label": "Doswiôdczony brëkòwnicë.",
+ "rcfilters-filter-user-experience-level-experienced-description": "Zaregistrowóni brëkòwnicë, chtërny mają wicy jak 500 edicjów i 30 dni aktiwnoscë.",
+ "rcfilters-filter-bots-description": "Zjinaczi wëkònóné przë pòmòcë aùtomaticznëch nôrzãdzów.",
"rcfilters-filter-humans-label": "Człowiek (nie bòt)",
+ "rcfilters-filter-humans-description": "Zjinaczi dokònany przez lëdzy",
+ "rcfilters-filter-minor-label": "Drobné zjinaczi",
+ "rcfilters-filter-minor-description": "Zjinaczi, chtërne aùtor nacéchòwôł jakò „drobné”.",
+ "rcfilters-filter-major-description": "Zjinaczi nie nacéchòwóné jakò „drobné”.",
+ "rcfilters-filtergroup-watchlist": "Starnë z lëstë ùzéraniô",
+ "rcfilters-filter-watchlist-watched-label": "Z lëstë ùzéraniô",
+ "rcfilters-filter-watchlist-watched-description": "Zjinaczi na starnach, jaczé môsz na lësce ùzéraniô.",
+ "rcfilters-filter-watchlist-watchednew-label": "Nowé zjinaczi na starnach z lëstë ùzéraniô",
+ "rcfilters-filter-watchlist-watchednew-description": "Zjinaczi na starnach z lëstë ùzéraniô, jaczich òd czasu nëch edicjów jesz nie òdwiedzył jes.",
+ "rcfilters-filter-watchlist-notwatched-label": "Leno spòza lëstë ùzéraniô",
+ "rcfilters-filter-watchlist-notwatched-description": "Wszëtkò òkróm zjinaków na starnach z twòji lëstë ùzéraniô.",
+ "rcfilters-filtergroup-changetype": "Ôrt zjinaków",
+ "rcfilters-filter-pageedits-label": "Edicje starnë",
+ "rcfilters-filter-pageedits-description": "Edicje zamkłoscë, starnów diskùsje, òpisënków kategòrii...",
+ "rcfilters-filter-newpages-label": "Ùsôdzanié starnów",
+ "rcfilters-filter-newpages-description": "Zjinaczi, chtërne ùsôdzają nowé starnë.",
+ "rcfilters-filter-categorization-label": "Zjinaczi kategòriów",
+ "rcfilters-filter-categorization-description": "Dodanié abò rëmniãcé starnë z kategòrie.",
+ "rcfilters-filter-logactions-label": "Dzejania notérowóny w registru",
+ "rcfilters-filter-logactions-description": "Dzejania sprôwników, ùsôdzanié kònt, rëmanié starnów, sélanié lopków...",
+ "rcfilters-filtergroup-lastRevision": "Òstatné wersje.",
+ "rcfilters-filter-lastrevision-label": "Nônowszô wersjô",
+ "rcfilters-filter-lastrevision-description": "Leno nônowszi zjinaczi dlô kòżdi starnë.",
+ "rcfilters-filter-previousrevision-label": "Wersje jiné niż nônowszô.",
+ "rcfilters-filter-previousrevision-description": "Wszëtczé edicje, jaczé nie są nônowszą wersją starnë.",
+ "rcfilters-liveupdates-button": "Òdnôwianié na żëwò",
"rcnotefrom": "Niżi {{PLURAL:$5|je zjinaka|są zjinaczi}} {{PLURAL:$5|zrobionô|zrobioné}} pò <strong>$3, $4</strong> (nie wicy jak '''$1''' pozycëji).",
"rclistfrom": "Pòkażë nowé zmianë òd $3 $2",
"rcshowhideminor": "$1 môłé zmianë",
"rcfilters-filter-categorization-description": "Optegnelser af at sider bliver tilføjet til eller fjernet fra kategorier.",
"rcfilters-filter-logactions-label": "Loggede handlinger",
"rcfilters-filter-logactions-description": "Administrative handlinger, kontooprettelser, sidesletninger, uploads...",
- "rcfilters-filtergroup-lastRevision": "Sidste revision",
+ "rcfilters-filtergroup-lastRevision": "Seneste revisioner",
"rcfilters-filter-lastrevision-label": "Seneste revision",
- "rcfilters-filter-lastrevision-description": "Den nyeste ændring af en side.",
- "rcfilters-filter-previousrevision-label": "Tidligere revisioner",
+ "rcfilters-filter-lastrevision-description": "Kun den seneste ændring af en side.",
+ "rcfilters-filter-previousrevision-label": "Ikke den seneste revision",
"rcfilters-filter-previousrevision-description": "Alle ændringer som ikke er »seneste revision«.",
"rcfilters-filter-excluded": "Ekskluderet",
"rcfilters-view-tags": "Mærkede redigeringer",
"rcfilters-watchlist-markseen-button": "Marker alle ændringer som set",
"rcfilters-watchlist-edit-watchlist-button": "Rediger din liste med overvågede sider",
"rcfilters-preference-label": "Skjul den forbedrede verson af Seneste ændringer",
+ "rcfilters-target-page-placeholder": "Indtast et sidenavn",
"rcnotefrom": "Nedenfor er op til '''$1''' {{PLURAL:$5|ændring|ændringer}} siden '''$2''' vist.",
"rclistfromreset": "Nulstil datovalg",
"rclistfrom": "Vis nye ændringer startende fra den $3 kl. $2",
"uploaddisabledtext": "Oplægning af filer er deaktiveret.",
"php-uploaddisabledtext": "Oplægning af filer er forhindret i PHP. Tjek indstillingen for file_uploads.",
"uploadscripted": "Denne fil indeholder HTML eller script-kode, der i visse tilfælde can fejlfortolkes af en browser.",
+ "uploaded-href-unsafe-target-svg": "Fandt href til usikre data: URI-mål <code><$1 $2=\"$3\"></code> i den overførte SVG-fil.",
"uploadscriptednamespace": "Denne SVG-fil indeholder et ulovligt navnerum \"<nowiki>$1</nowiki>\"",
"uploadinvalidxml": "XML i den uploadede fil kunne ikke tolkes.",
"uploadvirus": "Denne fil indeholder en virus! Virusnavn: $1",
"upload": "फाइल अपलोड गरऽ",
"uploadbtn": "फाइल अपलोड गर्न्या",
"upload-recreate-warning": "'''चेतावनी: त्यस नाममी रह्याका फाइलहरू सारियाको या हटायाको छ।'''\n\nयै पानाको सारियाको र हटायाको लग तमरो सहजताको लागि दियाको छ।",
+ "uploadlogpage": "अपलोड लग",
"filedesc": "सारांश:",
"large-file": "यो सिफारिस गर्याछकि फाइलहरूको आकार $1 भन्दा ठूला हुनु हुँदैन;\nयै फाइलको आकार $2 छ ।",
"emptyfile": "तमीले अपलोड गर्याको फाइल रित्तो छ ।\nयो फाइल नाम गलत राख्याका कारणले भयाको हुनसकन्छ\nयो फाइल साँच्चै अपलोड गद्दे कुरडीमी निश्चित होइजाओ ।",
"nolinkstoimage": "यो चित्रसित लिंकभयाकि कोइ पाना नाइथी",
"morelinkstoimage": "यै फाइलको [[Special:WhatLinksHere/$1|थप लिंकहरू]] हेर ।",
"sharedupload-desc-here": "यो फाइल $1 बठे हो र और परियोजनाहरू बठे पन प्रयोग गद्द सकिन्याछ । \nताखाइ यैको [$2 फ़ाइल विवरण पानो]मि रयाका विवरण तल्तिर दियाको छ।",
+ "filepage-nofile": "येइ नाउँ को कोइ लै फाइल नाइथिन।",
"upload-disallowed-here": "तमलाई यो फाइल अधिलेखन गद्द नाइसक्का ।",
"filedelete-intro-old": "तमी <strong>[[Media:$1|$1]]</strong> को संस्करणलाई [$4 $3, $2] हुन्या गरि मेट्ट लाग्याछौ ।",
"filedelete-maintenance": "रखरखाव चलिरह्याको हुनाले अस्थायी रुपमी फाइलहरू मेट्ट्या र मेट्याकोलाई पुनर्बहाली गर्न निष्क्रिय गरियाकोछ।",
"activeusers-count": "विगत {{PLURAL:$3|दिनमी|$3 दिनहरूमी}} $1 {{PLURAL:$1|सम्पादन गरियो|सम्पादनहरू गरिया}}",
"activeusers-from": "यहाँबठे सुरु हुन्या प्रयोगकर्ताहरू धेकाओ:",
"activeusers-noresult": "प्रयोगकर्ताहरू भेटियानन्",
+ "listgrouprights-members": "(सदस्यअनैः सूची)",
"mailnologintext": "तमीले अरु प्रयोगकर्तानलाई ईमेल पठाउनको लागि आफु पहिली [[Special:UserLogin|प्रवेश(लगइन)गर्याको]] हुनुपडन्छ र [[Special:Preferences|आफ्नो रोजाइहरूमी]] एउटा वैध ईमेल ठेगाना भयाको हुनुपडन्छ ।",
"emailuser": "येइ प्रयोगकर्ता लाई इमेल पठाऽ",
"emailpagetext": "तल दियाको फार्मले तमी यै {{GENDER:$1|प्रयोगकर्ता}}लाई इमेल पठाउन सक्द्या हौ । तमीले जो ठेगाना [[Special:Preferences|आफ्नो प्रयोगकर्ता रोजाईहरू]]मी दियाका छियौ त्यो यै इमेललाई \"पठाउने\" को रूपमी आउन्याछ, अतः प्राप्तकर्ता तमीलाई सिधै जवाफ दिनसक्द्याछ ।",
"usermaildisabledtext": "यै विकिमी तम और प्रयोगकर्तानलाई ई-मेल पठाउन नाइसक्दा",
+ "watchlist": "अवलोकनसूची",
"mywatchlist": "मेरो ध्यान सूची",
"nowatchlist": "तमरो ध्यान सूचीमी कोइ लै सामाग्री नाइथिन् ।",
"watchlistanontext": "कृपया तमरो ध्यान सूची हेद्द या सम्पादन गद्द कीलाइ लगइन गर ।",
"restriction-type": "अनुमति:",
"pagesize": "(अक्षरहरू)",
"restriction-edit": "सम्पादन",
+ "restriction-move": "सारऽ",
"undeletepage": "मेट्याका पानाहरू हेद्या र पूर्वरुपमी फर्काउन्या",
"undeleterevisions": "$1 {{PLURAL:$1|संशोधन|संशोधनहरू}} संग्रहित",
"undeletehistory": "यदि कुनै पानालाई पुन: स्थापन गरायौ भण्या सम्पूर्ण संस्करणहरू इतिहासमी पुन:स्थापन हुन्याछन् ।\nयदि यै नामबठे नयाँ पानो निर्माण भैसक्याको छ भण्या पुन: स्थापित संस्करणहरू पूर्व इतिहासको रुपमी स्थापित हुन्याछन् ।",
"tooltip-namespace_association": "कुरडिकानी या विषय नेमस्पेसहरुलाई सम्वन्धित नेमस्पेसको रुपमि लिनकि लेखा सन्दुकमि चिनो लगाइदिय ।",
"blanknamespace": "(मुख्य)",
"contributions": "{{GENDER:$1|प्रयोगकर्ता}}को योगदान",
+ "contributions-title": "प्रयोगकर्ता $1 का योगदानअन",
"mycontris": "मेरो योगदानहरू",
"anoncontribs": "योगदान",
"uctop": "(अइलोऽ)",
"month": "महिना बठे (लै पैल्ली):",
"year": "वर्ष बठे( लौ पैल्ली):",
+ "sp-contributions-newbies": "नौला खाताअनाः योगदानअन लाई मात्तरी धेकाऽ",
+ "sp-contributions-uploads": "अपलोडअन",
+ "sp-contributions-logs": "लगअन",
+ "sp-contributions-talk": "कुरड़िकाआनी",
+ "sp-contributions-search": "योगदानअन खिलाइ खोजी अरऽ",
+ "sp-contributions-username": "आइपी(IP) ठेगान या प्रयोगकर्ता नाउँ:",
"sp-contributions-toponly": "नवीनतम संशोधनका सम्पादनहरू मात्र धेकाओ",
+ "sp-contributions-newonly": "तन सम्पादनअन लाई धेकाऽ जो कि पन्ना सिर्जनाअन हुन",
+ "sp-contributions-submit": "खोजऽ",
"whatlinkshere": "याँखाइ कि जोणीन्छ",
"whatlinkshere-title": "$1 सित जोडियाऽ पन्नाअन",
"whatlinkshere-page": "पानो",
"blocklist": "ब्लक गर्याका प्रयोगकर्ताहरू",
"ipblocklist": "ब्लक गर्याका प्रयोगकर्ताहरू",
"ipblocklist-legend": "ब्लक गर्याका प्रयोगकर्ताहरू खोज",
+ "infiniteblock": "अनन्त",
"blocklink": "रोक्न्या",
"contribslink": "योगदानअन",
"block-log-flags-anononly": "नाम नभयाका प्रयोकर्ताहरू मात्र",
+ "proxyblocker": "प्रोक्सी निषेधक",
"proxyblockreason": "तमरो IP ठेगानामी रोक लगायाको छ किनकी यो खुला प्रोक्सी हो ।\nकृपया तमरो इन्टरनेट सेवा प्रदायक या प्राविधिक सहायतासँग सम्पर्क गरीबर यै सुरक्षा समस्याका बारेमी जानकारी गराओ ।",
"sorbsreason": "तमरो IP ठेगाना खुल्ला प्रोक्सीको रुपमी DNSBL मा सूचीकरण गरिएको छ यैलाई{{SITENAME}}ले प्रयोगमी ल्यायाको छ।",
"sorbs_create_account_reason": "तमरो IP ठेगाना खुल्ला प्रोक्सीको रुपमी DNSBL मी सूचीकरण गरियाको छ यैलाई{{SITENAME}}ले प्रयोगमी ल्यायाको छ ।\nतम खाता खोल्न नाइसक्दा ।",
"import-noarticle": "आयात गद्दाकी लाई पानाहरू नाइथिन्",
"import-error-edit": "तमलाई सम्पादन गद्या अनुमति नभयाको पानो \"$1\" आयात गरिएन ।",
"import-error-create": "तमलाई नयाँ बनाउने अनुमति नभयाको पानो \"$1\" आयात गरिएन ।",
+ "importlogpage": "आयात लग",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|संशोधन|संशोधनहरू}} आयात भयो",
"tooltip-pt-userpage": "{{GENDER:|तमरो प्रयोगकर्ता}} पान्नो",
"tooltip-pt-anonuserpage": "तमी जो IP ठेगानाको रुपमी सम्पादन गद्दै छौ , त्यैको प्रयोगकर्ता पानो निम्न छ :",
"tooltip-ca-undelete": "मेट्याको भया पनि यै पानाको सम्पादनहरू पुन:प्राप्त गर",
"tooltip-ca-move": "यो पानालाई अर्खिठौर सार",
"tooltip-ca-watch": "यै पानालाई तमरा ध्यानसूचीमि थपिदिय",
+ "tooltip-ca-unwatch": "यै पानालाई तमरि अवलोकनसूची बठेइ हटाऽ",
"tooltip-search": "{{SITENAME}}मी खोजऽ",
"tooltip-search-go": "यदी ठ्याक्कै येइ नाउँ भया: पन्ना रैछ भँण्या तै मी जा:।",
"tooltip-search-fulltext": "यै पाठका लागि पन्नाअनमी खोज",
"tooltip-ca-nstab-special": "यो खास पानो हो ,तमी यैलाई आफै सम्पादन गद्द सक्दाइन",
"tooltip-ca-nstab-project": "आयोजना पानो हेरिदिय",
"tooltip-ca-nstab-image": "चित्र पानो हेर",
+ "tooltip-ca-nstab-mediawiki": "प्रणाली सन्देश हेरऽ",
"tooltip-ca-nstab-template": "टेम्प्लेट(नमूना) हेरिदिय",
"tooltip-ca-nstab-category": "श्रेणी पानो हेर",
"tooltip-minoredit": "येइ लाई सामान्य सम्पादन भँणिबर चिनो लाऽ",
"anonusers": "{{SITENAME}} का नाम नभयाका {{PLURAL:$2| प्रयोगकर्ता|प्रयोगकर्ताहरू}} $1",
"simpleantispam-label": "ऐन्टी-स्प्याम जाँच।\nयैलाई <strong>नाइँ</strong> भद्य्या!",
"pageinfo-title": "\"$1\" खिलाइ जानकारी",
+ "pageinfo-header-basic": "नानबड़ि जानकारी",
"pageinfo-header-edits": "इतिहास सम्पादन",
+ "pageinfo-header-restrictions": "पन्ना सुरक्षा",
+ "pageinfo-display-title": "धेकिन्या शीर्षक",
+ "pageinfo-default-sort": "पूर्वनिर्धारित अनुक्रमण साँचो",
+ "pageinfo-length": "पन्ना लम्बाइ (बाइटअन मी)",
+ "pageinfo-article-id": "पन्ना आइडी",
+ "pageinfo-language": "पन्ना सामग्री भाषा",
+ "pageinfo-content-model": "पन्ना सामग्री ढङ्ङ",
"pageinfo-robot-policy": "रोबटअन हताँ अनुक्रमण",
+ "pageinfo-robot-index": "अनुमति भयाऽ",
+ "pageinfo-robot-noindex": "अनुमति नभयाः",
"pageinfo-watchers": "पन्ना निगरानी अद्द्याऽ सङ्ख्या",
+ "pageinfo-subpages-name": "येइ पन्नाः उपपन्नाअनोः सङ्ख्या",
"pageinfo-firstuser": "पन्ना सर्जक",
"pageinfo-firsttime": "पन्ना सिर्जना मिति",
"pageinfo-edits": "कूल सम्पादन सङ्ख्या",
+ "pageinfo-magic-words": "जादुयी {{PLURAL:$1|आँखर|आँखरअन}} ($1)",
"pageinfo-toolboxlink": "पन्नाइ जानकारी",
+ "pageinfo-contentpage": "सामग्री पन्नाः रूप मी गणियाऽ",
+ "pageinfo-contentpage-yes": "हाँ",
"rcpatroldisabled": "अहिलका परिवर्तनहरू गस्ती निष्क्रिय पार्याको छ ।",
"rcpatroldisabledtext": "अहिलका परिवर्तनहरू गस्ती गुण अहिलको लागि निष्कृय पारियाको छ ।",
"markedaspatrollederror-noautopatrol": "तमी आफ्नै सम्पादनलाई गस्ती गरियाको भनि चिनो लगाउन नाइसक्दा ।",
"watchlistedit-clear-done": "तमरो ध्यान सूची खाली गरीयाको छ।",
"watchlisttools-view": "आधारित फेरबदलीहरू हेर",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|कुरडी]])",
+ "redirect-submit": "जाऽ",
+ "redirect-user": "प्रयोगकर्ता आइडी",
+ "redirect-page": "पन्ना आइडी",
+ "redirect-revision": "पन्ना संशोधन",
+ "redirect-file": "फाइलनाउँ",
"specialpages": "खास पन्नाअन",
"specialpages-group-changes": "अल्लैका परिवर्तन लगहरू",
"tags": "मान्य परिवर्तन ट्यागहरू",
"tag-filter": "[[Special:Tags|पुछड]] छानिन्या",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ट्याग|ट्यागहरू}}]]: $2)",
+ "tags-active-no": "नाइँ",
"tags-hitcount": "$1 {{PLURAL:$1|परिवर्तन|परिवर्तनहरू}}",
"tags-create-no-name": "तमीले ट्याग नाम निर्दिष्ट गद्दु पड्ड्या हुन्छ ।",
"tags-create-warnings-below": "क्या तमी यो ट्याग बनाउन्या काम जारी राख्न चाहन्छौ ?",
"logentry-upload-upload": "$1 ले $3 {{GENDER:$2|अपलोड अरेका छन्}}",
"feedback-bugornote": "यदि तमी कुनै प्राविधिक समस्यालाई विस्तारले सम्झाउन तयार छौ भण्या कृपया [$1 बग राख]।\nयदि हैन, भण्या तमी तल दियाको सरल फारमको प्रयोग गद्दसक्द्याहौ । तमरो टिप्पणी, तमरो प्रयोगकर्ता नाम र तमरो ब्राउजरको नाम सहित \"[$3 $2]\" पानामी जोडिन्याछ ।",
"searchsuggest-search": "{{SITENAME}} खोजऽ",
+ "duration-days": "$1 {{PLURAL:$1|दिन|दिनअन}}",
"expand_templates_preview_fail_html": "<em>किनकि {{SITENAME}} सिधै एचटिएमयल सक्षम छ र तमीले लग इन गर्या छैनौ, पूर्वावलोकन लुकाइयाको छ ताकि सम्भावित जाभास्क्रिप्ट आक्रमणलाई रोक्द सकियोस् ।</em>\n\n<strong>यदि यो मान्य पूर्ववावलोकन प्रयास हो भण्या पुन प्रयास गर ।</strong>\nयदि यसले कार्य पूर्ण भएन भण्या [[Special:UserLogout|लग आउट गरिबर]] फेरी लग इन गर्या ।",
"expand_templates_preview_fail_html_anon": "<em>किनकि {{SITENAME}} सिधै एचटिएमयल सक्षम छ र तमीले लग इन गर्या छैनौ, पूर्वावलोकन लुकाइयाको छ ताकि सम्भावित जाभास्क्रिप्ट आक्रमणलाई रोक्द सकियोस् ।</em>\n\n<strong>यदि यो मान्य पूर्वावलोकन प्रयास हो भण्या कृपया [[Special:UserLogin|लग इन गरिबर]] पुनः प्रयास गर्या ।</strong>",
"default-skin-not-found": "ओह! तमरो विकिको पूर्व निर्धारित खोल जस्तो कि <code dir=\"ltr\">$wgDefaultSkin</code> मी बताइयाको<code>$1</code>, उपलब्ध नाईथिन् ।\n\nतमरो इन्स्टलेसन यी खोलहरूलाई सम्मिलित गर्दछ {{PLURAL:$4|खोल|खोलहरू}}। हेर [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: खोललाई सम्मिलित गर्नु] ताकि तमीलाई जानकारी होस् कि कसरि {{PLURAL:$4|उसलाई|उसलाई सम्मिलित गर्न सकियोस् र निर्धारितलाई तय गद्दे}}।\n\n$2\n\n; यदि तमीले अहिले मीडियाविकि इन्स्टाल गर्याका छौ:\n: तमीले सम्भवत गिटबठे इन्स्टाल गर्याका छौ, वा सिधै स्रोत कोडबठे गर्याका छौ जैको लागि कुनै अर्कै तारिका प्रयोग गरियाको छ । यो आशा अनुरूप छ । कोशिश गर केहि खोलहरू\n[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's मीडियाविकिको खोल डाइरेक्ट्रीबाट डाउनलोड गद्या], जैको लागि तमी:\n:* डाउनलोड गर [https://www.mediawiki.org/wiki/Download टरबल इन्स्टालर], जुन कयौं खोलहरू र विस्तारमी उपलब्ध छन्। तमी खोलहरूको कोड <code>skins/</code> त्यसको डाइरेक्ट्रीबाट कपी-पेस्ट गद्द सक्द्या हौ। \n:* व्यक्तिगत खोलहरू टरबलबठे डाउनलोड गर\n[https://www.mediawiki.org/wiki/Special:SkinDistributor मीडिया विकि] बठे।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins गिटको प्रयोग गरेर डाउनलोड गद्द सकन्छौ]।\n: यदि तमी विकासकर्ता हौ भण्या यसो गद्दा तमरो गिट-रिपजिटरीमी केहि हुनुहुँदैन । \n; यदि तमीले अहिले मीडियाविकिलाई अपग्रेड गर्याका छौ:\n: मीडियाविकि १.२४ र यैको नवीन रूप स्वतः रूपले खोलहरूलाई सक्षम गद्दैनन् (हेर [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual:खोलहरूको स्वतः खोज])। तमी निम्नलिखितलाई पेस्ट गद्द सकन्छौ: {{PLURAL:$5|लाइन|लाइनहरू}} <code>LocalSettings.php</code> मी ताकि {{PLURAL:$5|उसले|सबै}} सक्षम होस् जस्तो कि तमीले इन्स्टाल गर्याको {{PLURAL:$5|खोल|खोलहरू}}को मामिलामी:\n\n<pre dir=\"ltr\">$3</pre>\n\n; यदि तमीले अहिले परिवर्तन गर्याका छौ<code>LocalSettings.php</code>:\n: खोल नामहरूको अगाडी डबल-क्लिक गर जसले तमलाई विभिन्न प्रकारहरूको विकल्प दिन्छ।",
"rcfilters-preference-label": "Hide the improved version of Recent Changes",
"rcfilters-preference-help": "Rolls back the 2017 interface redesign and all tools added then and since.",
"rcfilters-filter-showlinkedfrom-label": "Show changes on pages linked from",
- "rcfilters-filter-showlinkedfrom-option-label": "Show changes on pages linked <strong>FROM</strong> a page",
- "rcfilters-filter-showlinkedto-label": "Show changes on pages linked to",
- "rcfilters-filter-showlinkedto-option-label": "Show changes on pages linked <strong>TO</strong> a page",
+ "rcfilters-filter-showlinkedfrom-option-label": "<strong>Pages linked from</strong> the selected page",
+ "rcfilters-filter-showlinkedto-label": "Show changes on pages linking to",
+ "rcfilters-filter-showlinkedto-option-label": "<strong>Pages linking to</strong> the selected page",
"rcfilters-target-page-placeholder": "Enter a page name",
"rcnotefrom": "Below {{PLURAL:$5|is the change|are the changes}} since <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
"rclistfromreset": "Reset date selection",
"nosuchusershort": "Ne ekzistas uzanto kun la nomo \"$1\". Bonvolu kontroli vian ortografion.",
"nouserspecified": "Vi devas entajpi salutnomon.",
"login-userblocked": "Ĉi tiu uzanto estas forbarita. Ensalutado ne estas permesita.",
- "wrongpassword": "Vi tajpis malĝustan pasvorton. Bonvolu provi denove.",
+ "wrongpassword": "Vi tajpis malĝustan uzantnomon aŭ pasvorton.\nBonvolu provi denove.",
"wrongpasswordempty": "Vi tajpis malplenan pasvorton. Bonvolu provi denove.",
"passwordtooshort": "Pasvortoj devas esti longaj almenaŭ $1 {{PLURAL:$1|1 signon|$1 signojn}}.",
"passwordtoolong": "Pasvorto ne povas esti pli longa ol {{PLURAL:$1|1 signo|$1 signoj}}.",
"recentchangeslinked-feed": "Rilataj paĝoj",
"recentchangeslinked-toolbox": "Rilataj ŝanĝoj",
"recentchangeslinked-title": "Ŝanĝoj rilataj al \"$1\"",
- "recentchangeslinked-summary": "Jen listo de ŝanĝoj faritaj lastatempe al paĝoj ligitaj el specifa paĝo (aŭ al membroj de specifa kategorio).\nPaĝoj en [[Special:Watchlist|via atentaro]] estas '''grasaj'''.",
+ "recentchangeslinked-summary": "Entajpu nomon de paĝo por vidi ŝanĝojn sur paĝoj ligitaj el aŭ al tiu ĉi paĝo. (Por vidi anojn de kategorio, entajpu Category:nomo de kategorio). Ŝanĝoj sur paĝoj en [[Special:Watchlist|via atentaro]] markiĝas <strong>grase</strong>.",
"recentchangeslinked-page": "Nomo de paĝo:",
"recentchangeslinked-to": "Montru ŝanĝojn al paĝoj ligitaj al la specifa paĝo anstataŭe.",
"recentchanges-page-added-to-category": "[[:$1]] aldonita al la kategorio",
"tooltip-ca-edit": "Usted puede editar esta página. Por favor, use el botón de previsualización antes de grabar.",
"tooltip-ca-history": "Versiones anteriores de esta página y sus autores",
"tooltip-ca-watch": "Añadir esta página a tu lista de seguimiento",
- "tooltip-ca-unwatch": "Borrar esta página de su lista de seguimiento",
+ "tooltip-ca-unwatch": "Quitar esta página de su lista de seguimiento",
"tooltip-search": "Buscar en {{SITENAME}}",
"tooltip-search-fulltext": "Busca este texto en las páginas",
"tooltip-p-logo": "Visitar la página principal",
"botpasswords-insert-failed": "No se pudo agregar el nombre del bot \"$1\". ¿Ya ha sido añadido?",
"botpasswords-update-failed": "No se pudo actualizar el nombre del bot \"$1\". ¿Ha sido borrado?",
"botpasswords-created-title": "Se creó la contraseña de bot",
- "botpasswords-created-body": "Se creó la contraseña del bot llamado \"$1\" del usuario \"$2\".",
+ "botpasswords-created-body": "Se creó la contraseña del robot «$1» perteneciente {{GENDER:$2|al usuario|a la usuaria}} «$2».",
"botpasswords-updated-title": "Se actualizó la contraseña de bot",
- "botpasswords-updated-body": "Se actualizó la contraseña del bot llamado \"$1\" del usuario \"$2\".",
+ "botpasswords-updated-body": "Se actualizó la contraseña del robot «$1» perteneciente {{GENDER:$2|al usuario|a la usuaria}} «$2».",
"botpasswords-deleted-title": "Se eliminó la contraseña de bot",
- "botpasswords-deleted-body": "Se eliminó la contraseña del bot llamado \"$1\" del usuario \"$2\".",
+ "botpasswords-deleted-body": "Se eliminó la contraseña del robot «$1» perteneciente {{GENDER:$2|al usuario|a la usuaria}} «$2».",
"botpasswords-newpassword": "La contraseña nueva para acceder con <strong>$1</strong> es <strong>$2</strong>. <em>Guarda esta información para su consulta futura.</em> <br> (En caso de robots antiguos que requieren que el nombre de acceso coincida con el de usuario, también puedes utilizar <strong>$3</strong> como nombre de usuario y <strong>$4</strong> como contraseña.)",
"botpasswords-no-provider": "BotPasswordsSessionProvider no está disponible.",
"botpasswords-restriction-failed": "Las restricciones de la contraseña de bot impiden este inicio de sesión.",
"rcfilters-restore-default-filters": "Restaurar filtros predeterminados",
"rcfilters-clear-all-filters": "Borrar todos los filtros",
"rcfilters-show-new-changes": "Ver cambios más recientes",
- "rcfilters-search-placeholder": "Filtrar cambios (usa el menú o buscar para aplicar filtro)",
+ "rcfilters-search-placeholder": "Filtrar cambios (utiliza el menú o busca el nombre de un filtro)",
"rcfilters-invalid-filter": "Filtro no válido",
"rcfilters-empty-filter": "No hay filtros activos. Se muestran todas las contribuciones.",
"rcfilters-filterlist-title": "Filtros",
"tooltip-ca-nstab-main": "Ver la página de contenido",
"tooltip-ca-nstab-user": "Ver la página del usuario",
"tooltip-ca-nstab-media": "Ver la página de multimedia",
- "tooltip-ca-nstab-special": "Esta es una página especial, y no puede editarse",
+ "tooltip-ca-nstab-special": "Esta es una página especial y no puede editarse",
"tooltip-ca-nstab-project": "Ver la página del proyecto",
"tooltip-ca-nstab-image": "Ver la página del archivo",
"tooltip-ca-nstab-mediawiki": "Ver el mensaje de sistema",
"tag-mw-contentmodelchange": "cambio de modelo de contenido",
"tag-mw-contentmodelchange-description": "Ediciones que [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel cambian el modelo de contenido] de una página",
"tag-mw-new-redirect": "Redirección nueva",
+ "tag-mw-new-redirect-description": "Ediciones que crean una nueva redirección o convierten la página en una redirección",
+ "tag-mw-removed-redirect": "Redirección eliminada",
+ "tag-mw-removed-redirect-description": "Ediciones que convierten una página de redirección existente en una sin redirección",
+ "tag-mw-changed-redirect-target": "Destino de redirección modificado",
"tag-mw-changed-redirect-target-description": "Ediciones que modifican el destino de una redirección",
"tag-mw-blank": "Vaciado",
"tag-mw-blank-description": "Ediciones que blanquean una página",
+ "tag-mw-replace": "Reemplazo",
"tag-mw-replace-description": "Ediciones que eliminan más del 90 % del contenido de una página",
"tag-mw-rollback": "Reversión",
+ "tag-mw-rollback-description": "Ediciones que deshacen modificaciones previas usando la herramienta de reversor",
"tags-title": "Etiquetas",
"tags-intro": "Esta página lista las etiquetas con las que el software puede marcar una edición y su significado.",
"tags-tag": "Nombre de etiqueta",
"autosumm-blank": "صفحه را خالی کرد",
"autosumm-replace": "جایگزینی صفحه با '$1'",
"autoredircomment": "تغییرمسیر به [[$1]]",
+ "autosumm-removed-redirect": "تغییرمسیر به [[$1]] حذف شد",
"autosumm-new": "صفحهای تازه حاوی «$1» ایجاد کرد",
"autosumm-newblank": "ایجاد صفحه خالی",
"size-bytes": "$1 بایت",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|برچسب|برچسبها}}]]: $2)",
"tag-mw-contentmodelchange": "تغییر مدل محتوا",
"tag-mw-contentmodelchange-description": "ویرایشهایی که [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel مدل محتوای صفحه را تغییر میدهند]",
+ "tag-mw-removed-redirect": "تغییرمسیر حذف شد",
+ "tag-mw-rollback": "واگردانی",
"tags-title": "برچسبها",
"tags-intro": "این صفحه فهرستیاست از برچسبهایی که نرمافزار با آنها ویرایشها را علامتگذری میکند، به همراه معانی آنها.",
"tags-tag": "نام برچسب",
"logentry-delete-delete": "$1 a supprimé la page $3",
"logentry-delete-delete_redir": "$1 a {{GENDER:$2|supprimé}} la redirection vers $3 par écrasement",
"logentry-delete-restore": "$1 a restauré la page $3 ($4)",
- "logentry-delete-restore-nocount": "$1 {{GENDER:$2|a restauré}} la page $3",
+ "logentry-delete-restore-nocount": "$1 {{GENDER:$2||}}a restauré la page $3",
"restore-count-revisions": "{{PLURAL:$1|1 révision|$1 révisions}}",
"restore-count-files": "{{PLURAL:$1|1 fichier|$1 fichiers}}",
"logentry-delete-event": "$1 {{GENDER:$2|a modifié}} la visibilité {{PLURAL:$5|d'un événement du journal|de $5 événements du journal}} sur $3: $4",
"timezoneregion-indian": "Océano Índico",
"timezoneregion-pacific": "Océano Pacífico",
"allowemail": "Admitir mensaxes de correo electrónico doutros usuarios",
+ "email-allow-new-users-label": "Permite correos electrónicos de usuarios novos",
"email-blacklist-label": "Prohibir a eses usuarios enviarme correos electrónicosː",
"prefs-searchoptions": "Procura",
"prefs-namespaces": "Espazos de nomes",
"recentchangeslinked-feed": "Cambios relacionados",
"recentchangeslinked-toolbox": "Cambios relacionados",
"recentchangeslinked-title": "Cambios relacionados con \"$1\"",
- "recentchangeslinked-summary": "Esta é unha lista dos cambios que se realizaron recentemente nas páxinas vinculadas a esta (ou nos membros da categoría especificada).\nAs páxinas da súa [[Special:Watchlist|lista de vixilancia]] aparecen en '''negra'''.",
+ "recentchangeslinked-summary": "Introduce un nome de páxina para ver os cambios en páxinas ligadas dende ou ata esa páxina. (Para ver os membros dunha categoría, introduce Categoría:Nome da categoría). Os cambios na túa [[Special:Watchlist|lista de vixiancia]] están en <strong>negra</strong>.",
"recentchangeslinked-page": "Nome da páxina:",
"recentchangeslinked-to": "Mostrar os cambios relacionados das páxinas que ligan coa dada",
"recentchanges-page-added-to-category": "\"[[:$1]]\" engadiuse á categoría",
"चक्रपाणी",
"Anamdas",
"Sachinkatiyar",
- "Rishi.Singh"
+ "Rishi.Singh",
+ "Clockery"
]
},
"tog-underline": "कड़ियाँ अधोरेखन:",
"watcherrortext": "\"$1\" के लिये आपकी ध्यानसूची सेटिंग बदलते समय त्रुटि हुई।",
"enotif_reset": "सभी पृष्ठ देखे हुए दर्शाएँ",
"enotif_impersonal_salutation": "{{SITENAME}} सदस्य",
- "enotif_subject_deleted": "{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने हटा दिया है",
- "enotif_subject_created": "{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने बना दिया है",
- "enotif_subject_moved": "{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने स्थानांतरित कर दिया है",
- "enotif_subject_restored": "{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने पुनर्स्थापित कर दिया है",
- "enotif_subject_changed": "{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने परिवर्तित किया है",
- "enotif_body_intro_deleted": "{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को हटा दिया है, देखें <$3>।",
- "enotif_body_intro_created": "{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को बनाया है, वर्तमान अवतरण के लिए $3 देखें।",
- "enotif_body_intro_moved": "{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को स्थानांतरित किया है, वर्तमान अवतरण के लिए $3 देखें।",
- "enotif_body_intro_restored": "{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को पुनर्स्थापित किया है, वर्तमान अवतरण के लिए $3 देखें।",
- "enotif_body_intro_changed": "{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने $PAGEEDITDATE को परिवर्तित किया है, वर्तमान अवतरण के लिए $3 देखें।",
+ "enotif_subject_deleted": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने हटा दिया है",
+ "enotif_subject_created": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने बना दिया है",
+ "enotif_subject_moved": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने स्थानांतरित कर दिया है",
+ "enotif_subject_restored": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने पुनर्स्थापित कर दिया है",
+ "enotif_subject_changed": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने परिवर्तित किया है",
+ "enotif_body_intro_deleted": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने $PAGEEDITDATE को हटा दिया है, देखें $3।",
+ "enotif_body_intro_created": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने $PAGEEDITDATE को बनाया है, वर्तमान अवतरण के लिए $3 देखें।",
+ "enotif_body_intro_moved": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने $PAGEEDITDATE को स्थानांतरित किया है, वर्तमान अवतरण के लिए $3 देखें।",
+ "enotif_body_intro_restored": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने $PAGEEDITDATE को पुनर्स्थापित किया है, वर्तमान अवतरण के लिए $3 देखें।",
+ "enotif_body_intro_changed": "{{SITENAME}} पृष्ठ $1 को {{GENDER:$2|$2}} ने $PAGEEDITDATE को परिवर्तित किया है, वर्तमान अवतरण के लिए $3 देखें।",
"enotif_lastvisited": "आपकी आखिरी भेंट के बाद हुए बदलाव देखने के लिये $1 देखें।",
"enotif_lastdiff": "इस बदलाव को देखने के लिये $1 देखें।",
"enotif_anon_editor": "अनामक सदस्य $1",
"nosuchusershort": "Ne postoji suradnik s imenom \"$1\". Provjerite Vaš unos.",
"nouserspecified": "Molimo navedite suradničko ime.",
"login-userblocked": "Ovaj je suradnik blokiran. Prijava nije dopuštena.",
- "wrongpassword": "Zaporka koju ste unijeli nije ispravna. Molimo Vas, pokušajte ponovo.",
+ "wrongpassword": "Suradničko ime ili zaporka koju ste unijeli nije ispravno. Molimo Vas, pokušajte ponovo.",
"wrongpasswordempty": "Niste unijeli zaporku. Pokušajte ponovno.",
"passwordtooshort": "Zaporka mora sadržavati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}.",
"passwordtoolong": "Zaporke ne mogu biti duže od {{PLURAL:$1|jednoga znaka|$1 znaka|$1 znakova}}.",
"autosumm-blank": "uklonjen cjelokupni sadržaj stranice",
"autosumm-replace": "Zamijenjen sadržaj stranice s »$1«",
"autoredircomment": "Preusmjeravanje stranice na [[$1]]",
+ "autosumm-removed-redirect": "Uklonjeno preusmjeravanje na [[$1]]",
+ "autosumm-changed-redirect-target": "Promijenjeno je odredište preusmjeravanja sa stranice [[$1]] na [[$2]]",
"autosumm-new": "Stvorena nova stranica sa sadržajem: »$1«.",
"autosumm-newblank": "Stvorena prazna stranica.",
"size-bytes": "$1 {{PLURAL:$1|bajt|bajta|bajtova}}",
"watchlistedit-raw-done": "Vaš popis praćenja je snimljen.",
"watchlistedit-raw-added": "{{PLURAL:$1|1 stranica je dodana|$1 stranice su dodane}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 stranica je uklonjena|$1 stranice su ukonjene}}:",
- "watchlistedit-clear-title": "Očišćen popis praćenja",
+ "watchlistedit-clear-title": "Očisti popis praćenja",
"watchlistedit-clear-legend": "Obriši popis praćenja",
"watchlistedit-clear-explain": "Sve stavke s popisa praćenja će biti izbrisane",
"watchlistedit-clear-titles": "Imena stranica:",
"tag-mw-contentmodelchange": "promjena modela sadržaja",
"tag-mw-contentmodelchange-description": "Uređivanja koja [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel mijenjanju model sadržaja] stranice",
"tag-mw-new-redirect": "novo preusmjeravanje",
+ "tag-mw-new-redirect-description": "Uređivanja kojima se stvara novo preusmjeravanje ili mijenja stranica na koju se preusmjerava",
"tag-mw-removed-redirect": "uklonjeno preusmjeravanje",
+ "tag-mw-removed-redirect-description": "Uređivanja kojima se mijenja postojeće preusmjeravanje u nepreusmjeravanje",
"tag-mw-changed-redirect-target": "promijenjeno preusmjeravanje",
"tag-mw-changed-redirect-target-description": "Uređivanja koja mijenjaju odredište preusmjeravanja",
"tag-mw-blank": "bjelidba",
"tag-mw-blank-description": "Uređivanje kojim je načinjena bjelidba stranice",
"tag-mw-replace": "preko 90 % zamijenjen tekst",
+ "tag-mw-replace-description": "Uređivanja kojima se uklanja više nego 90 % sadržaja stranice",
"tag-mw-rollback": "brzo uklanjanje",
+ "tag-mw-rollback-description": "Uređivanja kojima se brzo uklanjaju prethodne izmjene rabeći poveznicu za brzo uklanjanje",
"tags-title": "Oznake",
"tags-intro": "Ova stranica sadržava popis oznaka s kojima programska oprema može označivati promjene te njihova značenja.",
"tags-tag": "Naziv oznake",
"timezoneregion-indian": "Indiai-óceán",
"timezoneregion-pacific": "Csendes-óceán",
"allowemail": "E-mail engedélyezése más szerkesztőktől",
+ "email-allow-new-users-label": "E-mail engedélyezése frissen regisztrált szerkesztőktől",
"email-blacklist-label": "Letiltás ezen felhasználóknak, hogy e-mailt küldhessenek nekem",
"prefs-searchoptions": "Keresés",
"prefs-namespaces": "Névterek",
"right-siteadmin": "adatbázis lezárása, felnyitása",
"right-override-export-depth": "Lapok exportálása a hivatkozott lapokkal együtt, legfeljebb 5-ös mélységig",
"right-sendemail": "e-mail küldése más felhasználóknak",
+ "right-sendemail-new-users": "e-mail küldése olyan felhasználóknak, akiknek nincs naplózott művelete",
"right-managechangetags": "[[Special:Tags|címkék]] létrehozása és (de)aktiválása",
"right-applychangetags": "[[Special:Tags|címkék]] alkalmazása saját változatokra",
"right-changetags": "egyedi lapváltozatokon és naplóbejegyzéseken tetszőleges [[Special:Tags|címkék]] hozzáadása és törlése",
"autosumm-blank": "Eltávolította a lap teljes tartalmát",
"autosumm-replace": "A lap tartalmának cseréje erre: $1",
"autoredircomment": "Átirányítás ide: [[$1]]",
+ "autosumm-removed-redirect": "Átirányítás megszüntetve. Eredeti cél: [[$1]]",
"autosumm-changed-redirect-target": "Az átirányítás célja módosítva: [[$1]]→[[$2]]",
"autosumm-new": "Új oldal, tartalma: „$1”",
"autosumm-newblank": "Üres oldal létrehozva",
"Hinaloe",
"Phantomize",
"Suzukaze-c",
- "Kkairri"
+ "Kkairri",
+ "Yusuke1109"
]
},
"tog-underline": "リンクの下線:",
"timezoneregion-indian": "インド洋",
"timezoneregion-pacific": "太平洋",
"allowemail": "他の利用者からのメールを受け取る",
+ "email-allow-new-users-label": "新しいユーザーからのメールを許可する",
"email-blacklist-label": "次のユーザーからのメールを受け取らない:",
"prefs-searchoptions": "検索",
"prefs-namespaces": "名前空間",
"tag-filter-submit": "Penyaring",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tenger|Tenger}}]]: $2)",
"tag-mw-contentmodelchange": "owahan modhèl isi",
+ "tag-mw-blank": "Ngosongaké",
"tags-title": "Tag",
"tags-intro": "Kaca iki isi pratélan tenger sing dienggo nandhani besutan déning piranti alus, sinartan tegesé.",
"tags-tag": "Jeneng tag",
"action-changetags": "თავისუფალი ტეგების დამატება და წაშლა ცალკეულ ცვლილებებსა და ჟურნალების ჩანაწერებში",
"action-deletechangetags": "მონაცემთა ბაზიდან ტეგების წაშლა",
"action-purge": "ამ გვერდის წაშლა",
- "nchanges": "$1 ცვლილება",
+ "nchanges": "$1 {{PLURAL:$1|ცვლილება|ცვლილება}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ბოლო ვიზიტის შემდეგ}}",
"enhancedrc-history": "ისტორია",
"recentchanges": "ბოლო ცვლილებები",
"rcfilters-activefilters": "აქტიური ფილტრები",
"rcfilters-advancedfilters": "გაფართოებული ფილტრები",
"rcfilters-limit-title": "ცვლილელების ნახვა",
- "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|ცვლილება|ცვლილება|ცვლილება}}, $2",
+ "rcfilters-limit-and-date-label": "{{PLURAL:$1|ცვლილება|$1 ცვლილება}}, $2",
"rcfilters-date-popup-title": "საძიებო დროის მონაკვეთი",
"rcfilters-days-title": "უკანასკნელი დღეები",
"rcfilters-hours-title": "ბოლო საათები",
"tags-delete": "წაშლა",
"tags-activate": "გააქტიურება",
"tags-deactivate": "დეაქტივაცია",
- "tags-hitcount": "$1 ცვლილება",
+ "tags-hitcount": "$1 {{PLURAL:$1|ცვლილება|ცვლილება}}",
"tags-manage-no-permission": "თქვენ არ გაქვთ შეცვლილი დასათაურების მართვის უფლება",
"tags-manage-blocked": "თქვენ ვერ შეძლებთ ცვლილებების ტეგების მართვას სანამ {{GENDER:$1|თქვენ}} დაბლოკილი ხართ.",
"tags-create-heading": "ახალი ტეგის შექმნა",
"timezoneregion-indian": "Indeschen Ozean",
"timezoneregion-pacific": "Pazifeschen Ozean",
"allowemail": "E-Maile vun anere Benotzer kréien.",
+ "email-allow-new-users-label": "E-Maile vu ganz neie Benotzer erlaben",
"prefs-searchoptions": "Sichen",
"prefs-namespaces": "Nummraim",
"default": "Standard",
"Zygimantus",
"Matma Rex",
"Nemo bis",
- "Nersip"
+ "Nersip",
+ "Manvydasz"
]
},
"tog-underline": "Nuorodos pabraukimas:",
"nosuchusershort": "Nėra jokio naudotojo, pavadinto „$1“. Patikrinkite rašybą.",
"nouserspecified": "Jums reikia nurodyti naudotojo vardą.",
"login-userblocked": "Šis naudotojas yra užblokuotas. Prisijungti neleidžiama.",
- "wrongpassword": "Įvestas neteisingas slaptažodis. Pamėginkite dar kartą.",
+ "wrongpassword": "Įvestas neteisingas vartotojo vardas ar slaptažodis. Pamėginkite dar kartą.",
"wrongpasswordempty": "Įvestas slaptažodis yra tuščias. Pamėginkite vėl.",
"passwordtooshort": "Slaptažodžiai turi būti bent $1 {{PLURAL:$1|simbolio|simbolių|simbolių}} ilgio.",
"passwordtoolong": "Slaptažodžiai negali būti ilgesni nei {{PLURAL:$1|1 simbolis|$1 simboliai}}.",
"prefs-help-recentchangescount": "Į tai įeina naujausi keitimai, puslapių istorijos ir specialiųjų veiksmų sąrašai.",
"prefs-help-watchlist-token2": "Tai yra slaptas jūsų stebimųjų sąrašo raktas, skirtas žiniatinkliui.\nKiekvienas, kurį jį žino, gali skaityti jūsų stebimųjų puslapių sąrašą, taigi, juo nesidalinkite.\nJei reikia jį anuliuoti, [[Special:ResetTokens|spauskite čia]].",
"savedprefs": "Nustatymai sėkmingai išsaugoti.",
- "savedrights": "Naudotojo teisės {{GENDER:$1|$1}} buvo išsaugotos.",
+ "savedrights": "Naudotojo {{GENDER:$1|$1}} grupės buvo išsaugotos.",
"timezonelegend": "Laiko juosta:",
"localtime": "Vietinis laikas:",
"timezoneuseserverdefault": "Naudoti wiki pradinį ($1)",
"timezoneregion-indian": "Indijos vandenynas",
"timezoneregion-pacific": "Ramusis vandenynas",
"allowemail": "Leisti kitiems naudotojams siųsti man el. laiškus",
+ "email-allow-new-users-label": "Leidžia el. laiškus iš naujų vartotojų",
"email-blacklist-label": "Neleisti šiems vartotojams siųsti man el. laiškų:",
"prefs-searchoptions": "Paieška",
"prefs-namespaces": "Vardų sritys",
"action-deletedhistory": "žiūrėti puslapio ištrintą istoriją",
"action-browsearchive": "ieškoti ištrintų puslapių",
"action-undelete": "atkurti puslapius",
- "action-suppressrevision": "peržiūrėti ir atkurti šią paslėptą versiją",
+ "action-suppressrevision": "peržiūrėti ir atkurti paslėptas versijas",
"action-suppressionlog": "peržiūrėti šį privatų registrą",
"action-block": "neleisti šiam naudotojui redaguoti",
"action-protect": "pakeisti apsaugos lygius šiam puslapiui",
"rcfilters-activefilters": "Aktyvūs filtrai",
"rcfilters-advancedfilters": "Detalūs filtrai",
"rcfilters-quickfilters": "Išsaugoti filtrai",
- "rcfilters-quickfilters-placeholder-title": "Nėra išsaugotų nuorodų",
+ "rcfilters-quickfilters-placeholder-title": "Nėra išsaugotų filtrų",
"rcfilters-savedqueries-defaultlabel": "Išsaugoti filtrai",
"rcfilters-savedqueries-rename": "Pervadinti",
"rcfilters-savedqueries-setdefault": "Nustatyti kaip numatytą",
"rcfilters-savedqueries-remove": "Pašalinti",
"rcfilters-savedqueries-new-name-label": "Pavadinimas",
"rcfilters-savedqueries-new-name-placeholder": "Apibūdinkite šio filtro tikslą.",
- "rcfilters-savedqueries-apply-label": "Išsaugoti nustatymus",
+ "rcfilters-savedqueries-apply-label": "Sukurti filtrą",
"rcfilters-savedqueries-cancel-label": "Atšaukti",
"rcfilters-savedqueries-add-new-title": "Išsaugoti dabartinius filtro nustatymus",
"rcfilters-restore-default-filters": "Atstatyti numatytuosius filtrus",
"rcfilters-invalid-filter": "Negalimas filtras",
"rcfilters-empty-filter": "Nėra aktyvių filtrų. Rodomi visi indeliai.",
"rcfilters-filterlist-title": "Filtrai",
- "rcfilters-filterlist-whatsthis": "Kas tai?",
- "rcfilters-filterlist-feedbacklink": "Pateikite atsiliepimą apie naujus (beta) filtrus",
+ "rcfilters-filterlist-whatsthis": "Kaip tai veikia?",
+ "rcfilters-filterlist-feedbacklink": "Pateikite atsiliepimą apie šiuos (naujus) filtravimo įrankius",
"rcfilters-highlightbutton-title": "Paryškinti rezultatus",
"rcfilters-highlightmenu-title": "Pasirinkite spalvą",
"rcfilters-highlightmenu-help": "Pasirinkite spalvą šio elemento paryškinimui",
"rcfilters-filter-editsbyother-description": "Visi keitimai, išskyrus jūsų.",
"rcfilters-filtergroup-userExpLevel": "Patirties lygis (tik registruotiems vartotojams)",
"rcfilters-filter-user-experience-level-registered-label": "Registruoti",
- "rcfilters-filter-user-experience-level-registered-description": "Prisijungę redaktoriai.",
+ "rcfilters-filter-user-experience-level-registered-description": "Prisijungę naudotojai.",
"rcfilters-filter-user-experience-level-unregistered-label": "Neregistruoti",
- "rcfilters-filter-user-experience-level-unregistered-description": "Redaktoriai, kurie nėra prisijungę.",
+ "rcfilters-filter-user-experience-level-unregistered-description": "Naudotojai, kurie nėra prisijungę.",
"rcfilters-filter-user-experience-level-newcomer-label": "Naujokai",
"rcfilters-filter-user-experience-level-newcomer-description": "Mažiau nei 10 keitimų ir 4 dienų aktyvumo.",
"rcfilters-filter-user-experience-level-learner-label": "Mokiniai",
"rcfilters-filter-humans-label": "Žmogaus (ne roboto)",
"rcfilters-filter-humans-description": "Keitimai atlikti žmonių.",
"rcfilters-filtergroup-reviewstatus": "Peržiūrėti statusą",
+ "rcfilters-filter-patrolled-label": "Stebimas",
+ "rcfilters-filter-patrolled-description": "Pakeitimai pažymėti kaip stebimi.",
+ "rcfilters-filter-unpatrolled-label": "Nestebimas",
+ "rcfilters-filter-unpatrolled-description": "Pakeitimai pažymėti kaip nestebimi.",
"rcfilters-filtergroup-significance": "Reikšmė",
"rcfilters-filter-minor-label": "Smulkūs pakeitimai",
"rcfilters-filter-minor-description": "Keitimai, kuriuos autorius pažymėjo kaip mažus.",
"rcfilters-filter-watchlist-watched-description": "Pakeitimai puslapiuose, jūsų Stebimųjų sąraše.",
"rcfilters-filter-watchlist-watchednew-label": "Nauji Stebimųjų sąrašo pakeitimai",
"rcfilters-filter-watchlist-notwatched-label": "Nėra Stebimųjų sąraše",
+ "rcfilters-filter-watchlistactivity-unseen-label": "Neperžiūrėti pakeitimai",
+ "rcfilters-filter-watchlistactivity-seen-label": "Peržiūrėti pakeitimai",
"rcfilters-filtergroup-changetype": "Pakeitimo tipas",
"rcfilters-filter-pageedits-label": "Puslapių keitimai",
"rcfilters-filter-newpages-label": "Puslapių sukūrimai",
"rcfilters-filter-previousrevision-description": "Visi keitimai, kurie nėra naujausi puslapio keitimai.",
"rcfilters-view-tags": "Pažymėti keitimai",
"rcfilters-view-tags-help-icon-tooltip": "Sužinoti daugiau apie Pažymėtus pakeitimus",
+ "rcfilters-liveupdates-button": "Gyvi atnaujinimai",
+ "rcfilters-liveupdates-button-title-on": "Išjungti gyvus atnaujinimus",
+ "rcfilters-watchlist-markseen-button": "Pažymėti visus pakeitimus kaip peržiūrėtus",
+ "rcfilters-watchlist-edit-watchlist-button": "Redaguoti stebimųjų sąrašą",
+ "rcfilters-watchlist-showupdated": "Puslapiai pakeisti nuo tada, kai paskutinį kartą apsilankėte juose, yra <strong>paryškinti</strong>.",
+ "rcfilters-preference-label": "Slėpti patobulintą naujausių pakeitimų versiją",
+ "rcfilters-filter-showlinkedfrom-label": "Rodyti pakeitimus puslapiuose, iš kurių esate nukreipti",
+ "rcfilters-target-page-placeholder": "Įveskite puslapio pavadinimą",
"rcnotefrom": "Žemiau yra {{PLURAL:$5|pakeitimas|pakeitimai}} pradedant <strong>$3, $4</strong> (rodoma iki <strong>$1</strong> pakeitimų).",
"rclistfromreset": "Nustatyti duomenų pasirinkimą iš naujo",
"rclistfrom": "Rodyti naujus pakeitimus pradedant $3 $2",
"listfiles_size": "Dydis",
"listfiles_description": "Aprašymas",
"listfiles_count": "Versijos",
- "listfiles-show-all": "Įtraukti senesnes paveikslėlių versijas",
+ "listfiles-show-all": "Įtraukti senesnes rinkmenų versijas",
"listfiles-latestversion": "Dabartinė versija",
"listfiles-latestversion-yes": "Taip",
"listfiles-latestversion-no": "Ne",
"enotif_lastdiff": "Užeikite į $1, jei norite pamatyti šį pakeitimą.",
"enotif_anon_editor": "anoniminis naudotojas $1",
"enotif_body": "$WATCHINGUSERNAME,\n\n\n$PAGEEDITDATE {{SITENAME}} projekte $PAGEEDITOR $CHANGEDORCREATED puslapį „$PAGETITLE“, dabartinę versiją rasite adresu $PAGETITLE_URL.\n\n$NEWPAGE\n\nRedaguotojo komentaras: $PAGESUMMARY $PAGEMINOREDIT\n\nSusisiekti su redaguotoju:\nel. paštu: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nDaugiau pranešimų apie vėlesnius pakeitimus nebus siunčiama, jei neapsilankysite puslapyje.\nJūs taip pat galite išjungti pranešimo žymę visiems jūsų stebimiems puslapiams savo stebimųjų sąraše.\n\n Jūsų draugiškoji projekto {{SITENAME}} pranešimų sistema\n\n--\nNorėdami pakeisti e-paštu siunčiamų pranešimų nustatymus, užeikite į\n{{canonicalurl:{{#special:Preferences}}}}\n\nNorėdami pakeisti stebimųjų puslapių nustatymus, užeikite į\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nNorėdami puslapį iš stebimųjų puslapių sąrašo, užeikite į\n$UNWATCHURL\n\nAtsiliepimai ir pagalba:\n$HELPPAGE",
+ "enotif_minoredit": "Tai smulkus pakeitimas",
"created": "sukurė",
"changed": "pakeitė",
"deletepage": "Trinti puslapį",
"anonymous": "{{SITENAME}} {{PLURAL:$1|anoniminis naudotojas|anoniminiai naudotojai}}",
"siteuser": "{{SITENAME}} {{GENDER:$2|naudotojas|naudotoja}} $1",
"anonuser": "{{SITENAME}} anoniminis naudotojas $1",
- "lastmodifiedatby": "Šį puslapį paskutinį kartą redagavo $3 $2, $1.",
+ "lastmodifiedatby": "Šį puslapį paskutinį kartą redagavo $2, $1, $3.",
"othercontribs": "Paremta $1 darbu.",
"others": "kiti",
"siteusers": "{{SITENAME}} {{PLURAL:$2|naudotojas|naudotojai}} $1",
"compare-invalid-title": "Jūsų nurodytas pavadinimas neleistinas.",
"compare-title-not-exists": "Pavadinimas, kurį nurodėte, neegzistuoja.",
"compare-revision-not-exists": "Keitimas, kurį nurodėte, neegzistuoja.",
- "diff-form": "'''forma'''",
+ "diff-form": "Skirtumai",
"dberr-problems": "Atsiprašome! Svetainei iškilo techninių problemų.",
"dberr-again": "Palaukite kelias minutes ir perkraukite puslapį.",
"dberr-info": "(Nepavyksta pasiekti duomenų bazės: $1)",
"preview": "Pirmskats",
"showpreview": "Rādīt pirmskatu",
"showdiff": "Rādīt izmaiņas",
+ "blankarticle": "<strong>Brīdinājums:</strong> Lapa, ko tu veido, ir tukša.\nJa tu vēlreiz nospiedīsi uz \"$1\", tiks izveidota lapa bez jebkāda satura.",
"anoneditwarning": "<strong>Uzmanību:</strong> tu neesi pieslēdzies. Ja veiksi labojumus, publiski būs redzama tava IP adrese. Ja tu <strong>[$1 pieslēgsies]</strong> vai <strong>[$2 izveidosi kontu]</strong>, visi labojumi tiks piesaistīti tavam kontam; būs arī citi ieguvumi.",
"anonpreviewwarning": "''Tu neesi ienācis. Saglabājot lapu, Tava IP adrese tiks ierakstīta šīs lapas hronoloģijā.''",
"missingsummary": "'''Atgādinājums''': Tu neesi norādījis izmaiņu kopsavilkumu. Vēlreiz klikšķinot uz \"Saglabāt lapu\", Tavas izmaiņas tiks saglabātas bez kopsavilkuma.",
"year": "No gada (un senāki):",
"sp-contributions-newbies": "Rādīt jauno lietotāju devumu",
"sp-contributions-newbies-sub": "Jaunie lietotāji",
+ "sp-contributions-newbies-title": "Jauno dalībnieku devums",
"sp-contributions-blocklog": "bloķēšanas reģistrs",
"sp-contributions-suppresslog": "cenzēja {{GENDER:$1|dalībnieka|dalībnieces}} devumu",
"sp-contributions-deleted": "dzēstais {{GENDER:$1|dalībnieka|dalībnieces}} devums",
"ipb_blocked_as_range": "Kļūda: IP $1 nav bloķēta tieši, tāpēc to nevar atbloķēt.\nTā ir bloķēta kā daļa no IP adrešu diapazona $2, kuru var atbloķēt.",
"ip_range_invalid": "Nederīgs IP diapazons",
"proxyblocker": "Starpniekservera bloķētājs",
+ "softblockrangesreason": "No tavas IP adreses ($1) nav atļauts anonīms devums. Lūdzu, pieslēdzies.",
"ipbblocked": "Tu nevar bloķēt vai atbloķēt lietotājus, jo Tu pats esi bloķēts",
"ipbnounblockself": "Tev nav atļauts sevi atbloķēt",
"lockdb": "Bloķēt datubāzi",
"newimages-legend": "Filtrs",
"newimages-label": "Faila nosaukums (vai tā daļa):",
"newimages-user": "IP adrese vai lietotājvārds",
+ "newimages-newbies": "Rādīt tikai jaunu dalībnieku devumu",
"newimages-showbots": "Parādīt botu augšupielādētos failus",
"newimages-hidepatrolled": "Paslēpt pārbaudītās augšupielādes",
"noimages": "Nav nekā ko redzēt.",
"autosumm-blank": "Nodzēsa lapu",
"autosumm-replace": "Aizvieto lapas saturu ar '$1'",
"autoredircomment": "Pāradresē uz [[$1]]",
+ "autosumm-removed-redirect": "Noņēma pāradresāciju uz [[$1]]",
+ "autosumm-changed-redirect-target": "Pāradresācija nomainīta no [[$1]] uz [[$2]]",
"autosumm-new": "Jauna lapa: $1",
"autosumm-newblank": "Izveidota tukša lapa",
"lag-warn-normal": "Izmaiņas, kas ir jaunākas par $1 {{PLURAL:$1|sekundēm|sekundi|sekundēm}}, var neparādīties šajā sarakstā.",
"tag-filter-submit": "Filtrs",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Iezīmes|Iezīme|Iezīmes}}]]: $2)",
"tag-mw-contentmodelchange": "satura modeļa izmaiņa",
+ "tag-mw-contentmodelchange-description": "Labojumi, kas [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel maina lapas satura modeli]",
+ "tag-mw-new-redirect": "Jauna pāradresācija",
+ "tag-mw-new-redirect-description": "Labojumi, kas izveido jaunu pāradresāciju, vai pārveido lapu par pāradresāciju",
+ "tag-mw-removed-redirect": "Noņēma pāradresāciju",
+ "tag-mw-changed-redirect-target": "Pāradresācijas mērķis nomainīts",
+ "tag-mw-changed-redirect-target-description": "Labojumi, kas maina pāradresācijas mērķi",
+ "tag-mw-blank": "Nodzēsta lapa",
+ "tag-mw-blank-description": "Labojumi, kas nodzēš lapas saturu",
+ "tag-mw-replace": "Aizvietots",
+ "tag-mw-replace-description": "Labojumi, kas izņem vairāk kā 90% no lapas satura",
"tags-title": "Iezīmes",
"tags-intro": "Šajā lapā uzskaitītas iezīmes, ar kurām programmatūra var atzīmēt labojumus, un to nozīme.",
"tags-tag": "Iezīmes nosaukums",
"Romaine",
"Urhixidur",
"아라",
- "MokaAkashiyaPT"
+ "MokaAkashiyaPT",
+ "Athena in Wonderland"
]
},
"tog-underline": "Sublinhar lhigaçones:",
"botpasswords-bad-appid": "ဘော့အမည် \"$1\" သည် မရေရာပါ။",
"botpasswords-insert-failed": "ဘော့အမည် \"$1\" ကို ထည့်သွင်းရန် မဖြစ်ပါ။ ထည့်ပြီးသားလား?",
"botpasswords-created-title": "ဘော့စကားဝှက် ဖန်တီးပြီးပါပြီ",
- "botpasswords-created-body": "အသုံးပြုသူ \"$2\" ၏ ဘော့အမည် \"$1\" အတွက် ဘော့စကားဝှက် ဖန်တီးပြီးပါပြီ။",
+ "botpasswords-created-body": "{{GENDER:$2|အသုံးပြုသူ}} \"$2\" ၏ ဘော့အမည် \"$1\" အတွက် ဘော့စကားဝှက် ဖန်တီးပြီးပါပြီ။",
"botpasswords-updated-title": "ဘော့စကားဝှက် မွမ်းမံပြီးပါပြီ",
- "botpasswords-updated-body": "အသုံးပြုသူ \"$2\" ၏ ဘော့အမည် \"$1\" အတွက် ဘော့စကားဝှက်ကို မွမ်းမံပြီးပါပြီ။",
+ "botpasswords-updated-body": "{{GENDER:$2|အသုံးပြုသူ}}\"$2\" ၏ ဘော့အမည် \"$1\" အတွက် ဘော့စကားဝှက်ကို မွမ်းမံပြီးပါပြီ။",
"botpasswords-deleted-title": "ဘော့စကားဝှက် ဖျက်ပြီးပါပြီ",
- "botpasswords-deleted-body": "အသုံးပြုသူ \"$2\" ၏ ဘော့အမည် \"$1\" အတွက် ဘော့စကားဝှက်ကို ဖျက်ပြီးပါပြီ။",
+ "botpasswords-deleted-body": "{{GENDER:$2|အသုံးပြုသူ}} \"$2\" ၏ ဘော့အမည် \"$1\" အတွက် ဘော့စကားဝှက်ကို ဖျက်ပြီးပါပြီ။",
"resetpass_forbidden": "စကားဝှက် ပြောင်းမရနိုင်ပါ",
"resetpass-no-info": "ဤစာမျက်နှာကို တိုက်ရိုက်အသုံးပြုနိုင်ရန်အတွက် Log in ဝင်ထားရပါမည်။",
"resetpass-submit-loggedin": "စကားဝှက်ပြောင်းရန်",
"rcfilters-group-results-by-page": "စာမျက်နှာအလိုက် ရလဒ်များ အုပ်စုဖွဲ့ရန်",
"rcfilters-activefilters": "သက်ဝင်နေသာ filter များ",
"rcfilters-advancedfilters": "အဆင့်မြင့် filter များ",
- "rcfilters-limit-title": "á\80\95á\80¼á\80\9eá\80\99á\80\8aá\80·á\80º á\80\95á\80¼á\80±á\80¬á\80\84á\80ºá\80¸á\80\9cá\80²á\80\99á\80¾á\80¯များ",
+ "rcfilters-limit-title": "á\80\95á\80¼á\80\9eá\80\99á\80\8aá\80·á\80º á\80\9bá\80\9cá\80\92á\80ºများ",
"rcfilters-days-title": "မကြာသေးမီက ရက်များ",
"rcfilters-hours-title": "မကြာသေးမီက နာရီများ",
"rcfilters-days-show-days": "$1 {{PLURAL:$1|ရက်|ရက်}}",
"recentchangeslinked-feed": "ဆက်စပ်သော အပြောင်းအလဲများ",
"recentchangeslinked-toolbox": "ဆက်စပ်သော အပြောင်းအလဲများ",
"recentchangeslinked-title": "\"$1\" နှင့် ဆက်စပ်သော အပြောင်းအလဲများ",
- "recentchangeslinked-summary": "á\80¤á\80\9eá\80\8aá\80ºá\80\99á\80¾á\80¬ á\80\9eá\80®á\80¸á\80\9eá\80\94á\80·á\80ºá\80\95á\80¼á\80\91á\80¬á\80¸á\80\9eá\80±á\80¬ á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬ (á\80\9eá\80á\80¯á\80· á\80\9eá\80®á\80¸á\80\9eá\80\94á\80·á\80ºá\80\80á\80\8fá\80¹á\80\8dá\80\99á\80»á\80¬á\80¸) á\80\99á\80¾ á\80\8aá\80½á\80¾á\80\94á\80ºá\80¸á\80\91á\80¬á\80¸á\80\9eá\80±á\80¬ á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80\99á\80»á\80¬á\80¸á\81\8f á\80\9cá\80\90á\80ºá\80\90á\80\9cá\80±á\80¬ á\80\95á\80¼á\80±á\80¬á\80\84á\80ºá\80¸á\80\9cá\80²á\80\99á\80¾á\80¯á\80\99á\80»á\80¬á\80¸á\81\8f á\80\85á\80¬á\80\9bá\80\84á\80ºá\80¸á\80\96á\80¼á\80\85á\80ºá\80\9eá\80\8aá\80ºá\81\8b [[Special:Watchlist|á\80\85á\80±á\80¬á\80\84á\80·á\80ºá\80\80á\80¼á\80\8aá\80·á\80ºá\80\85á\80¬á\80\9bá\80\84á\80ºá\80¸]] á\80\99á\80¾ á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80\99á\80»á\80¬á\80¸á\80\80á\80á\80¯ á\80\85á\80¬á\80\9cá\80¯á\80¶á\80¸á\80\99á\80\8aá\80ºá\80¸ဖြင့် ပြထားသည်။",
+ "recentchangeslinked-summary": "á\80¤á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80\99á\80¾ á\80\9eá\80á\80¯á\80·á\80\99á\80\9fá\80¯á\80\90á\80º á\80¤á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80\9eá\80á\80¯á\80· á\80\81á\80»á\80á\80\90á\80ºá\80\86á\80\80á\80ºá\80\91á\80¬á\80¸á\80\9eá\80±á\80¬ á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80\99á\80»á\80¬á\80¸á\81\8f á\80\95á\80¼á\80±á\80¬á\80\84á\80ºá\80¸á\80\9cá\80²á\80\99á\80¾á\80¯á\80\99á\80»á\80¬á\80¸á\80\80á\80á\80¯ á\80\80á\80¼á\80\8aá\80·á\80ºá\80\9bá\80¾á\80¯á\80\94á\80á\80¯á\80\84á\80ºá\80\9bá\80\94á\80º á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80¡á\80\99á\80\8aá\80ºá\80\90á\80\85á\80ºá\80\81á\80¯á\80\80á\80á\80¯ á\80\91á\80\8aá\80·á\80ºá\80\9eá\80½á\80\84á\80ºá\80¸á\80\95á\80«á\81\8b (á\80\80á\80\8fá\80¹á\80\8dá\80\90á\80\85á\80ºá\80\81á\80¯á\81\8f á\80¡á\80\96á\80½á\80²á\80·á\80\9dá\80\84á\80ºá\80\99á\80»á\80¬á\80¸á\80\80á\80á\80¯ á\80\80á\80¼á\80\8aá\80·á\80ºá\80\9bá\80¾á\80¯á\80\9bá\80\94á\80º Category:á\80\80á\80\8fá\80¹á\80\8dá\80¡á\80\99á\80\8aá\80º á\80\80á\80á\80¯ á\80\9bá\80á\80¯á\80\80á\80ºá\80\91á\80\8aá\80·á\80ºá\80\95á\80«á\81\8b) [[Special:Watchlist|á\80\9eá\80\84á\80·á\80ºá\80\85á\80±á\80¬á\80\84á\80·á\80ºá\80\80á\80¼á\80\8aá\80·á\80ºá\80\85á\80¬á\80\9bá\80\84á\80ºá\80¸]]á\80\9bá\80¾á\80 á\80\85á\80¬á\80\99á\80»á\80\80á\80ºá\80\94á\80¾á\80¬á\80\99á\80»á\80¬á\80¸á\81\8f á\80\95á\80¼á\80±á\80¬á\80\84á\80ºá\80¸á\80\9cá\80²á\80\99á\80¾á\80¯á\80\99á\80»á\80¬á\80¸á\80\80á\80á\80¯ <strong>á\80\85á\80¬á\80\9cá\80¯á\80¶á\80¸á\80¡á\80\91á\80°</strong>ဖြင့် ပြထားသည်။",
"recentchangeslinked-page": "စာမျက်နှာ အမည် -",
"recentchangeslinked-to": "ပေးထားသော စာမျက်နှာများအစား လင့်များနှင့် ဆက်စပ်နေသာ စာမျက်နှာများ၏ အပြောင်းအလဲများကို ပြရန်",
"recentchanges-page-added-to-category": "ကဏ္ဍထဲသို့ [[:$1]] ကို ပေါင်းထည့်ခဲ့သည်",
"tag-filter": "[[Special:Tags|Tag]] သီးသန့်စစ်ထုတ်ရန် -",
"tag-filter-submit": "စိစစ်မှု",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|စာတွဲ|စာတွဲများ}}]]: $2)",
+ "tag-mw-new-redirect": "ပြန်ညွှန်းအသစ်",
+ "tag-mw-removed-redirect": "ပြန်ညွှန်းကို ဖယ်ရှားခဲ့သည်",
+ "tag-mw-changed-redirect-target": "ပြန်ညွှန်းကို ပြောင်းလဲခဲ့သည်",
+ "tag-mw-blank": "ဗလာပြုလုပ်ခြင်း",
+ "tag-mw-replace": "အစားထိုးခဲ့သည်",
+ "tag-mw-rollback": "နောက်ပြန် ပြန်ပြင်ခြင်း",
"tags-title": "အမည်တွဲ",
"tags-tag": "အမည်တွဲ အမည်",
"tags-active-yes": "မှန်",
"listusers": "Brukarliste",
"listusers-editsonly": "Vis berre brukarar med endringar",
"listusers-creationsort": "Sorter etter opprettingsdato",
+ "listusers-desc": "Sorter i minkande rekkjefylgd",
"usereditcount": "{{PLURAL:$1|éi endring|$1 endringar}}",
"usercreated": "{{GENDER:$3|Oppretta}} den $1 $2",
"newpages": "Nye sider",
"tag-filter": "[[Special:Tags|Merke]]filter:",
"tag-filter-submit": "Filtrer",
"tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merke}}]]: $2)",
+ "tag-mw-contentmodelchange": "endring av innhaldsmodell",
+ "tag-mw-removed-redirect": "Fjerna omdirigering",
+ "tag-mw-changed-redirect-target": "Omdirigeringsmål endra",
"tag-mw-changed-redirect-target-description": "Endringar som endrar målet til ei omdirigering",
"tag-mw-blank-description": "Endringar som tømmer ei side",
+ "tag-mw-replace": "Bytte ut",
"tag-mw-replace-description": "Endringar som fjernar meir enn 90 % av innhaldet på ei side",
"tag-mw-rollback": "Attenderulling",
"tags-title": "Merke",
"blankarticle": "<strong>خبرتیا:</strong> تاسو د یو خالي مخ جوړلو په حال کي ياست.\nکه «$1» دوهم ځلي کښي کاږي، نو مخ به د معلوماتو بغير جوړ سي.",
"anoneditwarning": "<strong>گواښنه:</strong> تاسې غونډال کې نه ياست ننوتي. که تاسې کوم سمونونه ترسره کوۍ نو ستاسې IP پته به ټولو ته د دې مخ د سمونونو په پېښليک کې ښکاري. که تاسې په خپل نوم <strong>[$1 کې ننوځئ]</strong> يا <strong>[$2 يو گڼون جوړ کړئ]</strong>، نو ستاسې سمونونه به ستاسې کارن-نوم اړونده ثبت شي چې ډېرې نورې گټې هم لري.",
"anonpreviewwarning": "''تاسې غونډال ته نه ياست ننوتي. خوندي کولو سره به ستاسې IP پته به د دې مخ د سمونونو په پېښليک کې ثبت شي.''",
- "missingsummary": "<strong>یادونه:</strong> تاسو د سمون لنډیز ندی چمتو کړی.\nکه تاسو \"$1\" ټک وکړئبیا به ستاسو بدلون پرته له دې چې يو وي خوندي شي.",
+ "missingsummary": "<strong>یادونه:</strong> تاسو د سمون لنډیز ندی چمتو کړی.\nکه تاسو \"$1\" کليک کړي نو بیا به ستاسو بدلون پرته له کوم انتظاره خوندي شي.",
"selfredirect": "<strong>خبرداری:</strong> تاسو دا پاڼه دپاڼي خپل مخ ته استوي.ښایي تاسو د ګرځولو لپاره ناسم هدف مشخص کړی وي، یا تاسو ممکن په غلطه پاڼه سمونه کوي.\nکه تاسو \"$1\" بيا کلیک کړي، د مخ ورګرځونه به په هر دليل جوړه شي.",
"missingcommenttext": "لطفاً کمينټ لاندې وليکۍ.",
- "missingcommentheader": "<strong>یادونه:</strong> تاسو د سمون لنډیز ندی چمتو کړی.\nکه تاسو \"$1\" ټک وکړئبیا به ستاسو بدلون پرته له دې چې يو وي خوندي شي.",
+ "missingcommentheader": "<strong>یادونه:</strong> تاسو د سمون لنډیز ندی چمتو کړی.\nکه تاسو \"$1\" کليک کړي نو بیا به ستاسو بدلون پرته له کوم انتظاره خوندي شي.",
"summary-preview": "د لنډيز مخليدنه:",
"subject-preview": "د پروژې بيا ليدنه:",
"previewerrortext": "د بدلونونو د مخليدنو په وخت کې مو يوه ستونزه رامېنځ ته شوه.",
"recreate-moveddeleted-warn": "'''گواښنه: تاسې د يوه داسې مخ بياجوړونه کوۍ کوم چې يو ځل پخوا ړنگ شوی وو.'''\n\nپکار ده چې تاسې په دې ځان پوه کړۍ چې ايا دا تاسې ته وړ ده چې د همدې مخ جوړول په پرله پسې توگه وکړۍ.\nستاسې د اسانتياوو لپاره د همدې مخ د ړنگېدلو يادښت هم ورکړ شوی:",
"moveddeleted-notice": "دا مخ ړنگ شوی.\nدلته لاندې ددې مخ د ړنگېدنې او لېږدېدنې ياداښت د سرچينې په توگه ورکړل شوی دي.",
"log-fulllog": "بشپړ يادښت کتل",
+ "edit-hook-aborted": "ړنګول د هوک په واسطه وتړل شو.\nدا نور هيڅ څرګندوني نه ورکوي.",
"edit-gone-missing": "د دې مخ اوسمهالول و نه کړای شول.\nداسې ښکاري چې دا مخ ړنگ شوی.",
"edit-conflict": "د سمولو خنډ",
"edit-no-change": "ستاسې سمون بابېزه وګڼل شو، دا ځکه چې تاسې په متن کې کوم بدلون نه دی راوستلی.",
"postedit-confirmation-saved": "ستاسې سمون خوندي شو.",
"edit-already-exists": "په دې نوم يو نوی مخ جوړ نه شو.\nپدې نوم د پخوا نه يو مخ شته.",
"defaultmessagetext": "تلواليزه پيغام متن",
+ "content-failed-to-parse": "په منځپانګې کې د ناسم کولو ناکامي $2 د موډل لپاره $1: $3",
"invalid-content-data": "د ناباوره منځپانګې ډاټا",
"content-not-allowed-here": "\"$1\" په پاڼه کې منځپانګې ته اجازه نشته [[$2]]",
"editpage-invalidcontentmodel-text": "د منځپانګې موډيول \"$1\" ملاتړ ندی شوی.",
"backend-fail-create": "د \"$1\" په دوتنه کې نور څه و نه ليکل شول.",
"zip-wrong-format": "ځانگړې شوې دوتنه يوه ZIP دوتنه نه وه.",
"uploadstash": "پورته کول سټش",
+ "uploadstash-clear": "پاک شوي دوتنې",
+ "uploadstash-nofiles": "تاسو جعلي فایلونه نلرئ.",
+ "uploadstash-badtoken": "د دې عمل تعقیب ناکام شو، شاید ممکن چې ستاسو د سمون اعتباري اسناد پای ته ورسیږي. مهرباني وکړئ بیا هڅه وکړئ.",
+ "uploadstash-errclear": "د دوتنو پاکول ناکام شول.",
"uploadstash-refresh": "د دوتنو لړليک بياتازه کول",
+ "uploadstash-thumbnail": "تڼۍ وګوره",
+ "uploadstash-exception": "د زیرمه د بار د ژغورلو توان نلري ($1): \"$2\".",
+ "uploadstash-bad-path": "نښان نشته",
+ "uploadstash-bad-path-invalid": "د پوست پېژند سم نه دی.",
"uploadstash-bad-path-unknown-type": "ناڅرگنده ډول \"$1\".",
+ "uploadstash-bad-path-unrecognized-thumb-name": "ناپیژندل شوی ګوته نوم.",
+ "uploadstash-bad-path-no-handler": "د $1 د ښکاره کولو لپار دوتنه $2 اجرایی وړ ونه موندل شي.",
+ "uploadstash-bad-path-bad-format": "کیلي \"$1\" په مناسبه بڼه نده.",
+ "uploadstash-file-not-found": "په \"$1\" کي فلش ونه موندل شو.",
+ "uploadstash-file-not-found-no-thumb": "تڼۍ ونه موندل شوه.",
+ "uploadstash-file-not-found-no-local-path": "د وړ شوي توکي لپاره محلي لاره نشته.",
+ "uploadstash-file-not-found-no-object": "د تاليف لپاره د ځایي دوتنې اعتراض نشي جوړولی.",
+ "uploadstash-file-not-found-no-remote-thumb": "د تڼۍ په ترلاسه کولو کې پاتې راغلي:$1\nنښاني= $2",
+ "uploadstash-file-not-found-missing-content-type": "ورک شوي مواد - د سرلیک ډول.",
+ "uploadstash-file-not-found-not-exists": "لاره نشي موندل کیدی، یا په یو ساده ډول دوتنه نشته.",
+ "uploadstash-file-too-large": "د $1 بټونو څخه لوړې دوتني نشي سرويس کولاي.",
+ "uploadstash-not-logged-in": "هیڅ کارن نه دی ننوتلي، دوتنې باید د کاروونکو سره تړاو ولري.",
+ "uploadstash-wrong-owner": "دا دوتنه ($1) په اوسني کارن پورې تړاو نلري.",
+ "uploadstash-no-such-key": "نه داسي هیڅ ډول کيلي ($1) نه شي لري کولی.",
+ "uploadstash-no-extension": "تمدید غټ دی.",
+ "uploadstash-zero-length": "دوتنه صفر اوږدوالی لري.",
+ "invalid-chunk-offset": "د ناباوره ټوټې ټکی",
"img-auth-accessdenied": "لاسرسی رد شو",
+ "img-auth-nopathinfo": "PATH_INFO موجود ندي.\nستا پالنګر د دې ارزښت ردولو لپاره ندی ټاکل شوی.\nدا کیدای شي د CGI او له مخې د img_auth ملاتړ وکړي.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization وګوري.",
"img-auth-nofile": "د $1 په نوم کومه دوتنه نشته.",
"img-auth-streaming": "سټريمينګ \"$1\".",
"http-invalid-url": "ناسم URL: $1",
"limitreport-cputime-value": "$1 {{PLURAL:$1|ثانيه|ثانيې}}",
"limitreport-walltime": "اصلي وخت کارېدنه",
"limitreport-walltime-value": "$1 {{PLURAL:$1|ثانيه|ثانيې}}",
+ "limitreport-ppvisitednodes": "د راتلونکو پروسس کوونکو شمیرې شمیرل شوي",
"limitreport-ppvisitednodes-value": "$1/$2",
+ "limitreport-ppgeneratednodes": "د پروسس کوونکو ګرنټيد شمیرل شوي",
"limitreport-ppgeneratednodes-value": "$1/$2",
+ "limitreport-postexpandincludesize": "د پوسټ پراخول داندازې په شمول",
"limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|بايټ|بايټونه}}",
+ "limitreport-templateargumentsize": "د کينډۍ د مسايلو کچه",
"limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|بايټ|بايټونه}}",
+ "limitreport-expansiondepth": "تر ټولو لوړه ژوره پراختیا",
"limitreport-expansiondepth-value": "$1/$2",
+ "limitreport-expensivefunctioncount": "د قیمتي پارسير فعالیت شمیرې",
"limitreport-expensivefunctioncount-value": "$1/$2",
"expandtemplates": "کينډۍ غځول",
+ "expand_templates_intro": "په دا ځانګړي مخ کي متن پاڼه ترلاسه کیږي کوم چي په ټول ډوله مخونو کي کارول کیږي دلته دا مخ بيا بیا وده کوي. د تحلیل دندو لکه <code><nowiki>{{</nowiki>#language:…}}</code> او متغیرونه لکه <code><nowiki>{{</nowiki>CURRENTDAY}}</code> هم سره نښلوي — په واقعیت کې، د ډلو دننه هر څه. دا خپله د ميډياويکي په اړونده مرحله کولو سره ترسره کيږي.",
+ "expand_templates_title": "د موزوع سرليک، د {{FULLPAGENAME}} لپاره او نور:",
"expand_templates_input": "ځايونکی متن:",
"expand_templates_output": "پايله",
+ "expand_templates_xml_output": "د ایکس ایم ایل محصول",
+ "expand_templates_html_output": "د روو ايچ ټي ام ال څخه وتلي",
"expand_templates_ok": "ښه",
"expand_templates_remove_comments": "تبصرې غورځول",
"expand_templates_remove_nowiki": "په پايلو کې د <nowiki> نښلنونه ځپل",
+ "expand_templates_generate_xml": "د ایکس ایم ایل پارسه وښیه",
"expand_templates_generate_rawhtml": "خام HTML ښکاره کول",
"expand_templates_preview": "مخليدنه",
+ "expand_templates_preview_fail_html": "<em>په دي دليل چي {{SITENAME}} اچټیامال خام فعال دي او د کارن حساب معلومات ورک شوي، شاته ښکارونه د جاوا سکرپټ د بریدونو په وړاندې د احتیاطي اندازې په توګه پټ دی.</em>\n\n<strong>که دا ښکارندويه تلاښ مشروع دي، هيله ده بیا هڅه وکړئ.</strong>\nکه تر اوسه هم کار نه کوي،سم يي کړي [[Special:UserLogout|د وتلو سیسټم]] بیا کلیک کړی او بيا ورننوځي، او ډاډه اوسي چې ستاسو براؤزر اجازه لري چې د دې سایټ څخه کوکیز ترلاسه کړي.",
+ "expand_templates_preview_fail_html_anon": "<em>په دي دليل چي {{SITENAME}} اچټیامال خام فعاله دي او د کارن معلومات له لاسه ورکړل شول، شاته ښکارونه د جاوا سکرپټ د بریدونو په وړاندې د احتیاطي اندازې په توګه پټ دی.</em>\n\n<strong>که دا ښکارندويه تلاښ مشروع دي، هيله ده [[Special:UserLogin|په سیسټم کې ننوځي]] او بیا تلاښ وکړئ.</strong>",
+ "expand_templates_input_missing": "تاسو اړتیا لرئ چي لږترلږه یو څه متن چمتو کړئ.",
"pagelanguage": "د مخ ژبه بدلول",
"pagelang-name": "مخ",
"pagelang-language": "ژبه",
"pagelang-reason": "سبب",
"pagelang-submit": "سپارل",
"pagelang-nonexistent-page": "د $1 په نوم کوم مخ نشته",
+ "pagelang-unchanged-language": "د $1 مخ د $2 ژبو لپاره ټاکل شوی دي.",
+ "pagelang-unchanged-language-default": "مخ $1 لا د ډیزاین ويکي د ژبې منځپانګې لپاره ټاکل شوی.",
+ "pagelang-db-failed": "ډاټابیس د پاڼې د ژبي په بدلولو کې پاتې راغلی.",
"right-pagelang": "د مخ ژبه بدلول",
"action-pagelang": "د مخ ژبه بدلول",
"log-name-pagelang": "د ژب بدلون يادښت",
+ "log-description-pagelang": "دا د پاڼو په ژبو کې د بدلونونو نښې دي.",
+ "logentry-pagelang-pagelang": "$1 ژبه $3 د $4 څخه و $5 ته {{GENDER:$2| بدله شوه}}",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (چارن)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ناچارن''')",
"mediastatistics": "د رسنيو شمار",
"mediastatistics-header-office": "دفتر",
"mediastatistics-header-text": "متني",
"mediastatistics-header-executable": "اجرايي",
+ "mediastatistics-header-archive": "کمپريزډ شوي پورمټونه",
"mediastatistics-header-total": "ټولې دوتنې",
+ "json-warn-trailing-comma": "$1 کوماوي په پاي کي جیسن {{PLURAL:$1|ړنګ شوی}}.",
+ "json-error-unknown": "د جي سن سره ستونزه وه. تېروتنه: $1",
+ "json-error-depth": "د ډیری لوړ ډیزاین ژوره ډیر شوی",
+ "json-error-state-mismatch": "ناسم یا خراب شوې جي سن",
+ "json-error-ctrl-char": "د کنټرول کرکټر تېروتنه، ښایي په ناسم ډول انډول شوی وي",
+ "json-error-syntax": "د سينټاکس تېروتنه",
+ "json-error-utf8": "ناسم يو ټي اپ وړونکي - ٨، شاید په ناسم ډول انډول شوی وي",
+ "json-error-recursion": "په ارزښت کې د یو یا ډیرو بیاپروسي حواله چې کوډ شوي وي",
+ "json-error-inf-or-nan": "مقنایر INF یا NAN یو یا ډیر وخت په مقدار کې",
+ "json-error-unsupported-type": "د هغه ډول ارزښت چې کوډ نشي کوالی",
"headline-anchor-title": "دې برخې ته تړنه",
"special-characters-group-latin": "لاتين",
"special-characters-group-latinextended": "غځېدلی لاتين",
"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": "غځېدلې عربي",
"special-characters-group-thai": "تايلنډي",
"special-characters-group-lao": "لاوي",
"special-characters-group-khmer": "خمري",
+ "special-characters-group-canadianaboriginal": "کاناډایان لومړی استوګنان",
+ "special-characters-title-endash": "د کرښې فاصله",
+ "special-characters-title-emdash": "ډډ شوی کرښه",
+ "special-characters-title-minus": "منفي نښه",
"mw-widgets-dateinput-no-date": "کومه نېټه نه ده ټاکل شوې",
"mw-widgets-dateinput-placeholder-day": "کککک-م م-و و",
"mw-widgets-dateinput-placeholder-month": "کککک-م م",
+ "mw-widgets-mediasearch-input-placeholder": "د رسنۍ پلټنه",
+ "mw-widgets-mediasearch-noresults": "پايلې و نه موندل شوې.",
"mw-widgets-titleinput-description-new-page": "تر اوسه پورې دا مخ نشته",
"mw-widgets-titleinput-description-redirect": "$1 ته ورگرځېدنه",
+ "mw-widgets-categoryselector-add-category-placeholder": "يوه وېشنيزه ورگډول...",
+ "mw-widgets-usersmultiselect-placeholder": "نور وراضافه کړئ ...",
"date-range-from": "د نیټې څخه:",
"date-range-to": "تر نيټې:",
+ "sessionmanager-tie": "تاسو ډیری ډول ډول تصدیقونه نشي نشر کولی: $1.",
+ "sessionprovider-generic": "$1 برخې",
+ "sessionprovider-mediawiki-session-cookiesessionprovider": "د کوکی پر بنسټ خپروني",
+ "sessionprovider-nocookies": "کوکیز ممکن معیوب شي. ډاډ ترلاسه کړئ چې تاسو کوکیز لرونکي يي او بیا پیل کوي.",
"randomrootpage": "د ناټاکلې ريښې مخ",
+ "log-action-filter-block": "د بنديز ډول:",
+ "log-action-filter-contentmodel": "د منځپانګې نومونې بدلول:",
+ "log-action-filter-delete": "د ړنګولو ډولː",
+ "log-action-filter-import": "د واردولو ډول:",
+ "log-action-filter-managetags": "د لیګ مدیریت ډول:",
+ "log-action-filter-move": "د ورګرځولو ډول:",
+ "log-action-filter-newusers": "د ګڼون جوړونې ډول:",
+ "log-action-filter-patrol": "د ګزمي ډول:",
+ "log-action-filter-protect": "د ژغورلو ډول:",
+ "log-action-filter-rights": "د حقوق بدلولو ډول:",
+ "log-action-filter-suppress": "د ماتوني ډول:",
+ "log-action-filter-upload": "د پورته کولو ډول:",
"log-action-filter-all": "ټول",
"log-action-filter-block-block": "بنديز لگول",
+ "log-action-filter-block-reblock": "د بنديز تعدیل",
"log-action-filter-block-unblock": "بنديز لرې کول",
+ "log-action-filter-contentmodel-change": "د منځپانګې او ماډل بدلول",
+ "log-action-filter-contentmodel-new": "د غیر وېشنيزي منځپانګې نمونې سره د پاڼې جوړول",
"log-action-filter-delete-delete": "مخ ړنګونه",
"log-action-filter-delete-delete_redir": "راګرځونه تکرار کړئ",
"log-action-filter-delete-restore": "مخ د ړنگېدو څخه راوګرځوي",
"log-action-filter-delete-event": "مخ ړنګونه",
"log-action-filter-delete-revision": "يواځې ړنگ شوي",
"log-action-filter-import-interwiki": "ټرانس ويکي واردول",
+ "log-action-filter-import-upload": "د ایکس ایم ایل اپلوډ لخوا وارد",
+ "log-action-filter-managetags-create": "مخ جوړونې",
+ "log-action-filter-managetags-delete": "مخ ړنګونه",
+ "log-action-filter-managetags-activate": "د ټيګ فعاليتونه",
+ "log-action-filter-managetags-deactivate": "د ټګ چلښت",
+ "log-action-filter-move-move": "د لارښوونې نه مخنیوی کول",
+ "log-action-filter-move-move_redir": "د لارښوونو د ګرځولو سره لاړ شئ",
+ "log-action-filter-newusers-create": "د نامعلوم کاروونکي لخوا جوړوني",
+ "log-action-filter-newusers-create2": "د ثبت شووطکاروونکي لخوا جوړوني",
+ "log-action-filter-newusers-autocreate": "خپلکاره جوړوني",
+ "log-action-filter-newusers-byemail": "د پټنوم رامینځته کول د بریښنالیک له لارې",
+ "log-action-filter-patrol-patrol": "لارښود ګزمې",
+ "log-action-filter-patrol-autopatrol": "اتومات ګزمې",
"log-action-filter-protect-protect": "ساتنه",
+ "log-action-filter-protect-modify": "د ژغورني تعدیل",
+ "log-action-filter-protect-unprotect": "ناساتنه",
+ "log-action-filter-protect-move_prot": "ژغورنه لري کول",
+ "log-action-filter-rights-rights": "لارښود بدلون",
+ "log-action-filter-rights-autopromote": "اتوماتیک بدلون",
+ "log-action-filter-suppress-event": "د ننوتلو فشار",
+ "log-action-filter-suppress-revision": "د بیاکتنې ماتول",
+ "log-action-filter-suppress-delete": "د پاڼې ماتول",
+ "log-action-filter-suppress-block": "د بلاک لخوا د کارن تاوان",
+ "log-action-filter-suppress-reblock": "د نابلاک لخوا د کارن تاوان",
+ "log-action-filter-upload-upload": "نوې پورته کونه",
"log-action-filter-upload-overwrite": "بيا پورته کول",
+ "authmanager-authn-not-in-progress": "تایید په پرمختګ کې ندي یا د ناستې ډاټا ورک شوی. لطفا د پیل څخه بیا شروع وکړئ.",
+ "authmanager-authn-no-primary": "ورکړل شوي اعتبارات نشی ورکول کیدی.",
+ "authmanager-authn-no-local-user": "ورکړل شوی اعتبارونه په دې ويکي د هیڅ کارن سره ندی تړلی.",
+ "authmanager-authn-no-local-user-link": "تاید شوي اعتبار باوري دي مګر په دې ويکي د هیڅ کارن سره ندی تړلی. په مختلفو لارو ننوتئ، یا یو نوی کارن جوړ کړئ، او تاسو به دا اختیار ولرئ چې خپل مخکیني سندونه د دې حساب ته لینک کړئ.",
+ "authmanager-authn-autocreate-failed": "د ايټو په ګڼون جوړولو کي ناکامه راغلي: $1",
+ "authmanager-change-not-supported": "ورکړل شوي اعتبارات نشي بدلیدای، ځکه چې هیڅ شی به یې دوی ونه کاروي.",
+ "authmanager-create-disabled": "د گڼون جوړول ناچارن شوی",
+ "authmanager-create-from-login": "د خپل حساب جوړولو لپاره، مهرباني وکړئ د کروندو ډک کړئ.",
+ "authmanager-create-not-in-progress": "تایید په پرمختګ کې ندي یا د ناستې ډاټا ورک شوی. لطفا د پیل څخه بیا شروع وکړئ.",
+ "authmanager-create-no-primary": "د ورکړل شوي کړني اعتبار نه شي کولی چي د حساب جوړولو لپاره وکارول شي.",
+ "authmanager-link-no-primary": "د ورکړل شوي تایید وړتیا د حساب کولو لپاره نه کارول کیدی.",
+ "authmanager-link-not-in-progress": "تایید په پرمختګ کې ندي یا د ناستې ډاټا ورک شوی. لطفا د پیل څخه بیا شروع وکړئ.",
+ "authmanager-authplugin-setpass-failed-title": "د پټنوم بدلون ترسره نشو",
+ "authmanager-authplugin-setpass-failed-message": "د تایید کولو پلگ ان د پاسورډ بدلون رد کړ.",
+ "authmanager-authplugin-create-fail": "د تایید کولو پلگ ان د حساب جوړولو انکار رد کړ.",
+ "authmanager-authplugin-setpass-denied": "د تاییدولو فلګن بدل شوي پټنوم اجازه نلري.",
"authmanager-authplugin-setpass-bad-domain": "ناباوره ډومین.",
+ "authmanager-autocreate-noperm": "د اتوماتيک حساب جوړولو جوړولو اجازه نشته.",
+ "authmanager-autocreate-exception": "د پخوانیو غلطیو له امله د اتوماتیک حساب ورکولو جوړول په عارضي ډول معیوب شوی.",
+ "authmanager-userdoesnotexist": "د \"$1\" گڼون نه دی ثبت شوی.",
+ "authmanager-userlogin-remembermypassword-help": "ایا پاسورډ باید د اوږدې مودې لپاره د ناستې د اوږدې مودې لپاره یاد وساتل شي.",
+ "authmanager-username-help": "د اعتبار لپاره کارن نوم",
+ "authmanager-password-help": "د اعتبار لپاره پټنوم.",
+ "authmanager-domain-help": "د بهرني اعتبار لپاره ډومین.",
+ "authmanager-retype-help": "د پټنوم بیا تاييدول.",
"authmanager-email-label": "برېښليک",
"authmanager-email-help": "برېښليک پته",
"authmanager-realname-label": "اصلي نوم",
"authmanager-realname-help": "د کارن اصلي نوم",
+ "authmanager-provider-password": "د اعتبار لپاره پټنوم.",
+ "authmanager-provider-password-domain": "د پټنوم او ډومین پر بنسټ اعتبار",
+ "authmanager-provider-temporarypassword": "لنډمهالی پټنوم",
+ "authprovider-confirmlink-message": "ستاسو د وروستي لاگ ان هڅو پر بنسټ، لاندې حسابونه د ستاسو د ويکي حساب سره تړلی کیدی شي. د دوی سره نښلول د دې حسابونو له لارې د لیګنګ کولو توان لري. مهرباني وکړئ هغه څوک وټاکئ کوم چې باید ورسره تړاو ولري.",
+ "authprovider-confirmlink-request-label": "هغه حسابونه چې ورسره تړاو لري",
+ "authprovider-confirmlink-success-line": "$1: په بریالیتوب سره لینک شو.",
+ "authprovider-confirmlink-failed": "د حساب لینکول په بشپړ ډول بریالي نه وو: $1",
+ "authprovider-confirmlink-ok-help": "د اړیکو د ناکام پیغامونو ښودلو وروسته دوام ومومئ.",
"authprovider-resetpass-skip-label": "تېرېدل",
+ "authprovider-resetpass-skip-help": "د پټنځی بیا سمول پریږده.",
+ "authform-nosession-login": "تصدیق بریالی شو، مګر ستاسو براؤزر ونشو کولی \"یاد وساتئ\".\n\n$1",
+ "authform-nosession-signup": "ګڼون جوړونه بریالی شوه، مګر ستاسو براؤزر ونشو کولی \"یاد وساتئ\".\n\n$1",
"authform-newtoken": "ورک شوې نښه. $1",
"authform-notoken": "نادرکه نښه",
"authform-wrongtoken": "ناسمه نښه",
"specialpage-securitylevel-not-allowed-title": "اجازه نسته",
+ "specialpage-securitylevel-not-allowed": "بخښنه غواړو، تاسو ته د دې پاڼې کارولو اجازه نه لرې ځکه چې ستا شناخت تایید نشو.",
+ "authpage-cannot-login": "د ننوتلو پیل کولو توان نلري.",
+ "authpage-cannot-login-continue": "د ننوتنې دوام نلري. ستاسو ناستې ډیری ممکن وخت نیسي.",
+ "authpage-cannot-create": "د ګڼون جوړولو پیل نشي کولی.",
+ "authpage-cannot-create-continue": "د حساب جوړول دوام ته پاتې دي. ستاسو ناستې ډیری دي ممکن به وخت نیسي.",
+ "authpage-cannot-link": "د حساب لینک کولو پیلولو توان نلري.",
+ "authpage-cannot-link-continue": "د ننوتنې دوام نلري. ستاسو ناستې ډیری ممکن وخت نیسي.",
"cannotauth-not-allowed-title": "د اجازې تفصيل",
+ "cannotauth-not-allowed": "تاسو د دې پاڼې کارولو اجازه نلري",
+ "changecredentials": "دبدلول اعتبارونه",
"changecredentials-submit": "بدلول",
+ "changecredentials-invalidsubpage": "$1 د ناسمو ډولونو اعتبار له مخې، دا د منلو وړ نه دی.",
+ "changecredentials-success": "ستاسو اعتبارونه بدل شوي.",
+ "removecredentials": "اعتبارونه غورځول",
"removecredentials-submit": "غورځول",
+ "removecredentials-invalidsubpage": "$1 د ناسمو ډولونو اعتبار له مخې، دا د منلو وړ نه دی.",
+ "removecredentials-success": "ستاسو اعتبارونه لري شوي.",
"credentialsform-provider": "د اعتبار وړ ډول:",
"credentialsform-account": "گڼون نوم:",
"cannotlink-no-provider-title": "دلته د منلو وړ حساب شتون نلري.",
"linkaccounts-submit": "لينک کڼوڼونه",
"unlinkaccounts": "ناخوښه ګڼونونه",
"unlinkaccounts-success": "ګڼون ناخوښه سو.",
+ "authenticationdatachange-ignored": "د اعتبار ډاټا بدل ندی. کیدای شي کوم برابرونکي ترتیب نه وي؟",
+ "userjsispublic": "لطفا په یاد ولرئ: جاوا سکریپ پاڼې کې باید محرم معلومات نه وي ځکه چې دوی د نورو کاروونکو لخوا لیدل کیږي.",
+ "usercssispublic": "لطفا په یاد ولرئ: د ثي اس اس فرعي صفحې باید محرم معلومات ونه لري ځکه چې دوی د نورو کاروونکو لخوا لیدل کیږي.",
"restrictionsfield-badip": "ناباوره آي پي آدرس او حدود د : $1",
"restrictionsfield-label": "اجازه ورکړل شوي آي پي حدودونه:",
+ "restrictionsfield-help": "په هر کرښه کې د اي پي پته یا د سینیر رینټ داخل کړئ. د هر شی فعالولو لپاره دا ارزښت وکاروئ: <code>0.0.0.0/0</code><br /><code>::/0</code>",
"revid": "بیاکتنه $1",
"pageid": "د مخ پېژند$1",
"rawhtml-notallowed": "لیبلونه <html> د منظمو ليکنو څخه بهر نشي کارول کیدی.",
"gotointerwiki-invalid": "ټاکل شوی سرلیک نامعلوم دی.",
"gotointerwiki-external": "تاسي د {{SITENAME}} د پريښودلو په حال کې یاست لیدلو لپاره [[$2]]، کوم یو جلا ویب پاڼه ده.\n\n'''[$1 دوام ورکونه و $1 ته]'''",
"undelete-cantedit": "تاسو دا مخ شيه ړنګولي ځکه چې تاسو د دا پامخ د سمون اجازه نه لرئ.",
+ "undelete-cantcreate": "تاسو دا پاڼه نشي ړنګولی ځکه چې د دې نوم سره هيڅ پاڼه شتون نلري او تاسو د دې مخ د جوړولو اجازه هم نلرئ.",
"pagedata-title": "د پاڼې ډاټا",
+ "pagedata-text": "دا پاڼه د پاڼو لپاره د ډاټا ګراف وړاندې کوي. مهرباني وکړئ د فرعي سرلیک نښې په کارولو سره د يو آر ال سرلیک چمتو کړئ.\n* د محتوا خبرې اترې د ستاسو د مراجعینو پر بنسټ د سرلیک قبولول دي. دا پدې مانا ده چې د پاڼې ډاټا به ستاسو د مراجعینو لخوا غوره شوي بڼه کې چمتو شي.",
"pagedata-not-acceptable": "د سمون نمونه ونه موندل شوه. ملاتړ شوي ميمي ډولونه: $1",
"pagedata-bad-title": "ناسم سرليک: $1"
}
"Mansil",
"Ngl2016",
"RadiX",
- "MokaAkashiyaPT"
+ "MokaAkashiyaPT",
+ "Athena in Wonderland"
]
},
"tog-underline": "Sublinhar hiperligações:",
"createaccountmail-help": "\nМожет использоваться, чтобы создать учетную запись для другого лица, не узнавая пароль.",
"createacct-realname": "Настоящее имя (необязательно)",
"createacct-reason": "Причина",
- "createacct-reason-ph": "Зачем вы создаёте другую учетную запись",
+ "createacct-reason-ph": "Зачем вы создаёте другую учётную запись",
"createacct-reason-help": "Сообщение, отображаемое в журнале создания учётных записей",
"createacct-submit": "Создать учётную запись",
"createacct-another-submit": "Создать учётную запись",
"tag-mw-changed-redirect-target-description": "Правки, которые изменяют цель перенаправления",
"tag-mw-blank": "Очистка",
"tag-mw-blank-description": "Правки, которые очищают страницу",
- "tag-mw-replace": "Ð\97аменено",
+ "tag-mw-replace": "заменено",
"tag-mw-replace-description": "Правки, которые удаляют более 90 % содержимого страницы",
"tag-mw-rollback": "откат",
"tag-mw-rollback-description": "Правки, которые откатывают предыдущие правки по нажатию ссылки отката",
"imgmultipagenext": "ၼႃႈလိၵ်ႈတေမႃး",
"imgmultigo": "ၵႂႃႇ!",
"imgmultigoto": "ၵႂႃႇၸူး ၼႃႈလိၵ်ႈ $1",
+ "autosumm-new": "ၵေႃႇသၢင်ႈၼႃႈလိၵ်ႈဝႆႉ တင်း \"$1\"",
"watchlistedit-normal-title": "မႄးထတ်း သဵၼ်ႈမၢႆပႂ်ႉတူၺ်း",
"watchlistedit-normal-legend": "ထွၼ်ပႅတ်ႈ ႁူဝ်ၶေႃႈ တမ်ႈတီႈ သဵၼ်ႈမၢႆမႂ်ႉတူၺ်း",
"watchlistedit-normal-submit": "ထွၼ်ပႅတ်ႈ ႁူဝ်ၶေႃႈ",
"timezoneregion-indian": "Indiska oceanen",
"timezoneregion-pacific": "Stilla havet",
"allowemail": "Låt andra användare skicka e-post till mig",
+ "email-allow-new-users-label": "Tillåt e-post från nyregistrerade användare",
"email-blacklist-label": "Förhindra följande användare att skicka e-post till mig:",
"prefs-searchoptions": "Sök",
"prefs-namespaces": "Namnrymder",
"page_last": "son",
"histlegend": "Fark seçimi: Karşılaştırmayı istediğiniz 2 sürümün önündeki daireleri işaretleyip, \"{{int:Compareselectedversions}}\" düğmesine basın.<br />\nTanımlar: '''({{int:cur}})''' = son revizyon ile arasındaki fark, '''({{int:last}})''' = bir önceki revizyon ile arasındaki fark, '''{{int:minoreditletter}}''' = küçük değişiklik.",
"history-fieldset-title": "Geçmişe gözat",
- "history-show-deleted": "Sadece silinenler",
+ "history-show-deleted": "Sadece silinen sürümler",
"histfirst": "en eski",
"histlast": "en yeni",
"historysize": "({{PLURAL:$1|1 bayt|$1 bayt}})",
"search-file-match": "(dosya içeriğiyle eşleşiyor)",
"search-suggest": "Bunu mu demek istediniz: $1",
"search-rewritten": "$1 için sonuçlar gösteriliyor. Bunun yerine $2 için arama yapılsın mı?",
- "search-interwiki-caption": "Kardeş projeler",
+ "search-interwiki-caption": "Kardeş projelerden sonuçlar",
"search-interwiki-default": "$1 sonuçları:",
"search-interwiki-more": "(daha çok)",
"search-interwiki-more-results": "daha fazla sonuç",
"prefs-editwatchlist-clear": "İzleme listenizi temizleyin",
"prefs-watchlist-days": "İzleme listesinde görüntülenecek gün sayısı:",
"prefs-watchlist-days-max": "en fazla $1 {{PLURAL:$1|gün|gün}}",
- "prefs-watchlist-edits": "Genişletilmiş izleme listesinde gösterilecek değişiklik sayısı:",
+ "prefs-watchlist-edits": "İzleme listesinde gösterilecek en fazla değişiklik sayısı:",
"prefs-watchlist-edits-max": "En fazla sayı: 1000",
"prefs-watchlist-token": "İzleme listesi anahtarı:",
"prefs-misc": "Diğer ayarlar",
"recentchanges-submit": "Göster",
"rcfilters-group-results-by-page": "Sayfalandırılmış grup sonuçları",
"rcfilters-activefilters": "Etkin süzgeçler",
+ "rcfilters-advancedfilters": "Gelişmiş süzgeçler",
+ "rcfilters-quickfilters": "Kaydedilmiş süzgeçler",
+ "rcfilters-quickfilters-placeholder-title": "Henüz hiçbir süzgeç kaydedilmedi",
+ "rcfilters-quickfilters-placeholder-description": "Süzgeç ayarlarınızı kaydetmek ve sonrasında bunları kullanmak için, aşağıda Aktif Süzgeçler alanındaki yer imi simgesine tıklayın.",
+ "rcfilters-savedqueries-defaultlabel": "Kaydedilmiş süzgeçler",
+ "rcfilters-savedqueries-rename": "Yeniden adlandır",
+ "rcfilters-savedqueries-setdefault": "Varsayılan olarak belirle",
+ "rcfilters-savedqueries-unsetdefault": "Varsayılan olmaktan çıkar",
+ "rcfilters-savedqueries-remove": "Kaldır",
+ "rcfilters-savedqueries-new-name-label": "Ad",
+ "rcfilters-savedqueries-new-name-placeholder": "Süzgecin amacını tanımlayın",
+ "rcfilters-savedqueries-apply-label": "Süzgeç oluştur",
+ "rcfilters-savedqueries-add-new-title": "Mevcut süzgeç ayarlarını kaydet",
"rcfilters-restore-default-filters": "Varsayılan süzgeçleri geri getir",
"rcfilters-clear-all-filters": "Tüm süzgeçleri temizle",
- "rcfilters-search-placeholder": "Son değişiklikleri filtrele (gözatın veya yazmaya başlayın)",
+ "rcfilters-show-new-changes": "Yeni değişiklikleri görüntüle",
+ "rcfilters-search-placeholder": "Son değişiklikleri filtrele (menüyü kullanın veya süzgeç adını arayın)",
"rcfilters-invalid-filter": "Geçersiz süzgeç",
"rcfilters-empty-filter": "Etkin süzgeç bulunmuyor. Tüm katkıları gösteriliyor.",
"rcfilters-filterlist-title": "Süzgeçler",
- "rcfilters-filterlist-whatsthis": "Bu nedir?",
- "rcfilters-filterlist-feedbacklink": "Yeni (beta) süzgeçler konusunda geribildirim verin",
+ "rcfilters-filterlist-whatsthis": "Bunlar nasıl çalışır?",
+ "rcfilters-filterlist-feedbacklink": "Bu (yeni) süzgeç araçları konusunda ne düşündüğünüzü bize aktarın",
"rcfilters-highlightbutton-title": "Sonuçları vurgula",
"rcfilters-highlightmenu-title": "Bir renk seçin",
"rcfilters-highlightmenu-help": "Bu özelliği vurgulamak için bir renk seçin",
"rcfilters-filterlist-noresults": "Süzgeç bulunamadı",
+ "rcfilters-noresults-conflict": "Hiçbir sonuç bulunamadı çünkü arama kriterleri çelişkili",
"rcfilters-filtergroup-authorship": "Düzenleme sahipliği",
"rcfilters-filter-editsbyself-label": "Senin değişiklikleriniz",
"rcfilters-filter-editsbyself-description": "Kendi katkılarınız.",
"rcfilters-filter-major-description": "Küçük olarak etiketlenmemiş düzenlemeler.",
"rcfilters-filtergroup-changetype": "Değişiklik türü",
"rcfilters-filter-pageedits-label": "Sayfa düzenlemeleri",
- "rcfilters-filter-pageedits-description": "Viki içeriği, tartışmalar, kategori açıklamalarındaki düzenlemeler....",
+ "rcfilters-filter-pageedits-description": "Viki içeriği, tartışmalar, kategori açıklamalarındaki düzenlemeler...",
"rcfilters-filter-newpages-label": "Sayfa oluşturmalar",
"rcfilters-filter-newpages-description": "Yeni sayfa oluşturan düzenlemeler.",
"rcfilters-filter-categorization-label": "Kategori değişiklikleri",
"rcfilters-filter-categorization-description": "Kategorilere eklenen veya kaldırılan sayfaların kayıtları.",
"rcfilters-filter-logactions-label": "Günlüğü tutulan işlemler",
- "rcfilters-filter-logactions-description": "Hizmetli işlemleri, hesap oluşturmalar, sayfa silmeler, yüklemeler....",
+ "rcfilters-filter-logactions-description": "Hizmetli işlemleri, hesap oluşturmalar, sayfa silmeler, yüklemeler...",
+ "rcfilters-liveupdates-button": "Canlı güncelleme",
+ "rcfilters-liveupdates-button-title-on": "Canlı güncellemeyi kapat",
+ "rcfilters-liveupdates-button-title-off": "Yeni değişiklikleri yapıldıkları anda görüntüleyin",
+ "rcfilters-watchlist-markseen-button": "Tüm değişiklileri görüldü olarak işaretle",
"rcnotefrom": "<strong>$3, $4</strong> tarihinden itibaren yapılan {{PLURAL:$5|değişiklik|değişiklik}} aşağıdadır (<strong>$1</strong> tarhine kadar olanlar gösterilmektedir).",
"rclistfrom": "$3 $2 tarihinden itibaren yeni değişiklikleri göster",
"rcshowhideminor": "Küçük değişiklikleri $1",
"recentchangeslinked-page": "Sayfa adı:",
"recentchangeslinked-to": "Belirtilen sayfadan verilenler yerine, sayfaya verilen bağlantıları göster.",
"recentchanges-page-added-to-category": "[[:$1]] kategoriye eklendi",
+ "recentchanges-page-removed-from-category": "[[:$1]] kategoriden çıkarıldı",
"upload": "Dosya yükle",
"uploadbtn": "Dosya yükle",
"reuploaddesc": "Yükleme formuna geri dön.",
"listfiles_size": "Boyut (bayt)",
"listfiles_description": "Tanım",
"listfiles_count": "Sürümler",
- "listfiles-show-all": "Görüntülerin eski sürümlerini içer",
+ "listfiles-show-all": "Dosyaların eski sürümlerini dahil et",
"listfiles-latestversion": "Geçerli sürüm",
"listfiles-latestversion-yes": "Evet",
"listfiles-latestversion-no": "Hayır",
"enotif_lastdiff": "Bu değişikliği görmek için, $1 sayfasına bakınız.",
"enotif_anon_editor": "anonim kullanıcı $1",
"enotif_body": "Sayın $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nEditörün girdiği özet: $PAGESUMMARY $PAGEMINOREDIT\n\nEditörün iletişim bilgileri:\ne-posta: $PAGEEDITOR_EMAIL\nviki: $PAGEEDITOR_WIKI\n\nBahsi geçen sayfayı oturum açarak ziyaret edinceye kadar sayfayla ilgili başka bildirim gönderilmeyecektir. Ayrıca izleme listenizdeki tüm sayfaların bildirim durumlarını sıfırlayabilirsiniz.\n\n{{SITENAME}} bildirim sistemi\n\n--\nE-posta bildirim ayarlarınızı değiştirmek için aşağıdaki sayfayı ziyaret ediniz:\n{{canonicalurl:{{#special:Preferences}}}}\n\nİzleme listesi ayarlarınızı değiştirmek için aşağıdaki sayfayı ziyaret ediniz:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nSayfayı izleme listenizden silmek için aşağıdaki sayfayı ziyaret ediniz:\n$UNWATCHURL\n\nGeri bildirim ve daha fazla yardım için:\n$HELPPAGE",
+ "enotif_minoredit": "Bu küçük bir değişiklik",
"created": "oluşturuldu",
"changed": "değiştirildi",
"deletepage": "Sayfayı sil",
"◌ֿ",
"ֿ"
],
+ [
+ "◌ֽ",
+ "ֽ"
+ ],
[
"◌׀",
"׀"
vertical-align: baseline;
/* Reset line-height; headings tend to have it set to larger values */
line-height: 1em;
- /* As .mw-editsection is a <span> (inline element), it is treated as part */
- /* of the heading content when selecting text by multiple clicks and thus */
- /* selected together with heading content, despite the user-select: none; */
- /* rule set above. This enforces non-selection without changing the look. */
- display: inline-block;
}
/* Correct directionality when page dir is different from site/user dir */
* Extracts information from the changes list DOM
*
* @param {jQuery} $root Root DOM to find children from
+ * @param {boolean} [statusCode] Server response status code
* @return {Object} Information about changes list
* @return {Object|string} return.changes Changes list, or 'NO_RESULTS' if there are no results
* (either normally or as an error)
* 'NO_RESULTS_TIMEOUT' for no results due to a timeout, or omitted for more than 0 results
* @return {jQuery} return.fieldset Fieldset
*/
- mw.rcfilters.Controller.prototype._extractChangesListInfo = function ( $root ) {
+ mw.rcfilters.Controller.prototype._extractChangesListInfo = function ( $root, statusCode ) {
var info,
$changesListContents = $root.find( '.mw-changeslist' ).first().contents(),
- areResults = !!$changesListContents.length;
+ areResults = !!$changesListContents.length,
+ checkForLogout = !areResults && statusCode === 200;
+
+ // We check if user logged out on different tab/browser or the session has expired.
+ // 205 status code returned from the server, which indicates that we need to reload the page
+ // is not usable on WL page, because we get redirected to login page, which gives 200 OK
+ // status code (if everything else goes well).
+ // Bug: T177717
+ if ( checkForLogout && !!$root.find( '#wpName1' ).length ) {
+ location.reload( false );
+ return;
+ }
info = {
changes: $changesListContents.length ? $changesListContents : 'NO_RESULTS',
}
this._checkForNewChanges()
- .then( function ( newChanges ) {
+ .then( function ( statusCode ) {
+ // no result is 204 with the 'peek' param
+ // logged out is 205
+ var newChanges = statusCode === 200;
+
if ( !this._shouldCheckForNewChanges() ) {
// by the time the response is received,
// it may not be appropriate anymore
return;
}
+ // 205 is the status code returned from server when user's logged in/out
+ // status is not matching while fetching live update changes.
+ // This works only on Recent Changes page. For WL, look _extractChangesListInfo.
+ // Bug: T177717
+ if ( statusCode === 205 ) {
+ location.reload( false );
+ return;
+ }
+
if ( newChanges ) {
if ( this.changesListModel.getLiveUpdate() ) {
return this.updateChangesList( null, this.LIVE_UPDATE );
var params = {
limit: 1,
peek: 1, // bypasses ChangesList specific UI
- from: this.changesListModel.getNextFrom()
+ from: this.changesListModel.getNextFrom(),
+ isAnon: mw.user.isAnon()
};
return this._queryChangesList( 'liveUpdate', params ).then(
function ( data ) {
- // no result is 204 with the 'peek' param
- return data.status === 200;
+ return data.status;
}
);
};
data ? data.content : ''
) ) );
- return this._extractChangesListInfo( $parsed );
+ return this._extractChangesListInfo( $parsed, data.status );
}.bind( this )
);
};
type: 'any_value',
title: '',
hidden: true,
- isSticky: false,
+ sticky: true,
filters: [
{
name: 'target',
type: 'boolean',
title: '',
hidden: true,
- isSticky: false,
+ sticky: true,
filters: [
{
name: 'showlinkedto',
public function meetsRequirements( $requirements ) {
foreach ( $requirements as $requirement ) {
switch ( $requirement['type'] ) {
- case 'hook':
- $ok = $this->requireHook( $requirement['name'] );
- break;
- case 'functionHook':
- $ok = $this->requireFunctionHook( $requirement['name'] );
- break;
- case 'transparentHook':
- $ok = $this->requireTransparentHook( $requirement['name'] );
- break;
+ case 'hook':
+ $ok = $this->requireHook( $requirement['name'] );
+ break;
+ case 'functionHook':
+ $ok = $this->requireFunctionHook( $requirement['name'] );
+ break;
+ case 'transparentHook':
+ $ok = $this->requireTransparentHook( $requirement['name'] );
+ break;
}
if ( !$ok ) {
return false;
if ( isset( $changes[$sectionName] ) ) {
$change = $changes[$sectionName];
switch ( $change['op'] ) {
- case 'rename':
- $test[$i]['name'] = $change['value'];
- $test[$i]['headingLine'] = "!! {$change['value']}";
- break;
- case 'update':
- $test[$i]['contents'] = $change['value'];
- break;
- case 'delete':
- $test[$i]['deleted'] = true;
- break;
- default:
- throw new Exception( "Unknown op: ${change['op']}" );
+ case 'rename':
+ $test[$i]['name'] = $change['value'];
+ $test[$i]['headingLine'] = "!! {$change['value']}";
+ break;
+ case 'update':
+ $test[$i]['contents'] = $change['value'];
+ break;
+ case 'delete':
+ $test[$i]['deleted'] = true;
+ break;
+ default:
+ throw new Exception( "Unknown op: ${change['op']}" );
}
// Acknowledge
// Note that we use the old section name for the rename op
'content' => new JavaScriptContent( 'hellow world.' )
],
];
+ // FIXME: test with and without user ID, and with a user object.
+ // We can't prepare that here though, since we don't yet have a dummy DB
+ }
+
+ /**
+ * @param string $model
+ * @return Title
+ */
+ public function getMockTitle( $model = CONTENT_MODEL_WIKITEXT ) {
+ $mock = $this->getMockBuilder( Title::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+ $mock->expects( $this->any() )
+ ->method( 'getNamespace' )
+ ->will( $this->returnValue( $this->getDefaultWikitextNS() ) );
+ $mock->expects( $this->any() )
+ ->method( 'getPrefixedText' )
+ ->will( $this->returnValue( 'RevisionTest' ) );
+ $mock->expects( $this->any() )
+ ->method( 'getDBKey' )
+ ->will( $this->returnValue( 'RevisionTest' ) );
+ $mock->expects( $this->any() )
+ ->method( 'getArticleID' )
+ ->will( $this->returnValue( 23 ) );
+ $mock->expects( $this->any() )
+ ->method( 'getModel' )
+ ->will( $this->returnValue( $model ) );
+
+ return $mock;
}
/**
$this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() );
}
+ /**
+ * @covers Revision::__construct
+ * @covers Revision::constructFromRowArray
+ */
+ public function testConstructFromEmptyArray() {
+ $rev = new Revision( [], 0, $this->getMockTitle() );
+ $this->assertNull( $rev->getContent(), 'no content object should be available' );
+ }
+
public function provideConstructFromArray_userSetAsExpected() {
yield 'no user defaults to wgUser' => [
[
new Revision( $rowArray );
}
+ /**
+ * @covers Revision::__construct
+ * @covers Revision::constructFromRowArray
+ */
+ public function testConstructFromNothing() {
+ $rev = new Revision( [] );
+ $this->assertNull( $rev->getId(), 'getId()' );
+ }
+
public function provideConstructFromRow() {
yield 'Full construction' => [
[
/**
* @dataProvider provideConstructFromRow
* @covers Revision::__construct
- * @covers Revision::constructFromDbRowObject
+ * @covers Revision::constructFromRowArray
*/
public function testConstructFromRow( array $arrayData, $assertions ) {
$row = (object)$arrayData;
private function provideAudienceCheckData( $field ) {
yield 'field accessible for oversighter (ALL)' => [
- Revisionrecord::SUPPRESSED_ALL,
+ RevisionRecord::SUPPRESSED_ALL,
[ 'oversight' ],
true,
false
];
yield 'field accessible for oversighter' => [
- Revisionrecord::DELETED_RESTRICTED | $field,
+ RevisionRecord::DELETED_RESTRICTED | $field,
[ 'oversight' ],
true,
false
];
yield 'field not accessible for sysops (ALL)' => [
- Revisionrecord::SUPPRESSED_ALL,
+ RevisionRecord::SUPPRESSED_ALL,
[ 'sysop' ],
false,
false
];
yield 'field not accessible for sysops' => [
- Revisionrecord::DELETED_RESTRICTED | $field,
+ RevisionRecord::DELETED_RESTRICTED | $field,
[ 'sysop' ],
false,
false
];
yield 'unrelated field suppressed' => [
- $field === Revisionrecord::DELETED_COMMENT
- ? Revisionrecord::DELETED_USER
- : Revisionrecord::DELETED_COMMENT,
+ $field === RevisionRecord::DELETED_COMMENT
+ ? RevisionRecord::DELETED_USER
+ : RevisionRecord::DELETED_COMMENT,
[ 'user' ],
true,
true
];
yield '(ISO-8859-1 encoding), string in string out' => [
'ISO-8859-1',
- iconv( 'utf8', 'ISO-8859-1', "1®Àþ1" ),
+ iconv( 'utf-8', 'ISO-8859-1', "1®Àþ1" ),
[],
'1®Àþ1',
];
yield '(ISO-8859-1 encoding), serialized object in with gzip flags returns string' => [
'ISO-8859-1',
- gzdeflate( iconv( 'utf8', 'ISO-8859-1', "4®Àþ4" ) ),
+ gzdeflate( iconv( 'utf-8', 'ISO-8859-1', "4®Àþ4" ) ),
[ 'gzip' ],
'4®Àþ4',
];
yield '(ISO-8859-1 encoding), serialized object in with object flags returns string' => [
'ISO-8859-1',
- serialize( new TitleValue( 0, iconv( 'utf8', 'ISO-8859-1', "3®Àþ3" ) ) ),
+ serialize( new TitleValue( 0, iconv( 'utf-8', 'ISO-8859-1', "3®Àþ3" ) ) ),
[ 'object' ],
'3®Àþ3',
];
yield '(ISO-8859-1 encoding), serialized object in with object & gzip flags returns string' => [
'ISO-8859-1',
- gzdeflate( serialize( new TitleValue( 0, iconv( 'utf8', 'ISO-8859-1', "2®Àþ2" ) ) ) ),
+ gzdeflate( serialize( new TitleValue( 0, iconv( 'utf-8', 'ISO-8859-1', "2®Àþ2" ) ) ) ),
[ 'gzip', 'object' ],
'2®Àþ2',
];
* @covers Job::factory
*/
public function testJobFactory( $handler ) {
- $this->mergeMWGlobalArrayValue( 'wgJobClasses', [ 'testdummy' => $handler ] );
+ $this->mergeMwGlobalArrayValue( 'wgJobClasses', [ 'testdummy' => $handler ] );
$job = Job::factory( 'testdummy', Title::newMainPage(), [] );
$this->assertInstanceOf( NullJob::class, $job );
public function testInsertOn_idSpecified() {
$title = Title::newFromText( __METHOD__ );
$page = new WikiPage( $title );
- $id = 3478952189;
+ $id = 1478952189;
$result = $page->insertOn( $this->db, $id );
public function testIllegalDependencies() {
$data = self::getAllModules();
- $illegalDeps = ResourceLoaderStartupModule::getStartupModules();
+ $illegalDeps = ResourceLoaderStartUpModule::getStartupModules();
foreach ( $data['modules'] as $moduleName => $module ) {
if ( $module->isRaw() ) {
$illegalDeps[] = $moduleName;