added to $wgExtraLanguageCodes instead.
* (T161453) LocalisationCache will no longer use the temporary directory in it's
fallback chain when trying to work out where to write the cache.
+* The user right 'editusercssjs' (deprecated in 1.16) was removed. Use
+ 'editusercss' and 'edituserjs' in $wgGroupPermissions and elsewhere instead.
=== New features in 1.29 ===
* (T5233) A cookie can now be set when a user is autoblocked, to track that user
* (T156184) $wgRawHtml will no longer apply to internationalization messages.
* Browser support for non-ES5 JavaScript browsers, including Android 2,
Opera <12.10, and Internet Explorer 9, was lowered from Grade A to Grade C.
+* Removed wikibits global methods deprecated since MediaWiki 1.17 (T122755):
+ is_gecko, is_chrome_mac, is_chrome, webkit_version, is_safari_win, is_safari,
+ webkit_match, is_ff2, ff2_bugs, is_ff2_win, is_ff2_x11, opera95_bugs,
+ opera7_bugs, opera6_bugs, is_opera_95, is_opera_preseven, is_opera,
+ ie6_bugs, clientPC, changeText, killEvt, addHandler, hookEvent,
+ addClickHandler, removeHandler, getElementsByClassName, getInnerText,
+ setupCheckboxShiftClick, addCheckboxClickHandlers, mwEditButtons,
+ mwCustomEditButtons, injectSpinner, removeSpinner, escapeQuotes,
+ escapeQuotesHTML, jsMsg, addPortletLink, appendCSS, tooltipAccessKeyPrefix,
+ tooltipAccessKeyRegexp, updateTooltipAccessKeys.
== Compatibility ==
MediaWiki 1.29 requires PHP 5.5.9 or later. There is experimental support for
HHVM 3.6.5 or later.
-MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
-support for them is somewhat less mature. There is experimental support for
+MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used,
+but support for them is somewhat less mature. There is experimental support for
Oracle and Microsoft SQL Server.
The supported versions are:
table, the schema update may take quite long (minutes on a medium sized site,
many hours on a large site).
-If upgrading from before 1.11, and you are using a wiki as a commons
-repository, make sure that it is updated as well. Otherwise, errors may arise
-due to database schema changes.
-
-If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
-new database fields are filled with data.
-
-If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to
-1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed
-with MediaWiki 1.21.
-
Don't forget to always back up your database before upgrading!
-See the file UPGRADE for more detailed upgrade instructions.
+See the file UPGRADE for more detailed upgrade instructions, including
+important information when upgrading from versions prior to 1.11.
For notes on 1.28.x and older releases, see HISTORY.
script. This will update the searchindex table for those pages that
contain double-byte latin characters.
+== Upgrading from 1.10 or earlier ==
+
+If upgrading from before 1.11, and you are using a wiki as a commons
+repository, make sure that it is updated as well. Otherwise, errors may arise
+due to database schema changes.
+
== Upgrading from 1.8 or earlier ==
MediaWiki 1.9 and later no longer keep default localized message text
$wgLocalTZoffset was in hours, it is now using minutes.
+If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
+new database fields are filled with data.
+
== Upgrading from 1.5 or earlier ==
Major changes have been made to the schema from 1.4.x. The updater
'upgrade1_5.php', can do this -- run it prior to 'update.php' or
the web upgrader.
-NOTE that upgrade1_5.php does not work properly with recent version
+NOTE that upgrade1_5.php does not work properly with recent versions
of MediaWiki. If upgrading a 1.4.x wiki, you should upgrade to 1.5
first. upgrade1_5.php has been removed from MediaWiki 1.21.
'SpecialAllPages' => __DIR__ . '/includes/specials/SpecialAllPages.php',
'SpecialApiHelp' => __DIR__ . '/includes/specials/SpecialApiHelp.php',
'SpecialApiSandbox' => __DIR__ . '/includes/specials/SpecialApiSandbox.php',
+ 'SpecialAutoblockList' => __DIR__ . '/includes/specials/SpecialAutoblockList.php',
'SpecialBlankpage' => __DIR__ . '/includes/specials/SpecialBlankpage.php',
'SpecialBlock' => __DIR__ . '/includes/specials/SpecialBlock.php',
'SpecialBlockList' => __DIR__ . '/includes/specials/SpecialBlockList.php',
"ext-xml": "*",
"liuggio/statsd-php-client": "1.0.18",
"mediawiki/at-ease": "1.1.0",
- "oojs/oojs-ui": "0.20.2",
+ "oojs/oojs-ui": "0.21.0",
"oyejorge/less.php": "1.7.0.14",
"php": ">=5.5.9",
"psr/log": "1.0.2",
$title: the Title of the rendered page.
$parserOutput: ParserOutput resulting from rendering the page.
+'OtherAutoblockLogLink': Get links to the autoblock log from extensions which
+autoblocks users and/or IP addresses too.
+&$otherBlockLink: An array with links to other autoblock logs
+
'OtherBlockLogLink': Get links to the block log from extensions which blocks
users and/or IP addresses too.
&$otherBlockLink: An array with links to other block logs
'class' => 'JobQueueAggregatorNull'
];
+/**
+ * Whether to include the number of jobs that are queued
+ * for the API's maxlag parameter.
+ * The total number of jobs will be divided by this to get an
+ * estimated second of maxlag. Typically bots backoff at maxlag=5,
+ * so setting this to the max number of jobs that should be in your
+ * queue divided by 5 should have the effect of stopping bots once
+ * that limit is hit.
+ *
+ * @since 1.29
+ */
+$wgJobQueueIncludeInMaxLagFactor = false;
+
/**
* Additional functions to be performed with updateSpecialPages.
* Expensive Querypages are already updated.
/** @var array Profiling data */
private $limitReportJSData = [];
+ /**
+ * Link: header contents
+ */
+ private $mLinkHeader = [];
+
/**
* Constructor for OutputPage. This should not be called directly.
* Instead a new RequestContext should be created and it will implicitly create
return 'Vary: ' . implode( ', ', array_keys( $this->mVaryHeader ) );
}
+ /**
+ * Add an HTTP Link: header
+ *
+ * @param string $header Header value
+ */
+ public function addLinkHeader( $header ) {
+ $this->mLinkHeader[] = $header;
+ }
+
+ /**
+ * Return a Link: header. Based on the values of $mLinkHeader.
+ *
+ * @return string
+ */
+ public function getLinkHeader() {
+ if ( !$this->mLinkHeader ) {
+ return false;
+ }
+
+ return 'Link: ' . implode( ',', $this->mLinkHeader );
+ }
+
/**
* Get a complete Key header
*
// jQuery etc. can work correctly.
$response->header( 'X-UA-Compatible: IE=Edge' );
+ $this->addLogoPreloadLinkHeaders();
+ $linkHeader = $this->getLinkHeader();
+ if ( $linkHeader ) {
+ $response->header( $linkHeader );
+ }
+
// Prevent framing, if requested
$frameOptions = $this->getFrameOptions();
if ( $frameOptions ) {
'mediawiki.widgets.styles',
] );
}
+
+ /**
+ * Add Link headers for preloading the wiki's logo.
+ *
+ * @since 1.26
+ */
+ protected function addLogoPreloadLinkHeaders() {
+ $logo = $this->getConfig()->get( 'Logo' ); // wgLogo
+ $logoHD = $this->getConfig()->get( 'LogoHD' ); // wgLogoHD
+
+ $tags = [];
+ $logosPerDppx = [];
+ $logos = [];
+
+ $logosPerDppx['1.0'] = $logo;
+
+ if ( !$logoHD ) {
+ // No media queries required if we only have one variant
+ $this->addLinkHeader( '<' . $logo . '>;rel=preload;as=image' );
+ return;
+ }
+
+ foreach ( $logoHD as $dppx => $src ) {
+ // Only 1.5x and 2x are supported
+ // Note: Keep in sync with ResourceLoaderSkinModule
+ if ( in_array( $dppx, [ '1.5x', '2x' ] ) ) {
+ // LogoHD uses a string in this format: "1.5x"
+ $dppx = substr( $dppx, 0, -1 );
+ $logosPerDppx[$dppx] = $src;
+ }
+ }
+
+ // Because PHP can't have floats as array keys
+ uksort( $logosPerDppx, function ( $a , $b ) {
+ $a = floatval( $a );
+ $b = floatval( $b );
+
+ if ( $a == $b ) {
+ return 0;
+ }
+ // Sort from smallest to largest (e.g. 1x, 1.5x, 2x)
+ return ( $a < $b ) ? -1 : 1;
+ } );
+
+ foreach ( $logosPerDppx as $dppx => $src ) {
+ $logos[] = [ 'dppx' => $dppx, 'src' => $src ];
+ }
+
+ $logosCount = count( $logos );
+ // Logic must match ResourceLoaderSkinModule:
+ // - 1x applies to resolution < 1.5dppx
+ // - 1.5x applies to resolution >= 1.5dppx && < 2dppx
+ // - 2x applies to resolution >= 2dppx
+ // Note that min-resolution and max-resolution are both inclusive.
+ for ( $i = 0; $i < $logosCount; $i++ ) {
+ if ( $i === 0 ) {
+ // Smallest dppx
+ // min-resolution is ">=" (larger than or equal to)
+ // "not min-resolution" is essentially "<"
+ $media_query = 'not all and (min-resolution: ' . $logos[ 1 ]['dppx'] . 'dppx)';
+ } elseif ( $i !== $logosCount - 1 ) {
+ // In between
+ // Media query expressions can only apply "not" to the entire expression
+ // (e.g. can't express ">= 1.5 and not >= 2).
+ // Workaround: Use <= 1.9999 in place of < 2.
+ $upper_bound = floatval( $logos[ $i + 1 ]['dppx'] ) - 0.000001;
+ $media_query = '(min-resolution: ' . $logos[ $i ]['dppx'] .
+ 'dppx) and (max-resolution: ' . $upper_bound . 'dppx)';
+ } else {
+ // Largest dppx
+ $media_query = '(min-resolution: ' . $logos[ $i ]['dppx'] . 'dppx)';
+ }
+
+ $this->addLinkHeader(
+ '<' . $logos[$i]['src'] . '>;rel=preload;as=image;media=' . $media_query
+ );
+ }
+ }
}
'rb' => $common,
'rp' => $common,
'rt' => $common, # array_merge( $common, array( 'rbspan' ) ),
- 'rtc' => $common,
+ 'rtc' => $common,
# MathML root element, where used for extensions
# 'title' may not be 100% valid here; it's XHTML
private function checkCSSandJSPermissions( $action, $user, $errors, $rigor, $short ) {
# Protect css/js subpages of user pages
# XXX: this might be better using restrictions
- # XXX: right 'editusercssjs' is deprecated, for backward compatibility only
- if ( $action != 'patrol' && !$user->isAllowed( 'editusercssjs' ) ) {
+ if ( $action != 'patrol' ) {
if ( preg_match( '/^' . preg_quote( $user->getName(), '/' ) . '\//', $this->mTextform ) ) {
if ( $this->isCssSubpage() && !$user->isAllowedAny( 'editmyusercss', 'editusercss' ) ) {
$errors[] = [ 'mycustomcssprotected', $action ];
}
/**
- * Whether the magic words __INDEX__ and __NOINDEX__ function for this page.
+ * Whether the magic words __INDEX__ and __NOINDEX__ function for this page.
*
* @return bool
*/
}
if ( array_key_exists( 'rcTypes', $options ) ) {
- $conds['rc_type'] = array_map( 'intval', $options['rcTypes'] );
+ $conds['rc_type'] = array_map( 'intval', $options['rcTypes'] );
}
$conds = array_merge(
}
if ( isset( $options['filter'] ) ) {
$filter = $options['filter'];
- if ( $filter === self::FILTER_CHANGED ) {
+ if ( $filter === self::FILTER_CHANGED ) {
$conds[] = 'wl_notificationtimestamp IS NOT NULL';
} else {
$conds[] = 'wl_notificationtimestamp IS NULL';
class WikiReference {
private $mCanonicalServer; ///< canonical server URL, e.g. 'https://www.mediawiki.org'
private $mServer; ///< server URL, may be protocol-relative, e.g. '//www.mediawiki.org'
- private $mPath; ///< path, '/wiki/$1'
+ private $mPath; ///< path, '/wiki/$1'
/**
* @param string $canonicalServer
return $module;
}
+ /**
+ * @return array
+ */
+ private function getMaxLag() {
+ $dbLag = MediaWikiServices::getInstance()->getDBLoadBalancer()->getMaxLag();
+ $lagInfo = [
+ 'host' => $dbLag[0],
+ 'lag' => $dbLag[1],
+ 'type' => 'db'
+ ];
+
+ $jobQueueLagFactor = $this->getConfig()->get( 'JobQueueIncludeInMaxLagFactor' );
+ if ( $jobQueueLagFactor ) {
+ // Turn total number of jobs into seconds by using the configured value
+ $totalJobs = array_sum( JobQueueGroup::singleton()->getQueueSizes() );
+ $jobQueueLag = $totalJobs / (float)$jobQueueLagFactor;
+ if ( $jobQueueLag > $lagInfo['lag'] ) {
+ $lagInfo = [
+ 'host' => wfHostname(), // XXX: Is there a better value that could be used?
+ 'lag' => $jobQueueLag,
+ 'type' => 'jobqueue',
+ 'jobs' => $totalJobs,
+ ];
+ }
+ }
+
+ return $lagInfo;
+ }
+
/**
* Check the max lag if necessary
* @param ApiBase $module Api module being used
protected function checkMaxLag( $module, $params ) {
if ( $module->shouldCheckMaxlag() && isset( $params['maxlag'] ) ) {
$maxLag = $params['maxlag'];
- list( $host, $lag ) = wfGetLB()->getMaxLag();
- if ( $lag > $maxLag ) {
+ $lagInfo = $this->getMaxLag();
+ if ( $lagInfo['lag'] > $maxLag ) {
$response = $this->getRequest()->response();
$response->header( 'Retry-After: ' . max( intval( $maxLag ), 5 ) );
- $response->header( 'X-Database-Lag: ' . intval( $lag ) );
+ $response->header( 'X-Database-Lag: ' . intval( $lagInfo['lag'] ) );
if ( $this->getConfig()->get( 'ShowHostnames' ) ) {
- $this->dieWithError( [ 'apierror-maxlag', $lag, $host ] );
+ $this->dieWithError(
+ [ 'apierror-maxlag', $lagInfo['lag'], $lagInfo['host'] ],
+ 'maxlag',
+ $lagInfo
+ );
}
- $this->dieWithError( [ 'apierror-maxlag-generic', $lag ], 'maxlag' );
+ $this->dieWithError( [ 'apierror-maxlag-generic', $lagInfo['lag'] ], 'maxlag', $lagInfo );
}
}
"apihelp-query+siteinfo-example-replag": "Vérifier la latence de réplication actuelle.",
"apihelp-query+stashimageinfo-description": "Renvoie les informations de fichier des fichiers mis en réserve.",
"apihelp-query+stashimageinfo-param-filekey": "Clé qui identifie un téléchargement précédent qui a été temporairement mis en réserve.",
- "apihelp-query+stashimageinfo-param-sessionkey": "Alias pour $1filekey, pour la compatibilité descendante.",
+ "apihelp-query+stashimageinfo-param-sessionkey": "Alias pour $1filekey, pour la compatibilité ascendante.",
"apihelp-query+stashimageinfo-example-simple": "Renvoie les informations sur un fichier mis en réserve.",
- "apihelp-query+stashimageinfo-example-params": "Renvoie les vignettes pour deux fichiers mis en réserve",
+ "apihelp-query+stashimageinfo-example-params": "Renvoie les vignettes pour deux fichiers mis de côté.",
"apihelp-query+tags-description": "Lister les balises de modification.",
"apihelp-query+tags-param-limit": "Le nombre maximal de balises à lister.",
"apihelp-query+tags-param-prop": "Quelles propriétés récupérer :",
"apihelp-query+tags-paramvalue-prop-description": "Ajoute la description de la balise.",
"apihelp-query+tags-paramvalue-prop-hitcount": "Ajoute le nombre de révisions et d’entrées du journal qui ont cette balise.",
"apihelp-query+tags-paramvalue-prop-defined": "Indique si la balise est définie.",
- "apihelp-query+tags-paramvalue-prop-source": "Obtient les sources de la balise, ce qui comprend <samp>extension</samp> pour les balises définies par une extension et <samp>manual</samp> pour les balises pouvant être appliquées manuellement par les utilisateurs.",
+ "apihelp-query+tags-paramvalue-prop-source": "Retourne les sources de la balise, ce qui comprend <samp>extension</samp> pour les balises définies par une extension et <samp>manual</samp> pour les balises pouvant être appliquées manuellement par les utilisateurs.",
"apihelp-query+tags-paramvalue-prop-active": "Si la balise est encore appliquée.",
"apihelp-query+tags-example-simple": "Lister les balises disponibles",
"apihelp-query+templates-description": "Renvoie toutes les pages incluses dans les pages fournies.",
$throttleKey = wfGlobalCacheKey( 'throttler', $this->type, $index, $ipKey, $userKey );
$throttleCount = $this->cache->get( $throttleKey );
- if ( !$throttleCount ) { // counter not started yet
+ if ( !$throttleCount ) { // counter not started yet
$this->cache->add( $throttleKey, 1, $expiry );
} elseif ( $throttleCount < $count ) { // throttle limited not yet reached
$this->cache->incr( $throttleKey );
'rc_logid' => 0,
'rc_log_type' => null,
'rc_log_action' => '',
- 'rc_params' => serialize( [
+ 'rc_params' => serialize( [
'hidden-cat' => WikiCategoryPage::factory( $categoryTitle )->isHidden()
] )
];
$deleteWheres = []; // list of WHERE clause arrays for each DB delete() call
if ( $table === 'pagelinks' || $table === 'templatelinks' || $table === 'iwlinks' ) {
- $baseKey = ( $table === 'iwlinks' ) ? 'iwl_prefix' : "{$prefix}_namespace";
+ $baseKey = ( $table === 'iwlinks' ) ? 'iwl_prefix' : "{$prefix}_namespace";
$curBatchSize = 0;
$curDeletionBatch = [];
$error = array_merge( [ $error['message'] ], $error['params'] );
}
}
- } elseif ( $elementsType === 'errors' ) {
+ } elseif ( $elementsType === 'errors' ) {
$errors = $elements;
if ( !is_array( $errors ) ) {
$errors = [ $errors ];
$this->parseHeader();
$this->setStatus();
- return Status::wrap( $this->status ); // TODO B/C; move this to callers
+ return Status::wrap( $this->status ); // TODO B/C; move this to callers
}
/**
"config-title": "Installazzione de MediaUicchi $1",
"config-information": "'Mbormaziune",
"config-localsettings-key": "Chiave de aggiornamende:",
- "config-localsettings-badkey": "'A chiave ca è date non g'è corrette.",
+ "config-localsettings-badkey": "'A chiave de aggiornamende ca è date non g'è corrette.",
"config-session-error": "Errore facenne accumenzà 'a sessione: $1",
"config-your-language": "'A lènga toje:",
"config-your-language-help": "Scacchie 'na lènghe da ausà duranne 'u processe de installazzione:",
"config-db-type": "Tipe de database:",
"config-db-host-oracle": "Database TNS:",
"config-db-name-oracle": "Scheme d'u database:",
+ "config-db-username": "Nome utende d'u database:",
+ "config-db-password": "Password d'u database:",
"config-db-port": "Porte d'u database:",
"config-db-schema": "Scheme pe MediaUicchi:",
"config-type-mysql": "MySQL (o combatibbile)",
}
}
- $value = $this->getCacheValue( wfMemcKey( $prefix ) );
+ $value = $this->getCacheValue( wfWikiID() . ':' . $prefix );
// Site level
if ( $value == '' && $this->interwikiScopes >= 3 ) {
$value = $this->getCacheValue( "_{$this->thisSite}:{$prefix}" );
* @since 1.26
*/
public function lazyPush( $jobs ) {
- if ( PHP_SAPI === 'cli' ) {
+ if ( PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg' ) {
$this->push( $jobs );
return;
}
$styles['all'][] = '.mw-wiki-logo { background-image: ' .
CSSMin::buildUrlValue( $logo1 ) .
'; }';
+ // Only 1.5x and 2x are supported
+ // Note: Keep in sync with OutputPage::addLogoPreloadLinkHeaders()
if ( $logoHD ) {
if ( isset( $logoHD['1.5x'] ) ) {
$styles[
},
'cssClassSuffix' => 'patrolled',
'isRowApplicableCallable' => function ( $ctx, $rc ) {
- return $rc->getAttribute( 'rc_patrolled' );
+ return $rc->getAttribute( 'rc_patrolled' );
},
],
[
},
'cssClassSuffix' => 'unpatrolled',
'isRowApplicableCallable' => function ( $ctx, $rc ) {
- return !$rc->getAttribute( 'rc_patrolled' );
+ return !$rc->getAttribute( 'rc_patrolled' );
},
],
],
&$tables, &$fields, &$conds, &$query_options, &$join_conds, $selectedExpLevels ) {
global $wgLearnerEdits,
- $wgExperiencedUserEdits,
- $wgLearnerMemberSince,
- $wgExperiencedUserMemberSince;
+ $wgExperiencedUserEdits,
+ $wgLearnerMemberSince,
+ $wgExperiencedUserMemberSince;
$LEVEL_COUNT = 3;
);
if ( $selectedExpLevels === [ 'newcomer' ] ) {
- $conds[] = "NOT ( $aboveNewcomer )";
+ $conds[] = "NOT ( $aboveNewcomer )";
} elseif ( $selectedExpLevels === [ 'learner' ] ) {
$conds[] = $dbr->makeList(
[ $aboveNewcomer, "NOT ( $aboveLearner )" ],
'Block' => 'SpecialBlock',
'Unblock' => 'SpecialUnblock',
'BlockList' => 'SpecialBlockList',
+ 'AutoblockList' => 'SpecialAutoblockList',
'ChangePassword' => 'SpecialChangePassword',
'BotPasswords' => 'SpecialBotPasswords',
'PasswordReset' => 'SpecialPasswordReset',
* @param bool $including Bool output is being captured for use in {{special:whatever}}
* @param LinkRenderer|null $linkRenderer (since 1.28)
*
- * @return bool
+ * @return bool|Title
*/
public static function executePath( Title &$title, IContextSource &$context, $including = false,
LinkRenderer $linkRenderer = null
--- /dev/null
+<?php
+/**
+ * Implements Special:AutoblockList
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * A special page that lists autoblocks
+ *
+ * @since 1.29
+ * @ingroup SpecialPage
+ */
+class SpecialAutoblockList extends SpecialPage {
+
+ function __construct() {
+ parent::__construct( 'AutoblockList' );
+ }
+
+ /**
+ * Main execution point
+ *
+ * @param string $par Title fragment
+ */
+ public function execute( $par ) {
+ $this->setHeaders();
+ $this->outputHeader();
+ $out = $this->getOutput();
+ $lang = $this->getLanguage();
+ $out->setPageTitle( $this->msg( 'autoblocklist' ) );
+ $this->addHelpLink( 'Autoblock' );
+ $out->addModuleStyles( [ 'mediawiki.special' ] );
+
+ # setup BlockListPager here to get the actual default Limit
+ $pager = $this->getBlockListPager();
+
+ # Just show the block list
+ $fields = [
+ 'Limit' => [
+ 'type' => 'limitselect',
+ 'label-message' => 'table_pager_limit_label',
+ 'options' => [
+ $lang->formatNum( 20 ) => 20,
+ $lang->formatNum( 50 ) => 50,
+ $lang->formatNum( 100 ) => 100,
+ $lang->formatNum( 250 ) => 250,
+ $lang->formatNum( 500 ) => 500,
+ ],
+ 'name' => 'limit',
+ 'default' => $pager->getLimit(),
+ ]
+ ];
+
+ $context = new DerivativeContext( $this->getContext() );
+ $context->setTitle( $this->getPageTitle() ); // Remove subpage
+ $form = HTMLForm::factory( 'ooui', $fields, $context );
+ $form->setMethod( 'get' )
+ ->setFormIdentifier( 'blocklist' )
+ ->setWrapperLegendMsg( 'autoblocklist-legend' )
+ ->setSubmitTextMsg( 'autoblocklist-submit' )
+ ->setSubmitProgressive()
+ ->prepareForm()
+ ->displayForm( false );
+
+ $this->showList( $pager );
+ }
+
+ /**
+ * Setup a new BlockListPager instance.
+ * @return BlockListPager
+ */
+ protected function getBlockListPager() {
+ $conds = [
+ 'ipb_parent_block_id IS NOT NULL'
+ ];
+ # Is the user allowed to see hidden blocks?
+ if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
+ $conds['ipb_deleted'] = 0;
+ }
+
+ return new BlockListPager( $this, $conds );
+ }
+
+ /**
+ * Show the list of blocked accounts matching the actual filter.
+ * @param BlockListPager $pager The BlockListPager instance for this page
+ */
+ protected function showList( BlockListPager $pager ) {
+ $out = $this->getOutput();
+
+ # Check for other blocks, i.e. global/tor blocks
+ $otherAutoblockLink = [];
+ Hooks::run( 'OtherAutoblockLogLink', [ &$otherAutoblockLink ] );
+
+ # Show additional header for the local block only when other blocks exists.
+ # Not necessary in a standard installation without such extensions enabled
+ if ( count( $otherAutoblockLink ) ) {
+ $out->addHTML(
+ Html::element( 'h2', [], $this->msg( 'autoblocklist-localblocks',
+ $pager->getNumRows() )->parse() )
+ . "\n"
+ );
+ }
+
+ if ( $pager->getNumRows() ) {
+ $out->addParserOutputContent( $pager->getFullOutput() );
+ } else {
+ $out->addWikiMsg( 'autoblocklist-empty' );
+ }
+
+ if ( count( $otherAutoblockLink ) ) {
+ $out->addHTML(
+ Html::rawElement(
+ 'h2',
+ [],
+ $this->msg( 'autoblocklist-otherblocks', count( $otherAutoblockLink ) )->parse()
+ ) . "\n"
+ );
+ $list = '';
+ foreach ( $otherAutoblockLink as $link ) {
+ $list .= Html::rawElement( 'li', [], $link ) . "\n";
+ }
+ $out->addHTML(
+ Html::rawElement(
+ 'ul',
+ [ 'class' => 'mw-autoblocklist-otherblocks' ],
+ $list
+ ) . "\n"
+ );
+ }
+ }
+
+ protected function getGroupName() {
+ return 'users';
+ }
+}
'text',
[
'id' => 'emailusertarget',
- 'class' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
+ 'class' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
'autofocus' => true,
'size' => 30,
]
*/
protected function transformFilterDefinition( array $filterDefinition ) {
if ( isset( $filterDefinition['showHideSuffix'] ) ) {
- $filterDefinition['showHide'] = 'wl' . $filterDefinition['showHideSuffix'];
+ $filterDefinition['showHide'] = 'wl' . $filterDefinition['showHideSuffix'];
}
return $filterDefinition;
'editmyuserjs',
'editmywatchlist',
'editsemiprotected',
- 'editusercssjs', # deprecated
'editusercss',
'edituserjs',
'hideuser',
"logentry-delete-delete_redir": "$1 {{GENDER:$2|выдаліў|выдаліла}} перанакіраваньне $3 шляхам перазапісу",
"logentry-delete-restore": "$1 {{GENDER:$2|аднавіў|аднавіла}} старонку $3 ($4)",
"logentry-delete-restore-nocount": "$1 {{GENDER:$2|аднавіў|аднавіла}} старонку $3",
+ "restore-count-revisions": "$1 {{PLURAL:$1|вэрсія|вэрсіі|вэрсіяў}}",
"logentry-delete-event": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|1=падзеі ў журнале|падзеяў у журнале}} на $3: $4",
"logentry-delete-revision": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|вэрсіі|вэрсіяў}} старонкі $3: $4",
"logentry-delete-event-legacy": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць падзеяў у журнале на $3",
"unblocked-id": "Sperr-ID $1 wurde freigegeben",
"unblocked-ip": "[[Special:Contributions/$1|$1]] wurde freigegeben.",
"blocklist": "Gesperrte Benutzer",
+ "autoblocklist": "Automatische Sperren",
+ "autoblocklist-submit": "Suchen",
+ "autoblocklist-legend": "Automatische Sperren auflisten",
+ "autoblocklist-localblocks": "Lokale automatische {{PLURAL:$1|Sperre|Sperren}}",
+ "autoblocklist-empty": "Die Liste der automatischen Sperren ist leer.",
+ "autoblocklist-otherblocks": "Andere automatische {{PLURAL:$1|Sperre|Sperren}}",
"ipblocklist": "Gesperrte Benutzer",
"ipblocklist-legend": "Suche nach einem gesperrten Benutzer",
"blocklist-userblocks": "Benutzersperren ausblenden",
"viewyourtext": "Na pela '''Vurnayışê ke kerdê''' re şıma şenê kopya kerê:",
"protectedinterface": "Na pela qandê nusnerin destegê verri dana u kes xırabin nêqero deye kerda kılit.",
"editinginterface": "'''İqaz:''' Şıma yew perra ke softwarei rê nuştey miyan-bestoği dana cı, aye vırnenê.\nVırnayışê ena perre do eno wiki sero asayışê miyan-bestoğê karberanê binan de bıaso.\n\nTadayışi (çarnayışi) rê , yardımê [https://translatewiki.net/wiki/Main_Page?setlang=diq translatewiki.net]i ra haydarê procêdoşkerdışi de vınderê.",
- "cascadeprotected": "No pel de vurnayiş qedexe biyo, çunke şıma tuşa \"kademeyın\" aqtif kerdo u no {{PLURAL:$1|pele|pelo}} pawıteyo de xebıtyeno:\n$2",
+ "cascadeprotected": "Ena perre vırnayışan rê akerde niya, çunke a {{PLURAL:$1|perre|perranê}} bınênan de zi yew be yew ravêrdeya, gırweniyena:\n$2",
"namespaceprotected": "No '''$1''' ca de icazetê şıma çino şıma pel rêz keri.",
- "customcssprotected": "Mısadeyê şıma çıniyo ke na pela CSSi bıvurnên, çıke na pela xısusiye eyaranê karberan muhtewa kena.",
- "customjsprotected": "Mısadeyê şıma çıniyo ke na pela Java Scripti bıvurnên, çıke na pela xısusiye eyaranê karberan muhtewa kena.",
+ "customcssprotected": "İzına şıma çıniya ke ena perra CSSi bıvırnên, çıke ena perra xısusiye eyaranê karberan gêna xo miyan.",
+ "customjsprotected": "İzına şıma çıniya ke ena perra Java Scripti bıvırnên, çıke ena perra xısusiye eyaranê karberan gêna xo miyan.",
"mycustomcssprotected": "Desturê şıma çıniyo ke na pela CSSi bıvurnê.",
"mycustomjsprotected": "Desturê şıma çıniyo ke na pela JavaScripti bıvurnê.",
"myprivateinfoprotected": "Ğısusi malumatana ğo timar kerdışire icazeta şıma çıniya.",
"right-editsemiprotected": "Edit pages protected as \"{{int:protect-level-autoconfirmed}}\"",
"right-editcontentmodel": "Edit the content model of a page",
"right-editinterface": "Edit the user interface",
- "right-editusercssjs": "Edit other users' CSS and JavaScript files",
"right-editusercss": "Edit other users' CSS files",
"right-edituserjs": "Edit other users' JavaScript files",
"right-editmyusercss": "Edit your own user CSS files",
"unblocked-id": "Block $1 has been removed.",
"unblocked-ip": "[[Special:Contributions/$1|$1]] has been unblocked.",
"blocklist": "Blocked users",
+ "autoblocklist": "Autoblocks",
+ "autoblocklist-submit": "Search",
+ "autoblocklist-legend": "List autoblocks",
+ "autoblocklist-localblocks": "Local {{PLURAL:$1|autoblock|autoblocks}}",
+ "autoblocklist-empty": "The autoblock list is empty.",
+ "autoblocklist-otherblocks": "Other {{PLURAL:$1|autoblock|autoblocks}}",
"ipblocklist": "Blocked users",
"ipblocklist-legend": "Find a blocked user",
"blocklist-userblocks": "Hide account blocks",
"saveusergroups": "Guardar grupos {{GENDER:$1|del usuario|de la usuaria}}",
"userrights-groupsmember": "Miembro de:",
"userrights-groupsmember-auto": "Miembro implícito de:",
- "userrights-groups-help": "Usted puede alterar los grupos en que está este usuario:\n* Una casilla marcada significa que el usuario está en ese grupo.\n* Una casilla sin marcar significa que el usuario no está en ese grupo.\n* Un * indica que no se puede eliminar el grupo una vez que se han añadido o viceversa.\n* Un # indica que sólo se puede volver a poner la fecha de caducidad de este grupo; no se pueden llevar adelante.",
+ "userrights-groups-help": "Puedes cambiar los grupos en que está este usuario:\n* Una casilla marcada significa que el usuario está en ese grupo.\n* Una casilla sin marcar significa que el usuario no está en ese grupo.\n* Un * indica que no se puede eliminar el grupo una vez que se ha añadido o viceversa.\n* Un # indica que sólo se puede volver a poner la fecha de caducidad de membresía de este grupo; no se pueden llevar adelante.",
"userrights-reason": "Motivo:",
"userrights-no-interwiki": "No tienes permiso para editar permisos de usuario en otros wikis.",
"userrights-nodatabase": "La base de datos $1 no existe o no es local.",
"htmlform-user-not-valid": "<strong>$1</strong> no es un nombre de usuario válido.",
"logentry-delete-delete": "$1 {{GENDER:$2|borró}} la página $3",
"logentry-delete-delete_redir": "$1 {{GENDER:$2|borró}} la redirección $3 con un traslado",
- "logentry-delete-restore": "$1 restauró la página $3",
+ "logentry-delete-restore": "$1 {{GENDER:$2|restauró}} la página $3 ($4)",
+ "logentry-delete-restore-nocount": "$1 {{GENDER:$2|restauró}} la página $3",
+ "restore-count-revisions": "{{PLURAL:$1|1 revisión|$1 revisiones}}",
+ "restore-count-files": "{{PLURAL:$1|1 archivo|$1 archivos}}",
"logentry-delete-event": "$1 {{GENDER:$2|modificó}} la visibilidad de {{PLURAL:$5|un evento|$5 eventos}} del registro en $3: $4",
"logentry-delete-revision": "$1 {{GENDER:$2|modificó}} la visibilidad de {{PLURAL:$5|una revisión |$5 revisiones}} en la página $3: $4",
"logentry-delete-event-legacy": "$1 ha {{GENDER:$2|cambiado}} la visibilidad de eventos del registro en $3",
"restrictionsfield-label": "Intervalos de IP permitidos:",
"restrictionsfield-help": "Una dirección IP o intervalo de CIDR por renglón. Para activarlo todo, utiliza <pre>0.0.0.0/0\n::/0</pre>",
"revid": "revisión $1",
- "pageid": "ID de página $1"
+ "pageid": "ID de página $1",
+ "gotointerwiki": "Salir de {{SITENAME}}",
+ "gotointerwiki-invalid": "El título especificado no es válido."
}
"undeleteviewlink": "ikusi",
"undeleteinvert": "Alderanztu aukera",
"undeletecomment": "Arrazoia:",
- "undeletedrevisions": "{{PLURAL:$1|Berrikuspen 1 leheneratu da|$1 berrikuspen leheneratu dira}}",
- "undeletedrevisions-files": "{{PLURAL:$1|berrikuspen|berrikuspen}} eta {{PLURAL:$2|fitxategi|fitxategi}} leheneratu dira",
- "undeletedfiles": "{{PLURAL:$1|fitxategi|fitxategi}} leheneratu dira",
"cannotundelete": "Ezabatutako birgaitze betean edo hainbatetan akatsa: $1",
"undeletedpage": "'''«$1» leheneratu da'''\n\nAzken ezabatze eta leheneratzeak ikusteko, jo ezazu [[Special:Log/delete|ezabaketa erregistrora]].",
"undelete-header": "Berriki ezabatutako orriak ikusteko, jo ezazu [[Special:Log/delete|ezabaketa erregistrora]].",
"htmlform-user-not-valid": "<strong>$1</strong> erabiltzaile izena ezin da erabili.",
"logentry-delete-delete": "$1 {{GENDER:$2|wikilariak}} «$3» orria ezabatu du",
"logentry-delete-restore": "$1 administratzaileak «$3» orria {{GENDER:$2|lehengoratu}} du",
- "logentry-delete-event": "$1 wikilariak ikusgaitasuna {{{{GENDER:$2|}}|aldatu}} {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerari}}, $3 orrian: $4",
+ "logentry-delete-event": "$1 wikilariak ikusgaitasuna {{GENDER:$2|aldatu}} {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerari}}, $3 orrian: $4",
"logentry-delete-revision": "$1 erabiltzaileak {{PLURAL:$5|berrikuste baten|$5 berrikusteren}} ikusgaitasuna aldatu du «$3» orrian: $4",
- "logentry-suppress-delete": "$1 erabiltzaileak $3 orrialdea {{GENDER:$2|ezabatu}} du",
+ "logentry-suppress-delete": "$1 erabiltzaileak $3 orria {{GENDER:$2|ezabatu}} du",
"logentry-suppress-event": "$1 wikilariak ezkutuan ikusgaitasuna aldatu {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerari}}, «$3» orrian: $4",
"revdelete-content-hid": "edukia ezkutatu da",
"revdelete-summary-hid": "edizioaren laburpena ezkutatu da",
"expansion-depth-exceeded-category": "Pages dépassant la profondeur d'expansion maximale",
"expansion-depth-exceeded-category-desc": "La page dépasse la profondeur d’expansion maximale.",
"expansion-depth-exceeded-warning": "Page dépassant la profondeur d’expansion maximale",
- "parser-unstrip-loop-warning": "Boucle non démontable détectée",
- "parser-unstrip-recursion-limit": "Limite de récursion non démontable dépassée ($1)",
+ "parser-unstrip-loop-warning": "Boucle non dépilable détectée",
+ "parser-unstrip-recursion-limit": "Limite de récursion non dépilable dépassée ($1)",
"converter-manual-rule-error": "Erreur détectée dans la règle manuelle de conversion de langue",
"undo-success": "Cette modification va être annulée.\nVeuillez vérifier les différences ci-dessous, puis publier l’annulation si c’est bien ce que vous voulez faire.",
"undo-failure": "Cette modification ne peut pas être défaite : cela entrerait en conflit avec les modifications intermédiaires.",
"rcfilters-filter-humans-description": "Modifications faites par des éditeurs humains.",
"rcfilters-filtergroup-reviewstatus": "Etat de révision",
"rcfilters-filter-patrolled-label": "Patrouillé",
- "rcfilters-filter-patrolled-description": "Modifications marquées comme patrouillées.",
- "rcfilters-filter-unpatrolled-label": "Non patrouillé",
- "rcfilters-filter-unpatrolled-description": "Modifications non marquées comme patrouillées.",
+ "rcfilters-filter-patrolled-description": "Modifications marquées comme relues.",
+ "rcfilters-filter-unpatrolled-label": "Non relu",
+ "rcfilters-filter-unpatrolled-description": "Modifications non marquées comme étant relues.",
"rcfilters-filtergroup-significance": "Signification",
"rcfilters-filter-minor-label": "Modifications mineures",
"rcfilters-filter-minor-description": "Modifications que l’auteur a marquées comme mineures.",
"Gothicspeaker"
]
},
+ "tog-previewontop": "𐌰𐌽𐌳𐌷𐌿𐌻𐌴𐌹 𐍆𐌰𐌿𐍂𐌰𐍃𐌹𐌿𐌽 𐍆𐌰𐌿𐍂𐌰 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌰𐍂𐌺𐌰",
"tog-previewonfirst": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹 𐍆𐌰𐌿𐍂𐌰𐍃𐌹𐌿𐌽 𐌰𐍄 𐍆𐍂𐌿𐌼𐌹𐍃𐍄𐌰 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽",
+ "tog-enotifusertalkpages": "𐍃𐌰𐌽𐌳𐌴𐌹 𐌼𐌹𐌺 𐌴-𐌱𐍉𐌺𐍉𐍃 𐌾𐌰𐌱𐌰𐌹 𐌼𐌴𐌹𐌽𐍃 𐌻𐌰𐌿𐍆𐍃 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌹𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌳𐌰",
+ "tog-shownumberswatching": "𐌰𐌽𐌳𐌷𐌿𐌻𐌴𐌹 𐍂𐌰𐌸𐌾𐍉𐌽 𐍅𐌹𐍄𐌰𐌽𐌳𐌰𐌹𐌶𐌴 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌴",
+ "tog-oldsig": "𐌸𐌴𐌹𐌽𐌰 𐍅𐌹𐍃𐌰𐌽𐌳𐌴𐌹 𐌿𐍆𐌼𐌴𐌻𐌴𐌹𐌽𐍃",
"underline-always": "𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉",
"underline-never": "𐌽𐌹 𐌰𐌹𐍅",
"sunday": "𐌰𐍆𐌰𐍂𐍃𐌰𐌱𐌱𐌰𐍄𐍉",
"badtitle": "𐌿𐌽𐍂𐌰𐌹𐌷𐍄𐌰𐍄𐌰 𐌿𐍆𐌰𐍂𐌼𐌴𐌻𐌹",
"badtitletext": "𐍆𐍂𐌰𐌹𐌷𐌰𐌽𐍃 𐌻𐌰𐌿𐍆𐍃 𐍅𐌰𐍃 𐌿𐌽𐌲𐌰𐌼𐌰𐌲𐌰𐌽𐌳𐍃, 𐌻𐌰𐌿𐍃, 𐌰𐌹𐌸𐌸𐌰𐌿 𐌿𐌽𐍂𐌰𐌹𐌷𐍄𐌰𐌱𐌰 𐌲𐌰𐍅𐌹𐌳𐌰𐌽𐍃 𐌼𐌹𐌸𐍂𐌰𐌶𐌳𐌰 𐌸𐌰𐌿 𐌼𐌹𐌸-𐍅𐌹𐌺𐌹 𐌿𐍆𐌰𐍂𐌼𐌴𐌻𐌹. 𐌼𐌰𐌲𐌹 𐌷𐌰𐌱𐌰𐌽 𐌰𐌹𐌽𐌰 𐌸𐌰𐌿 𐌼𐌰𐌽𐌰𐌲𐌹𐌶𐍉𐍃 𐌱𐍉𐌺𐍉𐍃 𐌱𐍂𐌿𐌺𐌹𐌳𐍉𐍃 𐌹𐌽 𐌿𐍆𐌰𐍂𐌼𐌴𐌻𐌾𐌰𐌼.",
"viewsource": "𐍃𐌰𐌹𐍈 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
+ "protectedpagetext": "𐍃𐌰 𐌻𐌰𐌿𐍆𐍃 𐌷𐌰𐌱𐌰𐌹𐌸 𐌼𐌿𐌽𐌳, 𐌴𐌹 𐌽𐌹 𐍅𐌰𐌹𐍂𐌸𐌴𐌹𐌽𐌰 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃 𐌸𐌰𐌿 𐌰𐌽𐌸𐌰𐍂𐍉𐍃 𐍅𐌰𐌹𐌷𐍄𐍃 𐌹𐌽 𐌸𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰",
"mycustomjsprotected": "𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐍃 𐌰𐌽𐌳𐌻𐌴𐍄 𐌳𐌿 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌸𐌰𐌽𐌰 JavaScript 𐌻𐌰𐌿𐍆.",
"yourname": "𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽𐌰𐌼𐍉:",
"userlogin-yourname": "𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽𐌰𐌼𐍉",
"cannotloginnow-title": "𐌽𐌿 𐌽𐌹 𐌼𐌰𐌲𐍄 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽",
"login": "𐌰𐍄𐌲𐌰𐌲𐌲",
"nav-login-createaccount": "𐌰𐍄𐌲𐌰𐌲𐌲 / 𐍃𐌺𐌰𐍀𐌴𐌹 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽",
- "userlogin": "𐌰𐍄𐌲𐌰𐌲𐌲 / 𐍃𐌺𐌰𐍀𐌴𐌹 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽",
- "userloginnocreate": "𐌰𐍄𐌲𐌰𐌲𐌲",
"logout": "𐌰𐍆𐌻𐌴𐌹𐌸",
"userlogout": "𐌰𐍆𐌻𐌴𐌹𐌸",
"userlogin-noaccount": "𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐍃 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽?",
"userlogin-joinproject": "𐌲𐌰𐌳𐌰𐌹𐌻𐌴𐌹 𐌹𐌽 𐌽𐌰𐍄𐌾𐌰𐍃𐍄𐌰𐌳𐌰 {{SITENAME}}",
- "nologinlink": "𐍃𐌺𐌰𐍀𐌴𐌹 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽",
"createaccount": "𐍃𐌺𐌰𐍀𐌴𐌹 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽",
- "gotaccount": "𐌾𐌿 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽 𐌷𐌰𐌱𐌰𐌹𐍃? $1.",
- "gotaccountlink": "𐌰𐍄𐌲𐌰𐌲𐌲",
"userlogin-resetpassword-link": "𐌿𐍆𐌰𐍂𐌼𐌿𐌽𐌽𐍉𐌳𐌴𐍃 𐌸𐌴𐌹𐌽𐌰𐌼𐌼𐌰 𐌲𐌰𐌼𐍉𐍄𐌰𐍅𐌰𐌿𐍂𐌳𐌰?",
"userlogin-helplink2": "𐌷𐌹𐌻𐍀𐌰 𐌼𐌹𐌸 𐌰𐍄𐌲𐌰𐌲𐌲𐌰",
"createacct-emailoptional": "𐌴-𐌱𐍉𐌺𐍉𐍃 (𐌼𐌰𐌷𐍄𐌴𐌹𐌲𐍉𐍃)",
"createacct-email-ph": "𐌼𐌴𐌻𐌴𐌹 𐌸𐌴𐌹𐌽𐍉𐍃 𐌴-𐌱𐍉𐌺𐍉𐍃",
- "createaccountreason": "𐌲𐍂𐌿𐌽𐌳𐌿𐍃:",
"createacct-reason": "𐌲𐍂𐌿𐌽𐌳𐌿𐍃",
"createacct-submit": "𐍃𐌺𐌰𐍀𐌴𐌹 𐌸𐌴𐌹𐌽𐌰 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽",
"createacct-benefit-heading": "{{SITENAME}} 𐍄𐌰𐍅𐌹𐌸 𐌹𐍃𐍄 𐍆𐍂𐌰𐌼 𐌼𐌰𐌽𐌽𐌰𐌼 𐍃𐍅𐌴 𐌸𐌿𐌺.",
"minoredit": "𐌸𐌰𐍄𐌰 𐌹𐍃𐍄 𐌼𐌹𐌽𐌽𐌹𐌶𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
"watchthis": "𐌰𐍄𐍅𐌹𐍄 𐌻𐌰𐌿𐌱𐌰",
"savearticle": "𐌲𐌰𐍆𐌰𐍃𐍄 𐌻𐌰𐌿𐍆",
+ "publishpage": "𐌼𐌴𐍂𐌴𐌹 𐌻𐌰𐌿𐍆",
"preview": "𐍆𐌰𐌿𐍂𐌰𐍃𐌹𐌿𐌽𐍃",
"showpreview": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹 𐍆𐌰𐌿𐍂𐌰𐍃𐌹𐌿𐌽",
"showdiff": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌹𐌽𐌹𐌽𐍃",
"unblocked-id": "חסימה מספר $1 שוחררה.",
"unblocked-ip": "[[Special:Contributions/$1|$1]] שוחררה מחסימתה.",
"blocklist": "משתמשים חסומים",
+ "autoblocklist": "חסימות אוטומטיות",
+ "autoblocklist-submit": "חיפוש",
+ "autoblocklist-legend": "רשימת חסימות אוטומטיות",
+ "autoblocklist-localblocks": "{{PLURAL:$1|חסימה אוטומטית מקומית|חסימות אוטומטיות מקומיות}}",
+ "autoblocklist-empty": "רשימת החסימות האוטומטיות ריקה.",
+ "autoblocklist-otherblocks": "{{PLURAL:$1|חסימה אוטומטית אחרת|חסימות אוטומטיות אחרות}}",
"ipblocklist": "משתמשים חסומים",
"ipblocklist-legend": "מציאת משתמש חסום",
"blocklist-userblocks": "הסתרת חסימות של משתמשים רשומים",
"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-create-disabled": "खाता निर्माण निष्क्रिय है।",
"tog-enotifwatchlistpages": "Esuratannak no mabaliwan ti panid wenno ti papeles iti listaan dagiti bambantayak",
"tog-enotifusertalkpages": "Esuratannak no mabaliwan ti panid ti tungtungak",
"tog-enotifminoredits": "Esuratannak pay para kadagiti bassit a panagurnos kadagiti panid ken papeles",
- "tog-enotifrevealaddr": "Iparang ti pagtaengan ti esuratko iti panagipakaaammo kadagiti esurat",
+ "tog-enotifrevealaddr": "Iparang ti adres ti esuratko iti panagipakaaammo kadagiti esurat",
"tog-shownumberswatching": "Ipakita ti bilang dagiti agbuybuya nga agar-aramat",
"tog-oldsig": "Ti adda a pirmam:",
"tog-fancysig": "Tratuen ti pirma a kas wikitext (awanan iti automatiko a silpo)",
"returnto": "Agsubli iti $1.",
"tagline": "Manipud iti {{SITENAME}}",
"help": "Tulong",
- "search": "Biruken",
+ "search": "Agbiruk",
"search-ignored-headings": " #<!-- saan a kutkutien daytoy a linia --> <pre>\n# Dagiti paulo a saanto nga ikaskaso babaen ti panagbiruk.\n# Dagiti panagbalbaliw mabalinton intono ti panid nga addaan ti paulo ket maipasurotan.\n# Mabalinmo a piliten ti panangisurot manen iti panid babaen ti awan linaon a panagurnos.\n# Ti eskritu ket kasla dagiti sumaganad:\n# * Amin manipud ti karater ti \"#\" aginggana ti gibus ti linia ket komentario.\n# * Amin a saan a blanko a linia ket eksakto a titulo a saan nga maikaskaso, kadakkel ti letra ken amin.\nDagiti reperensia\nDagiti silpo ti ruar\nKitaen pay\n #</pre> <!-- saan a kutkutien daytoy a linia -->",
- "searchbutton": "Biruken",
+ "searchbutton": "Agbiruk",
"go": "Inkan",
"searcharticle": "Inkan",
"history": "Pakasaritaan ti panid",
"protectedpage": "Nasalakniban a panid",
"jumpto": "Lumaktaw idiay:",
"jumptonavigation": "pagdaliasatan",
- "jumptosearch": "biruken",
+ "jumptosearch": "agbiruk",
"view-pool-error": "Pasensian, dagiti server ket nadagsenan unay iti agdama.\nAdu unay dagiti agar-aramat nga agpadpadas nga agbuya iti daytoy a panid.\nPangngaasi nga agurayka bassit sakbay a padasem manen a serrekan daytoy a panid.\n\n$1",
"generic-pool-error": "Pasensian, dagiti server ket agdama a nadagsenan iti agdama.\nAdu unay dagiti agar-aramat nga agpadpadas nga agbuya iti daytoy a rekurso.\nPangngaasi nga agurayka bassit sakbay a padasem manen a serrekan daytoy a rekurso.",
"pool-timeout": "Madamdama agur-uray para iti kandado",
"readonly": "Narikepan ti database",
"enterlockreason": "Agikabil ti rason para iti pannakarikep, mangiraman ti maysa a karkulo no kaanonto a malukatan",
"readonlytext": "Ti database ket agdama a narikpan kadagiti baro a panagikabil ken panagbaliw, mabalin a gapu dagiti kadawyan a pagsimpa, kalpasanna a normalto nga agsubli.\n\nTi administrador ti sistema a nangrikep ket nangited iti daytoy a palawag: $1",
- "missing-article": "Ti database ket saan a nakabiruk ti testo ti panid a mabirukanna koma, a nanaganan ti \"$1\" $2.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a baak a paggiddiatan wenno silpo ti pakasaritaan ti maysa panid a dati a naikkat.\n\nNo saan a kasta, mabalin a nakasarakka ti parikut ti sopwer.\n\nPangngaasi nga ipadamagmo kadagiti [[Special:ListUsers/sysop|administrador]], isuratmo ti pakaammo dayta nga URL.",
+ "missing-article": "Ti database ket saan a nakabiruk ti teksto ti panid a mabirukanna koma, a nanaganan ti \"$1\" $2.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a baak a paggiddiatan wenno silpo ti pakasaritaan ti maysa panid a dati a naikkat.\n\nNo saan a kasta, mabalin a nakasarakka ti parikut ti sopwer.\n\nPangngaasi nga ipadamagmo kadagiti [[Special:ListUsers/sysop|administrador]], isuratmo ti pakaammo dayta nga URL.",
"missingarticle-rev": "(rebision#: $1)",
"missingarticle-diff": "(Dip: $1, $2)",
"readonly_lag": "Automatiko a narikpan ti database kabayatan a dagiti tagabu a server ti database ket kumamakam iti agturay",
"userlogin-loggedin": "Nakastrekkan a kas ni {{GENDER:$1|$1}}.\nUsaren ti porma dita baba tapno sumrek a kas sabali nga agar-aramat.",
"userlogin-reauth": "Nasken a sumrekka manen tapno mapasingkedan a sika ni {{GENDER:$1|$1}}.",
"userlogin-createanother": "Agpartuat iti sabali a pakabilangan",
- "createacct-emailrequired": "Esurat a pagtaengan",
- "createacct-emailoptional": "Esurat a pagtaengan (pagpilian)",
+ "createacct-emailrequired": "Adres ti esurat",
+ "createacct-emailoptional": "Adres ti esurat (pagpilian)",
"createacct-email-ph": "Ikabil ti esurat a pagtaengam",
- "createacct-another-email-ph": "Ikabil ti esurat a pagtaengan",
- "createaccountmail": "Agusar iti pugto a temporario a kontrasenias ken ipatulod iti naisangayan nga esurat a pagtaengan",
+ "createacct-another-email-ph": "Ikabil ti adres ti esurat",
+ "createaccountmail": "Agusar iti pugto a temporario a kontrasenias ken ipatulod iti nainaganan nga adres ti esurat",
"createaccountmail-help": "Mabalin a mausar a panagpartuat ti pakabilangan para iti sabali a tao a saan a makaammo iti kontrasenias.",
"createacct-realname": "Pudno a nagan (pagpilian)",
"createacct-reason": "Rason",
"passwordtooshort": "Dagiti kontrasenias ket nasken a saan a basbasit ngem {{PLURAL:$1|1 a karakter|$1 a karkarakter}}.",
"passwordtoolong": "Dagiti kontrasenias ket nasken a saan nga at-atiddog ngem {{PLURAL:$1|1 a karakter|$1 a karkarakter}}.",
"passwordtoopopular": "Saan a mabalin a mausar dagiti kadawyan a mapilpili a kontrasenias. Pangngaasi nga agpili iti naisangsangayan a kontrasenias.",
- "password-name-match": "Nasken a ti kontrasenias ket maigiddiat manipud ti naganmo.",
+ "password-name-match": "Nasken a ti kontrasenias ket maigiddiat manipud iti naganmo.",
"password-login-forbidden": "Naipariten ti panagusar iti daytoy a nagan ti agar-aramat ken kontrasenias.",
"mailmypassword": "Isaad manen ti kontrasenias",
"passwordremindertitle": "Baro a temporario a kontrasenias para iti {{SITENAME}}",
- "passwordremindertext": "Adda maysa a tao (mabalin a sika met laeng, manipud iti IP a pagtaengan a $1) ket nagkiddaw iti baro a kontrasenias para iti {{SITENAME}} ($4). Ti temporario a kontrasenias para kenni agar-aramat \"$2\" ket napartuaten ken naisaad iti \"$3\". No kastan ti kinayatmo, nasken itan a sumrekka ken agpili iti baro a kontrasenias.\nTi temporario a kontraseniasmo ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\n\nNo sabali ti nagkiddaw, wenno nalagipmon ti kontraseniasmo,\nken dimo kayaten a sukatan daytoy, mabalinmo a di ikaskaso daytoy a mensahe ken agtuloy nga usaren ti daan a kontraseniasmo.",
- "noemail": "Awan ti esurat a pagtaengan a nairehistro para kenni agar-aramat \"$1\".",
- "noemailcreate": "Nasken a mangitedka ti pudno nga esurat a pagtaengan.",
- "passwordsent": "Naipatuloden ti baro a kontrasenias iti esurat a pagtaengan a nairehistro kenni \"$1\".\nPangngaasi a sumrekka manen kalpasan ti pannakaawatmo.",
+ "passwordremindertext": "Adda maysa a tao (mabalin a sika met laeng, manipud iti adres ti IP ti $1) ket nagkiddaw iti baro a kontrasenias para iti {{SITENAME}} ($4). Ti temporario a kontrasenias para kenni agar-aramat \"$2\" ket napartuaten ken naisaad iti \"$3\". No kastan ti kinayatmo, nasken itan a sumrekka ken agpili iti baro a kontrasenias.\nTi temporario a kontraseniasmo ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\n\nNo sabali ti nagkiddaw, wenno nalagipmon ti kontraseniasmo,\nken dimo kayaten a sukatan daytoy, mabalinmo a di ikaskaso daytoy a mensahe ken agtuloy nga usaren ti daan a kontraseniasmo.",
+ "noemail": "Awan ti adres ti esurat a nairehistro para kenni agar-aramat \"$1\".",
+ "noemailcreate": "Nasken a mangitedka iti umiso nga adres ti esurat.",
+ "passwordsent": "Naipatuloden ti baro a kontrasenias iti adres ti esurat a nairehistro kenni \"$1\".\nPangngaasi a sumrekka manen kalpasan iti pannakaawatmo.",
"blocked-mailpassword": "Ti adresmo ti IP ket naserraan manipud iti panagurnos. Tapno mapawilan ti panagabuso, saan a maipalubos ti agusar ti panagipulang ti kontrasenias manipud iti daytoy nga adres ti IP.",
- "eauthentsent": "Naipatuloden ti pammatalged nga esurat iti naikeddeng nga esurat a pagtaengan.\nSakbay a maipatulod ti ania man nga esurat iti pakabilangan, masapul a surotem dagiti maibagbaga iti esurat, tapno mapatalgedan ti pakabilangan ket agpayso a kukuam.",
+ "eauthentsent": "Naipatuloden ti pammatalged nga esurat iti naikeddeng nga adres ti esurat.\nSakbay a maipatulod ti ania man nga esurat iti pakabilangan, masapul a surotem dagiti maibagbaga iti esurat, tapno mapatalgedan ti pakabilangan ket agpayso a kukuam.",
"throttled-mailpassword": "Ti panangisaad manen ti kontrasenias ket naipatuloden, iti kaunegan ti napalabas {{PLURAL:$1|nga oras|a $1 nga or-oras}}.\nTapno maipawilan ti panagabuso, maysa laeng a panangisaad manen ti kontrasenias ti maipatulod iti tunggal {{PLURAL:$1|maysa nga oras|$1 nga or-oras}}.",
"mailerror": "Biddut iti panangipatulod ti surat: $1",
- "acct_creation_throttle_hit": "Dagiti sumarungkar iti daytoy a wiki nga agus-usar ti IP a pagtaengan ket nakapartuat {{PLURAL:$1|iti 1 a pakabilangan|kadagiti $1 a pakabilangan}} iti nasakbayan nga aldaw, nga isu laeng ti kaadu a maipalubos iti daytoy a paset ti panawen.\nA kas ti nagbanagan, dagiti agsarsarungkar nga agus-usar ti IP a pagtaengan ket agdama a saanda a mabalin a makapartuat kadagiti pakabilangan.",
+ "acct_creation_throttle_hit": "Dagiti sumarungkar iti daytoy a wiki nga agus-usar iti adres ti IP ket nakapartuat {{PLURAL:$1|iti 1 a pakabilangan|kadagiti $1 a pakabilangan}} iti nasakbayan nga $2 nga isu laeng ti kaadu a maipalubos iti daytoy a paset ti panawen.\nA kas ti nagbanagan, dagiti agsarsarungkar nga agus-usar iti adres ti IP ket agdama a saanda a mabalin a makapartuat kadagiti pakabilangan.",
"emailauthenticated": "Ti esurat a pagtaengam ket napatalgedan idi $2, $3.",
- "emailnotauthenticated": "Saan pay a napatalgedan ti esuratmo a pagtaengan.\nAwanto ti esurat a maipatulod para kadagiti sumaganad a langa.",
- "noemailprefs": "Ipanaganan ti esurat a pagtaengan tapno agbalin dagitoy a langa.",
+ "emailnotauthenticated": "Saan pay a napatalgedan ti adres ti esuratmo.\nAwanto ti esurat a maipatulod para kadagiti sumaganad a langa.",
+ "noemailprefs": "Manginagan iti maysa nga adres ti esurat tapno agbalin dagitoy a langa.",
"emailconfirmlink": "Pasingkedam ti esurat a pagtaengam",
- "invalidemailaddress": "Ti esurat a pagtaengan ket saan a maawat ngamin ket kasla adda ti saan a napudno a porma.\nPangngaasi nga agikabil ti nasayaat a porma ti pagtaengan wenno ikkaten amin a naikabil.",
- "cannotchangeemail": "Dagiti pakabilangan nga esurat a pagtaengan ket saan a mabaliwan iti daytoy a wiki.",
+ "invalidemailaddress": "Ti adres ti esurat ket saan a maawat ngamin ket kasla adda ti saan a napudno a pormat.\nPangngaasi nga agikabil ti nasayaat a pormat ti adres wenno ikkaten amin a naikabil.",
+ "cannotchangeemail": "Dagiti pakabilangan nga adres ti esurat ket saan a mabaliwan iti daytoy a wiki.",
"emaildisabled": "Daytoy a sitio ket saan a makaipatulod kadagiti esurat.",
"accountcreated": "Napartuaten ti pakabilangan",
"accountcreatedtext": "Ti pakabilangan ti agar-aramat para kenni [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|tungtungan]]) ket napartuaten.",
"pt-createaccount": "Agpartuat iti pakabilangan",
"pt-userlogout": "Rummuar",
"php-mail-error-unknown": "Di ammo a biddut iti surat ti annong ti PHP().",
- "user-mail-no-addy": "Pinadas nga inpatulod ti esurat nga awan ti maysa nga esurat a pagtaengan.",
+ "user-mail-no-addy": "Pinadas nga inpatulod ti esurat nga awan ti maysa nga adres ti esurat.",
"user-mail-no-body": "Pinadas nga inpatulod ti esurat nga awan ti maysa a linaonna wenno ababa unay a bagi.",
"changepassword": "Baliwan ti kontrasenias",
"resetpass_announce": "Tapno malpas ti panagserrek, nasken a mangisaadka iti baro a kontrasenias.",
"passwordreset-emaildisabled": "Dagiti langa ti esurat ket nabaldado iti daytoy a wiki.",
"passwordreset-username": "Nagan ti agar-aramat:",
"passwordreset-domain": "Dominio:",
- "passwordreset-email": "Esurat a pagtaengan:",
+ "passwordreset-email": "Adres ti esurat:",
"passwordreset-emailtitle": "Dagiti salaysay ti pakabilangan iti {{SITENAME}}",
- "passwordreset-emailtext-ip": "Adda (baka sika, ti naggapuan ti IP a pagtaengan $1) a nagkiddaw ti maysa a panangisaad manen ti kontrasenias para iti {{SITNAME}} ($4) . {{PLURAL:$3|Ti |Dagiti}} sumaganad a pakabilangan ti agar-aramat ket\nmainaig iti daytoy nga esurat a pagtaengan:\n\n$2\n\n{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\nSumrekka koman tapno agpilika ti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a \npanagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ket saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken \nagtuloyka nga agusar ti daan a kontrasenias.",
- "passwordreset-emailtext-user": "Daytoy nga agar-aramat $1 iti {{SITENAME}} ket nagkiddaw ti maysa a panangisaad manen ti bukod a kontrasenias para iti {{SITENAME}}\n($4) . {{PLURAL:$3|Ti|Dagiti}} sumaganad a pakabilangan ti agar-aramat ket\nmainaig iti daytoy nga esurat a pagtaengan:\n\n$2\n\n{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\nSumrekka koman tapno agpilika ti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a \npanagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ken saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken \nagtuloykan nga agusar ti daan a kontraseniasmo.",
+ "passwordreset-emailtext-ip": "Adda (baka sika, ti naggapuan ti adres ti IP ti $1) a nagkiddaw iti maysa a panangisaad manen ti kontrasenias para iti {{SITENAME}} ($4) . {{PLURAL:$3|Ti|Dagiti}} sumaganad a pakabilangan ti agar-aramat ket\nmainaig iti daytoy nga adres ti esurat:\n\n$2\n\n{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\nSumrekka koman tapno agpilika iti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a \npanagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ket saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken \nagtuloyka nga agusar iti daan a kontrasenias.",
+ "passwordreset-emailtext-user": "Daytoy nga agar-aramat $1 iti {{SITENAME}} ket nagkiddaw ti maysa a panangisaad manen ti bukod a kontrasenias para iti {{SITENAME}}\n($4) . {{PLURAL:$3|Ti|Dagiti}} sumaganad a pakabilangan ti agar-aramat ket\nmainaig iti daytoy nga adres ti esurat:\n\n$2\n\n{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\nSumrekka koman tapno agpilika ti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a \npanagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ken saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken \nagtuloykan nga agusar ti daan a kontraseniasmo.",
"passwordreset-emailelement": "Nagan ti agar-aramat: \n$1\n\nTemporario a kontrasenias: \n$2",
"passwordreset-emailsentemail": "No daytoy nga adres ti esurat ket mainaig iti pakabilangam, maipatulodto ti maysa nga esurat iti panangisaad manen ti kontrasenias.",
"passwordreset-emailsentusername": "No adda adres ti esurat a mainaig iti daytoy a nagan ti agar-aramat, addanto maipatulod nga esurat iti panangisaad manen ti kontrasenia.",
"changeemail": "Sukatan wenno ikkaten ti adres ti esurat",
"changeemail-header": "Kompletuen daytoy a porma tapno masukatan ti adres ti esuratmo. No kayatmo a maikkat ti pannakainaig iti ania man nga adres ti esurat manipud iti pakabilangam, ibati a blanko ti baro nga adres ti esurat no ited ti porma.",
"changeemail-no-info": "Masapul a nakastrekka tapno dagus a makapan iti ditoy a panid.",
- "changeemail-oldemail": "Agdama nga esurat a pagtaengan:",
- "changeemail-newemail": "Baro nga esurat a pagtaengan:",
+ "changeemail-oldemail": "Agdama nga adres ti esurat:",
+ "changeemail-newemail": "Baro nga adres ti esurat:",
"changeemail-newemail-help": "Daytoy a pagikabilan ket nasken a blanko no kayatmo a maikkat ti adres ti esuratmo. Saanmonto a mabalin ti mangisaad manen ti nalipatan a kontrasenias ken saankanto a makaawat kadagiti esurat manipud iti daytoy a wiki no maikkat ti adres ti esurat.",
"changeemail-none": "(awan)",
"changeemail-password": "Ti bukodmo a kontrasenias ti {{SITENAME}}:",
"showpreview": "Ipakita ti ipadas",
"showdiff": "Ipakita dagiti binaliwan",
"blankarticle": "<strong>Ballaag:</strong> Ti panid a parpatuatem ket blanko.\nNo pindutem manen ti \"{{int:savearticle}}\", ti panid ket mapartuatto nga awan ti ania man a linaon.",
- "anoneditwarning": "<strong>Ballaag:</strong> Saanka a nakastrek. Ti IP a pagtaengan ket publikonto a makita nga agaramidka iti ania man a panagurnos. No <strong>[$1 sumrekka]</strong> wenno <strong>[$2 agpartuatka iti pakabilangan]</strong>, dagiti inurnosmo ket maitunosto iti naganmo nga agar-aramat, ken dagiti dadduma pay a pagimbagan.",
+ "anoneditwarning": "<strong>Ballaag:</strong> Saanka a nakastrek. Ti adres ti IP ket publikonto a makita nga agaramidka kadagiti ania man a panagurnos. No <strong>[$1 sumrekka]</strong> wenno <strong>[$2 agpartuatka iti pakabilangan]</strong>, dagiti inurnosmo ket maitunosto iti naganmo nga agar-aramat, ken dagiti dadduma pay a pagimbagan.",
"anonpreviewwarning": "<em>Saanka a nakastrek. Ti panagidulin ket agirehistro ti IP a pagtaengam kadagitoy a pakasaritaan ti panagurnos iti daytoy a panid.</em>",
"missingsummary": "<strong>Palagip:</strong> Saanka a nakaited iti pakabuklan ti panagurnos.\nNo pindutem manen ti \"{{int:savearticle}}\", maidulin ti inurnosmo nga awan ti pakabuklanna.",
"selfredirect": "<strong>Ballaag:</strong> Ibawbaw-ingmo daytoy a panid iti isu met laeng a panid.\nMabalinmo nga innaganan ti kamali a puntaan para iti baw-ing, wenno mabalin nga ur-urnosem ti kamali a panid.\nNo pindutem manen ti \"{{int:savearticle}}\" , mapartuatto lattan ti baw-ing.",
"subject-preview": "Panangipadas ti suheto:",
"previewerrortext": "Adda napasamak a maysa a biddut bayat a nagpadpadas kadagiti binawbaliwam.",
"blockedtitle": "Naseraan ti agar-aramat",
- "blockedtext": "<strong>Naseraan ti naganmo nga agar-aramat wenno ti IP a pagtaengam.</strong>\n\nTi serra ket inaramid babaen ni $1. \nTi rason a naited ket <em>$2</em>.\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddeng a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno sabali pay nga [[{{MediaWiki:Grouppage-sysop}}|administrador]] no kayatmo a maipalawag daytoy a panagserra.\nDimo mabalin nga aramaten ti ramit nga esuratan daytoy nga agar-aramat malaksid no adda napudno nga esurat a pagtaengan a nainaganan iti [[Special:Preferences|pakabilangan ti kakaykayatm]] ken no saanka a naparitan nga agaramat iti daytoy.\nTi agdama nga IP a pagtaengam ket $3, ti naserraan nga ID ket #$5. \nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti ania man nga aramidem nga usisa.",
- "autoblockedtext": "Ti IP a pagtaengam ket automatiko a naserraan ngamin ket inusar ti sabali nga agar-aramat, a sinerraan ni $1.\nTi rason nga inted ket:\n\n:<em>$2</em>\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddenga a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno maysa kadagiti [[{{MediaWiki:Grouppage-sysop}}|administrador]] tapno maipalawag daytoy a panagserra.\n\nLaglagipem a saanmo a mabalin nga usaren ti \"esuratan daytoy nga agar-aramat\" a langa malaksid no addaanka ti napudno nga esurat a pagtaengan a nakarehistro iti [[Special:Preferences|kakaykayatam]] ken saanka a naserraan manipud ti panagusar daytoy.\n\nTi tatta nga IP a pagtaengam ket $3, ken ti ID ti naserraan ket #$5.\nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti ania man nga aramidem nga usisa.",
+ "blockedtext": "<strong>Naseraan ti naganmo nga agar-aramat wenno ti adres ti IP.</strong>\n\nTi serra ket inaramid babaen ni $1. \nTi rason a naited ket <em>$2</em>.\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddeng a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno sabali pay nga [[{{MediaWiki:Grouppage-sysop}}|administrador]] no kayatmo a maipalawag daytoy a panagserra.\nDimo mabalin nga aramaten ti ramit nga esuratan daytoy nga agar-aramat malaksid no adda napudno nga adres ti esurat a nainaganan iti [[Special:Preferences|pakabilangan ti kakaykayatm]] ken no saanka a naparitan nga agaramat iti daytoy.\nTi agdama nga adres ti IP ket $3, ti naserraan nga ID ket #$5. \nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti ania man nga aramidem nga usisa.",
+ "autoblockedtext": "Ti bukodmo nga adres ti IP ket automatiko a naserraan ngamin ket inusar ti sabali nga agar-aramat, a sinerraan ni $1.\nTi rason nga inted ket:\n\n:<em>$2</em>\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddenga a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno maysa kadagiti [[{{MediaWiki:Grouppage-sysop}}|administrador]] tapno maipalawag daytoy a panagserra.\n\nLaglagipem a saanmo a mabalin nga usaren ti \"esuratan daytoy nga agar-aramat\" a langa malaksid no addaanka ti napudno nga adres ti esurat a nakarehistro iti [[Special:Preferences|kakaykayatam]] ken saanka a naserraan manipud ti panagusar daytoy.\n\nTi agdama a bukodmo nga adres ti IP ket $3, ken ti ID ti naserraan ket #$5.\nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti ania man nga aramidem nga usisa.",
"blockednoreason": "awan ti naited a rason",
"whitelistedittext": "Pangngaasi a $1 tapno makaurnos kadagiti panid.",
"confirmedittext": "Masapul a pasingkedam ti esurat sakbay a makaurnos kadagitoy a panid.\nPangngaasi nga isaad ken ipapudnom ti esuratmo babaen ti [[Special:Preferences|kakaykayatan ti agar-aramat]].",
"accmailtext": "Ti pugto a napartuat a kontrasenias para kenni [[User talk:$1|$1]] ket naipatuloden iti $2. Mabalin a masukatan iti\n<em>[[Special:ChangePassword|pagsukatan ti kontrasenias]]</em> a panid no sumrekka.",
"newarticle": "(Baro)",
"newarticletext": "Nasurotmo ti silpo ti awan pay a panid. \nTi mangpartuat ti panid, rugiamon ti agmakinilia iti kahon dita baba (kitaen ti [$1 panid ti tulong] para iti adu pay a pakaammo). \nNo addaka ditoy babaen ti biddut, pindutem ti buton ti <strong>back</strong> ti pagbasabasam.",
- "anontalkpagetext": "----\n<em>Daytoy ti pakitungtungan a panid para iti di ammo nga agar-aramat a saan pay a nakapartuat iti pakabilangan, wenno saanna nga us-usaren.</em>\nIsu nga agusarkami ti numero nga IP a pagtaengan tapno mailasin isuda a lalaki/babai.\nTi kastoy nga IP a pagtaengan ket us-usaren a bingayan babaen ti nadumaduma nga agar-aramat.\nNo sika ket maysa a di ammo nga agar-aramat ken dagiti awan ti pategna a komentario ket napaitudo kenka, pangngaasi nga [[Special:CreateAccount|agpartuatka iti pakabilangam]] wenno [[Special:UserLogin|sumrekka]] \ntapno maliklikan ti pannakaiyallilaw kadagiti sabali a di ammo nga agar-aramat.",
+ "anontalkpagetext": "----\n<em>Daytoy ti pakitungtungan a panid para iti di ammo nga agar-aramat a saan pay a nakapartuat iti pakabilangan, wenno saanna nga us-usaren.</em>\nIsu nga agusarkami ti numero ti adres ti IP tapno mailasin isuda a lalaki/babai.\nTi kastoy nga adres ti IP ket us-usaren a pagbibingayan babaen ti nadumaduma nga agar-aramat.\nNo sika ket maysa a di ammo nga agar-aramat ken dagiti awan ti pategna a komentario ket napaitudo kenka, pangngaasi nga [[Special:CreateAccount|agpartuatka iti pakabilangam]] wenno [[Special:UserLogin|sumrekka]] \ntapno maliklikan ti pannakaiyallilaw kadagiti sabali a di ammo nga agar-aramat.",
"noarticletext": "Awan ti agdama a teksto iti daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk iti kastoy a titulo ti panid]] kadagiti sabali a panid,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan],\nwenno [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} partuaten daytoy a panid]</span>.",
"noarticletext-nopermission": "Awan ti agdama a linaon daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk para iti titulo ti daytoy a panid]] kadagiti sabali a panid, wenno <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan]</span>, ngem awan ti pammalubosmo a mangpartuat iti daytoy a panid.",
"missing-revision": "Ti panagbalbaliw ti #$1 iti daytoy a panid a nanaganan ti \"{{FULLPAGENAME}}\" ket awan.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a silpo ti baak a pakasaritaan iti maysa a naikkaten a panid.\nDagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
"copyrightwarning2": "Pangngaasi a laglagipen nga amin a kontribusion iti {{SITENAME}} ket mabalin a maurnos, mabaliwan, wenno ikkaten dagiti sabali a kontributor.\nNo dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmon nga ited ditoy.<br />\nIkarkarim pay kadakami a bukodmo a sinurat daytoy, wenno kinopia manipud iti publiko a dominio wenno ti kapadpadana a nawaya a nagtaudan. (kitaen ti $1 para kadagiti salaysay).\n<strong>Saan a mangited ti nakarbengan ti kopia nga obra no awan iti pammalubos!</strong>",
"editpage-cannot-use-custom-model": "Saan a mabaliwan ti modelo ti linaon iti daytoy a panid.",
"longpageerror": "<strong>Biddut: Ti teksto nga intedmo ket {{PLURAL:$1|maysa a kilobyte|$1 kilkilobyte}} ti katiddogna, nga at-atiddog ngem ti kangatuan iti {{PLURAL:$2|maysa a kilobyte|$2 kilkilobyte}}.</strong>\nSaan a mabalin a maidulin.",
- "readonlywarning": "<strong>Ballaag: Narikepan ti database tapno mataripato, isu a saanmo a mabalin nga idulin dagita inurnosmo tattan.</strong>\nMabalinmo ti agkopia ken agipegket ti testom iti papeles ti testo ken idulinmo daytoy intono madamdama.\n\nTi administrador ti sistema a nangrikep ket nangited iti daytoy a palawag: $1",
+ "readonlywarning": "<strong>Ballaag: Narikepan ti database tapno mataripato, isu a saanmo a mabalin nga idulin dagita inurnosmo tattan.</strong>\nMabalinmo ti agkopia ken agipegket ti tekstom iti papeles ti teksto ken idulinmo daytoy intono madamdama.\n\nTi administrador ti sistema a nangrikep ket nangited iti daytoy a palawag: $1",
"protectedpagewarning": "<strong>Ballaag: Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan iti gundaway nga administrador ti makaurnos ditoy.</strong>\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
"semiprotectedpagewarning": "<strong>Nota:</strong> Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaurnos ditoy.\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
"cascadeprotectedwarning": "<strong>Ballaag:</strong> Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan iti gundaway nga administrador ti makaurnos gapu ta nailak-am {{PLURAL:$1|iti sumaganad a panid|kadagiti sumaganad a panid}} a nasalakniban iti sariap:",
"post-expand-template-argument-warning": "<strong>Ballaag:</strong> Daytoy a panid ket aglaon ti saan a basbasit ngem maysa a panangipalawag ti plantilia a dakkel unay ti panagpadakkelna.\nDagitoy nga argumento ket saanen a nairaman.",
"post-expand-template-argument-category": "Pampanid a naglaon kadagiti saan a nairaman nga argumento ti plantilia",
"parser-template-loop-warning": "Nakaduktal iti silo ti plantilia: [[$1]]",
+ "template-loop-category": "Pampanid nga agraman kadagiti silo ti plantilia",
"parser-template-recursion-depth-warning": "Nalabsan ti patingga ti panagdullit ti kinauneg ti plantilia ($1)",
"language-converter-depth-warning": "Nalabsan ti patingga ti pagbaliwen a kinauneg ti pagsasao ($1)",
"node-count-exceeded-category": "Dagiti panid a nakasurokan ti bilang ti nodo",
"parser-unstrip-loop-warning": "Nakaduktal ti di-naukisan a silo",
"parser-unstrip-recursion-limit": "Nalabsan ti patingga ti panagdullit ti di-naukisan ($1)",
"converter-manual-rule-error": "Adda biddut a naduktalan iti manual nga alagaden ti panagbalbaliw ti pagsasao",
- "undo-success": "Ti panag-urnos ket saan a maisubli.\nPangngaasi a kitaen ti panangipada dita baba tapno maammuan no daytoy ti kayatmo nga aramiden, ken kalpasanna idulin dagiti sinukatan dita baba tapno malpas ti panagsubli ti inurnos.",
+ "undo-success": "Mabalin a maisubli ti panagurnos.\nPangngaasi a kitaen ti panangiyasping dita baba tapno maammuan no daytoy ti kayatmo nga aramiden, ken kalpasanna idulin dagiti sinukatan dita baba tapno malpas ti panangisubli ti inurnos.",
"undo-failure": "Ti inurnos ket saan a maipasubli gapu ta adda dagiti nakisinnungat a patingnga a naurnos.",
"undo-norev": "Saan a maibabawi ti naurnos ngamin ket awan daytoy wenno mabalin a naikkaten.",
"undo-nochange": "Ti inurnos ket kasla naibabawin.",
"undo-summary": "Ibabawi ti $1 a binaliwan babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]])",
"undo-summary-username-hidden": "Isubli ti $1 a binaliwan babaen ti nailemmeng nga agar-aramat",
- "cantcreateaccount-text": "Ti panagpartuat iti pakabilangan manipud ti daytoy nga IP a pagtaengan (<strong>$1</strong>) ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket <em>$2</em>",
- "cantcreateaccount-range-text": "Ti panagpartuat iti pakabilangan manipud kadagiti pagtaengan ti IP iti sakop ti <strong>$1</strong>, a mairaman ti IP a pagtaengam (<strong>$4</strong>), ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket <em>$2</em>",
+ "cantcreateaccount-text": "Ti panagpartuat iti pakabilangan manipud iti daytoy nga adres ti IP (<strong>$1</strong>) ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket <em>$2</em>",
+ "cantcreateaccount-range-text": "Ti panagpartuat iti pakabilangan manipud kadagiti adres ti IP iti sakop ti <strong>$1</strong>, a mairaman ti adres ti IP (<strong>$4</strong>), ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket <em>$2</em>",
"viewpagelogs": "Kitaen dagiti listaan para iti daytoy a panid",
"nohistory": "Awan ti pakasaritaan ti panagurnos iti daytoy a panid.",
"currentrev": "Kinaudi a rebision",
"page_first": "umuna",
"page_last": "naudi",
"histlegend": "Panagpili ti diperensia: Markaan dagiti kahon ti radio kadagiti rebision tapno maipada ken pinduten ti enter wenno ti buton dita baba.<br />\nLeyenda: <strong>({{int:cur}})</strong> = naggidiatan ti kinaudi a rebision, <strong>({{int:last}})</strong> = naggidiatan ti sarsarunuen a rebision, <strong>{{int:minoreditletter}}</strong> = bassit nga urnos.",
- "history-fieldset-title": "Agbasabasa iti pakasaritaan",
- "history-show-deleted": "Naikkat laeng",
+ "history-fieldset-title": "Agbiruk para kadagiti rebision",
+ "history-show-deleted": "Naikkat laeng ti rebision",
"histfirst": "kadaanan",
"histlast": "kabaruan",
"historysize": "({{PLURAL:$1|1 byte|dagiti $1 a byte}})",
"rev-deleted-comment": "(naikkat ti pakabuklan ti inurnos)",
"rev-deleted-user": "(naikkat ti nagan ti agar-aramat)",
"rev-deleted-event": "(naikkat ti listaan dagiti salaysay)",
- "rev-deleted-user-contribs": "[naikkat ti nagan ti agar-aramat wenno IP a pagtaengan - ti inurnos ket nailemmeng manipud kadagiti kontribusion]",
+ "rev-deleted-user-contribs": "[naikkat ti nagan ti agar-aramat wenno adres ti IP - nailemmeng ti inurnos manipud kadagiti kontribusion]",
"rev-deleted-text-permission": "Ti rebision daytoy a panid ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan iti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
"rev-suppressed-text-permission": "Ti rebision daytoy a panid ket <strong>napasardeng</strong>.\nDagiti salaysay ket mabalin a mabirukan iti [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti panagpasardeng].",
"rev-deleted-text-unhide": "Ti rebision daytoy a panid ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan iti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].\nMabalinmo pay a [$1 makita daytoy a rebision] no kayatmo ti agtuloy.",
"revdelete-hide-image": "Ilemmeng ti linaon ti papeles",
"revdelete-hide-name": "Ilemmeng ti puntaan ken dagiti parametro",
"revdelete-hide-comment": "Pakabuklan ti inurnos",
- "revdelete-hide-user": "Nagan ti agar-amat/IP a pagtaengan ti editor",
+ "revdelete-hide-user": "Nagan ti agar-amat/adres ti IP ti editor",
"revdelete-hide-restricted": "Depdepen ti datos manipud kadagiti administrador ken dagiti pay sabali",
"revdelete-radio-same": "(saan a sukatan)",
"revdelete-radio-set": "Nailemmeng",
"prefs-misc": "Sabsabali",
"prefs-resetpass": "Sukatan ti kontrasenias",
"prefs-changeemail": "Sukatan wenno ikkaten ti adres ti esurat",
- "prefs-setemail": "Isaad ti esurat a pagtaengan",
+ "prefs-setemail": "Isaad ti maysa nga adres ti esurat",
"prefs-email": "Dagiti pagpilian ti esurat",
"prefs-rendering": "Tabas",
"saveprefs": "Idulin",
"restoreprefs": "Isubli amin dagiti kasisigud a pannakaisaad (kadagiti amin a seksion)",
"prefs-editing": "Ur-urnosen",
- "searchresultshead": "Biruken",
+ "searchresultshead": "Agbiruk",
"stub-threshold": "Pagpatinggaan para iti panagpormat iti silpo ti pungol ($1):",
"stub-threshold-sample-link": "wadan",
"stub-threshold-disabled": "Nabaldado",
"timezoneuseserverdefault": "Usaren ti kasisigud ti wiki ($1)",
"timezoneuseoffset": "Sabali (inaganan ti timbengan)",
"servertime": "Oras ti server:",
- "guesstimezone": "Punuen manipud ti pagbasabasa",
+ "guesstimezone": "Punuen manipud iti pagbasabasa",
"timezoneregion-africa": "Aprika",
"timezoneregion-america": "Amerika",
"timezoneregion-antarctica": "Antartika",
"timezoneregion-indian": "Taaw Indiano",
"timezoneregion-pacific": "Taaw Pasipiko",
"allowemail": "Pakabaelam ti esurat a naggapo kadagiti sabali nga agar-aramat",
- "prefs-searchoptions": "Biruken",
+ "prefs-searchoptions": "Agbiruk",
"prefs-namespaces": "Dagiti nagan ti espasio",
"default": "kasisigud",
"prefs-files": "Dagiti papeles",
"prefs-help-gender": "Ti panangisaad daytoy a kakaykayatan ket saan a nasken.\nTi sopwer ket agus-usar iti pategna tapno tawagannaka ken ibaganaka kadagiti sabali nga agus-usar iti maitunos gramatika ti henero.\nDaytoy a pakaammo ket makitanto iti publiko.",
"email": "Esurat",
"prefs-help-realname": "Saan a nasken ti pudno a nagan.\nNo maited, mabalin a maaramatto a panangited iti pammadayaw kenka iti obram.",
- "prefs-help-email": "Ti esurat a pagtaengan ket saan a masapul, ngem masapul kadagiti panangisaad manen ti kontrasenias, no malipatam ti kontraseniasmo.",
+ "prefs-help-email": "Ti adres ti esurat ket saan a masapul, ngem masapul kadagiti panangisaad manen ti kontrasenias, no malipatam ti kontraseniasmo.",
"prefs-help-email-others": "Mabalinmo pay ti agpili tapno dagiti sabali nga agar-aramat ket mabalin nga esuratandaka babaen ti silpo ti panidmo wenno ti panid ti tungtungam.\nTi esurat a pagtaengam ket saan a maipakita no agkontak kenka dagiti agar-aramat.",
- "prefs-help-email-required": "Masapul ti esurat a pagtaengan.",
+ "prefs-help-email-required": "Masapul ti adres ti esurat.",
"prefs-info": "Kangrunaan a pakaammo",
"prefs-i18n": "Internasionalisasion",
"prefs-signature": "Pirma",
"prefs-help-prefershttps": "Daytoy a kakaykayatan ket mapakabaelanto iti sumaruno nga iseserrekmo.",
"prefswarning-warning": "Nagaramikka kadagiti panagbalbaliw kadagiti kakaykayatam a saan pay a naidulin.\nNo panawan daytoy a panid a saan nga agpindut iti \"$1\" dagiti kakaykayatam ket saanto a mapabaro.",
"prefs-tabs-navigation-hint": "Pakaammo: Mabalinmo nga usaren dagiti kanigid ken kanawan a tekla ti pana tapno madaliasat ti baetan dagiti etiketa iti listaan dagiti etiketa.",
- "userrights": "Panagtaripato kadagiti karbengan ti agar-aramat",
+ "userrights": "Dagiti karbengan ti agar-aramat",
"userrights-lookup-user": "Agpili iti agar-aramat",
"userrights-user-editname": "Mangiserrek iti nagan ti agar-aramat:",
"editusergroup": "Ikarga dagiti grupo ti agar-aramat",
"right-move-rootuserpages": "Agiyalis kadagiti ramut a panid ti agar-aramat",
"right-move-categorypages": "Agiyalis iti pampanid ti kategoria",
"right-movefile": "Agiyalis kadagiti papeles",
- "right-suppressredirect": "Saan nga agpartuat kadagiti baw-ing manipud ti taudan ti pampanid no agiyalis kadagiti panid",
+ "right-suppressredirect": "Saan nga agpartuat kadagiti baw-ing manipud iti taudan ti pampanid no agiyalis kadagiti panid",
"right-upload": "Agikarga kadagiti papeles",
"right-reupload": "Agisurat manen kadagiti addan a papeles",
"right-reupload-own": "Agisurat manen kadagiti addan a papeles a bukod nga inkarga",
"right-editmyuserjs": "Agurnos kadagiti bukodmo a papeles ti JavaScript ti agar-aramat",
"right-viewmywatchlist": "Agkita iti bukodmo a listaan ti bambantayan",
"right-editmywatchlist": "Agurnos iti bukodmo a listaan ti bambantayan. Laglagipen nga adda dagiti tignay a mangnayonto pay laeng ti pampanid urayno awan daytoy a karbengan.",
- "right-viewmyprivateinfo": "Agkita iti bukodmo a pribado a datos (kasla ti esurat a pagtaengan, pudno a nagan)",
- "right-editmyprivateinfo": "Agurnos iti bukodmo a pribado a datos (kasla ti esurat a pagtaengan, pudno a nagan)",
+ "right-viewmyprivateinfo": "Agkita iti bukodmo a pribado a datos (kasla ti adres ti esurat, pudno a nagan)",
+ "right-editmyprivateinfo": "Agurnos iti bukodmo a pribado a datos (kasla ti adres ti esurat, pudno a nagan)",
"right-editmyoptions": "Agurnos kadagiti bukodmo a kakaykayatan",
"right-rollback": "Napardas a mangisubli kadagiti inurnos ti naudi nga agar-aramat a nagurnos iti naisangayan a panid",
"right-markbotedits": "Agmarka kadagiti naipasubli nga urnos a kas inurnos dagiti bot",
"right-noratelimit": "Saan a maaringan babaen dagiti patingga ti gatad",
"right-import": "Agala ti pampanid manipud kadagiti sabali a wiki",
- "right-importupload": "Agala kadagiti panid manipud ti naikarga a papeles",
+ "right-importupload": "Agala kadagiti panid manipud iti naikarga a papeles",
"right-patrol": "Markaanna dagiti inurnos ti dadduma a kas napatruliaan",
"right-autopatrol": "Automatiko a mamarkaanna ti bukod nga inurnos a kas napatruliaan",
"right-patrolmarks": "Agkita kadagiti kaudian a binaliwan dagiti marka ti napatruliaan",
"grant-blockusers": "Serraan ken ikkaten ti serra dagiti agar-aramat",
"grant-createaccount": "Agpartuat kadagiti pakabilangan",
"grant-createeditmovepage": "Agpartuat, agurnos, ken agiyalis kadagiti panid",
- "grant-delete": "Agikkat kadagiti panid, dagit irebision, ken dagiti naikabil iti listaan",
+ "grant-delete": "Agikkat kadagiti panid, dagiti rebision, ken dagiti naikabil iti listaan",
"grant-editinterface": "Urnosen ti nagan ti espasio ti MediaWiki ken ti CSS/JavaScript ti agar-aramat",
"grant-editmycssjs": "Urnosen ti bukodmo a CSS/JavaScript ti agar-aramat",
"grant-editmyoptions": "Urnosem ti bukodmo a kakaykayatan ti agar-aramat",
"upload-form-label-infoform-categories": "Katkategoria",
"upload-form-label-infoform-date": "Petsa",
"upload-form-label-own-work-message-generic-local": "Pasingkedak nga ikarkargak daytoy a papeles a sumursurot kadagiti termino ti serbisio ken dagiti annuroten ti lisensia iti {{SITENAME}}.",
- "upload-form-label-not-own-work-message-generic-local": "No saanka a makaikarga iti daytoy a papeles babaen dagiti annuroten iti {{SITENAME}}, pangngaasi nga irekep daytoy a dialogo ken padasen ti sabali a pamay-an.",
+ "upload-form-label-not-own-work-message-generic-local": "No saanka a makaikarga iti daytoy a papeles babaen dagiti annuroten iti {{SITENAME}}, pangngaasi nga irikep daytoy a dialogo ken padasen ti sabali a pamay-an.",
"upload-form-label-not-own-work-local-generic-local": "Mabalinmo pay a padasen [[Special:Upload|ti kasisigud a pagikargaan a panid]].",
"upload-form-label-own-work-message-generic-foreign": "Maawatak nga agikarkargaak iti daytoy a papeles iti pagbibingayan a repositorio. Pasingkedak nga ar-aramidek a sumursurot kadagiti termino ti serbisio ken dagiti annuroten ti lisensia idiay.",
- "upload-form-label-not-own-work-message-generic-foreign": "No saanka a makaikarga iti daytoy a papeles babaen dagiti annuroten iti pagbibingayan a repositorio, pangngaasi nga irekep daytoy a dialogo ken padasen ti sabali a pamay-an.",
+ "upload-form-label-not-own-work-message-generic-foreign": "No saanka a makaikarga iti daytoy a papeles babaen dagiti annuroten iti pagbibingayan a repositorio, pangngaasi nga irikep daytoy a dialogo ken padasen ti sabali a pamay-an.",
"upload-form-label-not-own-work-local-generic-foreign": "Malinmo pay a padasen ti panagusar [[Special:Upload|ti panid a pagikargaan iti {{SITENAME}}]], no daytoy a panid ket mabalin a maikarga idiay babaen dagiti bukodda nga annuroten.",
"backend-fail-stream": "Saan a maipan ti papeles $1.",
"backend-fail-backup": "Saan a makaidulin ti kapada ti papeles ti $1.",
"img-auth-accessdenied": "Nalibak ti iseserrek",
"img-auth-nopathinfo": "Ti servermo ket saan a naisaad nga agipasa iti daytoy a pakaammo.\nMabalin a naibatay iti CGI ken saan a makasuporta ti img_auth.\nKitaen ti https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization .",
"img-auth-notindir": "Ti kiniddaw a dalan ket saan nga adda iti naaramid a direktorio ti pagikargaan",
- "img-auth-badtitle": "Saan a makaaramid ti umisu a titulo manipud ti \"$1\".",
+ "img-auth-badtitle": "Saan a makaaramid ti umisu a titulo manipud iti \"$1\".",
"img-auth-nologinnWL": "Saanka a nakastrek ken ti \"$1\" ket awan idiay mabalin a listaan.",
"img-auth-nofile": "Awan ti papeles ti \"$1\".",
"img-auth-isdir": "Padpadasem ti mangserrek ti direktorio ti \"$1\".\nTi laeng panagserrek ti papeles ti maipalubos.",
"nolicense": "Awan ti napili",
"licenses-edit": "Urnosen dagiti pagpilian ti lisensia",
"license-nopreview": "(Saan a magun-od ti panagipadas)",
- "upload_source_url": "(ti pinilim a papeles manipud ti umisu, ken publiko a maserrekan nga URL)",
- "upload_source_file": "(ti pinilim a papeles manipud ti kompiutermo)",
+ "upload_source_url": "(ti pinilim a papeles manipud iti umisu, ken publiko a maserrekan nga URL)",
+ "upload_source_file": "(ti pinilim a papeles manipud iti kompiutermo)",
"listfiles-delete": "ikkaten",
"listfiles-summary": "Daytoy nga espesial a panid ket agiparang kadagiti amin a naikarga a papeles.",
"listfiles_search_for": "Agbiruk para iti nagan ti midia:",
"doubleredirects": "Dagiti namindua a naibaw-ing",
"doubleredirectstext": "Daytoy a panid ket ilistana dagiti panid nga agbaw-ing kadagiti sabali a baw-ing a pampanid.\nIti tunggal maysa nga aray ket aglaon kadagiti silpo iti umuna ken maikadua a baw-ing, ken ti pay puntaan ti maikadua a baw-ing, nga isu ti \"pudno\" a puntaan ti panid, nga ti umuna a baw-ing ket isu koma ti pakaituduanna.\nNasolbaren dagiti <del>nakurosan</del> a naikabil.",
"double-redirect-fixed-move": "Naiyalisen ti [[$1]].\nAutomatiko idi a napabaro ken naibaw-ing tattan iti [[$2]].",
- "double-redirect-fixed-maintenance": "Automatiko nga agsimsimpa ti doble a baw-ing manipud ti [[$1]] iti [[$2]] iti panagtaripato nga obra.",
+ "double-redirect-fixed-maintenance": "Automatiko nga agsimsimpa ti doble a baw-ing manipud iti [[$1]] iti [[$2]] iti panagtaripato nga obra.",
"double-redirect-fixer": "Panagsimpa ti baw-ing",
"brokenredirects": "Dagiti naputed a baw-ing",
"brokenredirectstext": "Dagiti sumaganad a baw-ing ket nakasilpo kadagiti awan a panid:",
"ancientpages": "Dagiti kadaanan a panid",
"move": "Iyalis",
"movethispage": "Iyalis daytoy a panid",
- "unusedimagestext": "Adda dagiti sumaganad a papeles ngem saanda a naikabil iti aniaman a panid.\nPangngaasi a laglagipen a dagiti sabali a sitio ti web ket mabalin a nakasilpoda iti papeles iti dagus a URL, ken mabalin pay a nailista ditoy urayno saanda nga aktibo a maus-usar.",
+ "unusedimagestext": "Adda dagiti sumaganad a papeles ngem saanda a naikabil iti ania man a panid.\nPangngaasi a laglagipen a dagiti sabali a sitio ti web ket mabalin a nakasilpoda iti papeles iti dagus a URL, ken mabalin pay a nailista ditoy urayno saanda nga aktibo a maus-usar.",
"unusedcategoriestext": "Ti sumaganad a kategoria ti pampanid ket adda,urayno awan ti sabali a panid wenno kategoria ti agus-usar kaniada.",
"notargettitle": "Awan ti puntaan",
"notargettext": "Saanmo a nainagan ti puntaan a panid wenno agar-aramat ti mangtungpal iti daytoy nga annong.",
"apisandbox-multivalue-all-values": "$1 (Amin a patpateg)",
"booksources": "Dagiti taudan ti libro",
"booksources-search-legend": "Agbiruk para kadagiti taudan ti libro",
- "booksources-search": "Biruken",
+ "booksources-search": "Agbiruk",
"booksources-text": "Dita baba ket listaan dagiti silpo ti sabali a sitio nga aglaklako ti baro ken saan a nausar a liblibro, ken mabalin nga addaan pay iti adu a pakaammo a maipanggep kadagiti libro a birbirukem:",
- "booksources-invalid-isbn": "Ti naited nga ISBN ket kasla saan nga umisu; kitaen dagiti biddut ti panagtulad manipud ti kasisigud a taudan.",
+ "booksources-invalid-isbn": "Ti naited nga ISBN ket kasla saan nga umisu; kitaen dagiti biddut ti panagtulad manipud iti kasisigud a taudan.",
"magiclink-tracking-rfc": "Pampanid nga agus-usar kadagiti salamangka a silpo ti RFC",
"magiclink-tracking-rfc-desc": "Daytoy a panid ket agus-usar kadagiti salamangka a silpo ti RFC. Kitaen ti [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] no kasano iti mangiyakar.",
"magiclink-tracking-pmid": "Pampanid nga agus-usar kadagiti salamangka a silpo ti PMID",
"all-logs-page": "Amin a listaan a publiko",
"alllogstext": "Naikaykaysa a panagiparang kadagiti amin a magun-od a listaan iti {{SITENAME}}.\nMapabassitmo ti panagkita babaen ti panagpili ti kita ti listaan, ti nagan ti agar-aramat (sensitibo ti kadakkel ti letra), wenno ti naapektaran a panid (sensitibo pay ti kadakkel ti letra).",
"logempty": "Awan dagiti maipada a banag iti listaan.",
- "log-title-wildcard": "Agbiruk kadagiti titulo a mangrugi iti daytoy a testo",
+ "log-title-wildcard": "Agbiruk kadagiti titulo a mangrugi iti daytoy a teksto",
"showhideselectedlogentries": "Baliwan ti panagkita kadagiti napili a naikabil iti listaan",
"log-edit-tags": "Urnosen dagiti etiketa iti napili a listaan ti naikabkabil",
"checkbox-select": "Agpili: $1",
"linksearch": "Panagbiruk kadagiti akinruar a silpo",
"linksearch-pat": "Tabas ti panagbiruk:",
"linksearch-ns": "Nagan ti espasio:",
- "linksearch-ok": "Biruken",
+ "linksearch-ok": "Agbiruk",
"linksearch-text": "Dagiti naatap a tarheta a kas ti \"*.wikipedia.org\" ket mabalin nga usaren.\nMasapul ti saan a basbassit ngem kangatuan a dominio, kas pagarigan \"*.org\".<br />\n{{PLURAL:$2|Ti protokol|Dagiti protokol}} a nasuportaran: $1 (kasisigud iti http:// no awan ti nainaganan a protokol).",
- "linksearch-line": "Ti $1 ket naisilpo manipud ti $2",
+ "linksearch-line": "Ti $1 ket naisilpo manipud iti $2",
"linksearch-error": "Ti naatap a tarheta ket mabalin nga agparang laeng iti rugi ti nagan ti agsangaili.",
"listusersfrom": "Iparang dagiti agar-aramat a mangrugi iti:",
"listusers-submit": "Ipakita",
"listgrouprights-addgroup-self": "Agnayon {{PLURAL:$2|iti grupo|kadagiti grupo}} iti bukod a pakabilangan: $1",
"listgrouprights-removegroup-self": "Agikkat {{PLURAL:$2|iti grupo|kadagiti grupo}} manipud ti bukod a pakabilangan: $1",
"listgrouprights-addgroup-self-all": "Inayon amin dagiti grupo iti bukod a pakabilangan",
- "listgrouprights-removegroup-self-all": "Ikkatem amin dagiti grupo manipud ti bukod a pakabilangan",
+ "listgrouprights-removegroup-self-all": "Ikkatem amin dagiti grupo manipud iti bukod a pakabilangan",
"listgrouprights-namespaceprotection-header": "Dagiti panangigawid ti nagan ti espasio",
"listgrouprights-namespaceprotection-namespace": "Nagan ti espasio",
"listgrouprights-namespaceprotection-restrictedto": "Karbengan wenno karkarbengan a mangpalubos nga agurnos ti agar-aramat",
"hidden-category-category-desc": "Ti kategoria ket aglaon ti <code><nowiki>__HIDDENCAT__</nowiki></code> iti panid a linaonna, a mangpawil daytoy nga agparang kadagiti silpo ti kahon ti kategoria kadagiti panid babaen ti kasisigud.",
"trackingcategories-nodesc": "Awan ti magun-od a deskripsion.",
"trackingcategories-disabled": "Nabaldado ti kategoria",
- "mailnologin": "Awan ti pagipatulodan a pagtaengan",
- "mailnologintext": "Masapul a [[Special:UserLogin|nakastrekka]] ken adda umisu nga esurat a pagtaengan idiay [[Special:Preferences|kaykayatam]] tapno makaipatulod iti esurat kadagiti sabali nga agar-aramat.",
+ "mailnologin": "Awan ti pagipatulodan nga adres",
+ "mailnologintext": "Masapul a [[Special:UserLogin|nakastrekka]] ken adda umisu nga adres ti esurat iti [[Special:Preferences|kaykayatam]] tapno makaipatulod iti esurat kadagiti sabali nga agar-aramat.",
"emailuser": "Esuratan daytoy nga agar-aramat",
"emailuser-title-target": "Esuratam daytoy nga {{GENDER:$1|agar-aramat}}",
"emailuser-title-notarget": "Esuratan ti agar-aramat",
- "emailpagetext": "Mabalinmo nga usaren ti porma dita baba tapno makaipatulod iti esurat a mensahe iti daytoy nga {{GENDER:$1|agar-aramat}}.\nTi esurat nga inkabilmo iti [[Special:Preferences|kakaykayatam]] ket agparang a kas \"Naggapo\" a pagtaengan ti esurat, tapno ti nagipatulodam ket makasungbat kenka.",
+ "emailpagetext": "Mabalinmo nga usaren ti porma dita baba tapno makaipatulod iti mensahe ti esurat iti daytoy nga {{GENDER:$1|agar-aramat}}.\nTi esurat nga inkabilmo iti [[Special:Preferences|kakaykayatam]] ket agparang a kas \"Naggapo\" nga adres ti esurat, tapno ti nagipatulodam ket makasungbat kenka.",
"defemailsubject": "Esurat ti {{SITENAME}} a naggapo kenni \"$1\"",
"usermaildisabled": "Saanmo a mabalin ti agipatulod ti esurat",
"usermaildisabledtext": "Saanmo a mabalin ti agipatulod ti esurat kadagiti sabali nga agar-aramat iti daytoy a wiki",
- "noemailtitle": "Awan ti esurat a pagtaengan",
- "noemailtext": "Ti agar-aramat ket saan a nanginagan ti umisu nga esurat a pagtaengan.",
+ "noemailtitle": "Awan ti adres ti esurat",
+ "noemailtext": "Daytoy nga agar-aramat ket saan a nanginagan ti umisu nga adres ti esurat.",
"nowikiemailtext": "Ti agar-aramat ket mabalinna ti agpili a saan nga umawat iti esurat kadagiti sabali nga agar-aramat.",
"emailnotarget": "Awan wenno saan nga umisu a nagan ti agar-aramat para iti nagipatulodan.",
"emailtarget": "Ikabil ti nagan ti agar-aramat a pangitulodam",
"addedwatchtext": "Ti \"[[:$1]]\" ken ti tungtunganna a panid ket nainayonen iti [[Special:Watchlist|listaan ti bambantayam]].",
"addedwatchtext-talk": "Ti \"[[:$1]]\" ken ti mainaig a panidna ket nainayoen iti [[Special:Watchlist|bambantayam]].",
"addedwatchtext-short": "Ti panid ti \"$1\" ket nainayonen iti listaan ti bambantayam.",
- "removewatch": "Ikkaten manipud ti listaan ti bambantayan",
+ "removewatch": "Ikkaten manipud iti listaan ti bambantayan",
"removedwatchtext": "Ti \"[[:$1]]\" ken ti tungtunganna a panid ket naikkaten manipud iti [[Special:Watchlist|listaan ti bambantayam]].",
"removedwatchtext-talk": "Ti \"[[:$1]]\" ken ti mainaig a panidna ket naikkaten manipud iti [[Special:Watchlist|bambantayam]].",
- "removedwatchtext-short": "Ti panid ti \"$1\" ket naikkaten manipud ti listaan ti bambantayam.",
+ "removedwatchtext-short": "Ti panid ti \"$1\" ket naikkaten manipud iti listaan ti bambantayam.",
"watch": "Bantayan",
"watchthispage": "Bantayan daytoy a panid",
"unwatch": "Saanen a bantayan",
"log-name-contentmodel": "Listaan ti panagbaliw ti modelo ti linaon",
"log-description-contentmodel": "Dagiti pasamak a mainaig kadagiti modelo ti linaon ti panid",
"logentry-contentmodel-new": "{{GENDER:$2|Pinartuat}} ni $1 ti panid ti $3 a nagusar ti saan a kasisigud a modelo ti linaon ti \"$5\"",
- "logentry-contentmodel-change": "{{GENDER:$2|Binaliwan}} ni $1 ti modelo ti panid ti $3 manipud ti \"$4\" iti \"$5\"",
+ "logentry-contentmodel-change": "{{GENDER:$2|Binaliwan}} ni $1 ti modelo ti panid ti $3 manipud iti \"$4\" iti \"$5\"",
"logentry-contentmodel-change-revertlink": "isubli",
"logentry-contentmodel-change-revert": "isubli",
"protectlogpage": "Listaan ti panagsalaknib",
"protectlogtext": "Dita baba ket adda listaan dagiti sinukatan a salaknib ti panid.\nKitaen ti [[Special:ProtectedPages|listaan kadagiti nasalakniban a panid]] ti listaan kadagiti agdama a panagpataray a panagsalaknib ti panid.",
"protectedarticle": "nasalakniban ti \"[[$1]]\"",
"modifiedarticleprotection": "nasukatan ti agpang ti salaknib para iti \"[[$1]]\"",
- "unprotectedarticle": "naikkat ti salaknib manipud ti \"[[$1]]\"",
- "movedarticleprotection": "iyalis ti kasasaad ti salaknib manipud ti \"[[$2]]\" iti \"[[$1]]\"",
+ "unprotectedarticle": "naikkat ti salaknib manipud iti \"[[$1]]\"",
+ "movedarticleprotection": "iyalis ti kasasaad ti salaknib manipud iti \"[[$2]]\" iti \"[[$1]]\"",
"protect-title": "Sukatan ti agpang ti salaknib para iti \"$1\"",
"protect-title-notallowed": "Kitaen ti agpang ti salaknib ti \"$1\"",
"prot_1movedto2": "[[$1]] naiyalis iti [[$2]]",
"restriction-upload": "Agikarga",
"restriction-level-sysop": "napno a nasalakniban",
"restriction-level-autoconfirmed": "nasalakniban-bassit",
- "restriction-level-all": "aniaman nga agpang",
+ "restriction-level-all": "ania man nga agpang",
"undelete": "Kitaen dagiti naikkat a panid",
"undeletepage": "Kitaen ken isubli dagiti naikkat a panid",
"undeletepagetitle": "<strong>Ti sumaganad ket buklen dagiti naikkat a rebision ti [[:$1|$1]]</strong>.",
"undeleterevisions": "$1 {{PLURAL:$1|a rebision|kadagiti rebision}} ti naikkat",
"undeletehistory": "No ipasublim daytoy a panid, amin dagiti rebision ket maipasubli iti pakasaritaan.\nKet no adda baro a panid a kanagnaganna a naaramid ti napalabas a panagikkat, dagiti naipasubli a rebision ket agparang iti napalabas a pakasaritaan.",
"undeleterevdel": "Ti panagikkat ket saan a maaramid no agbanag iti rabaw ti panid, wenno ti rebision ti papeles ket maikkatan ti bassit.\nIti kastoy a kaso, masapul nga ikkatem ti kur-it wenno ikkatem ti lemmeng dagiti kabarbaro a naikkat a rebision.",
- "undeletehistorynoadmin": "Daytoy a panid ket naikkaten.\nTi rason ti panagikkat ket naipakita iti pakabuklan dita baba, ken dagita a salaysay ti agar-aramat a nagurnos iti daytoy a panid sakbay a naikkat.\nTi husto a testo dagitoy a naikat a rebision ket magun-od laeng dagiti administrador.",
+ "undeletehistorynoadmin": "Daytoy a panid ket naikkaten.\nTi rason ti panagikkat ket naipakita iti pakabuklan dita baba, ken dagita a salaysay ti agar-aramat a nagurnos iti daytoy a panid sakbay a naikkat.\nTi husto a teksto dagitoy a naikat a rebision ket magun-od laeng dagiti administrador.",
"undelete-revision": "Naikkat ti rebision ti $1 (manipud idi $4, $5) babaen ni $3:",
"undeleterevision-missing": "Imbalido wenno napukaw a rebision.\nAddaanka ngata ti madi a silpo, wenno ti rebision ket mabalin a naipasubli wenno naikkat manipud ti arkibo.",
"undeleterevision-duplicate-revid": "Saan a maisubli {{PLURAL:$1|ti maysa a rebision|dagiti $1 a rebision}}, gapu ta {{PLURAL:$1|ti bukona|dagiti bukodda}} nga <code>rev_id</code> ket naus-usaren.",
"undeleteviewlink": "kitaen",
"undeleteinvert": "Baliktaden ti napili",
"undeletecomment": "Rason:",
- "undeletedrevisions": "{{PLURAL:$1|1 a rebision|dagiti $1 a rebision}} ti naisubli",
- "undeletedrevisions-files": "{{PLURAL:$1|1 a rebision|dagiti $1 a rebision}} ken {{PLURAL:$2|1 a papeles|dagiti $2 a papeles}} ti naisubli",
- "undeletedfiles": "{{PLURAL:$1|1 a papeles|dagiti $1 a papeles}} ti naisubli",
"cannotundelete": "Napaay ti sangkabassit wenno amin iti panagisubli ti panagikkat:\n$1",
"undeletedpage": "<strong>Naisublin ti $1</strong>\n\nBinsiren ti [[Special:Log/delete|listaan ti panagikkat]] para iti rehistro dagiti kaudian panagikkat ken naisubsubli.",
"undelete-header": "Kitaen [[Special:Log/delete|ti listaan ti panagikkat]] kadagiti kaudian a naikkat a panid.",
- "undelete-search-title": "Biruken dagiti naikkat a panid",
- "undelete-search-box": "Biruken dagiti naikkat a panid",
+ "undelete-search-title": "Agbiruk kadagiti naikkat a panid",
+ "undelete-search-box": "Agbiruk kadagiti naikkat a panid",
"undelete-search-prefix": "Ipakita dagiti panid a mangrugi iti:",
- "undelete-search-submit": "Biruken",
+ "undelete-search-submit": "Agbiruk",
"undelete-no-results": "Awan dagiti kapada ti panid a nasarakan idiay arkibo ti panagikkat.",
"undelete-filename-mismatch": "Saan maisubli ti panagikkat ti rebision ti papeles nga adda oras ket petsana a $1: Saan nga agpada ti nagan ti papeles.",
"undelete-bad-store-key": "Saan a maisubli ti pinagikkat ti rebision ti papeles nga adda oras ket petsana a $1: Ti papeles ket napukaw sakbay a naikkat.",
"contributions-userdoesnotexist": "Ti pakabilangan ti agar-aramat ni \"$1\" ket saan a nakarehistro.",
"nocontribs": "Awan ti nasarakan a nasukatan a kapada dagitoy a kriteria.",
"uctop": "(agdama)",
- "month": "Manipud ti bulan (ken nasapsapa):",
- "year": "Manipud ti tawen (ken nasapsapa):",
+ "month": "Manipud iti bulan (ken nasapsapa):",
+ "year": "Manipud iti tawen (ken nasapsapa):",
"sp-contributions-newbies": "Iparang dagiti kontribusion dagiti kabarbaro a pakabilangan laeng",
"sp-contributions-newbies-sub": "Para kadagiti kabarbaro a pakabilangan",
"sp-contributions-newbies-title": "Dagiti kontribusion para kadagiti baro a pakabilangan",
"sp-contributions-talk": "tungtungan",
"sp-contributions-userrights": "panagtaripato kadagiti karbengan ti agar-aramat",
"sp-contributions-blocked-notice": "Agdama a naserraan daytoy nga agar-aramat.\nTi naudi a naikabil iti listaan ti pannakaserra ket naited dita baba para iti reperensia:",
- "sp-contributions-blocked-notice-anon": "Daytoy nga IP a pagtaengan ket agdama a naserraan.\nTi naudi a naikabil iti listaan ti pannakaserra ket adda dita baba para iti reperensia:",
+ "sp-contributions-blocked-notice-anon": "Daytoy nga adres ti IP ket agdama a naserraan.\nTi naudi a naikabil iti listaan ti pannakaserra ket adda dita baba para iti reperensia:",
"sp-contributions-search": "Agbiruk para kadagiti kontribusion",
- "sp-contributions-username": "IP a pagtaengan wenno nagan ti agar-aramat:",
+ "sp-contributions-username": "Adres ti IP wenno nagan ti agar-aramat:",
"sp-contributions-toponly": "Ipakita laeng dagiti inurnos dagiti kaudian a rebision",
"sp-contributions-newonly": "Ipakita laeng dagiti inurnos a pannakapartuat ti pampanid",
"sp-contributions-hideminor": "Ilemmeng dagiti bassit a panagurnos",
- "sp-contributions-submit": "Biruken",
+ "sp-contributions-submit": "Agbiruk",
"whatlinkshere": "Dagiti nakasilpo ditoy",
"whatlinkshere-title": "Pampanid a nakasilpo iti \"$1\"",
"whatlinkshere-page": "Panid:",
"blockip": "Serraan ti {{GENDER:$1|agar-aramat}}",
"blockip-legend": "Serraan ti agar-aramat",
"blockiptext": "Usaren ti porma dita baba tapno maserraan ti panagserrek ti panagsurat manipud iti naisangayan nga adres ti IP wenno nagan ti agar-aramat.\nDaytoy ket nasken laeng a maaramid tapno mapawilan ti bandalismo, ken segun iti [[{{MediaWiki:Policy-url}}|annuroten]].\nIkabil ti naisangayan a rason dita baba (kas pagarigan, ti panagdakamat kadagiti naisangayan a panid a nabandalismo).\nMabalinmo a serraan dagiti sakup ti adres ti IP babaen ti panagusar ti sintaksis ti [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; ti kadakkelan a maipalubos a sakup ket /$1 para iti IPv4 ken /$2 para iti IPv6.",
- "ipaddressorusername": "IP a pagtaengan wenno nagan ti agar-aramat:",
+ "ipaddressorusername": "Adres ti IP wenno nagan ti agar-aramat:",
"ipbexpiry": "Agpaso:",
"ipbreason": "Rason:",
"ipbreason-dropdown": "*Dagiti kadawyan a rason ti panagserra\n** Agikabil kadagiti madi a pakaammo\n** Agikkat kadagiti linaon ti pampanid\n** Agikabil ti spam a silpo iti ruar\n** Agikabil ti minamaag/saan a maawatan a pampanid\n** Mangbutbuteng a panagkukua /mangriribok\n** Agab-abuso kadagiti nadumaduma a pakabilangan\n** Saan a maawat a nagan ti agar-aramat",
- "ipb-hardblock": "Iparit dagiti nakastrek nga agar-aramat manipud ti panagurnos manipud ti daytoy nga IP a pagtaengan",
+ "ipb-hardblock": "Iparit dagiti nakastrek nga agar-aramat manipud iti panagurnos manipud iti daytoy nga adres ti IP",
"ipbcreateaccount": "Pawilan ti panagpartuat iti pakabilangan",
"ipbemailban": "Pawilan ti agar-aramat nga agipatulod iti esurat",
- "ipbenableautoblock": "Automatiko a mangserra ti naudi nga IP a pagtaengan nga inusar daytoy nga agar-aramat, ken dagiti sumaruno nga IP a pagtaengan nga ayan ti pangipadasanda nga agurnos",
+ "ipbenableautoblock": "Automatiko a mangserra ti naudi nga adres ti IP nga inusar daytoy nga agar-aramat, ken dagiti sumaruno nga adres ti IP nga ayan ti pangipadasanda nga agurnos",
"ipbsubmit": "Serraan daytoy nga agar-aramat",
"ipbother": "Sabali nga oras:",
"ipboptions": "2 nga oras:2 hours,1 nga aldaw:1 day,3 nga aldaw:3 days,1 a lawas:1 week,2 a lawas:2 weeks,1 a bulan:1 month,3 a bulan:3 months,6 a bulan:6 months,1 a tawen:1 year,awan inggana:infinite",
"ipb-disableusertalk": "Pawilan daytoy nga agar-aramat nga agurnos kadagiti bukodda a tungtungan a panid bayat a naserraan",
"ipb-change-block": "Serraan manen ti agar-aramat kadagitoy a pannakaisaad",
"ipb-confirm": "Pasingkedan ti serra",
- "badipaddress": "Imbalido nga IP a pagtaengan",
+ "badipaddress": "Imbalido nga adres ti IP",
"blockipsuccesssub": "Balligi ti panangserra",
"blockipsuccesstext": "Ni [[Special:Contributions/$1|$1]] ket naserraanen.<br />\nKitaen ti [[Special:BlockList|listaan ti serra]] tapno marepaso dagiti serra.",
"ipb-blockingself": "Mangrugrugika nga agserra kenka! Sigurado a kayatmo nga aramiden daytoy?",
"ipb-confirmaction": "No sigurado a kayatmo nga aramiden daytoy, pangngaasi a kitaen ti \"{{int:ipb-confirm}}\" a pagikabilan dita baba.",
"ipb-edit-dropdown": "Urnosen dagiti rason ti panagserra",
"ipb-unblock-addr": "Lukatan ti serra ni $1",
- "ipb-unblock": "Lukatan ti serra ti nagan ti agar-aramat wenno IP a pagtaengan",
+ "ipb-unblock": "Lukatan ti serra ti nagan ti agar-aramat wenno adres ti IP",
"ipb-blocklist": "Kitaen dagiti adda a serra",
"ipb-blocklist-contribs": "Dagiti kontribusion para kenni {{GENDER:$1|$1}}",
"ipb-blocklist-duration-left": "$1 ti nabati",
"unblockip": "Lukatan ti serra ti agar-aramat",
- "unblockiptext": "Usaren ti porma dita baba tapno maisubli ti panagserrek ti panagsurat ti dati a naserran nga IP a pagtaengan wenno nagan ti agar-aramat.",
+ "unblockiptext": "Usaren ti porma dita baba tapno maisubli ti panagserrek ti panagsurat ti dati a naserran nga adres ti IP wenno nagan ti agar-aramat.",
"ipusubmit": "Ikkaten daytoy a serra",
"unblocked": "Naikkat ti pannakaserra ni [[User:$1|$1]].",
"unblocked-range": "Naikkaten ti serra ti $1.",
"blocklist-by": "Ti nagserra nga admin",
"blocklist-params": "Dagiti parametro ti serra",
"blocklist-reason": "Rason",
- "ipblocklist-submit": "Biruken",
+ "ipblocklist-submit": "Agbiruk",
"ipblocklist-localblock": "Lokal a serra",
"ipblocklist-otherblocks": "Sabali {{PLURAL:$1|a serra|kadagiti serra}}",
"infiniteblock": "inggana't inggana",
"emailblock": "nabaldado ti esurat",
"blocklist-nousertalk": "saan a mabalin nga agurnos ti bukod a tungtungan a panid",
"ipblocklist-empty": "Awan linaon ti listaan ti serra.",
- "ipblocklist-no-results": "Ti kiniddaw nga IP a pagtaengan wenno nagan ti agar-aramat ket saan a naserraan.",
+ "ipblocklist-no-results": "Ti kiniddaw nga adres ti IP wenno nagan ti agar-aramat ket saan a naserraan.",
"blocklink": "serraan",
"unblocklink": "ikkaten ti serra",
"change-blocklink": "baliwan ti serra",
"blocklog-showsuppresslog": "Daytoy nga agar-aramat ket dati a naserraan ken nailemmeng.\nTi listaan ti panagpasardeng ket naikabil dita baba para iti reperensia:",
"blocklogentry": "naserraan ni [[$1]] nga adda ti oras a panagpaso iti $2 $3",
"reblock-logentry": "sinukatan ti pannakaserra para kenni [[$1]] nga adda ti oras a panagpaso iti $2 $3",
- "blocklogtext": "Daytoy ket listaan ti agar-aramat kadagiti panagserra ken panaglukat ti serra\nDagiti automatiko a panakaserra ti IP a pagtaengan ket saan a nailista.\nKitaen ti [[Special:BlockList|listaan ti serra]] para iti listaan kadagiti agdama a naiparit a pagpataray ken dagiti serra.",
+ "blocklogtext": "Daytoy ket listaan ti agar-aramat kadagiti panagserra ken panaglukat ti serra\nDagiti automatiko a pannakaserra ti adres ti IP ket saan a nailista.\nKitaen ti [[Special:BlockList|listaan ti serra]] para iti listaan kadagiti agdama a panangiparit ti pagpataray ken dagiti serra.",
"unblocklogentry": "lukatan ti serra ni $1",
"block-log-flags-anononly": "dagiti di ammo nga agar-aramat laeng",
"block-log-flags-nocreate": "nabaldado ti panagpartuat ti pakabilangan",
"ipb-otherblocks-header": "Sabali {{PLURAL:$1|a naserraan|kadagiti naserraan}}",
"unblock-hideuser": "Saanmo a maisubli ti serra daytoy nga agar-aramat, nailemmengen ti nagan daytoy nga agar-aramat.",
"ipb_cant_unblock": "Biddut: San a nabirukan ti ID $1 ti serra. Mabalin a nalukatanen ti serrana.",
- "ipb_blocked_as_range": "Biddut: Ti IP a pagtaengan ti $1 ket saan a dagus a naserraan ken saan a malukatan ti serrana.\nNgem, nupay kasta, naserran a kas paset ti sakop ti $2, a mabalin a malukatan ti serrana.",
+ "ipb_blocked_as_range": "Biddut: Ti adres ti IP ti $1 ket saan a dagus a naserraan ken saan a malukatan ti serrana.\nNgem, nupay kasta, naserran a kas paset ti sakop ti $2, a mabalin a malukatan ti serrana.",
"ip_range_invalid": "Imbalido a sakop ti IP.",
"ip_range_toolarge": "Dagiti serra a nasakop a dakdakkel ngem /$1 ket saan a maipalubos.",
"proxyblocker": "Pannakbagi a panagserra",
"proxyblockreason": "Ti IP a pagtaengam ket naserraan ngamin ket daytoy ket nakalukat a panakbagi.\nPangngaasi a kontakem ti agit-ited ti serbisio ti Internetmo wenno teknikal a suporta ti gunglom ken ibagam kaniada ti nakaro a parikut ti seguridad.",
"sorbsreason": "Ti IP a pagtaengam ket nailista a kasla \"nalukatan a pannakbagi\" iti DNSBL nga inusar babaen ti {{SITNAME}}.",
"sorbs_create_account_reason": "Ti IP a pagtaengam ket nailista a kasla \"nalukatan a pannakbagi\" iti DNSBL nga inusar babaen ti {{SITNAME}}.\nSaanka a makapartuat ti pakabilangan.",
- "xffblockreason": "Ti maysa nga IP a pagtaengan nga adda iti X-Forwarded-For header, mabalin a kukuam wenno ti pannakbagi a server nga us-usarem, ket naserraan. Ti kasisigud a rason ti pannakaserra idi ket: $1",
+ "xffblockreason": "Ti maysa nga adres ti IP nga adda iti paulo ti X-Forwarded-For, mabalin a kukuam wenno ti pannakbagi a server nga us-usarem, ket naserraan. Ti kasisigud a rason ti pannakaserra idi ket: $1",
"cant-see-hidden-user": "Ti agar-aramat a kayatmo a serraan ket naserraanen ken nailemmeng.\nGapu ta awan met ti karbengam nga agilemming ti agar-aramat, saanmo a makita wenno maurnos ti serra ti agar-aramat.",
"ipbblocked": "Saanmo a mabalin ti agserra wenno agikkat ti serra ti sabali nga agar-aramat, ngamin ket naserraanka met.",
"ipbnounblockself": "Saanmo a mabalin a lukatan ti serram.",
"movepagetext-noredirectfixer": "Ti panagusar ti kinabuklan dita baba, ket panaganan ti panid, iyalisna amin ti pakasaritaanna iti baro a nagan.\nTi daan a titulo ket agbalin baw-ing a panid idiay baro a titulo.\nSiguraduem a kitaen ti [[Special:DoubleRedirects|doble]] wenno [[Special:BrokenRedirects|nadadael a baw-ing]].\nRebbengem ti mangpatalged nga amin a silpo ket agtultuloy a nakatudo iti nasken a papananda.\n\nLaglagipen a ti panid ket <strong>saan</strong> a maiyalis no addaan iti sigud a panid iti baro a titulo, malaksid no awan linaonna wenno no maysa a baw-ing a panid ken awan ti panagbaliw iti pakasaritaan ti napalabas. \nKayat a sawen daytoy a mabalinmo a sukatan ti nagan ti maysa a panid manipud iti punto ti pannakasukat ti nagan no nagbiddutka, ken saanmo a mabalin a suratan manen ti addaan a panid.\n\n<strong>Nota:</strong>\nMabalin a maysa daytoy a nakaro ken saan a bigla a panagbaliw iti maysa a nasikat a panid;\npangngaasim ta pasingkedam a maawatam ti ibunga daytoy sakbay nga agtuloyka a mangbaliw.",
"movepagetalktext": "No kur-item daytoy a kahon, automatikonto a maiyalis ti mainaig a tungtungan a panid, malaksid no addanto idiay iti adda linaon a tungtungan a panid.\n\nIti daytoy a kaso, masapul nga iyalis wenno manual nga itiponmo ti panid no kayatmo.",
"moveuserpage-warning": "<strong>Ballaag:</strong> Mangrugrugika nga agiyalis ti panid ti agar-aramat. Pangngaasi a laglapipen a ti panid ket isu laeng ti maiyalis ken ti agar-aramat ket <em>saanto</em> a managanan.",
- "movecategorypage-warning": "<strong>Ballaag:</strong> Mangiyal-aliskan iti panid ti kategoria. Pangngaasi a laglagipen a ti maiyalisto laeng ket ti panid ken ti aniaman a pampanid iti daan a kategoria ket <em>saanto</em> a maikategoria iti baro.",
+ "movecategorypage-warning": "<strong>Ballaag:</strong> Mangiyal-aliskan iti panid ti kategoria. Pangngaasi a laglagipen a ti maiyalisto laeng ket ti panid ken ti ania man a pampanid iti daan a kategoria ket <em>saanto</em> a maikategoria iti baro.",
"movenologintext": "Masapul a nakarehistroka nga agar-aramat ken [[Special:UserLogin|nakastrek]] tapno makaiyalis iti panid.",
"movenotallowed": "Awan ti pammalubosmo nga agiyalis kadagiti panid.",
"movenotallowedfile": "Awan ti pammalubosmo nga agiyalis kadagiti papeles.",
"cant-move-to-user-page": "Awan ti pammalubosmo nga agiyalis ti panid iti panid ti agar-aramat (malaksid kadagiti subpanid ti agar-aramat).",
"cant-move-category-page": "Awan ti pammalubosmo nga agiyalis kadagiti panid ti kategoria.",
"cant-move-to-category-page": "Awan ti pammalubosmo nga agiyalis ti panid iti panid ti kategoria.",
+ "cant-move-subpages": "Awan pammalubosmo nga agiyalis kadagiti subpanid.",
+ "namespace-nosubpages": "Saan a mangipalubos kadagiti subpanid ti nagan ti espasio ti \"$1\".",
"newtitle": "Baro a titulo:",
"move-watch": "Bantayan ti taudan a panid ken puntaan a panid",
"movepagebtn": "Iyalis ti panid",
"movepage-moved-redirect": "Napartuaten ti maysa a baw-ing.",
"movepage-moved-noredirect": "Napasardeng ti pannakapartuat ti baw-ing.",
"articleexists": "Adda panid nga adda ti kastan a nagan, wenno ti nagan a pinilim ket saan a mabalin.\nPangngaasi nga agpili ti sabali a nagan.",
- "cantmove-titleprotected": "Saanmo a maiyalis ti panid iti daytoy a lokasion ngamin ket ti baro a titulo ket nasalakniban manipud ti pannakapartuat",
+ "cantmove-titleprotected": "Saanmo a maiyalis ti panid iti daytoy a lokasion ngamin ket ti baro a titulo ket nasalakniban manipud iti pannakapartuat",
"movetalk": "Iyalis ti mainaig a panid ti tungtungan",
"move-subpages": "Iyalis dagiti subpanid (aginggana iti $1)",
"move-talk-subpages": "Iyalis dagiti subpanid ti tungtungan ti panid (aginggana iti $1)",
"revertmove": "isubli",
"delete_and_move_text": "Addan ti pangipanan a panid ti \"[[:$1]]\".\nKayatmo nga ikkaten daytoy tapno makaiyaliska?",
"delete_and_move_confirm": "Wen, ikkaten ti panid",
- "delete_and_move_reason": "Naikkat tapno mawayaan ti pannaka-iyalis manipud ti \"[[$1]]\"",
+ "delete_and_move_reason": "Naikkat tapno mawayaan ti pannaka-iyalis manipud iti \"[[$1]]\"",
"selfmove": "Ti titulo ti taudan ken ti pangipanan ket agpadpada;\nsaanmo a maiyalis ti panid ti isu met laeng a panid.",
"immobile-source-namespace": "Saan a maiyalis dagiti panid iti nagan ti espasio ti \"$1\"",
"immobile-target-namespace": "Saan a maiyalis dagiti panid iti nagan ti espasio ti \"$1\"",
"immobile-target-namespace-iw": "Ti silpo nga interwiki ket saan nga umiso a puntaan para iti panagiyalis ti panid.",
"immobile-source-page": "Saan a mabalin nga iyalis daytoy a panid.",
"immobile-target-page": "Saan a maiyalis iti dayta a pangipanan a titulo.",
- "bad-target-model": "Ti kinaykayat a pangipanan ket agus-usar ti sabali a modelo ti linaon. Saan a mapagbaliwen manipud ti $1 iti $2.",
+ "bad-target-model": "Ti kinaykayat a pangipanan ket agus-usar ti sabali a modelo ti linaon. Saan a mapagbaliwen manipud iti $1 iti $2.",
"imagenocrossnamespace": "Saan a maiyalis ti papeles iti saan nagan ti espasio ti papeles",
"nonfile-cannot-move-to-file": "Saan a maiyalis ti saan a papeles iti nagan ti espasio ti papeles",
"imagetypemismatch": "Ti baro a pagpaatiddog ti papeles ket saan a maipada iti bukodna a kita",
"imageinvalidfilename": "Ti puntaan a nagan ti papeles ket imbalido",
- "fix-double-redirects": "Agpabaro kadagiti aniaman a baw-ing a mangipatudo ti kasisigud a titulo",
+ "fix-double-redirects": "Agpabaro kadagiti ania man a baw-ing a mangipatudo ti kasisigud a titulo",
"move-leave-redirect": "Mangibati ti baw-ing",
"protectedpagemovewarning": "<strong>Balaag:</strong> Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan ti gundaway nga administrador ti makaiyalis.\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
"semiprotectedpagemovewarning": "<strong>Nota:</strong> Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaiyalis daytoy.\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
"move-over-sharedrepo": "Addan ti [[:$1]] iti pagbingayan a repositorio. Ti panagiyalis ti papeles iti daytoy a titulo ket tuonenna ti pagbingayan a papeles.",
"file-exists-sharedrepo": "Ti napilim a nagan ti papeles ket naususaren iti pagbingayan a repositorio.\nPangngaasi nga agpilika ti sabali a nagan.",
"export": "Agipan kadagiti panid",
- "exporttext": "Maipanmo ti testo ken pakasaritaan ti inurnos iti maysa a panid wenno pampanid a nabalkut ti XML.\nDaytoy ket mabalin a maikabil iti sabali a wiki nga agususar ti MediaWiki nga usaren ti [[Special:Import|pinagala ti panid]].\n\nTi pinagipan ti panid, ikabil ti titulo dita kahon ti testo dita baba, maysa a titulo iti maysa a linia, ken agpili ka no ti kayatmo ket ti agdama a pinagbaliw ken amin nga daan a panagbalbaliw, nga addaan ti linia ti pakasaritaan ti pampanid, wenno ti agdama a panagbaliw nga addaan ti pakaammo a maipapan ti kinaudi a panagurnos.\n\nNo iti kinaudi a kaso mabalinmo nga usaren ti silpo, a kas pagarigan [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para iti panid \"[[{{MediaWiki:Mainpage}}]]\".",
+ "exporttext": "Maipanmo ti teksto ken pakasaritaan ti inurnos iti maysa a panid wenno pampanid a nabalkut ti XML.\nDaytoy ket mabalin a maikabil iti sabali a wiki nga agus-usar ti MediaWiki nga usaren ti [[Special:Import|pinagala ti panid]].\n\nTi pinagipan ti panid, ikabil ti titulo dita kahon ti teksto dita baba, maysa a titulo iti maysa a linia, ken agpilika no ti kayatmo ket ti agdama a panagbaliw ken amin nga daan a panagbalbaliw, nga addaan ti linia ti pakasaritaan ti pampanid, wenno ti agdama a panagbaliw nga addaan ti pakaammo a maipapan ti kinaudi a panagurnos.\n\nNo iti kinaudi a kaso mabalinmo nga usaren ti silpo, a kas pagarigan [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para iti panid \"[[{{MediaWiki:Mainpage}}]]\".",
"exportall": "Ipan amin a pampanid",
"exportcuronly": "Iraman laeng ti kinaudi a panagbaliw, saan a ti napno a pakasaritaan",
"exportnohistory": "----\n<strong>Nota:</strong> Ti pagipapan dagiti napno a pakasaritaan dagiti panid iti daytoy a kinabuklan ket nabaldado gapu dagiti pannakalaing ti panagandar a rason.",
"exportlistauthors": "Iraman ti amin a listaan kadagiti nagaramid iti tunggal a maysa a panid",
"export-submit": "Agipan",
- "export-addcattext": "Agnayon kadagiti panid manipud ti kategoria:",
+ "export-addcattext": "Agnayon kadagiti panid manipud iti kategoria:",
"export-addcat": "Inayon",
- "export-addnstext": "Agnayon kadagiti panid manipud ti nagan ti espasio:",
+ "export-addnstext": "Agnayon kadagiti panid manipud iti nagan ti espasio:",
"export-addns": "Inayon",
"export-download": "Idulin a kas papeles",
"export-templates": "Mangiraman kadagiti plantilia",
"export-manual": "Manual nga inayon dagiti panid:",
"allmessages": "Dagiti mensahe ti sistema",
"allmessagesname": "Nagan",
- "allmessagesdefault": "Kasisigud a testo ti mensahe",
- "allmessagescurrent": "Agdama a testo ti mensahe",
+ "allmessagesdefault": "Kasisigud a teksto ti mensahe",
+ "allmessagescurrent": "Agdama a teksto ti mensahe",
"allmessagestext": "Daytoy ti listaan dagiti mensahe ti sistema a magun-od iti nagan ti espasio ti MediaWiki.\nPangngaasi a bisitaen ti [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Lokalisasion ti MediaWiki] ken [https://translatewiki.net translatewiki.net] no kayatmo ti agparawad kadagiti sapasap a panagipatarus ti MediaWiki.",
"allmessagesnotsupportedDB": "Daytoy a panid ket saan a musar gapu ta nabaldado ti <strong>$wgUseDatabaseMessages</strong>.",
"allmessages-filter-legend": "Sagat",
"thumbnail-more": "Padakkelen",
"filemissing": "Awan ti papeles",
"thumbnail_error": "Biddut ti panagpartuat ti bassit a ladawan: $1",
- "thumbnail_error_remote": "Biddut a mensahe manipud ti $1: \n$2",
+ "thumbnail_error_remote": "Biddut a mensahe manipud iti $1: \n$2",
"djvu_page_error": "Ti DjVu a panid ket saan a masakop",
"djvu_no_xml": "Saan a naala ti XML iti DjVu a papeles",
"thumbnail-temp-create": "Saan a makapartuat ti temporario a bassit a ladawan ti papeles",
"import-mapping-subpage": "Alaen a kas dagiti subpanid ti sumaganad a panid:",
"import-upload-filename": "Nagan ti papeles:",
"import-comment": "Komentario:",
- "importtext": "Pangngaasi nga ipanmo ti papeles manipud ti nagtaudan a wiki nga agusar ti [[Special:Export|ramit ti panagipan]].\nIdulinmo iti bukodmo a kompiuter ken ikarga ditoy.",
+ "importtext": "Pangngaasi nga ipanmo ti papeles manipud iti nagtaudan a wiki nga agusar ti [[Special:Export|ramit ti panagipan]].\nIdulinmo iti bukodmo a kompiuter ken ikarga ditoy.",
"importstart": "Agal-ala kadagiti panid...",
"import-revision-count": "$1 {{PLURAL:$1|a rebision|kadagiti rebision}}",
"importnopages": "Awan dagiti maala a panid.",
"xml-error-string": "$1 iti linia $2, tukol $3 (byte $4): $5",
"import-upload": "Ikarga ti datos ti XML",
"import-token-mismatch": "Pannakapukaw ti sesion ti datos.\n\nMabalin a nakaruarka. <strong>Pangngaasi a pasingkedan a nakastrekka pay laeng ken padasem manen</strong>.\nNo saan pay a mabalin, padasem ti [[Special:UserLogout|rummuar]] ken sumrek manen, ken kitaen no ti pagpasabasam ket mangipalubos kadagiti galieta manipud iti daytoy a sitio.",
- "import-invalid-interwiki": "Saan a makaala manipud ti nainaganan a wiki.",
+ "import-invalid-interwiki": "Saan a makaala manipud iti nainaganan a wiki.",
"import-error-edit": "Ti panid ti \"$1\" ket saan idi a naala ngamin ket saanmo a mabalin nga urnosen.",
"import-error-create": "Ti panid ti \"$1\" ket saan idi a naala ngamin ket saanmo a mabalin a partuaten.",
"import-error-interwiki": "Ti panid ti \"$1\" ket saan idi a naala ngamin ket ti nagan ket naireserba para iti ruar a panagsilpo (interwiki).",
"import-rootpage-invalid": "Ti naited a ramut ti panid ket imbalido a titulo.",
"import-rootpage-nosubpage": "Ti nagan ti espasio ti \"$1\" iti ramut ti panid ket saan a mangpalubos kadagiti subpanid.",
"importlogpage": "Listaan ti panagala",
- "importlogpagetext": "Dagiti administratibo a panagala kadagiti panid nga addaan iti pakasaritaan ti panag-urnos manipud kadagiti sabali a wiki.",
+ "importlogpagetext": "Dagiti administratibo a panagala kadagiti panid nga addaan iti pakasaritaan ti panagurnos manipud kadagiti sabali a wiki.",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|a rebision|kadagiti rebision}} ti naala",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|rebision|dagiti rebision}} ti naala manipud ti $2",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|rebision|dagiti rebision}} ti naala manipud iti $2",
"javascripttest": "Panagsubok ti JavaScript",
"javascripttest-pagetext-unknownaction": "Di ammo a tignay ti \"$1\".",
"javascripttest-qunit-intro": "Kitaen ti [ $1 dukomentasion ti panagsubok] idiay mediawiki.org.",
"tooltip-pt-userpage": "Panidmo nga agar-aramat",
- "tooltip-pt-anonuserpage": "Ti panid ti agar-aramat para iti daytoy nga IP a pagtaengan a kas ur-urnosem",
+ "tooltip-pt-anonuserpage": "Ti panid ti agar-aramat para iti daytoy nga adres ti IP a kas ur-urnosem",
"tooltip-pt-mytalk": "Tungtungam a panid",
"tooltip-pt-anontalk": "Pakitungtungan a maipanggep kadagiti panagurnos manipud iti daytoy nga adres ti IP",
"tooltip-pt-preferences": "Dagiti kakaykayatam",
"tooltip-ca-undelete": "Isubli dagiti inurnos a naaramid iti daytoy a panid sakbay idi naikkat",
"tooltip-ca-move": "Iyalis daytoy a panid",
"tooltip-ca-watch": "Inayon daytoy a panid iti listaan ti bambantayam",
- "tooltip-ca-unwatch": "Ikkaten daytoy a panid manipud ti listan ti bambantayam",
+ "tooltip-ca-unwatch": "Ikkaten daytoy a panid manipud iti listan ti bambantayam",
"tooltip-search": "Agbiruk iti {{SITENAME}}",
"tooltip-search-go": "Inka idiay panid nga adda kastoy a naganna no adda",
- "tooltip-search-fulltext": "Biruken dagiti panid para iti daytoy a testo",
+ "tooltip-search-fulltext": "Agbiruk kadagiti panid para iti daytoy a teksto",
"tooltip-p-logo": "Sarungkaran ti umuna a panid",
"tooltip-n-mainpage": "Sarungkaran ti umuna a panid",
"tooltip-n-mainpage-description": "Sarungkaran ti umuna a panid",
"creditspage": "Dagiti pammadayaw ti panid",
"nocredits": "Awan dagiti pakaammo ti pammadayaw a magun-od para iti daytoy a panid.",
"spamprotectiontitle": "Panagsalaknib a sagat para iti spam",
- "spamprotectiontext": "Ti testo a kayatmo nga idulin ket sinerraan babaen ti sagat ti spam.\nDaytoy ket mabalin a gapuanan babaen ti silpo a naiparit ti akin ruar a sitio.",
- "spamprotectionmatch": "Ti sumaganad a testo ket isu ti nangkalbit ti sagat ti spam: $1",
+ "spamprotectiontext": "Ti teksto a kayatmo nga idulin ket sinerraan babaen ti sagat ti spam.\nDaytoy ket mabalin a gapuanan babaen ti silpo a naiparit ti akinruar a sitio.",
+ "spamprotectionmatch": "Ti sumaganad a teksto ket isu ti nangkalbit ti sagat ti spam: $1",
"spambot_username": "Panagdalus iti spam ti MediaWiki",
"spam_reverting": "Ipasubli ti naudi a rebision nga awan dagiti linaon a silpo iti $1",
"spam_blanking": "Amin dagiti rebision ket aglaon kadagiti silpo iti $1, iblanko",
"newimages-showbots": "Ipakita dagiti naikarga babaen dagiti bot",
"newimages-hidepatrolled": "Ilemmeng dagiti panangikarga a napatruliaan",
"noimages": "Awan ti makita.",
- "ilsubmit": "Biruken",
+ "ilsubmit": "Agbiruk",
"bydate": "babaen ti petsa",
"sp-newimages-showfrom": "Iparang dagiti baro a papeles a mangrugi manipud idi $2, $1",
"seconds": "{{PLURAL:$1|$1 a segundo|$1 a segsegundo}}",
"confirmemail_needlogin": "Masapulmo ti $1 tapno mapasingkedan ti esurat a pagtaengam.",
"confirmemail_success": "Napasingkedanen ti esurat a pagtaengam.\nMabalinmo tattan ti [[Special:UserLogin|sumrek]] ken nanamen ti wiki.",
"confirmemail_loggedin": "Napasingkedanen ti esurat a pagtaengam.",
- "confirmemail_subject": "Pammasingked ti esurat a pagtaengan ti {{SITENAME}}",
- "confirmemail_body": "Addaan, baka sika, ti naggapu ti IP a pagtaengan $1,\nket nagrehistro ti pakabilangan \"$2\" iti daytoy nga esurat a pagtaengan idiay {{SITENAME}}\n\nTapno mapasingkedan a daytoy a pakabilangan ket kukuam ken ti \npinagpabalin ti esurat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:\n\n$3\n\nNo *saanmo* nga inrehistro ti pakabilangam, surotem daytoy a panilpo\nta pasardengem ti pinakasingkedan ti esurat a pagtaengam:\n\n$5\n\nDaytoy a pammasingked a kodigo ket agpaso iti $4.",
- "confirmemail_body_changed": "Addaan, baka sika, ti naggapu ti IP a pagtaengam $1,\nket nangsukat ti esurat a pagtaengan ti pakabilangan \"$2\" iti daytoy a pagtaengan idiay {{SITENAME}}\n\nTapno mapasingkedan daytoy a pakabilangan ket kukuam ken ti \npanagpabalin ti esurat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:\n\n$3\n\nNo *saanmo* nga inrehistro ti pakabilangam, surutem daytoy a panilpo\nta pasardengem ti pinakasingkedan ti esurat a pagtaengam:\n\n$5\n\nDaytoy a kodigo a pasingkedan ket agpaso iti $4.",
- "confirmemail_body_set": "Addaan, baka sika met laeng, manipud ti IP a pagtaengan ti $1,\nket nangikabil ti esurat a pagtaengan ti pakabilangan ti \"$2\" iti daytoy a pagtaengan idiay {{SITENAME}}\n\nTapno mapasingkedan daytoy a pakabilangan ket agpayso a kukuam ken \npakabaelan dagiti esurat a langa idiay {{SITENAME}}, lukatam daytoy a silpo idiay pabasabasam:\n\n$3\n\nNo daytoy a pakabilangan ket *saanmo* a kukua, surutem daytoy a silpo\ntapno ukasen ti panagpasingked ti esurat a pagtaengan:\n\n$5\n\nDaytoy a panagpasingked ti kodigo ket agpaso intono $4.",
+ "confirmemail_subject": "Pammasingked ti adres ti esurat ti {{SITENAME}}",
+ "confirmemail_body": "Addaan, baka sika, ti naggapu ti adres ti IP ti $1,\nket nagrehistro ti pakabilangan \"$2\" iti daytoy nga adres ti esurat iti {{SITENAME}}\n\nTapno mapasingkedan a daytoy a pakabilangan ket kukuam ken ti \npinagpabalin ti esurat a kita iti {{SITENAME}}, lukatam daytoy a silpo dita pabasabasam:\n\n$3\n\nNo *saanmo* nga inrehistro ti pakabilangam, surotem daytoy a silpo\nta pasardengem ti panagpasingked ti adres ti esuratmo:\n\n$5\n\nDaytoy a kodigo ti pammasingked ket agpaso intono $4.",
+ "confirmemail_body_changed": "Addaan, baka sika, ti naggapu ti adres ti IP ti $1,\nket nangsukat ti adres ti esurat ti pakabilangan \"$2\" iti daytoy ngaadres iti {{SITENAME}}\n\nTapno mapasingkedan daytoy a pakabilangan ket kukuam ken ti \npanagpabalin ti esurat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:\n\n$3\n\nNo *saanmo* nga inrehistro ti pakabilangam, surutem daytoy a silpo\nta pasardengem ti panagpasingked ti adres ti esuratmo:\n\n$5\n\nDaytoy a kodigo a pammasingked ket agpaso intono $4.",
+ "confirmemail_body_set": "Addaan, baka sika met laeng, manipud iti adres ti IP ti $1,\nket nangikabil ti adres ti esurat ti pakabilangan ti \"$2\" iti daytoy nga adres iti {{SITENAME}}\n\nTapno mapasingkedan daytoy a pakabilangan ket agpayso a kukuam ken \npakabaelan dagiti esurat a langa iti {{SITENAME}}, lukatam daytoy a silpo iti pabasabasam:\n\n$3\n\nNo daytoy a pakabilangan ket *saanmo* a kukua, surutem daytoy a silpo\ntapno ukasen ti panagpasingked ti adres ti esurat:\n\n$5\n\nDaytoy a panagpasingked ti kodigo ket agpaso intono $4.",
"confirmemail_invalidated": "Naukas ti pammasingked ti esurat a pagtaengam",
"invalidateemail": "Ukasen ti pammasingked ti esurat",
"notificationemail_subject_changed": "Nabaliwanen ti nairehistro nga adres ti esurat ti {{SITENAME}}",
"confirm-watch-button": "Sige",
"confirm-watch-top": "Inayon daytoy a panid iti listaan ti bambantayam?",
"confirm-unwatch-button": "Sige",
- "confirm-unwatch-top": "Ikkatem daytoy a panid manipud ti listaan ti bambantayam?",
+ "confirm-unwatch-top": "Ikkatem daytoy a panid manipud iti listaan ti bambantayam?",
"confirm-rollback-button": "Sige",
"confirm-rollback-top": "Isubli dagiti panagurnos iti daytoy a panid?",
"quotation-marks": "\"$1\"",
"lag-warn-normal": "Dagiti panangbalbaliw a nabarbaro ngem $1 {{PLURAL:$1|a segundo|a segsegundo}} ket mabalin a saan a maiparang iti daytoy a listaan.",
"lag-warn-high": "Gapu ti kinabuntog ti database server, dagiti nasukatan a barbaro ngem $1 {{PLURAL:$1|a segundo|a segegundo}} ket mabalin a saan nga agparang iti daytoy a listaan.",
"watchlistedit-normal-title": "Urnosen ti listaan ti bambantayan",
- "watchlistedit-normal-legend": "Ikkaten dagiti titulo manipud ti listaan ti bambantayam",
+ "watchlistedit-normal-legend": "Ikkaten dagiti titulo manipud iti listaan ti bambantayam",
"watchlistedit-normal-explain": "Dagiti titulo ti listaan ti bambantayam ket naipakita dita baba.\nTi mangikkat ti titulo, ikur-it ti kaaripingna a kahon, ken pinduten ti \"{{int:Watchlistedit-normal-submit}}\".\nMabalinmo pay nga [[Special:EditWatchlist/raw|urnosen ti naata a listaan]].",
"watchlistedit-normal-submit": "Ikkaten dagiti titulo",
- "watchlistedit-normal-done": "{{PLURAL:$1|1 ti titulo|$1 dagiti titulo}} a naikkat manipud ti listaan ti bambantayam:",
+ "watchlistedit-normal-done": "{{PLURAL:$1|Ti bugbugtong a titulo|Dagiti $1 a titulo}} ket naikkat manipud iti listaan ti bambantayam:",
"watchlistedit-raw-title": "Urnosen ti naata a listaan ti bambantayan",
"watchlistedit-raw-legend": "Urnosen ti naata a listaan ti bambantayan",
"watchlistedit-raw-explain": "Dagiti titulo ti listaan ti bambantayam ket naipakita dita baba, ken mabaliwam nga urnosen babaen ti panagnayon ken panagkissay manipud ti listaan;\nmaysa a titulo tunggal maysa a linia.\nNo malpaska, pinduten ti \"{{int:Watchlistedit-raw-submit}}\".\nMabalinmo pay nga [[Special:EditWatchlist|usaren ti pagalagadan nga editor]].",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 a titulo|$1 kadagiti titulo}} ti naikkat:",
"watchlistedit-clear-title": "Dalusan ti listaan ti bambantayan",
"watchlistedit-clear-legend": "Dalusan ti listaan ti bambantayan",
- "watchlistedit-clear-explain": "Amin dagiti titulo ket maikkatto manipud ti listaan ti bambantayam",
+ "watchlistedit-clear-explain": "Amin dagiti titulo ket maikkatto manipud iti listaan ti bambantayam",
"watchlistedit-clear-titles": "Dagiti titulo:",
"watchlistedit-clear-submit": "Dalusan ti listaan ti bambantayan (Daytoy ket permanente!)",
"watchlistedit-clear-done": "Nadalusanen ti bambantayam.",
"version-poweredby-others": "dadduma pay",
"version-poweredby-translators": "dagiti agipatpatarus iti translatewiki.net",
"version-credits-summary": "Kayatmi koma a pammadayawan dagiti sumaganad a tao para kadagiti kontribusonda iti [[Special:Version|MediaWiki]].",
- "version-license-info": "Ti MediaWiki ket nawaya a sopwer; mabalinmo nga iwaras ken/wenno baliwan babaen kadagiti termino ti GNU General Public License a naipablaak babaen ti Free Software Foundation; wenno bersion 2 iti Lisensia, wenno (ti panagpilim) ti aniaman a naudi a bersion.\n\nTi MediaWiki ket naiwarwaras iti namnama a makatulongto, ngem AWAN TI ANIA MAN A GARANTIA; nga awan pay ti naibagbaga a PANNAKAILAKO wenno KALAINGANNA ITI DAYTOY A PANGGEP. Kitaen ti GNU General Public License para kadagiti adu pay a salaysay.\n\nNaka-awatka koman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU General Public License] a nairaman iti daytoy a programa; no saan, agsuratka idiay Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA wenno [//www.gnu.org/licenses/old-licenses/gpl-2.0.html basaem iti online].",
+ "version-license-info": "Ti MediaWiki ket nawaya a sopwer; mabalinmo nga iwaras ken/wenno baliwan babaen kadagiti termino ti GNU General Public License a naipablaak babaen ti Free Software Foundation; wenno bersion 2 iti Lisensia, wenno (ti panagpilim) ti ania man a naudi a bersion.\n\nTi MediaWiki ket naiwarwaras iti namnama a makatulongto, ngem AWAN TI ANIA MAN A GARANTIA; nga awan pay ti naibagbaga a PANNAKAILAKO wenno KALAINGANNA ITI DAYTOY A PANGGEP. Kitaen ti GNU General Public License para kadagiti adu pay a salaysay.\n\nNaka-awatka koman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU General Public License] a nairaman iti daytoy a programa; no saan, agsuratka idiay Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA wenno [//www.gnu.org/licenses/old-licenses/gpl-2.0.html basaem iti online].",
"version-software": "Naisaad a sopwer",
"version-software-product": "Produkto",
"version-software-version": "Bersion",
"fileduplicatesearch": "Agbiruk kadagiti duplikado a papeles",
"fileduplicatesearch-summary": "Agbiruk kadagiti duplikado a papeles a naibatay kadagiti pateg ti hash.",
"fileduplicatesearch-filename": "Nagan ti papeles:",
- "fileduplicatesearch-submit": "Biruken",
+ "fileduplicatesearch-submit": "Agbiruk",
"fileduplicatesearch-info": "$1 × $2 a piksel<br />Rukod ti papeles: $3<br />Kita ti MIME: $4",
"fileduplicatesearch-result-1": "Awan ti kapadpadana a duplikado ti papeles ti \"$1\".",
"fileduplicatesearch-result-n": "Ti papeles ti \"$1\" ket addaan {{PLURAL:$2|iti 1 nga agpadpada a duplikado|kadagiti $2 nga agpadpada a duplikado}}.",
"tags-create-warnings-above": "Nakasarak {{PLURAL:$2|iti sumaganad a ballaag|kadagiti sumaganad a ballaag}} idi nagpadas a nagpartuat iti etiketa ti \"$1\":",
"tags-create-warnings-below": "Kayatmo kadi ti agtuloy nga agpartuat iti etiketa?",
"tags-delete-title": "Ikkaten ti etiketa",
- "tags-delete-explanation-initial": "Ik-ikkatemon ti etiketa ti \"$1\" manipud ti database.",
+ "tags-delete-explanation-initial": "Ik-ikkatemon ti etiketa ti \"$1\" manipud iti database.",
"tags-delete-explanation-in-use": "Daytoy ket maikkatto manipud {{PLURAL:$2|kadagiti $2 a rebision wenno naikabil iti listaan|kadagiti amin a $2 a rebision/wenno naikabil iti listaan}} iti agdama a nakaipakatanna.",
"tags-delete-explanation-warning": "Daytoy nga aksion ket <strong>saan a maipasubli</strong> ken <strong>saan a mabalin nga ibabawi</strong>, urayno babaen dagiti administradore ti database. Siguraduem a daytoy ti etiketa a kayatmo nga ikkaten.",
"tags-delete-explanation-active": "<strong>Aktibo pay laeng ti etiketa ti \"$1\", ken agtuloy a maipakat iti masakbayan.</strong> Tapno mangpasardeng daytoy a mapasamak, mapan iti lugar wenno luglugar nga ayan a pakaipakatanto ti etiketa, ken ibaldado idiay.",
"feedback-bugornote": "No sisasagakan nga agibaga ti teknikal a pakirut a naisalaysay pangngaasi nga [$1 ireporta ti parikut].\nNupay kasta, mausarmo ti nalaka a porma dita baba. Ti komentario nga itedmo ket mainayon iti panid \"[$3 $2], a mairaman ti naganmo nga agar-aramat ken no ania ti pagbasabasa nga us-sarem.",
"feedback-cancel": "Ukasen",
"feedback-close": "Nalpasen",
- "feedback-error1": "Biddut: Saan a malasin dagiti nagbanagan manipud ti API",
+ "feedback-error1": "Biddut: Saan a malasin dagiti nagbanagan manipud iti API",
"feedback-error2": "Biddut: Napaay ti panagurnos",
- "feedback-error3": "Biddut: Awan ti sungbat manipud ti API",
+ "feedback-error3": "Biddut: Awan ti sungbat manipud iti API",
"feedback-error4": "Biddut:Saan a naipablak iti naited a titulo ti feedback",
"feedback-message": "Mensahe:",
"feedback-subject": "Suheto:",
"restrictionsfield-badip": "Imbalido nga adres ti IP wenno sakup: $1",
"restrictionsfield-label": "Dagiti mapalubosan a sakup ti IP:",
"revid": "rebision $1",
- "pageid": "ID ti panid $1"
+ "pageid": "ID ti panid $1",
+ "gotointerwiki": "Pumanpanaw iti {{SITENAME}}"
}
"revid": "Versioun $1",
"gotointerwiki": "{{SITENAME}} verloossen",
"gotointerwiki-invalid": "De spezifizéierten Titel war net valabel.",
+ "undelete-cantedit": "Dir kënnt dës Säit net restauréiere well Dir dës Säit net änneren däerft.",
"undelete-cantcreate": "Dir kënnt dës Säit net restauréieren well et elo keng Säit mat deem Numm gëtt a well Dir dës Säit net uleeën däerft."
}
"htmlform-user-not-valid": "<strong>$1</strong> is geen geldige gebruikersnaam.",
"logentry-delete-delete": "$1 {{GENDER:$2|heeft}} de pagina $3 verwijderd",
"logentry-delete-delete_redir": "$1 heeft de doorverwijzing $3 {{GENDER:$2|verwijderd}} door deze te overschrijven",
- "logentry-delete-restore": "$1 {{GENDER:$2|heeft}} de pagina $3 teruggeplaatst",
+ "logentry-delete-restore": "$1 {{GENDER:$2|heeft}} de pagina $3 ($4) teruggeplaatst",
+ "logentry-delete-restore-nocount": "$1 {{GENDER:$2|heeft}} de pagina $3 teruggeplaatst",
+ "restore-count-revisions": "{{PLURAL:$1|1 versie|$1 versies}}",
+ "restore-count-files": "{{PLURAL:$1|1 bestand|$1 bestanden}}",
"logentry-delete-event": "$1 {{GENDER:$2|heeft}} de zichtbaarheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 gewijzigd: $4",
"logentry-delete-revision": "$1 {{GENDER:$2|heeft}} de zichtbaarheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 gewijzigd: $4",
"logentry-delete-event-legacy": "$1 {{GENDER:$2|heeft}} de zichtbaarheid van logboekregels van $3 gewijzigd",
"rcfilters-hideminor-conflicts-typeofchange": "Niektóre rodzaje zmian nie mogą być uznawane za „drobne”, dlatego ten filtr koliduje z następującymi filtrami Rodzaju zmian: $1",
"rcfilters-typeofchange-conflicts-hideminor": "Ten filtr Rodzaju zmian koliduje z filtrem „Drobne zmiany”. Nie wszystkie zmiany mogą być uznawane za „drobne”.",
"rcnotefrom": "Poniżej {{PLURAL:$5|pokazano zmianę|pokazano zmiany}} {{PLURAL:$5|wykonaną|wykonane}} po <strong>$3, $4</strong> (nie więcej niż '''$1''' pozycji).",
+ "rclistfromreset": "Zresetuj wybór danych",
"rclistfrom": "Pokaż nowe zmiany od $3 $2",
"rcshowhideminor": "$1 drobne edycje",
"rcshowhideminor-show": "Pokaż",
"logentry-delete-delete_redir": "$1 {{GENDER:$2|usunął|usunęła}} przekierowanie $3 poprzez nadpisanie",
"logentry-delete-restore": "$1 {{GENDER:$2|odtworzył|odtworzyła}} stronę $3",
"logentry-delete-restore-nocount": "$1 {{GENDER:$2|odtworzył|odtworzyła}} stronę $3",
+ "restore-count-revisions": "odtworzono {{PLURAL:$1|1 wersja|$1 wersji}}",
+ "restore-count-files": "{{PLURAL: $1|1 Plik|$1 plików}}",
"logentry-delete-event": "$1 {{GENDER:$2|zmienił|zmieniła}} widoczność {{PLURAL:$5|zdarzenia|$5 zdarzeń}} w rejestrze $3, wykonano następujące operacje: $4",
"logentry-delete-revision": "$1 {{GENDER:$2|zmienił|zmieniła}} widoczność {{PLURAL:$5|wersji|$5 wersji}} strony $3, wykonano następujące operacje: $4",
"logentry-delete-event-legacy": "$1 {{GENDER:$2|zmienił|zmieniła}} widoczność zdarzeń w rejestrze strony $3",
"log-action-filter-suppress-reblock": "Ukrycie użytkownika poprzez ponowną blokadę",
"log-action-filter-upload-upload": "Nowe przesłane",
"log-action-filter-upload-overwrite": "Przesłane ponownie",
+ "authmanager-authn-no-primary": "Podane dane nie mogą być użyte do kontroli poświadczeń.",
+ "authmanager-authn-no-local-user": "Żaden użytkownik nie korzysta z tych danych.",
"authmanager-authn-autocreate-failed": "Automatyczne tworzenie lokalnego konta nie powiodło się: $1",
"authmanager-create-disabled": "Utworzenie konta jest wyłączone.",
"authmanager-create-from-login": "Aby utworzyć konto, wypełnij odpowiednie pola.",
"right-editsemiprotected": "{{doc-right|editsemiprotected}}\nRefers to {{msg-mw|Protect-level-autoconfirmed}}.\n\nSee also:\n* {{msg-mw|Right-editeditorprotected}}\n* {{msg-mw|Right-editextendedsemiprotected}}\n* {{msg-mw|Right-editprotected}}\n* {{msg-mw|Right-editsemiprotected}}",
"right-editcontentmodel": "{{doc-right|editcontentmodel}}",
"right-editinterface": "{{doc-right|editinterface}}",
- "right-editusercssjs": "{{doc-right|editusercssjs}}",
"right-editusercss": "{{doc-right|editusercss}}\nSee also:\n* {{msg-mw|Right-editmyusercss}}",
"right-edituserjs": "{{doc-right|edituserjs}}\nSee also:\n* {{msg-mw|Right-editmyuserjs}}",
"right-editmyusercss": "{{doc-right|editmyusercss}}\nSee also:\n* {{msg-mw|Right-editusercss}}",
"unblocked-id": "Used in [[Special:Unblock]]. Parameters:\n* $1 - autoblock ID\nSee also:\n* {{msg-mw|Unblocked}}\n* {{msg-mw|Unblocked-range}}",
"unblocked-ip": "{{doc-important|Do not translate the title \"Special:Contributions\".}}\nParameters:\n* $1 - the IP address that was unblocked\nSee also:\n* {{msg-mw|Unblocked-range}}\n* {{msg-mw|Unblocked-id}}\n*{{msg-mw|Unblocked}}",
"blocklist": "{{doc-special|BlockList}}",
+ "autoblocklist": "Title of [[Special:AutoblockList]].",
+ "autoblocklist-submit": "Used as Submit button text in the form on [[Special:AutoblockList]].\n\nSee also:\n* {{msg-mw|Ipblocklist-legend}}\n* {{msg-mw|Autoblocklist-submit}}\n{{Identical|Search}}",
+ "autoblocklist-legend": "Used as legend of the form in [[Special:AutoblockList]].\n\nSee also:\n* {{msg-mw|Autoblocklist-legend}}\n* {{msg-mw|Autoblocklist-submit}}",
+ "autoblocklist-localblocks": "[[File:Special AutoBlockList new.png|thumb|Example]]\nUsed on [[Special:AutoblockList]] as header when global autoblocks exists too.",
+ "autoblocklist-empty": "Used in [[Special:AutoblockList]].",
+ "autoblocklist-otherblocks": "[[File:Special AutoBlockList new.png|thumb|Example]]\nUsed on [[Special:AutoblockList]] as header for other blocks, i.e. from GlobalBlocking or TorBlocks.\n\nParameters:\n* $1 - number of blocks",
"ipblocklist": "Title of [[Special:Ipblocklist]].",
"ipblocklist-legend": "Used as legend of the form in [[Special:BlockList]].\n\nSee also:\n* {{msg-mw|Ipblocklist-legend}}\n* {{msg-mw|Ipblocklist-submit}}",
"blocklist-userblocks": "Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].\n{{Related|Blocklist-blocks}}",
"tog-watchlisthidebots": "Скрывать правки ботов из списка наблюдения",
"tog-watchlisthideminor": "Скрывать малые правки из списка наблюдения",
"tog-watchlisthideliu": "Скрывать правки представившихся участников из списка наблюдения",
- "tog-watchlistreloadautomatically": "Ð\9fеÑ\80езагÑ\80Ñ\83жать список наблюдения автоматически всякий раз, когда изменяется фильтр (требуется JavaScript)",
+ "tog-watchlistreloadautomatically": "Ð\9eбновлÑ\8fть список наблюдения автоматически всякий раз, когда изменяется фильтр (требуется JavaScript)",
"tog-watchlisthideanons": "Скрывать правки анонимных участников из списка наблюдения",
"tog-watchlisthidepatrolled": "Скрывать отпатрулированные правки из списка наблюдения",
"tog-watchlisthidecategorization": "Скрывать категоризацию страниц",
"tagline": "Материал из {{grammar:genitive|{{SITENAME}}}}",
"help": "Справка",
"search": "Поиск",
- "search-ignored-headings": " #<!-- оставьте эту строку как есть --> <pre>\n# Заголовки, которые будут игнорироваться поиском.\n# Изменения вступают в силу, как только страница с заголовком индексируется.\n# Вы можете принудить переиндексировать страницу с помощью нулевой правки.\n# Синтаксис выглядит следующим образом:\n# * Всё, начинающееся на символ «#» и до конца строки представляет собой комментарий.\n# * Каждая непустая строка — точное название того, что будет игнорироваться, включая регистр и пр.\nПримечания\nСсылки\nСм. также\n #</pre> <!-- оставьте эту строку как есть -->",
+ "search-ignored-headings": " #<!-- оставьте эту строку как есть --> <pre>\n# Заголовки, которые будут игнорироваться поиском.\n# Изменения вступают в силу после того, как страница с заголовком индексируется.\n# Вы можете принудительно переиндексировать страницу, сделав нулевую правку.\n# Синтаксис выглядит следующим образом:\n# * Всё, начинающееся на символ «#» и до конца строки представляет собой комментарий.\n# * Каждая непустая строка — точное название того, что будет игнорироваться, включая регистр и пр.\nПримечания\nСсылки\nСм. также\n #</pre> <!-- оставьте эту строку как есть -->",
"searchbutton": "Найти",
"go": "Перейти",
"searcharticle": "Перейти",
"title-invalid-magic-tilde": "Запрашиваемый заголовок страницы содержит недопустимую последовательность тильды (<nowiki>~~~</nowiki>).",
"title-invalid-too-long": "Запрашиваемый заголовок страницы слишком длинен. Он должен быть не более $1 {{PLURAL:$1|1=байта|байт}} в кодировке UTF-8.",
"title-invalid-leading-colon": "Запрашиваемое название страницы содержит недопустимое двоеточие в начале.",
- "perfcached": "Данные взяты кэша, поэтому они могут быть устаревшими. В кэше хранится не более $1 {{PLURAL:$1|1=записи|записей}}.",
- "perfcachedts": "Следующие данные взяты из кэша, последний раз он обновлялся в $1. В кэше хранится не более {{PLURAL:$4|1=записи|записей}}.",
+ "perfcached": "Данные взяты кэша; они могли устареть. В кэше хранится не более $1 {{PLURAL:$1|1=записи|записей}}.",
+ "perfcachedts": "Следующие данные взяты из кэша, последний раз он обновлялся в $1. В кэше хранится не более {{PLURAL:$4|1=$1 записи|$1 записей}}.",
"querypage-no-updates": "Обновление этой страницы сейчас отключено.\nПредставленные здесь данные не будут обновляться.",
"viewsource": "Просмотр вики-текста",
"viewsource-title": "Просмотр исходного текста страницы $1",
"createacct-continue-submit": "Продолжить создание учётной записи",
"createacct-another-continue-submit": "Продолжить создание учётной записи",
"createacct-benefit-heading": "{{SITENAME}} — совместный труд таких же людей, как вы.",
- "createacct-benefit-body1": "{{PLURAL:$1|1=правка|правки|правок}}",
- "createacct-benefit-body2": "{{PLURAL:$1|1=статья|статьи|статей}}",
- "createacct-benefit-body3": "{{PLURAL:$1|1=участник|участника|участников}} за последнее время",
+ "createacct-benefit-body1": "{{PLURAL:$1|1=$1 правка|$1 правки|$1 правок}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|1=$1 статья|$1 статьи|$1 статей}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|1=$1 участник|$1 участника|$1 участников}} за последнее время",
"badretype": "Введённые вами пароли не совпадают.",
"usernameinprogress": "Создание учётной записи для данного имени участника уже выполняется.\nПожалуйста, подождите.",
"userexists": "Введённое имя участника уже используется.\nПожалуйста, выберите другое имя.",
"login-userblocked": "Участник заблокирован. Вход в систему запрещен.",
"wrongpassword": "Введённый вами пароль неверен. Попробуйте ещё раз.",
"wrongpasswordempty": "Пожалуйста, введите непустой пароль.",
- "passwordtooshort": "Пароль должен состоять не менее чем из $1 {{PLURAL:$1|1=символа|символов}}.",
- "passwordtoolong": "Пароль не может содержать более {{PLURAL:$1|1=1 символа|$1 символов}}.",
+ "passwordtooshort": "Пароль должен состоять не менее, чем из $1 {{PLURAL:$1|1=символа|символов}}.",
+ "passwordtoolong": "Пароль не может содержать более {{PLURAL:$1|1=$1 символа|$1 символов}}.",
"passwordtoopopular": "Часто выбираемые пароли не могут быть использованы. Пожалуйста, выберите более уникальный пароль.",
"password-name-match": "Введённый пароль должен отличаться от имени участника.",
"password-login-forbidden": "Использование этого имени участника и пароля запрещено.",
"php-uploaddisabledtext": "Загрузка файлов отключена в настройках PHP. Пожалуйста, проверьте значение свойства file_uploads.",
"uploadscripted": "Файл содержит HTML-код или скрипт, который может быть ошибочно обработан браузером.",
"upload-scripted-pi-callback": "Невозможно загрузить файл, содержащий инструкции обработки таблицы стилей XML.",
+ "upload-scripted-dtd": "Невозможно загрузить SVG-файлы, которые содержат нестандартное DTD-объявление.",
"uploaded-script-svg": "Найден небезопасный элемент с поддержкой сценариев «$1» в загруженном SVG-файле.",
"uploaded-hostile-svg": "Найден небезопасный CSS-код в элементе стиля загруженного SVG-файла.",
"uploaded-event-handler-on-svg": "Установка атрибутов обработчика событий <code>$1=\"$2\"</code> не разрешено для SVG-файлов.",
"emaildisabled": "Ieu loka teu bisa ngirim surélék.",
"accountcreated": "Akun geus dijieun",
"accountcreatedtext": "Akun pamaké [[{{ns:Pamaké}}:$1|$1]] ([[{{ns:Obrolan pamaké}}:$1|obrolan]]) geus dijieun.",
- "createaccount-title": "Nyieun akun keur {{SITENAME}}",
+ "createaccount-title": "Nyieun akun pikeun {{SITENAME}}",
"createaccount-text": "Aya nu nyieun akun pikeun alamat surélék anjeun di {{SITENAME}} ($4) maké sandiasma \"$2\" kalawan kecap sandi \"$3\". Anjeun kudu asup log sarta ngaganti kecap sandina.\n\nMun ieu akun dijieun alatan éror, ulah diwaro.",
"login-throttled": "Anjeun geus loba teuing nyobaan asup log.\nTungguan $1, laju cobaan deui.",
"login-abort-generic": "Asup log anjeun gagal - Dibolaykeun",
"changepassword": "Robah sandi",
"resetpass_announce": "Pikeun nganggeuskeun asup log, anjeun kudu nyieun kecap sandi anyar.",
"resetpass_text": "<!-- Tambahkeun téks di dieu -->",
- "resetpass_header": "Ganti sandi akun",
+ "resetpass_header": "Robah kecap sandi akun",
"oldpassword": "Sandi heubeul",
"newpassword": "Sandi anyar:",
"retypenew": "Ketik ulang sandi",
"botpasswords-label-resetpassword": "Balikeun deui kecap sandi",
"resetpass_forbidden": "Sandi henteu bisa dirobah",
"resetpass-no-info": "Anjeun kudu asup log pkeun bisa muka ieu kaca sacara langsung.",
- "resetpass-submit-loggedin": "Ganti kecap sandi akun",
+ "resetpass-submit-loggedin": "Robah kecap sandi",
"resetpass-submit-cancel": "Bolay",
"resetpass-wrong-oldpass": "Salah sandi.\nBisa jadi anjeun geus ngaganti sandina atawa ménta sandi saheulaanan anu anyar.",
"resetpass-recycled": "Mangga ganti kecap sandi anjeun ku nu anyar.",
"action-edit": "édit kaca ieu",
"action-createpage": "mitembeyan kaca anyar",
"action-createtalk": "mitembeyan kaca obrolan",
- "action-createaccount": "nyieun akun pamaké ieu",
+ "action-createaccount": "jieun ieu akun pamaké",
"action-history": "tempo jujutan ieu kaca",
"action-minoredit": "nandaan ieu éditan salaku minor",
"action-move": "mindahkeun ieu kaca",
"rcshowhidemine": "$1 éditan kuring",
"rcshowhidemine-show": "Témbongkeun",
"rcshowhidemine-hide": "Sumputkeun",
- "rclinks": "Témbongkeun $1 parobahan ahir dina $2 poé ahir<br />$3",
+ "rclinks": "Témbongkeun $1 parobahan panungtung ti $2 poé ka tukang<br />$3",
"diff": "béda",
"hist": "juj",
"hide": "sumputkeun",
"lonelypagestext": "Kaca-kaca di handap ieu teu numbu ti kaca séjén di {{SITENAME}}.",
"uncategorizedpages": "Kaca nu can dikategorikeun",
"uncategorizedcategories": "Kategori nu can dikategorikeun",
- "uncategorizedimages": "Gambar anu can boga kategori",
+ "uncategorizedimages": "Berkas anu can dikategorikeun",
"uncategorizedtemplates": "Citakan nu can boga kategori",
"unusedcategories": "Kategori nu teu kapaké",
- "unusedimages": "Gambar anu teu kaparaké",
+ "unusedimages": "Berkas nu teu kaparaké",
"wantedcategories": "Kategori nu dipikabutuh",
"wantedpages": "Kaca nu dipikabutuh",
"wantedfiles": "Berkas nu dipikabutuh",
"booksources-search-legend": "Sungsi sumber buku",
"booksources-search": "Paluruh",
"booksources-text": "Di handap ieu ngabéréndélkeun tutumbu ka loka-loka nu ngical buku, boh nu anyar atawa loakan, nu sugan uninga kana buku anu nuju dipilari:",
- "booksources-invalid-isbn": "ISBN-na sigana henteu bener; pariksa deui bisi aya salah salin ti sumber aslina.",
+ "booksources-invalid-isbn": "Sigana ISBN-na teu bener; pariksa deui bisi aya salah téplak ti sumber aslina.",
"specialloguserlabel": "Pamaké:",
"speciallogtitlelabel": "Sasaran (judul atawa pamaké):",
"log": "Log",
"wlheader-showupdated": "Kaca nu robah ti panungtungan anjeun sindang ditémbongkeun kalawan '''kandel'''",
"wlnote": "Di handap ieu mangrupa $1 {{PLURAL:$1|robahan|robahan}} ahir salila '''$2''' jam.",
"wlshowlast": "Témbongkeun $1 jam $2 poé ahir",
+ "wlshowhidecategorization": "kategorisasi kaca",
"watchlist-options": "Pilihan awaskeuneun",
"watching": "Ngawaskeun...",
"unwatching": "Eureun ngawaskeun...",
"expiringblock": "kadaluwarsa $1 jam $2",
"anononlyblock": "ngan nu teu daptar",
"noautoblockblock": "Otopeungpeuk ditumpurkeun",
- "createaccountblock": "nyieun akun dipeungpeuk",
+ "createaccountblock": "nyieun akun ditumpurkeun",
"emailblock": "surélek di peungpeuk",
"blocklist-nousertalk": "teu bisa ngarobah kaca obrolan sorangan",
"ipblocklist-empty": "Daptar peungpeuk kosong.",
"import-interwiki-text": "Pilih wiki jeung judul kaca nu rék diimpor.\nTanggal révisi katut ngaran nu ngédit bakal dipertahankeun.\nSadaya aktivitas impor transwiki baris kacatet dina [[Special:Log/import|log impor]].",
"import-interwiki-sourcewiki": "Wiki sumber:",
"import-interwiki-sourcepage": "Kaca sumber:",
- "import-interwiki-history": "Salin sakabéh vérsi jujutan pikeun ieu kaca",
+ "import-interwiki-history": "Téplak sakabéh vérsi jujutan pikeun ieu kaca",
"import-interwiki-templates": "Kaasup sakabéh citakan",
"import-interwiki-submit": "Impor",
"import-upload-filename": "Ngaran berkas:",
"exif-copyrighted": "Status hak cipta",
"exif-copyrightowner": "Nu nyepeng hak cipta",
"exif-usageterms": "Katangtuan pamakéan",
- "exif-webstatement": "Pertélaan hak salin onlén",
+ "exif-webstatement": "Pertélaan hak cipta onlén",
"exif-originaldocumentid": "ID unik dokumén asli",
"exif-licenseurl": "URL pikeun lisénsi hak cipta",
"exif-morepermissionsurl": "Ëmbaran lisénsi lianna",
"unexpected": "beklenmeyen değer: \"$1\"=\"$2\".",
"formerror": "Hata: Form gönderilemiyor.",
"badarticleerror": "Bu işlem bu sayfada gerçekleştirilemez.",
- "cannotdelete": "\"$1\" sayfa ya da dosyası silinemedi.\nBaşka bir kullanıcı tarafından zaten silinmiş olabilir.",
+ "cannotdelete": "\"$1\" adlı sayfa veya dosya silinemedi.\nBaşka bir kullanıcı tarafından daha önce silinmiş olabilir.",
"cannotdelete-title": "\"$1\" sayfası silinemiyor",
"delete-hook-aborted": "Silme işlemi uzantı kancası tarafından durduruldu. \nBir açıklama sunulmadı.",
"no-null-revision": "\"$1\" sayfası için yeni boş bir sürüm oluşturulamadı",
"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-highlightbutton-title": "Sonuçları vurgula",
"rcfilters-highlightmenu-title": "Bir renk seçin",
"rcfilters-filter-unpatrolled-label": "Devriye onayından geçmemiş",
"rcfilters-filter-unpatrolled-description": "Devriye onayından geçmiş olarak işaretlenmeyen düzenlemeler.",
"rcfilters-filtergroup-significance": "Önem",
- "rcfilters-filter-minor-label": "Küçük değişiklikler",
+ "rcfilters-filter-minor-label": "Küçük düzenlemeler",
"rcfilters-filter-minor-description": "Yazarın küçük olarak etiketlediği düzenlemeler.",
- "rcfilters-filter-major-label": "Küçük olmayan değişiklikler",
+ "rcfilters-filter-major-label": "Küçük olmayan düzenlemeler",
"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-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....",
"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",
"undeleteviewlink": "görüntüle",
"undeleteinvert": "Seçimi ters çevir",
"undeletecomment": "Neden:",
- "cannotundelete": "Silme başarısız oldu:\n$1",
+ "cannotundelete": "Geri getirme işlemlerinden bazıları veya tümü başarısız oldu:\n$1",
"undeletedpage": "'''$1 sayfası geri getirildi'''\n\nÖnceki silme ve geri getirme işlemleri için [[Special:Log/delete|silme kayıtları]]na bakınız.",
"undelete-header": "Yakın zamanda silinen sayfaları görmek için [[Special:Log/delete|silme günlüğü]]ne bakın.",
"undelete-search-title": "Silinen sayfaları ara",
"specialpages-group-spam": "反垃圾链接工具",
"specialpages-group-developer": "开发者工具",
"blankpage": "空白页面",
- "intentionallyblankpage": "这个页面被故意留为空白",
+ "intentionallyblankpage": "此页特意留白。",
"external_image_whitelist": " #请原样保留本行文字<pre>\n#请在下面输入正则表达式片段(//之间的部份)\n#这些项目将会匹配外部图像的URL\n#匹配的项目将显示为图像,否则只会显示图像的链接\n#以#开头的行被视为评论\n#不区分大小写\n\n#请在本行上面输入所有正则表达式片段。请原样保留本行文字</pre>",
"tags": "有效的更改标签",
"tag-filter": "[[Special:Tags|标签]]过滤器:",
"specialpages-group-spam": "反垃圾訊息工具",
"specialpages-group-developer": "開發人員工具",
"blankpage": "空白頁面",
- "intentionallyblankpage": "此頁面被故意設為空白。",
+ "intentionallyblankpage": "此頁故意留白。",
"external_image_whitelist": " #請勿修改本行文字<pre>\n#請於下方填寫正規表示法 (只需 // 之間的內容)\n#將會檢查外部連結的圖片是否符合這些條件\n#符合條件的連結會以圖片顯示,否則只顯示連結\n#以 # 開頭的行會被做為註解\n#此條件不區分大小寫\n\n#請將所有正規表示法輸入在此行上方,請勿修改本行文字</pre>",
"tags": "有效變更標籤",
"tag-filter": "[[Special:Tags|標籤]]搜尋:",
'ApiHelp' => [ 'ApiHelp' ],
'ApiSandbox' => [ 'ApiSandbox' ],
'Ancientpages' => [ 'AncientPages' ],
+ 'AutoblockList' => [ 'AutoblockList', 'ListAutoblocks' ],
'Badtitle' => [ 'Badtitle' ],
'Blankpage' => [ 'BlankPage' ],
'Block' => [ 'Block', 'BlockIP', 'BlockUser' ],
edittools
editurl
editusercss
-editusercssjs
edituserjs
edoe
egrave
epcoordinator
epinstructor
eponline
-eqiad
erevoke
errno
error
wmlsc
wmlscript
wmlscriptc
-wmnet
wordcount
wordprocessingml
wordwg
],
'mediawiki.legacy.wikibits' => [
'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
- 'dependencies' => 'mediawiki.util',
'targets' => [ 'desktop', 'mobile' ],
],
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:37Z
+ * Date: 2017-04-11T22:51:05Z
*/
( function ( OO ) {
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:41Z
+ * Date: 2017-04-11T22:51:10Z
*/
.oo-ui-element-hidden {
display: none !important;
.oo-ui-popupButtonWidget .oo-ui-popupWidget {
cursor: auto;
}
-.oo-ui-popupButtonWidget-frameless-popup.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor,
-.oo-ui-popupButtonWidget-frameless-popup.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor {
- margin-left: 0.9375em;
-}
-.oo-ui-popupButtonWidget-framed-popup.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor,
-.oo-ui-popupButtonWidget-framed-popup.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor {
- margin-left: 1.2375em;
-}
.oo-ui-inputWidget {
margin-right: 0.5em;
}
cursor: pointer;
}
.oo-ui-textInputWidget.oo-ui-widget-disabled input,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label {
-webkit-touch-callout: none;
-webkit-user-select: none;
}
.oo-ui-textInputWidget input::-webkit-input-placeholder,
.oo-ui-textInputWidget textarea::-webkit-input-placeholder {
- color: #72777d;
+ color: #767676;
opacity: 1;
}
.oo-ui-textInputWidget input:-ms-input-placeholder,
.oo-ui-textInputWidget textarea:-ms-input-placeholder {
- color: #72777d;
+ color: #767676;
opacity: 1;
}
.oo-ui-textInputWidget input::-moz-placeholder,
.oo-ui-textInputWidget textarea::-moz-placeholder {
- color: #72777d;
+ color: #767676;
opacity: 1;
}
.oo-ui-textInputWidget input:-moz-placeholder,
.oo-ui-textInputWidget textarea:-moz-placeholder {
- color: #72777d;
+ color: #767676;
opacity: 1;
}
.oo-ui-textInputWidget input::placeholder,
.oo-ui-textInputWidget textarea::placeholder {
- color: #72777d;
+ color: #767676;
opacity: 1;
}
.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
}
.oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly],
.oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] {
- color: #777;
+ color: #767676;
}
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input,
.oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea {
.oo-ui-textInputWidget > .oo-ui-labelElement-label {
padding: 0.4em;
line-height: 1.5em;
- color: #888;
+ color: #767676;
}
.oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label {
margin-right: 2.0875em;
background-color: #e1f3ff;
}
.oo-ui-menuSectionOptionWidget {
- cursor: default;
padding: 0.33em 0.75em;
- color: #888;
+ color: #767676;
+}
+.oo-ui-menuSectionOptionWidget.oo-ui-widget-enabled {
+ cursor: default;
}
.oo-ui-dropdownWidget {
display: inline-block;
margin-right: 0.5em;
}
.oo-ui-dropdownWidget-handle {
+ position: relative;
width: 100%;
display: block;
white-space: nowrap;
height: 2.5em;
padding: 0;
}
-.oo-ui-comboBoxInputWidget-php > .oo-ui-indicatorElement-indicator {
+.oo-ui-comboBoxInputWidget-php > .oo-ui-indicatorWidget {
+ display: block;
+ position: absolute;
+ top: 0;
+ height: 100%;
pointer-events: none;
}
.oo-ui-comboBoxInputWidget:last-child {
visibility: visible;
margin: 0.775em;
}
+.oo-ui-comboBoxInputWidget-php .oo-ui-indicatorWidget {
+ right: 0;
+ max-height: 2.375em;
+ margin: 0;
+ margin-right: 0.775em;
+}
.oo-ui-comboBoxInputWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
cursor: default;
opacity: 0.2;
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:41Z
+ * Date: 2017-04-11T22:51:10Z
*/
.oo-ui-element-hidden {
display: none !important;
text-align: center;
}
.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+ position: relative;
font-weight: bold;
text-decoration: none;
}
.oo-ui-buttonElement > .oo-ui-buttonElement-button:focus {
- border-radius: 2px;
outline: 0;
}
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
- margin-right: 0.25em;
- margin-left: 0.46875em;
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ position: absolute;
+ top: 0;
+ height: 100%;
+}
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ display: block;
+}
+.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement > input.oo-ui-buttonElement-button {
+ line-height: 1;
+}
+.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ line-height: 1.172em;
+}
+.oo-ui-buttonElement.oo-ui-labelElement.oo-ui-iconElement > .oo-ui-buttonElement-button {
+ padding-left: 2.03125em;
+}
+.oo-ui-buttonElement.oo-ui-labelElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
+ padding-right: 2.5em;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ display: block;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement.oo-ui-indicatorElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ right: 0.9375em;
}
.oo-ui-buttonElement.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
-webkit-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
.oo-ui-buttonElement.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
opacity: 1;
}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button .oo-ui-indicatorElement-indicator {
- margin-right: 0;
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button {
+ border-radius: 1px;
+}
+.oo-ui-buttonElement-frameless.oo-ui-iconElement > .oo-ui-buttonElement-button {
+ min-width: 1.875em;
+ min-height: 1.875em;
+}
+.oo-ui-buttonElement-frameless.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ left: 0;
}
-.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- margin-left: 0.25em;
- margin-right: 0.25em;
+.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button {
+ margin-left: -1px;
+ border: 1px solid #fff;
+ padding: 0.3125em 0;
}
-.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button {
- padding-left: 0.25em;
- padding-right: 0.25em;
+.oo-ui-buttonElement-frameless.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
+ min-width: 0.9375em;
+ min-height: 0.9375em;
}
.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
color: #222;
color: #444;
}
.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus {
- box-shadow: inset 0 0 0 1px #36c, 0 0 0 1px #36c;
+ box-shadow: 0 0 0 2px #36c;
}
.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > input.oo-ui-buttonElement-button,
.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:active {
.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
opacity: 0.51;
}
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
- padding-left: 2.4em;
-}
.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
- position: relative;
min-height: 2.5em;
border-radius: 2px;
- padding: 0.625em 1em 0.546875em;
+ padding: 0.625em 0.9375em 0.546875em;
}
.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button {
- min-width: 3.125em;
+ padding-left: 2.03125em;
}
-.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
- min-width: 0;
-}
-.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button {
- line-height: 1;
+.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ left: 0.546875em;
}
-.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- line-height: 1.172em;
+.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
+ padding-left: 2.5em;
}
-.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
- display: block;
- position: absolute;
- top: 0;
- height: 100%;
- left: 0.5625em;
+.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ left: 0.46875em;
}
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
- margin-left: 0.3em;
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
+ padding-right: 2.03125em;
}
-.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-iconElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
- margin-left: 0.46875em;
- margin-right: -0.275em;
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ right: 1.015625em;
}
-.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
- position: relative;
- left: 0.2em;
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-iconElement > .oo-ui-buttonElement-button {
+ padding-right: 2.5em;
}
.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
background-color: #c8ccd1;
color: #72777d;
}
.oo-ui-decoratedOptionWidget {
- padding: 0.5em 2em 0.5em 3em;
+ padding: 0.703125em 0.9375em 0.625em;
+ line-height: 1;
}
.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
top: 0;
height: 100%;
}
+.oo-ui-decoratedOptionWidget.oo-ui-iconElement {
+ padding-left: 2.5em;
+}
.oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
- left: 0.5em;
+ left: 0.46875em;
+}
+.oo-ui-decoratedOptionWidget .oo-ui-labelElement-label {
+ line-height: 1.172em;
}
.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- right: 0.5em;
+ right: 0.9375em;
}
.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
.oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
.oo-ui-popupButtonWidget .oo-ui-popupWidget {
cursor: auto;
}
-.oo-ui-popupButtonWidget-frameless-popup.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor,
-.oo-ui-popupButtonWidget-frameless-popup.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor {
- margin-left: 0.9375em;
-}
-.oo-ui-popupButtonWidget-framed-popup.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor,
-.oo-ui-popupButtonWidget-framed-popup.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor {
- margin-left: 1.5em;
-}
.oo-ui-inputWidget {
margin-right: 0.5em;
}
box-sizing: border-box;
border: 1px solid #a2a9b1;
border-radius: 2px;
- padding: 0.5em 1em;
+ padding: 0.625em 0.9375em 0.546875em;
font-size: inherit;
font-family: inherit;
vertical-align: middle;
background-position: right 1.75em center;
width: calc( 100% + 1em );
height: 2.5em;
- padding: 0 0 0 1em;
+ padding: 0 0 0 0.9375em;
}
.oo-ui-dropdownInputWidget option {
font-size: inherit;
font-family: inherit;
height: 1.5em;
- padding: 0.5em 1em;
+ padding: 0.625em 0.9375em;
}
.oo-ui-dropdownInputWidget.oo-ui-widget-enabled select {
background-color: #f8f9fa;
cursor: pointer;
}
.oo-ui-textInputWidget.oo-ui-widget-disabled input,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
.oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label {
-webkit-touch-callout: none;
-webkit-user-select: none;
color: #000;
border: 1px solid #a2a9b1;
border-radius: 2px;
- padding: 0.625em 0.546875em 0.546875em;
+ padding: 0.625em 0.625em 0.546875em;
}
.oo-ui-textInputWidget input {
line-height: 1.172em;
}
.oo-ui-textInputWidget.oo-ui-iconElement input,
.oo-ui-textInputWidget.oo-ui-iconElement textarea {
- padding-left: 2.875em;
+ padding-left: 2.5em;
}
.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
- left: 0;
+ left: 0.46875em;
max-height: 2.5em;
- margin-left: 0.5em;
- background-position: right center;
}
.oo-ui-textInputWidget.oo-ui-indicatorElement input,
.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
- padding-right: 2.4875em;
+ padding-right: 2.1875em;
}
.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
- height: 100%;
max-height: 2.5em;
- margin: 0 0.775em;
+ margin-right: 0.9375em;
}
.oo-ui-textInputWidget > .oo-ui-labelElement-label {
color: #72777d;
margin-top: 1px;
- padding: 0.625em 0.546875em 0.546875em;
+ padding: 0.625em 0 0.546875em 0.625em;
line-height: 1.172em;
}
.oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label {
- margin-right: 2.0875em;
+ margin-right: 2.5em;
}
.oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label {
- margin-left: 2.475em;
+ padding-left: 2.5em;
}
.oo-ui-menuSelectWidget {
position: absolute;
display: none;
}
.oo-ui-menuOptionWidget {
- padding: 0.5em 1em;
-webkit-transition: background-color 100ms, color 100ms;
-moz-transition: background-color 100ms, color 100ms;
transition: background-color 100ms, color 100ms;
background-color: rgba(41, 98, 204, 0.1);
color: #36c;
}
+.oo-ui-menuOptionWidget.oo-ui-iconElement {
+ padding-left: 0.9375em;
+}
.oo-ui-menuSectionOptionWidget {
- cursor: default;
color: #72777d;
- padding: 0.33em 0.75em;
+ padding: 0.703125em 0.9375em 0.3125em;
+ font-weight: bold;
+}
+.oo-ui-menuSectionOptionWidget.oo-ui-widget-enabled {
+ cursor: default;
}
.oo-ui-dropdownWidget {
display: inline-block;
margin-right: 0.5em;
}
.oo-ui-dropdownWidget-handle {
+ position: relative;
width: 100%;
display: block;
white-space: nowrap;
margin-right: 0;
}
.oo-ui-dropdownWidget-handle {
- padding: 0.546875em 0;
- height: 2.5em;
- line-height: 1.275;
+ min-height: 2.5em;
border: 1px solid #a2a9b1;
border-radius: 2px;
-}
-.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
- right: 0;
- margin: 0 0.775em;
+ padding: 0.625em 0.9375em 0.546875em;
+ line-height: 1;
}
.oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
- left: 0.25em;
- margin: 0 0.3em;
+ left: 0.46875em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
+ right: 0.9375em;
}
.oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
- margin: 0 1em;
+ line-height: 1.172em;
+}
+.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle {
+ padding-left: 2.5em;
+}
+.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle {
+ padding-right: 1.875em;
}
.oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle {
background-color: #f8f9fa;
.oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
opacity: 0.15;
}
-.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
- margin-left: 3em;
-}
-.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
- margin-right: 2em;
-}
.oo-ui-comboBoxInputWidget {
display: inline-block;
position: relative;
height: 2.5em;
padding: 0;
}
-.oo-ui-comboBoxInputWidget-php > .oo-ui-indicatorElement-indicator {
+.oo-ui-comboBoxInputWidget-php > .oo-ui-indicatorWidget {
+ display: block;
+ position: absolute;
+ top: 0;
+ height: 100%;
pointer-events: none;
}
.oo-ui-comboBoxInputWidget input {
border-bottom-right-radius: 2px;
border-right-width: 1px;
}
-.oo-ui-comboBoxInputWidget-dropdownButton {
+.oo-ui-comboBoxInputWidget-dropdownButton.oo-ui-indicatorElement {
width: 2.5em;
}
-.oo-ui-comboBoxInputWidget-dropdownButton .oo-ui-buttonElement-button {
+.oo-ui-comboBoxInputWidget-dropdownButton.oo-ui-indicatorElement .oo-ui-buttonElement-button {
min-width: 2.5em;
min-height: 2.5em;
padding-left: 0;
- padding-right: 0;
}
-.oo-ui-comboBoxInputWidget-dropdownButton .oo-ui-buttonElement-button,
-.oo-ui-comboBoxInputWidget-dropdownButton .oo-ui-buttonElement-button:focus {
+.oo-ui-comboBoxInputWidget-dropdownButton.oo-ui-indicatorElement .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ right: 0.703125em;
+}
+.oo-ui-comboBoxInputWidget-dropdownButton.oo-ui-indicatorElement .oo-ui-buttonElement-button,
+.oo-ui-comboBoxInputWidget-dropdownButton.oo-ui-indicatorElement .oo-ui-buttonElement-button:focus {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
+.oo-ui-comboBoxInputWidget-php .oo-ui-indicatorWidget {
+ right: 0.9375em;
+ margin: 0;
+}
.oo-ui-comboBoxInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
opacity: 1;
}
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:37Z
+ * Date: 2017-04-11T22:51:05Z
*/
( function ( OO ) {
/**
* Check if an element is focusable.
- * Inspired from :focusable in jQueryUI v1.11.4 - 2015-04-14
+ * Inspired by :focusable in jQueryUI v1.11.4 - 2015-04-14
*
* @param {jQuery} $element Element to test
- * @return {boolean}
+ * @return {boolean} Element is focusable
*/
OO.ui.isFocusableElement = function ( $element ) {
var nodeName,
*
* @param {jQuery} $container Container to search in
* @param {boolean} [backwards] Search backwards
- * @return {jQuery} Focusable child, an empty jQuery object if none found
+ * @return {jQuery} Focusable child, or an empty jQuery object if none found
*/
OO.ui.findFocusable = function ( $container, backwards ) {
var $focusable = $( [] ),
*
* Ported from: http://underscorejs.org/underscore.js
*
- * @param {Function} func
- * @param {number} wait
- * @param {boolean} immediate
- * @return {Function}
+ * @param {Function} func Function to debounce
+ * @param {number} [wait=0] Wait period in milliseconds
+ * @param {boolean} [immediate] Trigger on leading edge
+ * @return {Function} Debounced function
*/
OO.ui.debounce = function ( func, wait, immediate ) {
var timeout;
/**
* Puts a console warning with provided message.
*
- * @param {string} message
+ * @param {string} message Message
*/
OO.ui.warnDeprecation = function ( message ) {
if ( OO.getProp( window, 'console', 'warn' ) !== undefined ) {
* when the wrapper is called, return values from the function are entirely
* discarded.
*
- * @param {Function} func
- * @param {number} wait
- * @return {Function}
+ * @param {Function} func Function to throttle
+ * @param {number} wait Throttle window length, in milliseconds
+ * @return {Function} Throttled function
*/
OO.ui.throttle = function ( func, wait ) {
var context, args, timeout,
/**
* A (possibly faster) way to get the current timestamp as an integer
*
- * @return {number} Current timestamp
+ * @return {number} Current timestamp, in milliseconds since the Unix epoch
*/
OO.ui.now = Date.now || function () {
return new Date().getTime();
// Override method visibility hints from ButtonElement
/**
* @method setActive
+ * @inheritdoc
*/
/**
* @method isActive
+ * @inheritdoc
*/
/**
};
/**
- * Set the ideal size. These are the dimensions the element will have when it's not being clipped.
+ * Set the ideal size. These are the dimensions #$clippable will have when it's not being clipped.
*
* @param {number|string} [width] Width as a number of pixels or CSS string with unit suffix
* @param {number|string} [height] Height as a number of pixels or CSS string with unit suffix
} else {
this.$clippable.css( {
overflowX: '',
- width: this.idealWidth ? this.idealWidth - extraWidth : '',
+ width: this.idealWidth || '',
maxWidth: Math.max( 0, allotedWidth )
} );
}
} else {
this.$clippable.css( {
overflowY: '',
- height: this.idealHeight ? this.idealHeight - extraHeight : '',
+ height: this.idealHeight || '',
maxHeight: Math.max( 0, allotedHeight )
} );
}
* @cfg {number} [height] Height of popup in pixels. Omit to use the automatic height.
* @cfg {boolean} [anchor=true] Show anchor pointing to origin of popup
* @cfg {string} [position='below'] Where to position the popup relative to $floatableContainer
- * 'above': Put popup above $floatableContainer; anchor points down to the start edge of $floatableContainer
- * 'below': Put popup below $floatableContainer; anchor points up to the start edge of $floatableContainer
+ * 'above': Put popup above $floatableContainer; anchor points down to the horizontal center
+ * of $floatableContainer
+ * 'below': Put popup below $floatableContainer; anchor points up to the horizontal center
+ * of $floatableContainer
* 'before': Put popup to the left (LTR) / right (RTL) of $floatableContainer; anchor points
* endwards (right/left) to the vertical center of $floatableContainer
* 'after': Put popup to the right (LTR) / left (RTL) of $floatableContainer; anchor points
}
// Position the anchor (which is positioned relative to the popup) to point to $floatableContainer
- // For popups above/below, we point to the start edge; for popups before/after, we point to the center
- anchorPos = vertical ? ( floatablePos[ start ] + floatablePos[ end ] ) / 2 : floatablePos[ start ];
+ anchorPos = ( floatablePos[ start ] + floatablePos[ end ] ) / 2;
anchorOffset = ( start === far ? -1 : 1 ) * ( anchorPos - popupPos[ start ] );
// If the anchor is less than 2*anchorSize from either edge, move the popup to make more space
* that toggles the menu's visibility on click, the menu will be hidden then re-shown when the user clicks
* that button, unless the button (or its parent widget) is passed in here.
* @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu.
+ * @cfg {jQuery} [$autoCloseIgnore] If these elements are clicked, don't auto-hide the menu.
* @cfg {boolean} [hideOnChoose=true] Hide the menu when the user chooses an option.
* @cfg {boolean} [filterFromInput=false] Filter the displayed options from the input
+ * @cfg {boolean} [highlightOnFilter] Highlight the first result when filtering
*/
OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
// Configuration initialization
this.filterFromInput = !!config.filterFromInput;
this.$input = config.$input ? config.$input : config.input ? config.input.$input : null;
this.$widget = config.widget ? config.widget.$element : null;
+ this.$autoCloseIgnore = config.$autoCloseIgnore || $( [] );
this.onDocumentMouseDownHandler = this.onDocumentMouseDown.bind( this );
this.onInputEditHandler = OO.ui.debounce( this.updateItemVisibility.bind( this ), 100 );
+ this.highlightOnFilter = !!config.highlightOnFilter;
// Initialization
this.$element
*/
OO.ui.MenuSelectWidget.prototype.onDocumentMouseDown = function ( e ) {
if (
- !OO.ui.contains( this.$element[ 0 ], e.target, true ) &&
- ( !this.$widget || !OO.ui.contains( this.$widget[ 0 ], e.target, true ) )
+ this.isVisible() &&
+ !OO.ui.contains(
+ this.$element.add( this.$widget ).add( this.$autoCloseIgnore ).get(),
+ e.target,
+ true
+ )
) {
this.toggle( false );
}
*/
OO.ui.MenuSelectWidget.prototype.updateItemVisibility = function () {
var i, item, visible, section, sectionEmpty,
+ firstItemFound = false,
anyVisible = false,
len = this.items.length,
showAll = !this.isVisible(),
anyVisible = anyVisible || visible;
sectionEmpty = sectionEmpty && !visible;
item.toggle( visible );
+ if ( this.highlightOnFilter && visible && !firstItemFound ) {
+ // Highlight the first item in the list
+ this.highlightItem( item );
+ firstItemFound = true;
+ }
}
}
// Process the final section
* Deprecated, omit this parameter and specify `$container` instead.
* @param {Object} [config] Configuration options
* @cfg {jQuery} [$container=inputWidget.$element] Element to render menu under
+ * @cfg {number} [width] Width of the menu
*/
OO.ui.FloatingMenuSelectWidget = function OoUiFloatingMenuSelectWidget( inputWidget, config ) {
// Allow 'inputWidget' parameter and config for backwards compatibility
// Configuration initialization
config = config || {};
+ this.width = config.width;
+
// Parent constructor
OO.ui.FloatingMenuSelectWidget.parent.call( this, config );
if ( change && visible ) {
// Make sure the width is set before the parent method runs.
- this.setIdealSize( this.$container.width() );
+ this.setIdealSize( this.width || this.$container.width() );
}
// Parent method
* @inheritdoc
*/
OO.ui.DropdownInputWidget.prototype.setValue = function ( value ) {
+ var selected;
value = this.cleanUpValue( value );
this.dropdownWidget.getMenu().selectItemByData( value );
+ // Only allow setting values that are actually present in the dropdown
+ selected = this.dropdownWidget.getMenu().getSelectedItem();
+ value = selected ? selected.getData() : '';
OO.ui.DropdownInputWidget.parent.prototype.setValue.call( this, value );
return this;
};
this.required = !!state;
if ( this.required ) {
this.$input
- .attr( 'required', 'required' )
+ .prop( 'required', true )
.attr( 'aria-required', 'true' );
if ( this.getIndicator() === null ) {
this.setIndicator( 'required' );
}
} else {
this.$input
- .removeAttr( 'required' )
+ .prop( 'required', false )
.removeAttr( 'aria-required' );
if ( this.getIndicator() === 'required' ) {
this.setIndicator( null );
autocomplete: false
}, config );
- // ComboBoxInputWidget shouldn't support multiline
+ // ComboBoxInputWidget shouldn't support `multiline`
config.multiline = false;
+ // See InputWidget#reusePreInfuseDOM about `config.$input`
+ if ( config.$input ) {
+ config.$input.removeAttr( 'list' );
+ }
+
// Parent constructor
OO.ui.ComboBoxInputWidget.parent.call( this, config );
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:37Z
+ * Date: 2017-04-11T22:51:05Z
*/
( function ( OO ) {
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:41Z
+ * Date: 2017-04-11T22:51:10Z
*/
.oo-ui-popupTool .oo-ui-popupWidget-popup,
.oo-ui-popupTool .oo-ui-popupWidget-anchor {
z-index: 4;
}
-.oo-ui-popupTool .oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor,
-.oo-ui-popupTool .oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor {
- margin-left: 1.25em;
-}
.oo-ui-toolGroupTool > .oo-ui-popupToolGroup {
border: 0;
border-radius: 0;
border-color: rgba(0, 0, 0, 0.2);
box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07);
background-color: #f8fbfd;
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #F1F7FB), color-stop(100%, #fff));
- background-image: -webkit-linear-gradient(top, #F1F7FB 0, #fff 100%);
- background-image: -moz-linear-gradient(top, #F1F7FB 0, #fff 100%);
- background-image: linear-gradient(to bottom, #F1F7FB 0, #fff 100%);
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #f1f7fb), color-stop(100%, #fff));
+ background-image: -webkit-linear-gradient(top, #f1f7fb 0, #fff 100%);
+ background-image: -moz-linear-gradient(top, #f1f7fb 0, #fff 100%);
+ background-image: linear-gradient(to bottom, #f1f7fb 0, #fff 100%);
-ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff1f7fb', endColorstr='#ffffffff' )";
}
.oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
border-bottom-right-radius: 0;
box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07);
background-color: #f8fbfd;
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #F1F7FB), color-stop(100%, #fff));
- background-image: -webkit-linear-gradient(top, #F1F7FB 0, #fff 100%);
- background-image: -moz-linear-gradient(top, #F1F7FB 0, #fff 100%);
- background-image: linear-gradient(to bottom, #F1F7FB 0, #fff 100%);
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #f1f7fb), color-stop(100%, #fff));
+ background-image: -webkit-linear-gradient(top, #f1f7fb 0, #fff 100%);
+ background-image: -moz-linear-gradient(top, #f1f7fb 0, #fff 100%);
+ background-image: linear-gradient(to bottom, #f1f7fb 0, #fff 100%);
-ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff1f7fb', endColorstr='#ffffffff' )";
}
.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
line-height: 2em;
}
.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel {
- color: #888;
+ color: #767676;
}
.oo-ui-listToolGroup .oo-ui-tool {
display: block;
border-color: rgba(0, 0, 0, 0.1);
box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07);
background-color: #f8fbfd;
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #F1F7FB), color-stop(100%, #fff));
- background-image: -webkit-linear-gradient(top, #F1F7FB 0, #fff 100%);
- background-image: -moz-linear-gradient(top, #F1F7FB 0, #fff 100%);
- background-image: linear-gradient(to bottom, #F1F7FB 0, #fff 100%);
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #f1f7fb), color-stop(100%, #fff));
+ background-image: -webkit-linear-gradient(top, #f1f7fb 0, #fff 100%);
+ background-image: -moz-linear-gradient(top, #f1f7fb 0, #fff 100%);
+ background-image: linear-gradient(to bottom, #f1f7fb 0, #fff 100%);
-ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff1f7fb', endColorstr='#ffffffff' )";
}
.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:41Z
+ * Date: 2017-04-11T22:51:10Z
*/
.oo-ui-tool.oo-ui-widget-enabled {
-webkit-transition: background-color 100ms;
.oo-ui-popupTool .oo-ui-popupWidget-anchor {
z-index: 4;
}
-.oo-ui-popupTool .oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor,
-.oo-ui-popupTool .oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor {
- margin-left: 1.25em;
-}
.oo-ui-toolGroupTool > .oo-ui-toolGroup {
border-right: 0;
}
width: 0.9375em;
height: 100%;
margin: 0 0.5em;
- opacity: 0.3;
+ opacity: 0.87;
}
.oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
right: -0.3125em;
.oo-ui-popupToolGroup.oo-ui-widget-enabled.oo-ui-popupToolGroup-active .oo-ui-tool-active.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
color: #36c;
}
-.oo-ui-popupToolGroup.oo-ui-widget-enabled-handle:hover {
+.oo-ui-popupToolGroup.oo-ui-widget-enabled > .oo-ui-popupToolGroup-handle {
+ -webkit-transition: background-color 100ms, box-shadow 100ms;
+ -moz-transition: background-color 100ms, box-shadow 100ms;
+ transition: background-color 100ms, box-shadow 100ms;
+}
+.oo-ui-popupToolGroup.oo-ui-widget-enabled > .oo-ui-popupToolGroup-handle:hover {
background-color: #eaecf0;
}
-.oo-ui-popupToolGroup.oo-ui-widget-enabled-handle:active {
+.oo-ui-popupToolGroup.oo-ui-widget-enabled > .oo-ui-popupToolGroup-handle:active {
background-color: #eaf3ff;
}
.oo-ui-listToolGroup .oo-ui-tool {
background-color: transparent;
box-shadow: none;
}
-.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement {
+.oo-ui-toolbar-narrow .oo-ui-toolbar-bar:after {
+ content: '';
+ display: block;
+ position: absolute;
+ top: 3.125em;
+ left: 0;
+ width: 100%;
+ height: 0;
+ border-bottom: 1px solid #c8ccd1;
+}
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement,
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-indicatorElement,
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-labelElement,
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-indicatorElement {
margin: 0;
}
-.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button {
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button,
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button,
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button,
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
border: 0;
border-radius: 0;
padding: 0 0.3125em;
}
-.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
margin: 0 1em;
line-height: 3.125em;
}
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-indicatorElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ margin: 0;
+}
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-indicatorElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ margin: 0 0.3125em;
+}
.oo-ui-toolbar-actions > .oo-ui-toolbar:not( :last-child ) {
border-right: 1px solid #c8ccd1;
}
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:37Z
+ * Date: 2017-04-11T22:51:05Z
*/
( function ( OO ) {
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:41Z
+ * Date: 2017-04-11T22:51:10Z
*/
-.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ),
.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ).oo-ui-widget {
cursor: move;
cursor: url(images/grab.cur );
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-fileName {
display: block;
- padding-top: 0.5em;
- padding-right: 2.375em;
-}
-.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-clearButton {
- right: 0.5em;
}
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail,
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info {
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
height: auto;
}
-.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-label {
- padding: 1em;
-}
.oo-ui-selectFileWidget:last-child {
margin-right: 0;
}
.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop.oo-ui-selectFileWidget-dropTarget {
background-color: #e1f3ff;
}
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-label {
+ padding: 1em;
+}
.oo-ui-selectFileWidget-dropTarget {
background-color: #fff;
border: 1px solid #aaa;
overflow: inherit;
white-space: normal;
}
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-fileName {
+ padding-top: 0.5em;
+ padding-right: 2.375em;
+}
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-clearButton {
+ right: 0.5em;
+}
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget {
border-style: dashed;
}
background-color: #fff;
border-color: #ddd;
}
+.oo-ui-tagMultiselectWidget {
+ display: inline-block;
+ position: relative;
+ width: 100%;
+ max-width: 50em;
+}
+.oo-ui-tagMultiselectWidget-handle {
+ width: 100%;
+ display: block;
+ position: relative;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-iconElement-icon,
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+ position: absolute;
+ top: 0;
+ height: 100%;
+}
+.oo-ui-tagMultiselectWidget-content {
+ position: relative;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-content > input {
+ display: none;
+}
+.oo-ui-tagMultiselectWidget-group {
+ display: inline;
+}
+.oo-ui-tagMultiselectWidget-inputPosition-outline {
+ width: 100%;
+}
+.oo-ui-tagMultiselectWidget-focusTrap {
+ display: inline-block;
+ height: 1px;
+ width: 1px;
+}
+.oo-ui-tagMultiselectWidget-handle {
+ background-color: #fff;
+ cursor: text;
+ min-height: 2.4em;
+ margin-right: 0.5em;
+ padding: 0.15em 0.25em;
+ border: 1px solid rgba(0, 0, 0, 0.1);
+ border-radius: 0.25em;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-tagMultiselectWidget-handle:last-child {
+ margin-right: 0;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input {
+ border: 0;
+ line-height: 1.675em;
+ margin: 0;
+ margin-left: 0.2em;
+ padding: 0;
+ font-size: inherit;
+ font-family: inherit;
+ background-color: transparent;
+ color: #000;
+ vertical-align: middle;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input::-webkit-input-placeholder {
+ color: #767676;
+ opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input:-ms-input-placeholder {
+ color: #767676;
+ opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input::-moz-placeholder {
+ color: #767676;
+ opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input:-moz-placeholder {
+ color: #767676;
+ opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input::placeholder {
+ color: #767676;
+ opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input:focus {
+ outline: 0;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-iconElement .oo-ui-tagMultiselectWidget-handle {
+ padding-left: 2.475em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-iconElement .oo-ui-tagMultiselectWidget-handle > .oo-ui-iconElement-icon {
+ left: 0;
+ margin: 0 0.3em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-indicatorElement .oo-ui-tagMultiselectWidget-handle {
+ padding-right: 2.4875em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-indicatorElement .oo-ui-tagMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+ right: 0;
+ margin: 0 0.775em;
+}
+.oo-ui-tagMultiselectWidget:hover .oo-ui-tagMultiselectWidget-handle {
+ border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-handle {
+ color: #ccc;
+ text-shadow: 0 1px 1px #fff;
+ border-color: #ddd;
+ background-color: #f3f3f3;
+ cursor: default;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-handle > .oo-ui-iconElement-icon,
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+ opacity: 0.2;
+}
+.oo-ui-tagMultiselectWidget-popup > .oo-ui-popupWidget-popup {
+ border: 0;
+}
+.oo-ui-tagItemWidget {
+ position: relative;
+ display: inline-block;
+ cursor: default;
+ white-space: nowrap;
+ width: auto;
+ max-width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ vertical-align: middle;
+ padding: 0 0.4em;
+ margin: 0.1em;
+ height: 1.7em;
+ line-height: 1.7em;
+ background-color: #eeeeee;
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #fff), color-stop(100%, #ddd));
+ background-image: -webkit-linear-gradient(top, #fff 0, #ddd 100%);
+ background-image: -moz-linear-gradient(top, #fff 0, #ddd 100%);
+ background-image: linear-gradient(to bottom, #fff 0, #ddd 100%);
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffffff', endColorstr='#ffdddddd' )";
+ border: 1px solid #ccc;
+ color: #333;
+ border-radius: 0.25em;
+}
+.oo-ui-tagItemWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+ display: inline-block;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ cursor: text;
+}
+.oo-ui-tagItemWidget:focus {
+ outline: 0;
+ border-color: #087ecc;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-disabled {
+ opacity: 0.5;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0);
+ box-shadow: none;
+ color: #333;
+ background: #eee;
+ border-color: #ccc;
+}
+.oo-ui-tagItemWidget > .oo-ui-buttonElement {
+ margin-top: -1.25em;
+ padding-left: 0.3em;
+}
.oo-ui-capsuleMultiselectWidget {
display: inline-block;
position: relative;
vertical-align: middle;
}
.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-webkit-input-placeholder {
- color: #72777d;
+ color: #767676;
opacity: 1;
}
.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:-ms-input-placeholder {
- color: #72777d;
+ color: #767676;
opacity: 1;
}
.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-moz-placeholder {
- color: #72777d;
+ color: #767676;
opacity: 1;
}
.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:-moz-placeholder {
- color: #72777d;
+ color: #767676;
opacity: 1;
}
.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::placeholder {
- color: #72777d;
+ color: #767676;
opacity: 1;
}
.oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:focus {
background-image: linear-gradient(to bottom, #fff 0, #ddd 100%);
-ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffffff', endColorstr='#ffdddddd' )";
border: 1px solid #ccc;
- color: #555;
+ color: #333;
border-radius: 0.25em;
}
.oo-ui-capsuleItemWidget.oo-ui-labelElement .oo-ui-labelElement-label {
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:41Z
+ * Date: 2017-04-11T22:51:10Z
*/
-.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ),
+.oo-ui-draggableElement {
+ padding: 1.0546875em 0.9375em 0.9375em;
+}
.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ).oo-ui-widget {
cursor: move;
cursor: url(images/grab.cur );
.oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement {
display: inline-block;
}
-.oo-ui-draggableElement-handle:focus {
+.oo-ui-draggableElement-handle.oo-ui-widget-enabled:focus {
border-radius: 2px;
box-shadow: inset 0 0 0 1px #36c, 0 0 0 1px #36c;
outline: 0;
border-bottom-right-radius: 2px;
border-top-right-radius: 2px;
}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ position: absolute;
+}
.oo-ui-buttonSelectWidget.oo-ui-widget-enabled:focus .oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected .oo-ui-buttonElement-button {
border-color: #36c;
box-shadow: inset 0 0 0 1px #36c, inset 0 0 0 2px #fff;
}
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-fileName {
display: block;
- padding-top: 0.5em;
- padding-right: 2.375em;
-}
-.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-clearButton {
- right: 0.5em;
}
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail,
.oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info {
.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
height: auto;
}
-.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-label {
- padding: 1em;
-}
.oo-ui-selectFileWidget:last-child {
margin-right: 0;
}
border-radius: 0 2px 2px 0;
}
.oo-ui-selectFileWidget-info {
- height: 2.4em;
background-color: #fff;
border: 1px solid #a2a9b1;
border-radius: 2px 0 0 2px;
- border-width: 1px 0 1px 1px;
+ border-right-width: 0;
}
.oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
- left: 0;
- margin-left: 0.5em;
+ left: 0.46875em;
+ min-height: 2.4em;
+ margin-left: -1px;
}
.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
- right: 0;
- margin-right: 0.775em;
+ right: 0.9375em;
+ min-height: 2.4em;
}
.oo-ui-selectFileWidget-label {
-webkit-box-sizing: border-box;
display: block;
right: 2.375em;
padding-top: 0.625em;
- padding-left: 0.546875em;
+ padding-left: 0.625em;
padding-bottom: 0.546875em;
line-height: 1.172em;
white-space: nowrap;
}
.oo-ui-selectFileWidget-clearButton {
top: -1px;
- right: 0;
+ right: 0.46875em;
min-width: 24px;
width: 1.875em;
margin-right: 0;
color: #72777d;
}
.oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-label {
- left: 2.875em;
+ left: 2.5em;
}
.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-label {
- right: 4.4625em;
+ right: 3.75em;
padding-left: 0;
}
.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-clearButton {
overflow: inherit;
white-space: normal;
}
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-fileName {
+ padding-right: 2.5em;
+}
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-clearButton {
+ top: 0;
+}
.oo-ui-selectFileWidget-empty.oo-ui-widget-enabled.oo-ui-selectFileWidget-dropTarget {
background-color: #fff;
border-style: dashed;
.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
opacity: 0.15;
}
+.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-label {
+ padding: 1em 0.9375em;
+}
.oo-ui-widget-disabled .oo-ui-selectFileWidget-dropLabel {
display: none;
}
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
- font-size: 1.1em;
- padding: 0.75em;
+ padding: 1.0546875em 0.9375em 0.9375em;
-webkit-transition: background-color 100ms, color 100ms;
-moz-transition: background-color 100ms, color 100ms;
transition: background-color 100ms, color 100ms;
background-color: rgba(41, 98, 204, 0.1);
color: #36c;
}
-.oo-ui-outlineOptionWidget .oo-ui-iconElement-icon {
- font-size: 90.90909%;
-}
.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
padding-right: 1.5em;
}
.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
opacity: 0.5;
}
-.oo-ui-outlineOptionWidget-level-0.oo-ui-iconElement {
- padding-left: 2.571em;
+.oo-ui-outlineOptionWidget .oo-ui-labelElement-label {
+ font-size: 1.1em;
}
.oo-ui-outlineOptionWidget-level-1 {
padding-left: 2.571em;
background-color: #fff;
color: #000;
}
+.oo-ui-tagMultiselectWidget {
+ display: inline-block;
+ position: relative;
+ width: 100%;
+ max-width: 50em;
+}
+.oo-ui-tagMultiselectWidget-handle {
+ width: 100%;
+ display: block;
+ position: relative;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-iconElement-icon,
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+ position: absolute;
+ top: 0;
+ height: 100%;
+}
+.oo-ui-tagMultiselectWidget-content {
+ position: relative;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-content > input {
+ display: none;
+}
+.oo-ui-tagMultiselectWidget-group {
+ display: inline;
+}
+.oo-ui-tagMultiselectWidget-inputPosition-outline {
+ width: 100%;
+}
+.oo-ui-tagMultiselectWidget-focusTrap {
+ display: inline-block;
+ height: 1px;
+ width: 1px;
+}
+.oo-ui-tagMultiselectWidget-handle {
+ min-height: 2.4em;
+ margin-right: 0.5em;
+ padding: 0.15em 0.25em;
+ border: 1px solid #a2a9b1;
+ border-radius: 2px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-tagMultiselectWidget-handle:last-child {
+ margin-right: 0;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input {
+ border: 0;
+ line-height: 1.675;
+ margin: 0 0 0 0.2em;
+ padding: 0;
+ font-size: inherit;
+ font-family: inherit;
+ background-color: transparent;
+ color: #000;
+ vertical-align: middle;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input::-webkit-input-placeholder {
+ color: #72777d;
+ opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input:-ms-input-placeholder {
+ color: #72777d;
+ opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input::-moz-placeholder {
+ color: #72777d;
+ opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input:-moz-placeholder {
+ color: #72777d;
+ opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input::placeholder {
+ color: #72777d;
+ opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input:focus {
+ outline: 0;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-iconElement .oo-ui-tagMultiselectWidget-handle {
+ padding-left: 2.475em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-iconElement .oo-ui-tagMultiselectWidget-handle > .oo-ui-iconElement-icon {
+ left: 0;
+ margin: 0 0.3em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-indicatorElement .oo-ui-tagMultiselectWidget-handle {
+ padding-right: 2.4875em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-indicatorElement .oo-ui-tagMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+ right: 0;
+ margin: 0 0.775em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-enabled .oo-ui-tagMultiselectWidget-handle {
+ background-color: #fff;
+ cursor: text;
+ -webkit-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+ -moz-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+ transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-enabled:hover .oo-ui-tagMultiselectWidget-handle {
+ border-color: #72777d;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-enabled.oo-ui-tagMultiselectWidget-open .oo-ui-tagMultiselectWidget-handle {
+ border-color: #36c;
+ outline: 0;
+ box-shadow: inset 0 0 0 1px #36c;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-handle {
+ color: #72777d;
+ text-shadow: 0 1px 1px #fff;
+ border-color: #c8ccd1;
+ background-color: #eaecf0;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-handle > .oo-ui-iconElement-icon {
+ opacity: 0.51;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+ opacity: 0.15;
+}
+.oo-ui-tagItemWidget {
+ position: relative;
+ display: inline-block;
+ cursor: default;
+ white-space: nowrap;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: auto;
+ max-width: 100%;
+ height: 1.7em;
+ margin: 0.1em;
+ border: 1px solid #a2a9b1;
+ border-radius: 2px;
+ padding: 0 0.4em;
+ line-height: 1.7;
+ vertical-align: middle;
+}
+.oo-ui-tagItemWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+ display: inline-block;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ cursor: text;
+}
+.oo-ui-tagItemWidget.oo-ui-flaggedElement-invalid {
+ border-color: #d33;
+}
+.oo-ui-tagItemWidget.oo-ui-flaggedElement-invalid:hover {
+ border-color: #d33;
+}
+.oo-ui-tagItemWidget.oo-ui-flaggedElement-invalid:focus {
+ border-color: #d33;
+ box-shadow: inset 0 0 0 1px #d33;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-enabled {
+ background-color: #f8f9fa;
+ color: #222;
+ padding-right: 1.5375em;
+ -webkit-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
+ -moz-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
+ transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-enabled:hover {
+ background-color: #fff;
+ color: #444;
+ border-color: #a2a9b1;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-enabled:focus {
+ border-color: #36c;
+ box-shadow: inset 0 0 0 1px #36c;
+ outline: 0;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-enabled > .oo-ui-buttonElement {
+ display: block;
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-enabled .oo-ui-buttonElement-button {
+ display: block;
+ width: 1.5375em;
+ height: 100%;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-enabled .oo-ui-buttonElement-button .oo-ui-indicator-clear {
+ position: absolute;
+ top: 0;
+ right: 0.3em;
+ bottom: 0;
+ height: auto;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-disabled {
+ background-color: #eaecf0;
+ color: #72777d;
+ border-color: #c8ccd1;
+ text-shadow: 0 1px 1px #fff;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-disabled:focus {
+ outline: 0;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-disabled > .oo-ui-buttonElement {
+ display: none;
+}
.oo-ui-capsuleMultiselectWidget {
display: inline-block;
position: relative;
outline: 0;
}
.oo-ui-capsuleMultiselectWidget.oo-ui-iconElement .oo-ui-capsuleMultiselectWidget-handle {
- padding-left: 2.475em;
+ padding-left: 2.5em;
}
.oo-ui-capsuleMultiselectWidget.oo-ui-iconElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon {
- left: 0;
- margin: 0 0.3em;
+ left: 0.46875em;
}
.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle {
- padding-right: 2.4875em;
+ padding-right: 2.8125em;
}
.oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
- right: 0;
- margin: 0 0.775em;
+ right: 0.9375em;
}
.oo-ui-capsuleMultiselectWidget-popup {
margin-top: -1px;
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:37Z
+ * Date: 2017-04-11T22:51:05Z
*/
( function ( OO ) {
if ( this.draggable !== isDraggable ) {
this.draggable = isDraggable;
- this.$element.toggleClass( 'oo-ui-draggableElement-undraggable', !this.draggable );
+ this.$handle.toggleClass( 'oo-ui-draggableElement-undraggable', !this.draggable );
}
};
return this;
};
+/**
+ * TagItemWidgets are used within a {@link OO.ui.TagMultiselectWidget
+ * TagMultiselectWidget} to display the selected items.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.mixin.ItemWidget
+ * @mixins OO.ui.mixin.LabelElement
+ * @mixins OO.ui.mixin.FlaggedElement
+ * @mixins OO.ui.mixin.TabIndexedElement
+ * @mixins OO.ui.mixin.DraggableElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration object
+ * @cfg {boolean} [valid=true] Item is valid
+ */
+OO.ui.TagItemWidget = function OoUiTagItemWidget( config ) {
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.TagItemWidget.parent.call( this, config );
+
+ // Mixin constructors
+ OO.ui.mixin.ItemWidget.call( this );
+ OO.ui.mixin.LabelElement.call( this, config );
+ OO.ui.mixin.FlaggedElement.call( this, config );
+ OO.ui.mixin.TabIndexedElement.call( this, config );
+ OO.ui.mixin.DraggableElement.call( this, config );
+
+ this.valid = config.valid === undefined ? true : !!config.valid;
+
+ this.closeButton = new OO.ui.ButtonWidget( {
+ framed: false,
+ indicator: 'clear',
+ tabIndex: -1
+ } );
+ this.closeButton.setDisabled( this.isDisabled() );
+
+ // Events
+ this.closeButton
+ .connect( this, { click: 'remove' } );
+ this.$element
+ .on( 'click', this.select.bind( this ) )
+ .on( 'keydown', this.onKeyDown.bind( this ) )
+ // Prevent propagation of mousedown; the tag item "lives" in the
+ // clickable area of the TagMultiselectWidget, which listens to
+ // mousedown to open the menu or popup. We want to prevent that
+ // for clicks specifically on the tag itself, so the actions taken
+ // are more deliberate. When the tag is clicked, it will emit the
+ // selection event (similar to how #OO.ui.MultioptionWidget emits 'change')
+ // and can be handled separately.
+ .on( 'mousedown', function ( e ) { e.stopPropagation(); } );
+
+ // Initialization
+ this.$element
+ .addClass( 'oo-ui-tagItemWidget' )
+ .append( this.$label, this.closeButton.$element );
+};
+
+/* Initialization */
+
+OO.inheritClass( OO.ui.TagItemWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.ItemWidget );
+OO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.LabelElement );
+OO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.FlaggedElement );
+OO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.TabIndexedElement );
+OO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.DraggableElement );
+
+/* Events */
+
+/**
+ * @event remove
+ *
+ * A remove action was performed on the item
+ */
+
+/**
+ * @event navigate
+ * @param {string} direction Direction of the movement, forward or backwards
+ *
+ * A navigate action was performed on the item
+ */
+
+/**
+ * @event select
+ *
+ * The tag widget was selected. This can occur when the widget
+ * is either clicked or enter was pressed on it.
+ */
+
+/**
+ * @event valid
+ * @param {boolean} isValid Item is valid
+ *
+ * Item validity has changed
+ */
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.TagItemWidget.prototype.setDisabled = function ( state ) {
+ // Parent method
+ OO.ui.TagItemWidget.parent.prototype.setDisabled.call( this, state );
+
+ if ( this.closeButton ) {
+ this.closeButton.setDisabled( state );
+ }
+ return this;
+};
+
+/**
+ * Handle removal of the item
+ *
+ * This is mainly for extensibility concerns, so other children
+ * of this class can change the behavior if they need to. This
+ * is called by both clicking the 'remove' button but also
+ * on keypress, which is harder to override if needed.
+ *
+ * @fires remove
+ */
+OO.ui.TagItemWidget.prototype.remove = function () {
+ if ( !this.isDisabled() ) {
+ this.emit( 'remove' );
+ }
+};
+
+/**
+ * Handle a keydown event on the widget
+ *
+ * @fires navigate
+ * @fires remove
+ * @return {boolean|undefined} false to stop the operation
+ */
+OO.ui.TagItemWidget.prototype.onKeyDown = function ( e ) {
+ var movement;
+
+ if ( e.keyCode === OO.ui.Keys.BACKSPACE || e.keyCode === OO.ui.Keys.DELETE ) {
+ this.remove();
+ return false;
+ } else if ( e.keyCode === OO.ui.Keys.ENTER ) {
+ this.select();
+ return false;
+ } else if (
+ e.keyCode === OO.ui.Keys.LEFT ||
+ e.keyCode === OO.ui.Keys.RIGHT
+ ) {
+ if ( OO.ui.Element.static.getDir( this.$element ) === 'rtl' ) {
+ movement = {
+ left: 'forwards',
+ right: 'backwards'
+ };
+ } else {
+ movement = {
+ left: 'backwards',
+ right: 'forwards'
+ };
+ }
+
+ this.emit(
+ 'navigate',
+ e.keyCode === OO.ui.Keys.LEFT ?
+ movement.left : movement.right
+ );
+ }
+};
+
+/**
+ * Focuses the capsule
+ */
+OO.ui.TagItemWidget.prototype.focus = function () {
+ if ( !this.isDisabled() ) {
+ this.$element.focus();
+ }
+};
+
+/**
+ * Select this item
+ *
+ * @fires select
+ */
+OO.ui.TagItemWidget.prototype.select = function () {
+ if ( !this.isDisabled() ) {
+ this.emit( 'select' );
+ }
+};
+
+/**
+ * Set the valid state of this item
+ *
+ * @param {boolean} [valid] Item is valid
+ * @fires valid
+ */
+OO.ui.TagItemWidget.prototype.toggleValid = function ( valid ) {
+ valid = valid === undefined ? !this.valid : !!valid;
+
+ if ( this.valid !== valid ) {
+ this.valid = valid;
+
+ this.setFlags( { invalid: !this.valid } );
+
+ this.emit( 'valid', this.valid );
+ }
+};
+
+/**
+ * Check whether the item is valid
+ *
+ * @return {boolean} Item is valid
+ */
+OO.ui.TagItemWidget.prototype.isValid = function () {
+ return this.valid;
+};
+
+/**
+ * A basic tag multiselect widget, similar in concept to {@link OO.ui.ComboBoxInputWidget combo box widget}
+ * that allows the user to add multiple values that are displayed in a tag area.
+ *
+ * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * This widget is a base widget; see {@link OO.ui.MenuTagMultiselectWidget MenuTagMultiselectWidget} and
+ * {@link OO.ui.PopupTagMultiselectWidget PopupTagMultiselectWidget} for the implementations that use
+ * a menu and a popup respectively.
+ *
+ * @example
+ * // Example: A basic TagMultiselectWidget.
+ * var widget = new OO.ui.TagMultiselectWidget( {
+ * inputPosition: 'outline',
+ * allowedValues: [ 'Option 1', 'Option 2', 'Option 3' ],
+ * selected: [ 'Option 1' ]
+ * } );
+ * $( 'body' ).append( widget.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.mixin.GroupWidget
+ * @mixins OO.ui.mixin.DraggableGroupElement
+ * @mixins OO.ui.mixin.IndicatorElement
+ * @mixins OO.ui.mixin.IconElement
+ * @mixins OO.ui.mixin.TabIndexedElement
+ * @mixins OO.ui.mixin.FlaggedElement
+ *
+ * @constructor
+ * @param {Object} config Configuration object
+ * @cfg {Object} [input] Configuration options for the input widget
+ * @cfg {boolean} [inputPosition='inline'] Position of the input. Options are:
+ * - inline: The input is invisible, but exists inside the tag list, so
+ * the user types into the tag groups to add tags.
+ * - outline: The input is underneath the tag area.
+ * - none: No input supplied
+ * @cfg {boolean} [allowEditTags=true] Allow editing of the tags by clicking them
+ * @cfg {boolean} [allowArbitrary=false] Allow data items to be added even if
+ * not present in the menu.
+ * @cfg {Object[]} [allowedValues] An array representing the allowed items
+ * by their datas.
+ * @cfg {boolean} [allowDuplicates=false] Allow duplicate items to be added
+ * @cfg {boolean} [allowDisplayInvalidTags=false] Allow the display of
+ * invalid tags. These tags will display with an invalid state, and
+ * the widget as a whole will have an invalid state if any invalid tags
+ * are present.
+ * @cfg {boolean} [allowReordering=true] Allow reordering of the items
+ * @cfg {Object[]|String[]} [selected] A set of selected tags. If given,
+ * these will appear in the tag list on initialization, as long as they
+ * pass the validity tests.
+ */
+OO.ui.TagMultiselectWidget = function OoUiTagMultiselectWidget( config ) {
+ var inputEvents,
+ rAF = window.requestAnimationFrame || setTimeout,
+ widget = this,
+ $tabFocus = $( '<span>' )
+ .addClass( 'oo-ui-tagMultiselectWidget-focusTrap' );
+
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.TagMultiselectWidget.parent.call( this, config );
+
+ // Mixin constructors
+ OO.ui.mixin.GroupWidget.call( this, config );
+ OO.ui.mixin.IndicatorElement.call( this, config );
+ OO.ui.mixin.IconElement.call( this, config );
+ OO.ui.mixin.TabIndexedElement.call( this, config );
+ OO.ui.mixin.FlaggedElement.call( this, config );
+ OO.ui.mixin.DraggableGroupElement.call( this, config );
+
+ this.toggleDraggable(
+ config.allowReordering === undefined ?
+ true : !!config.allowReordering
+ );
+
+ this.inputPosition = this.constructor.static.allowedInputPositions.indexOf( config.inputPosition ) > -1 ?
+ config.inputPosition : 'inline';
+ this.allowEditTags = config.allowEditTags === undefined ? true : !!config.allowEditTags;
+ this.allowArbitrary = !!config.allowArbitrary;
+ this.allowDuplicates = !!config.allowDuplicates;
+ this.allowedValues = config.allowedValues || [];
+ this.allowDisplayInvalidTags = config.allowDisplayInvalidTags;
+ this.hasInput = this.inputPosition !== 'none';
+ this.height = null;
+ this.valid = true;
+
+ this.$content = $( '<div>' )
+ .addClass( 'oo-ui-tagMultiselectWidget-content' );
+ this.$handle = $( '<div>' )
+ .addClass( 'oo-ui-tagMultiselectWidget-handle' )
+ .append(
+ this.$indicator,
+ this.$icon,
+ this.$content
+ .append(
+ this.$group
+ .addClass( 'oo-ui-tagMultiselectWidget-group' )
+ )
+ );
+
+ // Events
+ this.aggregate( {
+ remove: 'itemRemove',
+ navigate: 'itemNavigate',
+ select: 'itemSelect'
+ } );
+ this.connect( this, {
+ itemRemove: 'onTagRemove',
+ itemSelect: 'onTagSelect',
+ itemNavigate: 'onTagNavigate',
+ change: 'onChangeTags'
+ } );
+ this.$handle.on( {
+ mousedown: this.onMouseDown.bind( this )
+ } );
+
+ // Initialize
+ this.$element
+ .addClass( 'oo-ui-tagMultiselectWidget' )
+ .addClass( 'oo-ui-tagMultiselectWidget-inputPosition-' + this.inputPosition )
+ .append( this.$handle );
+
+ if ( this.hasInput ) {
+ this.input = new OO.ui.TextInputWidget( $.extend( {
+ placeholder: config.placeholder,
+ classes: [ 'oo-ui-tagMultiselectWidget-input' ]
+ }, config.input ) );
+ this.input.setDisabled( this.isDisabled() );
+
+ inputEvents = {
+ focus: this.onInputFocus.bind( this ),
+ blur: this.onInputBlur.bind( this ),
+ 'propertychange change click mouseup keydown keyup input cut paste select focus':
+ OO.ui.debounce( this.updateInputSize.bind( this ) ),
+ keydown: this.onInputKeyDown.bind( this ),
+ keypress: this.onInputKeyPress.bind( this )
+ };
+
+ this.input.$input.on( inputEvents );
+
+ if ( this.inputPosition === 'outline' ) {
+ // Override max-height for the input widget
+ // in the case the widget is outline so it can
+ // stretch all the way if the widet is wide
+ this.input.$element.css( 'max-width', 'inherit' );
+ this.$element.append( this.input.$element );
+ } else {
+ // HACK: When the widget is using 'inline' input, the
+ // behavior needs to only use the $input itself
+ // so we style and size it accordingly (otherwise
+ // the styling and sizing can get very convoluted
+ // when the wrapping divs and other elements)
+ // We are taking advantage of still being able to
+ // call the widget itself for operations like
+ // .getValue() and setDisabled() and .focus() but
+ // having only the $input attached to the DOM
+ this.$content.append( this.input.$input );
+ }
+ }
+
+ this.setTabIndexedElement(
+ this.hasInput ?
+ this.input.$input :
+ $tabFocus
+ );
+
+ if ( config.selected ) {
+ this.setValue( config.selected );
+ }
+
+ // HACK: Input size needs to be calculated after everything
+ // else is rendered
+ rAF( function () {
+ if ( widget.hasInput ) {
+ widget.updateInputSize();
+ }
+ } );
+};
+
+/* Initialization */
+
+OO.inheritClass( OO.ui.TagMultiselectWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.GroupWidget );
+OO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.DraggableGroupElement );
+OO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.IndicatorElement );
+OO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.IconElement );
+OO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.TabIndexedElement );
+OO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.FlaggedElement );
+
+/* Static properties */
+
+/**
+ * Allowed input positions.
+ * - inline: The input is inside the tag list
+ * - outline: The input is under the tag list
+ * - none: There is no input
+ *
+ * @property {Array}
+ */
+OO.ui.TagMultiselectWidget.static.allowedInputPositions = [ 'inline', 'outline', 'none' ];
+
+/* Methods */
+
+/**
+ * Handle mouse down events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse down event
+ * @return {boolean} False to prevent defaults
+ */
+OO.ui.TagMultiselectWidget.prototype.onMouseDown = function ( e ) {
+ if ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {
+ this.focus();
+ return false;
+ }
+};
+
+/**
+ * Handle key press events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ * @return {boolean} Whether to prevent defaults
+ */
+OO.ui.TagMultiselectWidget.prototype.onInputKeyPress = function ( e ) {
+ var stopOrContinue,
+ withMetaKey = e.metaKey || e.ctrlKey;
+
+ if ( !this.isDisabled() ) {
+ if ( e.which === OO.ui.Keys.ENTER ) {
+ stopOrContinue = this.doInputEnter( e, withMetaKey );
+ }
+
+ // Make sure the input gets resized.
+ setTimeout( this.updateInputSize.bind( this ), 0 );
+ return stopOrContinue;
+ }
+};
+
+/**
+ * Handle key down events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key down event
+ * @return {boolean}
+ */
+OO.ui.TagMultiselectWidget.prototype.onInputKeyDown = function ( e ) {
+ var movement, direction,
+ withMetaKey = e.metaKey || e.ctrlKey;
+
+ if ( !this.isDisabled() ) {
+ // 'keypress' event is not triggered for Backspace
+ if ( e.keyCode === OO.ui.Keys.BACKSPACE ) {
+ return this.doInputBackspace( e, withMetaKey );
+ } else if ( e.keyCode === OO.ui.Keys.ESCAPE ) {
+ return this.doInputEscape( e );
+ } else if (
+ e.keyCode === OO.ui.Keys.LEFT ||
+ e.keyCode === OO.ui.Keys.RIGHT
+ ) {
+ if ( OO.ui.Element.static.getDir( this.$element ) === 'rtl' ) {
+ movement = {
+ left: 'forwards',
+ right: 'backwards'
+ };
+ } else {
+ movement = {
+ left: 'backwards',
+ right: 'forwards'
+ };
+ }
+ direction = e.keyCode === OO.ui.Keys.LEFT ?
+ movement.left : movement.right;
+
+ return this.doInputArrow( e, direction, withMetaKey );
+ }
+ }
+};
+
+/**
+ * Respond to input focus event
+ */
+OO.ui.TagMultiselectWidget.prototype.onInputFocus = function () {};
+
+/**
+ * Respond to input blur event
+ */
+OO.ui.TagMultiselectWidget.prototype.onInputBlur = function () {};
+
+/**
+ * Perform an action after the enter key on the input
+ *
+ * @param {jQuery.Event} e Event data
+ * @param {boolean} [withMetaKey] Whether this key was pressed with
+ * a meta key like 'ctrl'
+ * @return {boolean} Whether to prevent defaults
+ */
+OO.ui.TagMultiselectWidget.prototype.doInputEnter = function () {
+ this.addTagFromInput();
+ return false;
+};
+
+/**
+ * Perform an action responding to the enter key on the input
+ *
+ * @param {jQuery.Event} e Event data
+ * @param {boolean} [withMetaKey] Whether this key was pressed with
+ * a meta key like 'ctrl'
+ * @return {boolean} Whether to prevent defaults
+ */
+OO.ui.TagMultiselectWidget.prototype.doInputBackspace = function () {
+ var items, item;
+
+ if (
+ this.inputPosition === 'inline' &&
+ this.input.getValue() === '' &&
+ !this.isEmpty()
+ ) {
+ // Delete the last item
+ items = this.getItems();
+ item = items[ items.length - 1 ];
+ this.input.setValue( item.getData() );
+ this.removeItems( [ item ] );
+
+ return false;
+ }
+};
+
+/**
+ * Perform an action after the escape key on the input
+ *
+ * @param {jQuery.Event} e Event data
+ * @return {boolean} Whether to prevent defaults
+ */
+OO.ui.TagMultiselectWidget.prototype.doInputEscape = function () {
+ this.clearInput();
+};
+
+/**
+ * Perform an action after the arrow key on the input, select the previous
+ * or next item from the input.
+ * See #getPreviousItem and #getNextItem
+ *
+ * @param {jQuery.Event} e Event data
+ * @param {string} direction Direction of the movement; forwards or backwards
+ * @param {boolean} [withMetaKey] Whether this key was pressed with
+ * a meta key like 'ctrl'
+ * @return {boolean} Whether to prevent defaults
+ */
+OO.ui.TagMultiselectWidget.prototype.doInputArrow = function ( direction ) {
+ if (
+ this.inputPosition === 'inline' &&
+ !this.isEmpty()
+ ) {
+ if ( direction === 'backwards' ) {
+ // Get previous item
+ this.getPreviousItem().focus();
+ } else {
+ // Get next item
+ this.getNextItem().focus();
+ }
+ }
+};
+
+/**
+ * Respond to item select event
+ */
+OO.ui.TagMultiselectWidget.prototype.onTagSelect = function ( item ) {
+ if ( this.hasInput && this.allowEditTags ) {
+ if ( this.input.getValue() ) {
+ this.addTagFromInput();
+ }
+ // 1. Get the label of the tag into the input
+ this.input.setValue( item.getData() );
+ // 2. Remove the tag
+ this.removeItems( [ item ] );
+ // 3. Focus the input
+ this.focus();
+ }
+};
+
+/**
+ * Respond to change event, where items were added, removed, or cleared.
+ */
+OO.ui.TagMultiselectWidget.prototype.onChangeTags = function () {
+ this.toggleValid( this.checkValidity() );
+ if ( this.hasInput ) {
+ this.updateInputSize();
+ }
+ this.updateIfHeightChanged();
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.TagMultiselectWidget.prototype.setDisabled = function ( isDisabled ) {
+ // Parent method
+ OO.ui.TagMultiselectWidget.parent.prototype.setDisabled.call( this, isDisabled );
+
+ if ( this.hasInput && this.input ) {
+ this.input.setDisabled( !!isDisabled );
+ }
+
+ if ( this.items ) {
+ this.getItems().forEach( function ( item ) {
+ item.setDisabled( !!isDisabled );
+ } );
+ }
+};
+
+/**
+ * Respond to tag remove event
+ * @param {OO.ui.TagItemWidget} item Removed tag
+ */
+OO.ui.TagMultiselectWidget.prototype.onTagRemove = function ( item ) {
+ this.removeTagByData( item.getData() );
+};
+
+/**
+ * Respond to navigate event on the tag
+ *
+ * @param {OO.ui.TagItemWidget} item Removed tag
+ * @param {string} direction Direction of movement; 'forwards' or 'backwards'
+ */
+OO.ui.TagMultiselectWidget.prototype.onTagNavigate = function ( item, direction ) {
+ if ( direction === 'forwards' ) {
+ this.getNextItem( item ).focus();
+ } else {
+ this.getPreviousItem( item ).focus();
+ }
+};
+
+/**
+ * Add tag from input value
+ */
+OO.ui.TagMultiselectWidget.prototype.addTagFromInput = function () {
+ var val = this.input.getValue(),
+ isValid = this.isAllowedData( val );
+
+ if ( !val ) {
+ return;
+ }
+
+ if ( isValid || this.allowDisplayInvalidTags ) {
+ this.addTag( val );
+ this.clearInput();
+ this.focus();
+ }
+};
+
+/**
+ * Clear the input
+ */
+OO.ui.TagMultiselectWidget.prototype.clearInput = function () {
+ this.input.setValue( '' );
+};
+
+/**
+ * Check whether the given value is a duplicate of an existing
+ * tag already in the list.
+ *
+ * @param {string|Object} data Requested value
+ * @return {boolean} Value is duplicate
+ */
+OO.ui.TagMultiselectWidget.prototype.isDuplicateData = function ( data ) {
+ return !!this.getItemFromData( data );
+};
+
+/**
+ * Check whether a given value is allowed to be added
+ *
+ * @param {string|Object} data Requested value
+ * @return {boolean} Value exists in the allowed values list
+ */
+OO.ui.TagMultiselectWidget.prototype.isAllowedData = function ( data ) {
+ var hash = OO.getHash( data );
+
+ if ( this.allowArbitrary ) {
+ return true;
+ }
+
+ if (
+ !this.allowDuplicates &&
+ this.isDuplicateData( data )
+ ) {
+ return false;
+ }
+
+ // Check with allowed values
+ if (
+ this.getAllowedValues().some( function ( value ) {
+ return hash === OO.getHash( value );
+ } )
+ ) {
+ return true;
+ }
+
+ return false;
+};
+
+/**
+ * Get the allowed values list
+ *
+ * @return {string[]} Allowed data values
+ */
+OO.ui.TagMultiselectWidget.prototype.getAllowedValues = function () {
+ return this.allowedValues;
+};
+
+/**
+ * Add a value to the allowed values list
+ *
+ * @param {string} value Allowed data value
+ */
+OO.ui.TagMultiselectWidget.prototype.addAllowedValue = function ( value ) {
+ if ( this.allowedValues.indexOf( value ) === -1 ) {
+ this.allowedValues.push( value );
+ }
+};
+
+/**
+ * Focus the widget
+ */
+OO.ui.TagMultiselectWidget.prototype.focus = function () {
+ if ( this.hasInput ) {
+ this.input.focus();
+ }
+};
+
+/**
+ * Get the datas of the currently selected items
+ *
+ * @return {string[]|Object[]} Datas of currently selected items
+ */
+OO.ui.TagMultiselectWidget.prototype.getValue = function () {
+ return this.getItems()
+ .filter( function ( item ) {
+ return item.isValid();
+ } )
+ .map( function ( item ) {
+ return item.getData();
+ } );
+};
+
+/**
+ * Set the value of this widget by datas.
+ *
+ * @param {string|string[]|Object|Object[]} value An object representing the data
+ * and label of the value. If the widget allows arbitrary values,
+ * the items will be added as-is. Otherwise, the data value will
+ * be checked against allowedValues.
+ * This object must contain at least a data key. Example:
+ * { data: 'foo', label: 'Foo item' }
+ * For multiple items, use an array of objects. For example:
+ * [
+ * { data: 'foo', label: 'Foo item' },
+ * { data: 'bar', label: 'Bar item' }
+ * ]
+ * Value can also be added with plaintext array, for example:
+ * [ 'foo', 'bar', 'bla' ] or a single string, like 'foo'
+ */
+OO.ui.TagMultiselectWidget.prototype.setValue = function ( valueObject ) {
+ valueObject = Array.isArray( valueObject ) ? valueObject : [ valueObject ];
+
+ this.clearItems();
+ valueObject.forEach( function ( obj ) {
+ if ( typeof obj === 'string' ) {
+ this.addTag( obj );
+ } else {
+ this.addTag( obj.data, obj.label );
+ }
+ }.bind( this ) );
+};
+
+/**
+ * Add tag to the display area
+ *
+ * @param {string|Object} data Tag data
+ * @param {string} [label] Tag label. If no label is provided, the
+ * stringified version of the data will be used instead.
+ * @return {boolean} Item was added successfully
+ */
+OO.ui.TagMultiselectWidget.prototype.addTag = function ( data, label ) {
+ var newItemWidget,
+ isValid = this.isAllowedData( data );
+
+ if ( isValid || this.allowDisplayInvalidTags ) {
+ newItemWidget = this.createTagItemWidget( data, label );
+ newItemWidget.toggleValid( isValid );
+ this.addItems( [ newItemWidget ] );
+ }
+};
+
+/**
+ * Remove tag by its data property.
+ *
+ * @param {string|Object} data Tag data
+ */
+OO.ui.TagMultiselectWidget.prototype.removeTagByData = function ( data ) {
+ var item = this.getItemFromData( data );
+
+ this.removeItems( [ item ] );
+};
+
+/**
+ * Construct a OO.ui.TagItemWidget (or a subclass thereof) from given label and data.
+ *
+ * @protected
+ * @param {string} data Item data
+ * @param {string} label The label text.
+ * @return {OO.ui.TagItemWidget}
+ */
+OO.ui.TagMultiselectWidget.prototype.createTagItemWidget = function ( data, label ) {
+ label = label || data;
+
+ return new OO.ui.TagItemWidget( { data: data, label: label } );
+};
+
+/**
+ * Given an item, returns the item after it. If the item is already the
+ * last item, return `this.input`. If no item is passed, returns the
+ * very first item.
+ *
+ * @protected
+ * @param {OO.ui.TagItemWidget} [item] Tag item
+ * @return {OO.ui.Widget} The next widget available.
+ */
+OO.ui.TagMultiselectWidget.prototype.getNextItem = function ( item ) {
+ var itemIndex = this.items.indexOf( item );
+
+ if ( item === undefined || itemIndex === -1 ) {
+ return this.items[ 0 ];
+ }
+
+ if ( itemIndex === this.items.length - 1 ) { // Last item
+ if ( this.hasInput ) {
+ return this.input;
+ } else {
+ // Return first item
+ return this.items[ 0 ];
+ }
+ } else {
+ return this.items[ itemIndex + 1 ];
+ }
+};
+
+/**
+ * Given an item, returns the item before it. If the item is already the
+ * first item, return `this.input`. If no item is passed, returns the
+ * very last item.
+ *
+ * @protected
+ * @param {OO.ui.TagItemWidget} [item] Tag item
+ * @return {OO.ui.Widget} The previous widget available.
+ */
+OO.ui.TagMultiselectWidget.prototype.getPreviousItem = function ( item ) {
+ var itemIndex = this.items.indexOf( item );
+
+ if ( item === undefined || itemIndex === -1 ) {
+ return this.items[ this.items.length - 1 ];
+ }
+
+ if ( itemIndex === 0 ) {
+ if ( this.hasInput ) {
+ return this.input;
+ } else {
+ // Return the last item
+ return this.items[ this.items.length - 1 ];
+ }
+ } else {
+ return this.items[ itemIndex - 1 ];
+ }
+};
+
+/**
+ * Update the dimensions of the text input field to encompass all available area.
+ * This is especially relevant for when the input is at the edge of a line
+ * and should get smaller. The usual operation (as an inline-block with min-width)
+ * does not work in that case, pushing the input downwards to the next line.
+ *
+ * @private
+ */
+OO.ui.TagMultiselectWidget.prototype.updateInputSize = function () {
+ var $lastItem, direction, contentWidth, currentWidth, bestWidth;
+ if ( this.inputPosition === 'inline' && !this.isDisabled() ) {
+ this.input.$input.css( 'width', '1em' );
+ $lastItem = this.$group.children().last();
+ direction = OO.ui.Element.static.getDir( this.$handle );
+
+ // Get the width of the input with the placeholder text as
+ // the value and save it so that we don't keep recalculating
+ if (
+ this.contentWidthWithPlaceholder === undefined &&
+ this.input.getValue() === '' &&
+ this.input.$input.attr( 'placeholder' ) !== undefined
+ ) {
+ this.input.setValue( this.input.$input.attr( 'placeholder' ) );
+ this.contentWidthWithPlaceholder = this.input.$input[ 0 ].scrollWidth;
+ this.input.setValue( '' );
+
+ }
+
+ // Always keep the input wide enough for the placeholder text
+ contentWidth = Math.max(
+ this.input.$input[ 0 ].scrollWidth,
+ // undefined arguments in Math.max lead to NaN
+ ( this.contentWidthWithPlaceholder === undefined ) ?
+ 0 : this.contentWidthWithPlaceholder
+ );
+ currentWidth = this.input.$input.width();
+
+ if ( contentWidth < currentWidth ) {
+ this.updateIfHeightChanged();
+ // All is fine, don't perform expensive calculations
+ return;
+ }
+
+ if ( $lastItem.length === 0 ) {
+ bestWidth = this.$content.innerWidth();
+ } else {
+ bestWidth = direction === 'ltr' ?
+ this.$content.innerWidth() - $lastItem.position().left - $lastItem.outerWidth() :
+ $lastItem.position().left;
+ }
+
+ // Some safety margin for sanity, because I *really* don't feel like finding out where the few
+ // pixels this is off by are coming from.
+ bestWidth -= 10;
+ if ( contentWidth > bestWidth ) {
+ // This will result in the input getting shifted to the next line
+ bestWidth = this.$content.innerWidth() - 10;
+ }
+ this.input.$input.width( Math.floor( bestWidth ) );
+ this.updateIfHeightChanged();
+ } else {
+ this.updateIfHeightChanged();
+ }
+};
+
+/**
+ * Determine if widget height changed, and if so,
+ * emit the resize event. This is useful for when there are either
+ * menus or popups attached to the bottom of the widget, to allow
+ * them to change their positioning in case the widget moved down
+ * or up.
+ *
+ * @private
+ */
+OO.ui.TagMultiselectWidget.prototype.updateIfHeightChanged = function () {
+ var height = this.$element.height();
+ if ( height !== this.height ) {
+ this.height = height;
+ this.emit( 'resize' );
+ }
+};
+
+/**
+ * Check whether all items in the widget are valid
+ *
+ * @return {boolean} Widget is valid
+ */
+OO.ui.TagMultiselectWidget.prototype.checkValidity = function () {
+ return this.getItems().every( function ( item ) {
+ return item.isValid();
+ } );
+};
+
+/**
+ * Set the valid state of this item
+ *
+ * @param {boolean} [valid] Item is valid
+ * @fires valid
+ */
+OO.ui.TagMultiselectWidget.prototype.toggleValid = function ( valid ) {
+ valid = valid === undefined ? !this.valid : !!valid;
+
+ if ( this.valid !== valid ) {
+ this.valid = valid;
+
+ this.setFlags( { invalid: !this.valid } );
+
+ this.emit( 'valid', this.valid );
+ }
+};
+
+/**
+ * Get the current valid state of the widget
+ *
+ * @return {boolean} Widget is valid
+ */
+OO.ui.TagMultiselectWidget.prototype.isValid = function () {
+ return this.valid;
+};
+
+/**
+ * PopupTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended
+ * to use a popup. The popup can be configured to have a default input to insert values into the widget.
+ *
+ * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * @example
+ * // Example: A basic PopupTagMultiselectWidget.
+ * var widget = new OO.ui.PopupTagMultiselectWidget();
+ * $( 'body' ).append( widget.$element );
+ *
+ * // Example: A PopupTagMultiselectWidget with an external popup.
+ * var popupInput = new OO.ui.TextInputWidget(),
+ * widget = new OO.ui.PopupTagMultiselectWidget( {
+ * popupInput: popupInput,
+ * popup: {
+ * $content: popupInput.$element
+ * }
+ * } );
+ * $( 'body' ).append( widget.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
+ *
+ * @class
+ * @extends OO.ui.TagMultiselectWidget
+ * @mixins OO.ui.mixin.PopupElement
+ *
+ * @param {Object} config Configuration object
+ * @cfg {jQuery} [$overlay] An overlay for the popup
+ * @cfg {Object} [popup] Configuration options for the popup
+ * @cfg {OO.ui.InputWidget} [popupInput] An input widget inside the popup that will be
+ * focused when the popup is opened and will be used as replacement for the
+ * general input in the widget.
+ */
+OO.ui.PopupTagMultiselectWidget = function OoUiPopupTagMultiselectWidget( config ) {
+ var defaultInput,
+ defaultConfig = { popup: {} };
+
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.PopupTagMultiselectWidget.parent.call( this, $.extend( { inputPosition: 'none' }, config ) );
+
+ this.$overlay = config.$overlay || this.$element;
+
+ if ( !config.popup ) {
+ // For the default base implementation, we give a popup
+ // with an input widget inside it. For any other use cases
+ // the popup needs to be populated externally and the
+ // event handled to add tags separately and manually
+ defaultInput = new OO.ui.TextInputWidget();
+
+ defaultConfig.popupInput = defaultInput;
+ defaultConfig.popup.$content = defaultInput.$element;
+
+ this.$element.addClass( 'oo-ui-popupTagMultiselectWidget-defaultPopup' );
+ }
+
+ // Add overlay, and add that to the autoCloseIgnore
+ defaultConfig.popup.$overlay = this.$overlay;
+ defaultConfig.popup.$autoCloseIgnore = this.hasInput ?
+ this.input.$element.add( this.$overlay ) : this.$overlay;
+
+ // Allow extending any of the above
+ config = $.extend( defaultConfig, config );
+
+ // Mixin constructors
+ OO.ui.mixin.PopupElement.call( this, config );
+
+ if ( this.hasInput ) {
+ this.input.$input.on( 'focus', this.popup.toggle.bind( this.popup, true ) );
+ }
+
+ // Configuration options
+ this.popupInput = config.popupInput;
+ if ( this.popupInput ) {
+ this.popupInput.connect( this, {
+ enter: 'onPopupInputEnter'
+ } );
+ }
+
+ // Events
+ this.popup.connect( this, { toggle: 'onPopupToggle' } );
+ this.$tabIndexed
+ .on( 'focus', this.focus.bind( this ) );
+
+ // Initialize
+ this.$element
+ .append( this.popup.$element )
+ .addClass( 'oo-ui-popupTagMultiselectWidget' );
+};
+
+/* Initialization */
+
+OO.inheritClass( OO.ui.PopupTagMultiselectWidget, OO.ui.TagMultiselectWidget );
+OO.mixinClass( OO.ui.PopupTagMultiselectWidget, OO.ui.mixin.PopupElement );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.PopupTagMultiselectWidget.prototype.focus = function () {
+ // Since the parent deals with input focus, only
+ // call the parent method if our input isn't in the
+ // popup
+ if ( !this.popupInput ) {
+ // Parent method
+ OO.ui.PopupTagMultiselectWidget.parent.prototype.focus.call( this );
+ }
+
+ this.popup.toggle( true );
+};
+
+/**
+ * Respond to popup toggle event
+ *
+ * @param {boolean} isVisible Popup is visible
+ */
+OO.ui.PopupTagMultiselectWidget.prototype.onPopupToggle = function ( isVisible ) {
+ if ( isVisible && this.popupInput ) {
+ this.popupInput.focus();
+ }
+};
+
+/**
+ * Respond to popup input enter event
+ */
+OO.ui.PopupTagMultiselectWidget.prototype.onPopupInputEnter = function () {
+ if ( this.popupInput ) {
+ this.addTagByPopupValue( this.popupInput.getValue() );
+ this.popupInput.setValue( '' );
+ }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.PopupTagMultiselectWidget.prototype.onTagSelect = function ( item ) {
+ if ( this.popupInput && this.allowEditTags ) {
+ this.popupInput.setValue( item.getData() );
+ this.removeItems( [ item ] );
+
+ this.popup.toggle( true );
+ this.popupInput.focus();
+ } else {
+ // Parent
+ OO.ui.PopupTagMultiselectWidget.parent.prototype.onTagSelect.call( this, item );
+ }
+};
+
+/**
+ * Add a tag by the popup value.
+ * Whatever is responsible for setting the value in the popup should call
+ * this method to add a tag, or use the regular methods like #addTag or
+ * #setValue directly.
+ *
+ * @param {string} data The value of item
+ * @param {string} [label] The label of the tag. If not given, the data is used.
+ */
+OO.ui.PopupTagMultiselectWidget.prototype.addTagByPopupValue = function ( data, label ) {
+ this.addTag( data, label );
+};
+
+/**
+ * MenuTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended
+ * to use a menu of selectable options.
+ *
+ * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * @example
+ * // Example: A basic MenuTagMultiselectWidget.
+ * var widget = new OO.ui.MenuTagMultiselectWidget( {
+ * inputPosition: 'outline',
+ * options: [
+ * { data: 'option1', label: 'Option 1' },
+ * { data: 'option2', label: 'Option 2' },
+ * { data: 'option3', label: 'Option 3' },
+ * ],
+ * selected: [ 'option1', 'option2' ]
+ * } );
+ * $( 'body' ).append( widget.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
+ *
+ * @class
+ * @extends OO.ui.TagMultiselectWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration object
+ * @cfg {Object} [menu] Configuration object for the menu widget
+ * @cfg {jQuery} [$overlay] An overlay for the menu
+ * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`
+ */
+OO.ui.MenuTagMultiselectWidget = function OoUiMenuTagMultiselectWidget( config ) {
+ config = config || {};
+
+ // Parent constructor
+ OO.ui.MenuTagMultiselectWidget.parent.call( this, config );
+
+ this.$overlay = config.$overlay || this.$element;
+
+ this.menu = this.createMenuWidget( $.extend( {
+ widget: this,
+ input: this.hasInput ? this.input : null,
+ $input: this.hasInput ? this.input.$input : null,
+ filterFromInput: !!this.hasInput,
+ $autoCloseIgnore: this.hasInput ?
+ this.input.$element.add( this.$overlay ) : this.$overlay,
+ $container: this.hasInput && this.inputPosition === 'outline' ?
+ this.input.$element : this.$element,
+ $overlay: this.$overlay,
+ disabled: this.isDisabled()
+ }, config.menu ) );
+ this.addOptions( config.options || [] );
+
+ // Events
+ this.menu.connect( this, {
+ choose: 'onMenuChoose',
+ toggle: 'onMenuToggle'
+ } );
+ if ( this.hasInput ) {
+ this.input.connect( this, { change: 'onInputChange' } );
+ }
+ this.connect( this, { resize: 'onResize' } );
+
+ // Initialization
+ this.$overlay
+ .append( this.menu.$element );
+ this.$element
+ .addClass( 'oo-ui-menuTagMultiselectWidget' );
+};
+
+/* Initialization */
+
+OO.inheritClass( OO.ui.MenuTagMultiselectWidget, OO.ui.TagMultiselectWidget );
+
+/* Methods */
+
+/**
+ * Respond to resize event
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.onResize = function () {
+ // Reposition the menu
+ this.menu.position();
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.onInputFocus = function () {
+ // Parent method
+ OO.ui.MenuTagMultiselectWidget.parent.prototype.onInputFocus.call( this );
+
+ this.menu.toggle( true );
+};
+
+/**
+ * Respond to input change event
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.onInputChange = function () {
+ this.menu.toggle( true );
+};
+
+/**
+ * Respond to menu choose event
+ *
+ * @param {OO.ui.OptionWidget} menuItem Chosen menu item
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.onMenuChoose = function ( menuItem ) {
+ // Add tag
+ this.addTag( menuItem.getData(), menuItem.getLabel() );
+};
+
+/**
+ * Respond to menu toggle event. Reset item highlights on hide.
+ *
+ * @param {boolean} isVisible The menu is visible
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {
+ if ( !isVisible ) {
+ this.menu.selectItem( null );
+ this.menu.highlightItem( null );
+ }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.onTagSelect = function ( tagItem ) {
+ var menuItem = this.menu.getItemFromData( tagItem.getData() );
+ // Override the base behavior from TagMultiselectWidget; the base behavior
+ // in TagMultiselectWidget is to remove the tag to edit it in the input,
+ // but in our case, we want to utilize the menu selection behavior, and
+ // definitely not remove the item.
+
+ // Select the menu item
+ this.menu.selectItem( menuItem );
+
+ this.focus();
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.addTagFromInput = function () {
+ var inputValue = this.input.getValue(),
+ highlightedItem = this.menu.getHighlightedItem(),
+ item = this.menu.getItemFromData( inputValue );
+
+ // Override the parent method so we add from the menu
+ // rather than directly from the input
+
+ // Look for a highlighted item first
+ if ( highlightedItem ) {
+ this.addTag( highlightedItem.getData(), highlightedItem.getLabel() );
+ } else if ( item ) {
+ // Look for the element that fits the data
+ this.addTag( item.getData(), item.getLabel() );
+ } else {
+ // Otherwise, add the tag - the method will only add if the
+ // tag is valid or if invalid tags are allowed
+ this.addTag( inputValue );
+ }
+};
+
+/**
+ * Return the visible items in the menu. This is mainly used for when
+ * the menu is filtering results.
+ *
+ * @return {OO.ui.MenuOptionWidget[]} Visible results
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.getMenuVisibleItems = function () {
+ return this.menu.getItems().filter( function ( menuItem ) {
+ return menuItem.isVisible();
+ } );
+};
+
+/**
+ * Create the menu for this widget. This is in a separate method so that
+ * child classes can override this without polluting the constructor with
+ * unnecessary extra objects that will be overidden.
+ *
+ * @param {Object} menuConfig Configuration options
+ * @return {OO.ui.MenuSelectWidget} Menu widget
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.createMenuWidget = function ( menuConfig ) {
+ return new OO.ui.FloatingMenuSelectWidget( menuConfig );
+};
+
+/**
+ * Add options to the menu
+ *
+ * @param {Object[]} options Object defining options
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.addOptions = function ( menuOptions ) {
+ var widget = this,
+ items = menuOptions.map( function ( obj ) {
+ return widget.createMenuOptionWidget( obj.data, obj.label );
+ } );
+
+ this.menu.addItems( items );
+};
+
+/**
+ * Create a menu option widget.
+ *
+ * @param {string} data Item data
+ * @param {string} [label] Item label
+ * @return {OO.ui.OptionWidget} Option widget
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.createMenuOptionWidget = function ( data, label ) {
+ return new OO.ui.MenuOptionWidget( {
+ data: data,
+ label: label || data
+ } );
+};
+
+/**
+ * Get the menu
+ *
+ * @return {OO.ui.MenuSelectWidget} Menu
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.getMenu = function () {
+ return this.menu;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.isAllowedData = function ( data ) {
+ return OO.ui.MenuTagMultiselectWidget.parent.prototype.isAllowedData.call( this, data ) &&
+ !!this.menu.getItemFromData( data );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.focus = function () {
+ // Parent method
+ OO.ui.MenuTagMultiselectWidget.parent.prototype.focus.call( this );
+
+ if ( !this.isDisabled() ) {
+ this.menu.toggle( true );
+ }
+};
+
/**
* SelectFileWidgets allow for selecting files, using the HTML5 File API. These
* widgets can be configured with {@link OO.ui.mixin.IconElement icons} and {@link
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:41Z
+ * Date: 2017-04-11T22:51:10Z
*/
.oo-ui-actionWidget.oo-ui-pendingElement-pending {
background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
top: 1em;
bottom: 1em;
max-height: 100%;
- max-height: calc(100% - 2em);
+ max-height: calc( 100% - 2em );
border: 1px solid #ccc;
border-radius: 0.5em;
box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:41Z
+ * Date: 2017-04-11T22:51:10Z
*/
.oo-ui-window {
background: transparent;
/*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2017 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2017-03-30T20:34:37Z
+ * Date: 2017-04-11T22:51:05Z
*/
( function ( OO ) {
OO.inheritClass( OO.ui.ActionWidget, OO.ui.ButtonWidget );
OO.mixinClass( OO.ui.ActionWidget, OO.ui.mixin.PendingElement );
-/* Events */
-
-/**
- * A resize event is emitted when the size of the widget changes.
- *
- * @event resize
- */
-
/* Methods */
/**
return this.modes.slice();
};
-/**
- * Emit a resize event if the size has changed.
- *
- * @private
- * @chainable
- */
-OO.ui.ActionWidget.prototype.propagateResize = function () {
- var width, height;
-
- if ( this.isElementAttached() ) {
- width = this.$element.width();
- height = this.$element.height();
-
- if ( width !== this.width || height !== this.height ) {
- this.width = width;
- this.height = height;
- this.emit( 'resizePrivate' );
- if ( this.emit( 'resize' ) ) {
- OO.ui.warnDeprecation( 'ActionWidget: resize event is deprecated. See T129162.' );
- }
- }
- }
-
- return this;
-};
-
-/**
- * @inheritdoc
- */
-OO.ui.ActionWidget.prototype.setIcon = function () {
- // Mixin method
- OO.ui.mixin.IconElement.prototype.setIcon.apply( this, arguments );
- this.propagateResize();
-
- return this;
-};
-
-/**
- * @inheritdoc
- */
-OO.ui.ActionWidget.prototype.setLabel = function () {
- // Mixin method
- OO.ui.mixin.LabelElement.prototype.setLabel.apply( this, arguments );
- this.propagateResize();
-
- return this;
-};
-
-/**
- * @inheritdoc
- */
-OO.ui.ActionWidget.prototype.setFlags = function () {
- // Mixin method
- OO.ui.mixin.FlaggedElement.prototype.setFlags.apply( this, arguments );
- this.propagateResize();
-
- return this;
-};
-
-/**
- * @inheritdoc
- */
-OO.ui.ActionWidget.prototype.clearFlags = function () {
- // Mixin method
- OO.ui.mixin.FlaggedElement.prototype.clearFlags.apply( this, arguments );
- this.propagateResize();
-
- return this;
-};
-
-/**
- * Toggle the visibility of the action button.
- *
- * @param {boolean} [show] Show button, omit to toggle visibility
- * @chainable
- */
-OO.ui.ActionWidget.prototype.toggle = function () {
- // Parent method
- OO.ui.ActionWidget.parent.prototype.toggle.apply( this, arguments );
- this.propagateResize();
-
- return this;
-};
-
/* eslint-disable no-unused-vars */
/**
* ActionSets manage the behavior of the {@link OO.ui.ActionWidget action widgets} that comprise them.
* @param {OO.ui.ActionWidget} action Action that was clicked
*/
-/**
- * @event resize
- *
- * A 'resize' event is emitted when an action widget is resized.
- *
- * @param {OO.ui.ActionWidget} action Action that was resized
- */
-
/**
* @event add
*
click: [ 'emit', 'click', action ],
toggle: [ 'onActionChange' ]
} );
- action.on( 'resizePrivate', function ( action ) {
- if ( this.emit( 'resize', action ) ) {
- OO.ui.warnDeprecation( 'ActionSet: resize event is deprecated. See T129162.' );
- }
- }, [ action ], this );
this.list.push( action );
}
this.organized = false;
* @param {Object} [data] Dialog opening data
* @param {jQuery|string|Function|null} [data.title] Description of the action being confirmed
* @param {jQuery|string|Function|null} [data.message] Description of the action's consequence
+ * @param {string} [data.size] Symbolic name of the dialog size, see OO.ui.Window
* @param {Object[]} [data.actions] List of OO.ui.ActionOptionWidget configuration options for each
* action item
*/
this.message.setLabel(
data.message !== undefined ? data.message : this.constructor.static.message
);
+ this.size = data.size !== undefined ? data.size : this.constructor.static.size;
}, this );
};
* console.log( 'User closed the dialog.' );
* } );
*
+ * OO.ui.alert( 'Something larger happened!', { size: 'large' } );
+ *
* @param {jQuery|string} text Message text to display
* @param {Object} [options] Additional options, see OO.ui.MessageDialog#getSetupProcess
* @return {jQuery.Promise} Promise resolved when the user closes the dialog
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
<path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
<path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
<path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
<path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
<path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
<path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
<path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
<path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
<path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
<path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
<path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
<path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
- <g id="down">
- <path id="arrow" d="M1 4h10L6 9 1 4"/>
- </g>
+ <path d="M11.05 3.996l-.965-1.053-4.035 3.86-3.947-3.86L1.05 3.996l5 5 5-5"/>
</g></svg>
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
- <g id="down">
- <path id="arrow" d="M1 4h10L6 9 1 4"/>
- </g>
+ <path d="M11.05 3.996l-.965-1.053-4.035 3.86-3.947-3.86L1.05 3.996l5 5 5-5"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
- <g id="ltr">
- <path id="arrow" d="M4 1v10l5-5-5-5"/>
- </g>
+ <path d="M4.026 11l-1.052-.965L6.832 6 2.974 2.053 4.026 1l5 5-5 5"/>
</g></svg>
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
- <g id="ltr">
- <path id="arrow" d="M4 1v10l5-5-5-5"/>
- </g>
+ <path d="M4.026 11l-1.052-.965L6.832 6 2.974 2.053 4.026 1l5 5-5 5"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
- <g id="rtl">
- <path id="arrow" d="M8 11V1L3 6l5 5"/>
- </g>
+ <path d="M7.974 11l1.052-.965L5.168 6l3.858-3.947L7.974 1l-5 5 5 5"/>
</g></svg>
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
- <g id="rtl">
- <path id="arrow" d="M8 11V1L3 6l5 5"/>
- </g>
+ <path d="M7.974 11l1.052-.965L5.168 6l3.858-3.947L7.974 1l-5 5 5 5"/>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
- <g id="up">
- <path id="arrow" d="M1 8h10L6 3 1 8"/>
- </g>
+ <path d="M11 7.974l-.965 1.052L6 5.168 2.053 9.026 1 7.974l5-5 5 5"/>
</g></svg>
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
- <g id="up">
- <path id="arrow" d="M1 8h10L6 3 1 8"/>
- </g>
+ <path d="M11 7.974l-.965 1.052L6 5.168 2.053 9.026 1 7.974l5-5 5 5"/>
</svg>
"invert": {
"color": "#fff",
"global": true
- },
- "progressive": {
- "color": "#36c"
- },
- "constructive": {
- "color": "#36c"
- },
- "destructive": {
- "color": "#d33"
- },
- "warning": {
- "color": "#ff5d00"
}
},
"images": {
*/
( function ( mw, $ ) {
var msg,
- win = window,
- ua = navigator.userAgent.toLowerCase(),
- onloadFuncts = [],
loadedScripts = {};
- /**
- * User-agent sniffing.
- *
- * @deprecated since 1.17 Use jquery.client instead
- */
-
- msg = 'Use feature detection or module jquery.client instead.';
-
- mw.log.deprecate( win, 'clientPC', ua, msg );
-
- // Ignored dummy values
- mw.log.deprecate( win, 'is_gecko', false, msg );
- mw.log.deprecate( win, 'is_chrome_mac', false, msg );
- mw.log.deprecate( win, 'is_chrome', false, msg );
- mw.log.deprecate( win, 'webkit_version', false, msg );
- mw.log.deprecate( win, 'is_safari_win', false, msg );
- mw.log.deprecate( win, 'is_safari', false, msg );
- mw.log.deprecate( win, 'webkit_match', false, msg );
- mw.log.deprecate( win, 'is_ff2', false, msg );
- mw.log.deprecate( win, 'ff2_bugs', false, msg );
- mw.log.deprecate( win, 'is_ff2_win', false, msg );
- mw.log.deprecate( win, 'is_ff2_x11', false, msg );
- mw.log.deprecate( win, 'opera95_bugs', false, msg );
- mw.log.deprecate( win, 'opera7_bugs', false, msg );
- mw.log.deprecate( win, 'opera6_bugs', false, msg );
- mw.log.deprecate( win, 'is_opera_95', false, msg );
- mw.log.deprecate( win, 'is_opera_preseven', false, msg );
- mw.log.deprecate( win, 'is_opera', false, msg );
- mw.log.deprecate( win, 'ie6_bugs', false, msg );
+ function wikiUrlencode( page ) {
+ return encodeURIComponent( String( page ) )
+ .replace( /'/g, '%27' )
+ .replace( /%20/g, '_' )
+ // wfUrlencode replacements
+ .replace( /%3B/g, ';' )
+ .replace( /%40/g, '@' )
+ .replace( /%24/g, '$' )
+ .replace( /%21/g, '!' )
+ .replace( /%2A/g, '*' )
+ .replace( /%28/g, '(' )
+ .replace( /%29/g, ')' )
+ .replace( /%2C/g, ',' )
+ .replace( /%2F/g, '/' )
+ .replace( /%7E/g, '~' )
+ .replace( /%3A/g, ':' );
+ }
/**
- * DOM utilities for handling of events, text nodes and selecting elements
- *
* @deprecated since 1.17 Use jQuery instead
*/
- msg = 'Use jQuery instead.';
-
- // Ignored dummy values
- mw.log.deprecate( win, 'doneOnloadHook', undefined, msg );
- mw.log.deprecate( win, 'onloadFuncts', [], msg );
- mw.log.deprecate( win, 'runOnloadHook', $.noop, msg );
- mw.log.deprecate( win, 'changeText', $.noop, msg );
- mw.log.deprecate( win, 'killEvt', $.noop, msg );
- mw.log.deprecate( win, 'addHandler', $.noop, msg );
- mw.log.deprecate( win, 'hookEvent', $.noop, msg );
- mw.log.deprecate( win, 'addClickHandler', $.noop, msg );
- mw.log.deprecate( win, 'removeHandler', $.noop, msg );
- mw.log.deprecate( win, 'getElementsByClassName', function () { return []; }, msg );
- mw.log.deprecate( win, 'getInnerText', function () { return ''; }, msg );
-
- // Run a function after the window onload event is fired
- mw.log.deprecate( win, 'addOnloadHook', function ( hookFunct ) {
- if ( onloadFuncts ) {
- onloadFuncts.push( hookFunct );
- } else {
- // If func queue is gone the event has happened already,
- // run immediately instead of queueing.
- hookFunct();
- }
- }, msg );
-
- $( win ).on( 'load', function () {
- var i, functs;
-
- // Don't run twice
- if ( !onloadFuncts ) {
- return;
- }
-
- // Deference and clear onloadFuncts before running any
- // hooks to make sure we don't miss any addOnloadHook
- // calls.
- functs = onloadFuncts.slice();
- onloadFuncts = undefined;
-
- // Execute the queued functions
- for ( i = 0; i < functs.length; i++ ) {
- functs[ i ]();
- }
- } );
-
- /**
- * Toggle checkboxes with shift selection
- *
- * @deprecated since 1.17 Use jquery.checkboxShiftClick instead
- */
- msg = 'Use jquery.checkboxShiftClick instead.';
- mw.log.deprecate( win, 'checkboxes', [], msg );
- mw.log.deprecate( win, 'lastCheckbox', null, msg );
- mw.log.deprecate( win, 'setupCheckboxShiftClick', $.noop, msg );
- mw.log.deprecate( win, 'addCheckboxClickHandlers', $.noop, msg );
- mw.log.deprecate( win, 'checkboxClickHandler', $.noop, msg );
-
- /**
- * Add a button to the default editor toolbar
- *
- * @deprecated since 1.17 Use mw.toolbar instead
- */
- mw.log.deprecate( win, 'mwEditButtons', [], 'Use mw.toolbar instead.' );
- mw.log.deprecate( win, 'mwCustomEditButtons', [], 'Use mw.toolbar instead.' );
-
- /**
- * Spinner creation, injection and removal
- *
- * @deprecated since 1.18 Use jquery.spinner instead
- */
- mw.log.deprecate( win, 'injectSpinner', $.noop, 'Use jquery.spinner instead.' );
- mw.log.deprecate( win, 'removeSpinner', $.noop, 'Use jquery.spinner instead.' );
-
- /**
- * Escape utilities
- *
- * @deprecated since 1.18 Use mw.html instead
- */
- mw.log.deprecate( win, 'escapeQuotes', $.noop, 'Use mw.html instead.' );
- mw.log.deprecate( win, 'escapeQuotesHTML', $.noop, 'Use mw.html instead.' );
-
- /**
- * Display a message to the user
- *
- * @deprecated since 1.17 Use mediawiki.notify instead
- * @param {string|HTMLElement} message To be put inside the message box
- */
- mw.log.deprecate( win, 'jsMsg', function ( message ) {
- if ( !arguments.length || message === '' || message === null ) {
- return true;
- }
- if ( typeof message !== 'object' ) {
- message = $.parseHTML( message );
- }
- mw.notify( message, { autoHide: true, tag: 'legacy' } );
- return true;
- }, 'Use mediawiki.notify instead.' );
-
- /**
- * Misc. utilities
- *
- * @deprecated since 1.17 Use mediawiki.util or jquery.accessKeyLabel instead
- */
- msg = 'Use mediawiki.util instead.';
- mw.log.deprecate( win, 'addPortletLink', mw.util.addPortletLink, msg );
- mw.log.deprecate( win, 'appendCSS', mw.util.addCSS, msg );
- msg = 'Use jquery.accessKeyLabel instead.';
- mw.log.deprecate( win, 'tooltipAccessKeyPrefix', 'alt-', msg );
- mw.log.deprecate( win, 'tooltipAccessKeyRegexp', /\[(alt-)?(.)\]$/, msg );
- // mw.util.updateTooltipAccessKeys already generates a deprecation message.
- win.updateTooltipAccessKeys = function () {
- return mw.util.updateTooltipAccessKeys.apply( null, arguments );
- };
+ mw.log.deprecate( window, 'addOnloadHook', function ( fn ) {
+ $( function () { fn(); } );
+ }, 'Use jQuery instead.' );
/**
* Wikipage import methods
}
function importScript( page ) {
- var uri = mw.config.get( 'wgScript' ) + '?title=' +
- mw.util.wikiUrlencode( page ) +
+ var uri = mw.config.get( 'wgScript' ) + '?title=' + wikiUrlencode( page ) +
'&action=raw&ctype=text/javascript';
return importScriptURI( uri );
}
}
function importStylesheet( page ) {
- var uri = mw.config.get( 'wgScript' ) + '?title=' +
- mw.util.wikiUrlencode( page ) +
+ var uri = mw.config.get( 'wgScript' ) + '?title=' + wikiUrlencode( page ) +
'&action=raw&ctype=text/css';
return importStylesheetURI( uri );
}
msg = 'Use mw.loader instead.';
- mw.log.deprecate( win, 'loadedScripts', loadedScripts, msg );
- mw.log.deprecate( win, 'importScriptURI', importScriptURI, msg );
- mw.log.deprecate( win, 'importStylesheetURI', importStylesheetURI, msg );
+ mw.log.deprecate( window, 'loadedScripts', loadedScripts, msg );
+ mw.log.deprecate( window, 'importScriptURI', importScriptURI, msg );
+ mw.log.deprecate( window, 'importStylesheetURI', importStylesheetURI, msg );
// Not quite deprecated yet.
- win.importScript = importScript;
- win.importStylesheet = importStylesheet;
+ window.importScript = importScript;
+ window.importStylesheet = importStylesheet;
- // Replace document.write/writeln with basic html parsing that appends
- // to the <body> to avoid blanking pages. Added JavaScript will not run.
+ /**
+ * Replace document.write/writeln with basic html parsing that appends
+ * to the <body> to avoid blanking pages. Added JavaScript will not run.
+ *
+ * @deprecated since 1.26
+ */
$.each( [ 'write', 'writeln' ], function ( idx, method ) {
mw.log.deprecate( document, method, function () {
$( 'body' ).append( $.parseHTML( Array.prototype.join.call( arguments, '' ) ) );
& > .oo-ui-buttonElement-button {
font-weight: normal;
+ // Override OOUI's definitions for button
+ border-color: transparent;
+ padding: 0;
+
+ &:focus {
+ box-shadow: none;
+ outline: 0;
+ }
}
}
* @member mw.hook
*/
$( function () {
- var loading = $.grep( mw.loader.getModuleNames(), function ( module ) {
+ var loading, modules;
+
+ modules = $.grep( mw.loader.getModuleNames(), function ( module ) {
return mw.loader.getState( module ) === 'loading';
} );
// We only need a callback, not any actual module. First try a single using()
// for all loading modules. If one fails, fall back to tracking each module
// separately via $.when(), this is expensive.
- loading = mw.loader.using( loading ).then( null, function () {
- var all = loading.map( function ( module ) {
+ loading = mw.loader.using( modules ).then( null, function () {
+ var all = modules.map( function ( module ) {
return mw.loader.using( module ).then( null, function () {
return $.Deferred().resolve();
} );
$options += [
'lang' => 'en',
'dir' => 'ltr',
+ 'skin' => 'vector',
'modules' => 'startup',
'only' => 'scripts',
];
'lang' => $options['lang'],
'modules' => $options['modules'],
'only' => $options['only'],
- 'skin' => 'vector',
+ 'skin' => $options['skin'],
'target' => 'phpunit',
] );
$ctx = $this->getMockBuilder( 'ResourceLoaderContext' )
--- /dev/null
+{
+ "prefix": "oo-ui-icon",
+ "images": {
+ "search": { "file": "images/icons/search.svg" }
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="search">
+ <path id="magnifying-glass-apex" d="M18.87 18.375l-3.987-3.99-.286-.17a5.774 5.774 0 0 0 1.082-3.372C15.67 7.616 13.06 5 9.84 5A5.843 5.843 0 0 0 4 10.844a5.84 5.84 0 0 0 5.842 5.842c1.26 0 2.423-.403 3.377-1.08l.16.286 3.99 3.987c.32.31.91.24 1.33-.18.41-.42.49-1.01.17-1.33zM9.837 14.56a3.72 3.72 0 0 1-3.718-3.717c0-2.05 1.67-3.72 3.72-3.72s3.72 1.668 3.72 3.72a3.722 3.722 0 0 1-3.72 3.718z"/>
+ </g>
+</svg>
--- /dev/null
+{
+ "prefix": "oo-ui-icon",
+ "images": {
+ "search": { "file": "images/icons/search.svg" }
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+ <g id="search">
+ <path id="magnifying-glass-mediawiki" d="M10.5 4a6.5 6.5 0 1 0 2.844 12.344L16 19c1.4 1.4 2.5 1.5 4 0l-4.438-4.438A6.426 6.426 0 0 0 17 10.5 6.5 6.5 0 0 0 10.5 4zm0 2a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9z"/>
+ </g>
+</svg>
$this->assertEquals( [ 0 => 'Test' ], $outputPage->getCategories( 'hidden' ) );
}
+ /**
+ * @dataProvider provideLinkHeaders
+ * @covers OutputPage::addLinkHeader
+ * @covers OutputPage::getLinkHeader
+ */
+ public function testLinkHeaders( $headers, $result ) {
+ $outputPage = $this->newInstance();
+
+ foreach ( $headers as $header ) {
+ $outputPage->addLinkHeader( $header );
+ }
+
+ $this->assertEquals( $result, $outputPage->getLinkHeader() );
+ }
+
+ public function provideLinkHeaders() {
+ return [
+ [
+ [],
+ false
+ ],
+ [
+ [ '<https://foo/bar.jpg>;rel=preload;as=image' ],
+ 'Link: <https://foo/bar.jpg>;rel=preload;as=image',
+ ],
+ [
+ [ '<https://foo/bar.jpg>;rel=preload;as=image','<https://foo/baz.jpg>;rel=preload;as=image' ],
+ 'Link: <https://foo/bar.jpg>;rel=preload;as=image,<https://foo/baz.jpg>;rel=preload;as=image',
+ ],
+ ];
+ }
+
+ /**
+ * @dataProvider providePreloadLinkHeaders
+ * @covers OutputPage::addLogoPreloadLinkHeaders
+ */
+ public function testPreloadLinkHeaders( $config, $result ) {
+ $out = TestingAccessWrapper::newFromObject( $this->newInstance( $config ) );
+ $out->addLogoPreloadLinkHeaders();
+
+ $this->assertEquals( $result, $out->getLinkHeader() );
+ }
+
+ public function providePreloadLinkHeaders() {
+ return [
+ [
+ [
+ 'Logo' => '/img/default.png',
+ 'LogoHD' => [
+ '1.5x' => '/img/one-point-five.png',
+ '2x' => '/img/two-x.png',
+ ],
+ ],
+ 'Link: </img/default.png>;rel=preload;as=image;media=' .
+ 'not all and (min-resolution: 1.5dppx),' .
+ '</img/one-point-five.png>;rel=preload;as=image;media=' .
+ '(min-resolution: 1.5dppx) and (max-resolution: 1.999999dppx),' .
+ '</img/two-x.png>;rel=preload;as=image;media=(min-resolution: 2dppx)'
+ ],
+ [
+ [
+ 'Logo' => '/img/default.png',
+ 'LogoHD' => false,
+ ],
+ 'Link: </img/default.png>;rel=preload;as=image'
+ ],
+ [
+ [
+ 'Logo' => '/img/default.png',
+ 'LogoHD' => [
+ '2x' => '/img/two-x.png',
+ ],
+ ],
+ 'Link: </img/default.png>;rel=preload;as=image;media=' .
+ 'not all and (min-resolution: 2dppx),' .
+ '</img/two-x.png>;rel=preload;as=image;media=(min-resolution: 2dppx)'
+ ],
+ ];
+ }
+
/**
* @return OutputPage
*/
- private function newInstance() {
+ private function newInstance( $config = [] ) {
$context = new RequestContext();
- $context->setConfig( new HashConfig( [
+ $context->setConfig( new HashConfig( $config + [
'AppleTouchIcon' => false,
'DisableLangConversion' => true,
'EnableAPI' => false,
$this->title->getUserPermissionsErrors( 'bogus',
$this->user ) );
- $this->setUserPerm( 'editusercssjs' );
- $this->assertEquals( [ [ 'badaccess-group0' ] ],
- $this->title->getUserPermissionsErrors( 'bogus',
- $this->user ) );
-
$this->setUserPerm( [ 'edituserjs', 'editusercss' ] );
$this->assertEquals( [ [ 'badaccess-group0' ] ],
$this->title->getUserPermissionsErrors( 'bogus',
* @dataProvider provideRecords
*/
public function testPickServer( $params, $expected ) {
- $discoverer = new DnsSrvDiscoverer( '_etcd._tcp.eqiad.wmnet' );
+ $discoverer = new DnsSrvDiscoverer( 'etcd-tcp.example.net' );
$record = $discoverer->pickServer( $params );
$this->assertEquals( $expected, $record );
[
[ // record list
[
- 'target' => 'conf1003.eqiad.wmnet',
+ 'target' => 'conf03.example.net',
'port' => 'SRV',
'pri' => 0,
'weight' => 1,
],
[
- 'target' => 'conf1002.eqiad.wmnet',
+ 'target' => 'conf02.example.net',
'port' => 'SRV',
'pri' => 1,
'weight' => 1,
],
[
- 'target' => 'conf1001.eqiad.wmnet',
+ 'target' => 'conf01.example.net',
'port' => 'SRV',
'pri' => 2,
'weight' => 1,
],
], // selected record
[
- 'target' => 'conf1003.eqiad.wmnet',
+ 'target' => 'conf03.example.net',
'port' => 'SRV',
'pri' => 0,
'weight' => 1,
[
[ // record list
[
- 'target' => 'conf1003or2.eqiad.wmnet',
+ 'target' => 'conf03or2.example.net',
'port' => 'SRV',
'pri' => 0,
'weight' => 1,
],
[
- 'target' => 'conf1003or2.eqiad.wmnet',
+ 'target' => 'conf03or2.example.net',
'port' => 'SRV',
'pri' => 0,
'weight' => 1,
],
[
- 'target' => 'conf1001.eqiad.wmnet',
+ 'target' => 'conf01.example.net',
'port' => 'SRV',
'pri' => 2,
'weight' => 1,
],
[
- 'target' => 'conf1004.eqiad.wmnet',
+ 'target' => 'conf04.example.net',
'port' => 'SRV',
'pri' => 2,
'weight' => 1,
],
[
- 'target' => 'conf1005.eqiad.wmnet',
+ 'target' => 'conf05.example.net',
'port' => 'SRV',
'pri' => 3,
'weight' => 1,
],
], // selected record
[
- 'target' => 'conf1003or2.eqiad.wmnet',
+ 'target' => 'conf03or2.example.net',
'port' => 'SRV',
'pri' => 0,
'weight' => 1,
$servers = [
[
- 'target' => 'conf1001.eqiad.wmnet',
+ 'target' => 'conf01.example.net',
'port' => 35,
'pri' => 2,
'weight' => 1,
],
[
- 'target' => 'conf1004.eqiad.wmnet',
+ 'target' => 'conf04.example.net',
'port' => 74,
'pri' => 2,
'weight' => 1,
],
[
- 'target' => 'conf1005.eqiad.wmnet',
+ 'target' => 'conf05.example.net',
'port' => 77,
'pri' => 3,
'weight' => 1,
$expected = [
[
- 'target' => 'conf1001.eqiad.wmnet',
+ 'target' => 'conf01.example.net',
'port' => 35,
'pri' => 2,
'weight' => 1,
],
[
- 'target' => 'conf1005.eqiad.wmnet',
+ 'target' => 'conf05.example.net',
'port' => 77,
'pri' => 3,
'weight' => 1,
}
/** @covers ObjectCache::newAnything */
- public function txestNewAnythingNoAccel() {
+ public function testNewAnythingNoAccel() {
$this->setMwGlobals( [
'wgMainCacheType' => CACHE_ACCEL
] );
'Fallback to DB if available types fall back to Empty'
);
}
+
+ /** @covers ObjectCache::newAnything */
+ public function testNewAnythingNoAccelNoDb() {
+ $this->overrideMwServices(); // Ensures restore on tear down
+ MediaWiki\MediaWikiServices::disableStorageBackend();
+
+ $this->setMwGlobals( [
+ 'wgMainCacheType' => CACHE_ACCEL
+ ] );
+
+ $this->setCacheConfig( [
+ // Mock APC not being installed (T160519, T147161)
+ CACHE_ACCEL => [ 'class' => 'EmptyBagOStuff' ]
+ ] );
+
+ $this->assertInstanceOf(
+ EmptyBagOStuff::class,
+ ObjectCache::newAnything( [] ),
+ 'Fallback to none if available types and DB are unavailable'
+ );
+ }
+
+ /** @covers ObjectCache::newAnything */
+ public function testNewAnythingNothingNoDb() {
+ $this->overrideMwServices();
+ MediaWiki\MediaWikiServices::disableStorageBackend();
+
+ $this->assertInstanceOf(
+ EmptyBagOStuff::class,
+ ObjectCache::newAnything( [] ),
+ 'No available types or DB. Fallback to none.'
+ );
+ }
}
--- /dev/null
+<?php
+
+/**
+ * @group ResourceLoader
+ */
+class ResourceLoaderOOUIImageModuleTest extends ResourceLoaderTestCase {
+
+ /**
+ * @covers ResourceLoaderOOUIImageModule::loadFromDefinition
+ */
+ public function testNonDefaultSkin() {
+ $module = new ResourceLoaderOOUIImageModule( [
+ 'class' => 'ResourceLoaderOOUIImageModule',
+ 'name' => 'icons',
+ 'rootPath' => 'tests/phpunit/data/resourceloader/oouiimagemodule',
+ ] );
+
+ // Pretend that 'fakemonobook' is a real skin using the Apex theme
+ SkinFactory::getDefaultInstance()->register(
+ 'fakemonobook',
+ 'FakeMonoBook',
+ function () {
+ }
+ );
+ $r = new ReflectionMethod( 'ExtensionRegistry', 'exportExtractedData' );
+ $r->setAccessible( true );
+ $r->invoke( ExtensionRegistry::getInstance(), [
+ 'globals' => [],
+ 'defines' => [],
+ 'callbacks' => [],
+ 'credits' => [],
+ 'autoloaderPaths' => [],
+ 'attributes' => [
+ 'SkinOOUIThemes' => [
+ 'fakemonobook' => 'Apex',
+ ],
+ ],
+ ] );
+
+ $styles = $module->getStyles( $this->getResourceLoaderContext( [ 'skin' => 'fakemonobook' ] ) );
+ $this->assertRegExp(
+ '/magnifying-glass-apex/',
+ $styles['all'],
+ 'Generated styles use the non-default image (embed)'
+ );
+ $this->assertRegExp(
+ '/fakemonobook/',
+ $styles['all'],
+ 'Generated styles use the non-default image (link)'
+ );
+
+ $styles = $module->getStyles( $this->getResourceLoaderContext() );
+ $this->assertRegExp(
+ '/magnifying-glass-mediawiki/',
+ $styles['all'],
+ 'Generated styles use the default image (embed)'
+ );
+ $this->assertRegExp(
+ '/vector/',
+ $styles['all'],
+ 'Generated styles use the default image (link)'
+ );
+ }
+
+}