Merge "Introduce TagMultiselectWidget.php"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 14 Dec 2018 15:45:22 +0000 (15:45 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 14 Dec 2018 15:45:22 +0000 (15:45 +0000)
42 files changed:
RELEASE-NOTES-1.33
includes/DefaultSettings.php
includes/MediaWiki.php
includes/Title.php
includes/actions/RollbackAction.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiHelp.php
includes/api/ApiPageSet.php
includes/api/ApiRollback.php
includes/diff/DifferenceEngine.php
includes/http/GuzzleHttpRequest.php
includes/http/HttpRequestFactory.php
includes/libs/filebackend/FileBackendStore.php
includes/libs/objectcache/WinCacheBagOStuff.php
includes/libs/rdbms/TransactionProfiler.php
includes/specialpage/ChangesListSpecialPage.php
includes/specials/SpecialBlock.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialUndelete.php
includes/specials/pagers/ImageListPager.php
languages/i18n/af.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/en.json
languages/i18n/hy.json
languages/i18n/mai.json
languages/i18n/mk.json
languages/i18n/mr.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ru.json
languages/i18n/sl.json
languages/i18n/uk.json
resources/src/jquery.spinner/spinner.js
resources/src/mediawiki.Title/Title.js
resources/src/mediawiki.cookie.js
resources/src/mediawiki.widgets/MediaSearch/mw.widgets.APIResultsProvider.js
resources/src/startup/mediawiki.log.js
tests/parser/preprocess/All_system_messages.expected
tests/parser/preprocess/All_system_messages.txt
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js

index f68875b..1ab9d4e 100644 (file)
@@ -182,6 +182,8 @@ because of Phabricator reports.
   This will help identify the issue if you added it to $wgAuthManagerConfig.
 * wfSplitWikiId() is now deprecated. Cache key generation should have the wiki
   domain ID as a key component and use makeGlobalKey().
+* (T202094) Title::getUserCaseDBKey() is deprecated; instead, please use
+  Title::getDBKey(), which doesn't vary case.
 * …
 
 === Other changes in 1.33 ===
index a63d352..2f1efbf 100644 (file)
@@ -4478,28 +4478,28 @@ $wgCentralIdLookupProvider = 'local';
 $wgPasswordPolicy = [
        'policies' => [
                'bureaucrat' => [
-                       'MinimalPasswordLength' => 8,
+                       'MinimalPasswordLength' => 10,
                        'MinimumPasswordLengthToLogin' => 1,
                        'PasswordCannotMatchUsername' => true,
                        'PasswordCannotBePopular' => 25,
                        'PasswordNotInLargeBlacklist' => true,
                ],
                'sysop' => [
-                       'MinimalPasswordLength' => 8,
+                       'MinimalPasswordLength' => 10,
                        'MinimumPasswordLengthToLogin' => 1,
                        'PasswordCannotMatchUsername' => true,
                        'PasswordCannotBePopular' => 25,
                        'PasswordNotInLargeBlacklist' => true,
                ],
                'interface-admin' => [
-                       'MinimalPasswordLength' => 8,
+                       'MinimalPasswordLength' => 10,
                        'MinimumPasswordLengthToLogin' => 1,
                        'PasswordCannotMatchUsername' => true,
                        'PasswordCannotBePopular' => 25,
                        'PasswordNotInLargeBlacklist' => true,
                ],
                'bot' => [
-                       'MinimalPasswordLength' => 8,
+                       'MinimalPasswordLength' => 10,
                        'MinimumPasswordLengthToLogin' => 1,
                        'PasswordCannotMatchUsername' => true,
                        'PasswordNotInLargeBlacklist' => true,
index 267b589..f5a954d 100644 (file)
@@ -893,8 +893,7 @@ class MediaWiki {
 
                // Loosen DB query expectations since the HTTP client is unblocked
                $trxProfiler = Profiler::instance()->getTransactionProfiler();
-               $trxProfiler->resetExpectations();
-               $trxProfiler->setExpectations(
+               $trxProfiler->redefineExpectations(
                        $this->context->getRequest()->hasSafeMethod()
                                ? $this->config->get( 'TrxProfilerLimits' )['PostSend-GET']
                                : $this->config->get( 'TrxProfilerLimits' )['PostSend-POST'],
index 972d5b1..55c5cd9 100644 (file)
@@ -954,6 +954,7 @@ class Title implements LinkTarget {
 
        /**
         * Get the DB key with the initial letter case as specified by the user
+        * @deprecated since 1.33; please use Title::getDBKey() instead
         *
         * @return string DB key
         */
index 3e6d402..03a5bc8 100644 (file)
@@ -73,9 +73,9 @@ class RollbackAction extends FormlessAction {
                $fname = __METHOD__;
                $trxLimits = $this->context->getConfig()->get( 'TrxProfilerLimits' );
                $trxProfiler = Profiler::instance()->getTransactionProfiler();
-               $trxProfiler->setExpectations( $trxLimits['POST'], $fname );
+               $trxProfiler->redefineExpectations( $trxLimits['POST'], $fname );
                DeferredUpdates::addCallableUpdate( function () use ( $trxProfiler, $trxLimits, $fname ) {
-                       $trxProfiler->setExpectations( $trxLimits['PostSend-POST'], $fname );
+                       $trxProfiler->redefineExpectations( $trxLimits['PostSend-POST'], $fname );
                } );
 
                $data = null;
index 37ec3cf..8c0b42d 100644 (file)
@@ -69,7 +69,7 @@ class ApiFeedWatchlist extends ApiBase {
                                'meta' => 'siteinfo',
                                'siprop' => 'general',
                                'list' => 'watchlist',
-                               'wlprop' => 'title|user|comment|timestamp|ids',
+                               'wlprop' => 'title|user|comment|timestamp|ids|loginfo',
                                'wldir' => 'older', // reverse order - from newest to oldest
                                'wlend' => $endTime, // stop at this time
                                'wllimit' => min( 50, $this->getConfig()->get( 'FeedLimit' ) )
@@ -193,7 +193,12 @@ class ApiFeedWatchlist extends ApiBase {
                        }
                }
                if ( isset( $info['revid'] ) ) {
-                       $titleUrl = $title->getFullURL( [ 'diff' => $info['revid'] ] );
+                       if ( $info['revid'] === 0 && isset( $info['logid'] ) ) {
+                               $logTitle = Title::makeTitle( NS_SPECIAL, 'Log' );
+                               $titleUrl = $logTitle->getFullURL( [ 'logid' => $info['logid'] ] );
+                       } else {
+                               $titleUrl = $title->getFullURL( [ 'diff' => $info['revid'] ] );
+                       }
                } else {
                        $titleUrl = $title->getFullURL( $curidParam );
                }
index 84fcbef..886dbcc 100644 (file)
@@ -102,7 +102,6 @@ class ApiHelp extends ApiBase {
                        'mediawiki.apihelp',
                ] );
                if ( !empty( $options['toc'] ) ) {
-                       $out->addModules( 'mediawiki.toc' );
                        $out->addModuleStyles( 'mediawiki.toc.styles' );
                }
                $out->setPageTitle( $context->msg( 'api-help-title' ) );
index 913f45b..4ffe873 100644 (file)
@@ -821,7 +821,7 @@ class ApiPageSet extends ApiBase {
         * @param array $pageids Array of page IDs
         * @param bool $filterIds Whether the IDs need filtering
         */
-       private function initFromPageIds( $pageids, $filterIds = false ) {
+       private function initFromPageIds( $pageids, $filterIds = true ) {
                if ( !$pageids ) {
                        return;
                }
index 78696da..18aa6da 100644 (file)
@@ -59,9 +59,9 @@ class ApiRollback extends ApiBase {
                $fname = __METHOD__;
                $trxLimits = $this->getConfig()->get( 'TrxProfilerLimits' );
                $trxProfiler = Profiler::instance()->getTransactionProfiler();
-               $trxProfiler->setExpectations( $trxLimits['POST'], $fname );
+               $trxProfiler->redefineExpectations( $trxLimits['POST'], $fname );
                DeferredUpdates::addCallableUpdate( function () use ( $trxProfiler, $trxLimits, $fname ) {
-                       $trxProfiler->setExpectations( $trxLimits['PostSend-POST'], $fname );
+                       $trxProfiler->redefineExpectations( $trxLimits['PostSend-POST'], $fname );
                } );
 
                $retval = $pageObj->doRollback(
index 63cc2a8..826eecb 100644 (file)
  * @ingroup DifferenceEngine
  */
 
+use MediaWiki\MediaWikiServices;
 use MediaWiki\Revision\RevisionRecord;
 use MediaWiki\Revision\SlotRecord;
+use MediaWiki\Storage\NameTableAccessException;
 
 /**
  * DifferenceEngine is responsible for rendering the difference between two revisions as HTML.
@@ -1797,22 +1799,42 @@ class DifferenceEngine extends ContextSource {
 
                // Load tags information for both revisions
                $dbr = wfGetDB( DB_REPLICA );
+               $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
                if ( $this->mOldid !== false ) {
-                       $this->mOldTags = $dbr->selectField(
-                               'tag_summary',
-                               'ts_tags',
-                               [ 'ts_rev_id' => $this->mOldid ],
+                       $tagIds = $dbr->selectFieldValues(
+                               'change_tag',
+                               'ct_tag_id',
+                               [ 'ct_rev_id' => $this->mOldid ],
                                __METHOD__
                        );
+                       $tags = [];
+                       foreach ( $tagIds as $tagId ) {
+                               try {
+                                       $tags[] = $changeTagDefStore->getName( (int)$tagId );
+                               } catch ( NameTableAccessException $exception ) {
+                                       continue;
+                               }
+                       }
+                       $this->mOldTags = implode( ',', $tags );
                } else {
                        $this->mOldTags = false;
                }
-               $this->mNewTags = $dbr->selectField(
-                       'tag_summary',
-                       'ts_tags',
-                       [ 'ts_rev_id' => $this->mNewid ],
+
+               $tagIds = $dbr->selectFieldValues(
+                       'change_tag',
+                       'ct_tag_id',
+                       [ 'ct_rev_id' => $this->mNewid ],
                        __METHOD__
                );
+               $tags = [];
+               foreach ( $tagIds as $tagId ) {
+                       try {
+                               $tags[] = $changeTagDefStore->getName( (int)$tagId );
+                       } catch ( NameTableAccessException $exception ) {
+                               continue;
+                       }
+               }
+               $this->mNewTags = implode( ',', $tags );
 
                return true;
        }
index 5654a71..db8a09b 100644 (file)
@@ -91,7 +91,11 @@ class GuzzleHttpRequest extends MWHttpRequest {
 
                if ( $this->method == 'POST' ) {
                        $postData = $this->postData;
-                       $this->guzzleOptions['body'] = $postData;
+                       if ( is_array( $postData ) ) {
+                               $this->guzzleOptions['form_params'] = $postData;
+                       } else {
+                               $this->guzzleOptions['body'] = $postData;
+                       }
 
                        // Suppress 'Expect: 100-continue' header, as some servers
                        // will reject it with a 417 and Curl won't auto retry
index a3a14d0..0faef17 100644 (file)
@@ -44,7 +44,7 @@ class HttpRequestFactory {
         */
        public function create( $url, array $options = [], $caller = __METHOD__ ) {
                if ( !Http::$httpEngine ) {
-                       Http::$httpEngine = 'guzzle';
+                       Http::$httpEngine = function_exists( 'curl_init' ) ? 'curl' : 'php';
                } elseif ( Http::$httpEngine == 'curl' && !function_exists( 'curl_init' ) ) {
                        throw new DomainException( __METHOD__ . ': curl (https://secure.php.net/curl) is not ' .
                           'installed, but Http::$httpEngine is set to "curl"' );
index 33afe65..28a293f 100644 (file)
@@ -644,20 +644,18 @@ abstract class FileBackendStore extends FileBackend {
                }
 
                $stat = $this->cheapCache->getField( $path, 'stat', self::CACHE_TTL );
-               if ( $stat !== null ) {
-                       // If we want the latest data, check that this cached
-                       // value was in fact fetched with the latest available data.
-                       if ( is_array( $stat ) ) {
-                               if (
-                                       ( !$latest || $stat['latest'] ) &&
-                                       ( !$requireSHA1 || isset( $stat['sha1'] ) )
-                               ) {
-                                       return $stat;
-                               }
-                       } elseif ( in_array( $stat, [ 'NOT_EXIST', 'NOT_EXIST_LATEST' ] ) ) {
-                               if ( !$latest || $stat === 'NOT_EXIST_LATEST' ) {
-                                       return false;
-                               }
+               // If we want the latest data, check that this cached
+               // value was in fact fetched with the latest available data.
+               if ( is_array( $stat ) ) {
+                       if (
+                               ( !$latest || $stat['latest'] ) &&
+                               ( !$requireSHA1 || isset( $stat['sha1'] ) )
+                       ) {
+                               return $stat;
+                       }
+               } elseif ( in_array( $stat, [ 'NOT_EXIST', 'NOT_EXIST_LATEST' ], true ) ) {
+                       if ( !$latest || $stat === 'NOT_EXIST_LATEST' ) {
+                               return false;
                        }
                }
 
index 98f44d1..9c6c907 100644 (file)
@@ -61,4 +61,40 @@ class WinCacheBagOStuff extends BagOStuff {
 
                return $ok;
        }
+
+       /**
+        * Construct a cache key.
+        *
+        * @since 1.27
+        * @param string $keyspace
+        * @param array $args
+        * @return string
+        */
+       public function makeKeyInternal( $keyspace, $args ) {
+               // WinCache keys have a maximum length of 150 characters. From that,
+               // subtract the number of characters we need for the keyspace and for
+               // the separator character needed for each argument. To handle some
+               // custom prefixes used by thing like WANObjectCache, limit to 125.
+               // NOTE: Same as in memcached, except the max key length there is 255.
+               $charsLeft = 125 - strlen( $keyspace ) - count( $args );
+
+               $args = array_map(
+                       function ( $arg ) use ( &$charsLeft ) {
+                               // 33 = 32 characters for the MD5 + 1 for the '#' prefix.
+                               if ( $charsLeft > 33 && strlen( $arg ) > $charsLeft ) {
+                                       $arg = '#' . md5( $arg );
+                               }
+
+                               $charsLeft -= strlen( $arg );
+                               return $arg;
+                       },
+                       $args
+               );
+
+               if ( $charsLeft < 0 ) {
+                       return $keyspace . ':BagOStuff-long-key:##' . md5( implode( ':', $args ) );
+               }
+
+               return $keyspace . ':' . implode( ':', $args );
+       }
 }
index 8ea28f0..e4dad01 100644 (file)
@@ -114,10 +114,12 @@ class TransactionProfiler implements LoggerAwareInterface {
        }
 
        /**
-        * Set multiple performance expectations
+        * Set one or multiple performance expectations
         *
         * With conflicting expectations, the most narrow ones will be used
         *
+        * Use this to initialize expectations or make them stricter mid-request
+        *
         * @param array $expects Map of (event => limit)
         * @param string $fname
         * @since 1.26
@@ -129,7 +131,11 @@ class TransactionProfiler implements LoggerAwareInterface {
        }
 
        /**
-        * Reset performance expectations and hit counters
+        * Reset all performance expectations and hit counters
+        *
+        * Use this for unit testing or before applying a totally different set of expectations
+        * for a different part of the request, such as during "post-send" (execution after HTTP
+        * response completion)
         *
         * @since 1.25
         */
@@ -145,6 +151,21 @@ class TransactionProfiler implements LoggerAwareInterface {
                $this->expectBy = [];
        }
 
+       /**
+        * Clear all expectations and hit counters and set new performance expectations
+        *
+        * Use this to apply a totally different set of expectations for a different part
+        * of the request, such as during "post-send" (execution after HTTP response completion)
+        *
+        * @param array $expects Map of (event => limit)
+        * @param string $fname
+        * @since 1.33
+        */
+       public function redefineExpectations( array $expects, $fname ) {
+               $this->resetExpectations();
+               $this->setExpectations( $expects, $fname );
+       }
+
        /**
         * Mark a DB as having been connected to with a new handle
         *
index 1bb995a..4201f80 100644 (file)
@@ -1279,7 +1279,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        $this->getOutput()->redirect( $this->getPageTitle()->getCanonicalURL( $query ) );
                }
 
-               $opts->validateIntBounds( 'limit', 0, 1000 );
+               $opts->validateIntBounds( 'limit', 0, 5000 );
                $opts->validateBounds( 'days', 0, $this->getConfig()->get( 'RCMaxAge' ) / ( 3600 * 24 ) );
        }
 
index 8bc61d8..67d1873 100644 (file)
@@ -1034,18 +1034,20 @@ class SpecialBlock extends FormSpecialPage {
         * Exception: Users can block the user who blocked them, to reduce
         * advantage of a malicious account blocking all admins (T150826)
         *
-        * @param User|int|string $user Target to block or unblock
+        * @param User|int|string|null $target Target to block or unblock; could be a User object,
+        *   or a user ID or username, or null when the target is not known yet (e.g. when
+        *   displaying Special:Block)
         * @param User $performer User doing the request
         * @return bool|string True or error message key
         */
-       public static function checkUnblockSelf( $user, User $performer ) {
-               if ( is_int( $user ) ) {
-                       $user = User::newFromId( $user );
-               } elseif ( is_string( $user ) ) {
-                       $user = User::newFromName( $user );
+       public static function checkUnblockSelf( $target, User $performer ) {
+               if ( is_int( $target ) ) {
+                       $target = User::newFromId( $target );
+               } elseif ( is_string( $target ) ) {
+                       $target = User::newFromName( $target );
                }
                if ( $performer->isBlocked() ) {
-                       if ( $user instanceof User && $user->getId() == $performer->getId() ) {
+                       if ( $target instanceof User && $target->getId() == $performer->getId() ) {
                                # User is trying to unblock themselves
                                if ( $performer->isAllowed( 'unblockself' ) ) {
                                        return true;
@@ -1056,10 +1058,10 @@ class SpecialBlock extends FormSpecialPage {
                                        return 'ipbnounblockself';
                                }
                        } elseif (
-                               $user instanceof User &&
+                               $target instanceof User &&
                                $performer->getBlock() instanceof Block &&
                                $performer->getBlock()->getBy() &&
-                               $performer->getBlock()->getBy() === $user->getId()
+                               $performer->getBlock()->getBy() === $target->getId()
                        ) {
                                // Allow users to block the user that blocked them.
                                // This is to prevent a situation where a malicious user
index 16cebe0..70b4207 100644 (file)
@@ -159,7 +159,6 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        $out->addReturnTo( SpecialPage::getTitleFor( 'Watchlist' ) );
                } elseif ( $this->toc !== false ) {
                        $out->prependHTML( $this->toc );
-                       $out->addModules( 'mediawiki.toc' );
                        $out->addModuleStyles( 'mediawiki.toc.styles' );
                }
        }
index 7ea9ba0..3524d79 100644 (file)
@@ -79,7 +79,8 @@ class SpecialPasswordReset extends FormSpecialPage {
                $a = [];
                if ( isset( $resetRoutes['username'] ) && $resetRoutes['username'] ) {
                        $a['Username'] = [
-                               'type' => 'user',
+                               'type' => 'text',
+                               'default' => $this->getRequest()->getSession()->suggestLoginUsername(),
                                'label-message' => 'passwordreset-username',
                        ];
 
index 6a01b0c..cd754ca 100644 (file)
@@ -23,6 +23,7 @@
 
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Revision\RevisionRecord;
+use MediaWiki\Storage\NameTableAccessException;
 use Wikimedia\Rdbms\IResultWrapper;
 
 /**
@@ -596,12 +597,22 @@ class SpecialUndelete extends SpecialPage {
 
                $minor = $rev->isMinor() ? ChangesList::flag( 'minor' ) : '';
 
-               $tags = wfGetDB( DB_REPLICA )->selectField(
-                       'tag_summary',
-                       'ts_tags',
-                       [ 'ts_rev_id' => $rev->getId() ],
+               $tagIds = wfGetDB( DB_REPLICA )->selectFieldValues(
+                       'change_tag',
+                       'ct_tag_id',
+                       [ 'ct_rev_id' => $rev->getId() ],
                        __METHOD__
                );
+               $tags = [];
+               $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
+               foreach ( $tagIds as $tagId ) {
+                       try {
+                               $tags[] = $changeTagDefStore->getName( (int)$tagId );
+                       } catch ( NameTableAccessException $exception ) {
+                               continue;
+                       }
+               }
+               $tags = implode( ',', $tags );
                $tagSummary = ChangeTags::formatSummaryRow( $tags, 'deleteddiff', $this->getContext() );
 
                // FIXME This is reimplementing DifferenceEngine#getRevisionHeader
index ab3237a..ab38e1a 100644 (file)
@@ -139,7 +139,9 @@ class ImageListPager extends TablePager {
                        $actorWhere = ActorMigration::newMigration()->getWhere(
                                $dbr,
                                $prefix . '_user',
-                               User::newFromName( $this->mUserName, false )
+                               User::newFromName( $this->mUserName, false ),
+                               // oldimage doesn't have an index on oi_user, while image does. Set $useId accordingly.
+                               $prefix === 'img'
                        );
                        $conds[] = $actorWhere['conds'];
                }
index f976904..86e91aa 100644 (file)
        "createacct-another-realname-tip": "Regte naam is opsioneel.\nAs u dit verskaf, sal dit gebruik word om u erkenning vir u werk te gee.",
        "pt-login": "Meld aan",
        "pt-login-button": "Meld aan",
+       "pt-login-continue-button": "Meld verder aan",
        "pt-createaccount": "Skep gebruiker",
        "pt-userlogout": "Meld af",
        "php-mail-error-unknown": "Onbekende fout in PHP se mail()-funksie",
        "user-mail-no-addy": "Geprobeer om e-pos te stuur sonder 'n e-posadres.",
        "user-mail-no-body": "Daar is probeer om 'n leë of 'n onredelike kort boodskap te stuur.",
        "changepassword": "Verander wagwoord",
-       "resetpass_announce": "U het aangeteken met 'n tydelike e-poskode.\nOm voort te gaan moet u 'n nuwe wagwoord hier kies:",
+       "resetpass_announce": "Om klaar aan te meld, kies 'n nuwe wagwoord.",
        "resetpass_text": "<!-- Voeg teks hier by -->",
        "resetpass_header": "Verander wagwoord",
        "oldpassword": "Ou wagwoord",
        "newpassword": "Nuwe wagwoord",
        "retypenew": "Tik nuwe wagwoord weer in",
        "resetpass_submit": "Stel wagwoord en meld aan",
-       "changepassword-success": "U wagwoord is suksesvol gewysig!",
+       "changepassword-success": "U wagwoord is verander!",
        "botpasswords-label-create": "Skep",
        "botpasswords-label-update": "Opdateer",
        "botpasswords-label-cancel": "Kanselleer",
index 4e6c1c4..519d1a9 100644 (file)
        "pageinfo-display-title": "Загаловак для адлюстраваньня",
        "pageinfo-default-sort": "Перадвызначаны ключ сартаваньня",
        "pageinfo-length": "Памер старонкі (у байтах)",
+       "pageinfo-namespace": "Прастора назваў",
        "pageinfo-article-id": "Ідэнтыфікатар старонкі",
        "pageinfo-language": "Мова зьместу старонкі",
        "pageinfo-language-change": "зьмяніць",
index a815186..08d8082 100644 (file)
        "movepage-moved": "<strong>Страницата „$1“ беше преместена под името „$2“</strong>",
        "movepage-moved-redirect": "Беше създадено пренасочване.",
        "movepage-moved-noredirect": "Създаването на пренасочване беше спряно.",
-       "articleexists": "Вече съществува страница с това име или името, което сте избрали, е невалидно. Изберете друго име.",
-       "cantmove-titleprotected": "Страницата не може да бъде преместена под новото заглавие, тъй като то е защитено от създаване",
+       "articleexists": "Вече съществува страница с това име или името, което сте избрали е невалидно.\nИзберете друго име.",
+       "cantmove-titleprotected": "Страницата не може да бъде преместена под новото заглавие, тъй като то е защитено от създаване.",
        "movetalk": "Преместване и на беседата, ако е приложимо",
        "move-subpages": "Преместване на всички подстраници (до $1)",
        "move-talk-subpages": "Преместване на всички подстраници на беседата (до $1)",
index b3a0e9b..7a1cd1a 100644 (file)
        "newarticletext": "You have followed a link to a page that does not exist yet.\nTo create the page, start typing in the box below (see the [$1 help page] for more info).\nIf you are here by mistake, click your browser's <strong>back</strong> button.",
        "newarticletextanon": "{{int:newarticletext|$1}}",
        "talkpagetext": "<!-- MediaWiki:talkpagetext -->",
-       "anontalkpagetext": "----\n<em>This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.</em>\nWe therefore have to use the numerical IP address to identify him/her.\nSuch an IP address can be shared by several users.\nIf you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:CreateAccount|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.",
+       "anontalkpagetext": "----\n<em>This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.</em>\nWe therefore have to use the numerical IP address to identify them.\nSuch an IP address can be shared by several users.\nIf you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:CreateAccount|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.",
        "noarticletext": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} create this page]</span>.",
        "noarticletext-nopermission": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages, or <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>, but you do not have permission to create this page.",
        "noarticletextanon": "{{int:noarticletext}}",
index bdad332..8b2994d 100644 (file)
        "unwatch": "Հանել հսկումից",
        "unwatchthispage": "Հանել հսկումից",
        "notanarticle": "Հոդված չէ",
-       "watchlist-details": "Ձեր հսկացանկում կա {{PLURAL:$1|$1 էջ}}` այդ թվում քննարկման էջերը։",
+       "watchlist-details": "Ձեր հսկացանկում կա {{PLURAL:$1|$1 էջ}}, այդ թվում՝ քննարկման էջերը։",
        "wlheader-enotif": "Էլ-փոստով տեղեկացումը միացված է։",
        "wlheader-showupdated": "Էջերը, որոնք փոփոխվել են ձեր վերջին այցից հետո, բերված են '''թավատառ'''։",
        "wlnote": "Ստորև բերված {{PLURAL:$1|է վերջին փոփոխությունը|են վերջին '''$1''' փոփոխությունները}} վերջին <strong>$2</strong> ժամվա ընթացքում՝ $3, $4֊ի դրությամբ։",
index df84bcc..ab71fe3 100644 (file)
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|दिन}} पहिने",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|घंटा}} पहिने",
        "rcfilters-quickfilters": "फ़िल्टर संरक्षण करू",
+       "rcfilters-savedqueries-defaultlabel": "फ़िल्टर संरक्षण करू",
        "rcfilters-savedqueries-rename": "नाम बदलु",
        "rcfilters-savedqueries-setdefault": "मूल के रूप मे राखु",
        "rcfilters-savedqueries-remove": "मेटाबी",
        "rcfilters-filtergroup-changetype": "बदल क प्रकार:",
        "rcfilters-filter-pageedits-label": "पन्नाक संपादनसभ",
        "rcfilters-filter-newpages-label": "प्रयोक्ता रचना लग",
+       "rcfilters-filtergroup-lastRevision": "नूतन संशोधन",
+       "rcfilters-filter-lastrevision-label": "नूतन संशोधन",
+       "rcfilters-filter-excluded": "अपवर्जित",
+       "rcfilters-view-tags": "पन्नाक संपादनसभ",
        "rcfilters-liveupdates-button": "अखुनका अद्यतन",
        "rcfilters-target-page-placeholder": "पृष्ठ(अथवा श्रेणी) क नाम भरू",
        "rcnotefrom": "नीचाँमे '''$2''' सँ भेल परिवर्तन अछि ('''$1''' धरि देखाएल)।",
        "speciallogtitlelabel": "प्रयोजन (शीर्षक अथवा {{ns:user}}:प्रयोगकर्तानाम):",
        "log": "लौग",
        "logeventslist-submit": "देखाबी",
+       "logeventslist-patrol-log": "परीक्षण लग",
+       "logeventslist-tag-log": "ट्याग लग",
        "all-logs-page": "सभ सार्वजनिक लौग",
        "alllogstext": "{{अन्तर्जाल}} क सभटा उपलब्ध वृत्तलेखक संयुक्त दृश्य।\nअहाँ दृश्यकेँ संकीर्ण करबा लेल वृत्तलेखक एकटा प्रकार चुनि सकै छी, प्रयोक्तानाम (ब्रह्मक्षर-लघ्वक्षर विचारणीय), वा प्रभावित पन्ना (एतौ ब्रह्मक्षर-लघ्वक्षर विचारणीय)।",
        "logempty": "वृत्तलेखमे कोनो मेल खाइबला बौस्तु नै।",
        "dellogpagetext": "नीचाँ एकदम लगक मेटाएल पन्नाकऽ सूची छी।",
        "deletionlog": "मेटाएल लौग",
        "log-name-create": "प्रयोक्ता रचना लग",
+       "log-description-create": "नीचाँ एकदम लगक मेटाएल पन्नाकऽ सूची छी।",
+       "logentry-create-create": "$1 {{GENDER:$2|दबाएल}} page $3",
        "reverted": "पुरान कोनो संशोधन धरि घुराउ",
        "deletecomment": "कारण:",
        "deleteotherreason": "दोसर/ अतिरिक्त कारण:",
        "uctop": "शिखर",
        "month": "माससँ (आ पहिने)",
        "year": "ई साल (आ पहिने)",
+       "date": "माससँ (आ पहिने)",
        "sp-contributions-newbies": "मात्र नव खाताक योगदान देखाबी",
        "sp-contributions-newbies-sub": "नब प्रयोक्ताकऽ लेल",
        "sp-contributions-newbies-title": "नब प्रयोक्ताकऽ योगदान",
        "ipb-disableusertalk": "ऐ प्रयोक्ताकेँ प्रतिबन्ध अवधिमे अपन वार्ता पन्नाक सम्पादनसँ रोकू।",
        "ipb-change-block": "प्रयोक्ताकें  पुनः प्रतिबन्धित करू ई विकल्पक संग",
        "ipb-confirm": "प्रतिबन्ध सुनिश्चित करू",
+       "ipb-partial": "आंशिक",
+       "ipb-type-label": "प्रकार",
+       "ipb-pages-label": "पन्ना",
        "badipaddress": "अमान्य आईपी पता",
        "blockipsuccesssub": "प्रतिबन्ध सफल भेल",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] प्रतिबन्धित कएल गेल।<br />\nदेखू [[Special:BlockList|IP block list]] प्रतिबन्धक पुनरीक्षण लेल।",
        "blocklist": "प्रतिबन्धित प्रयोक्ता सभ",
        "autoblocklist": "स्वतः प्रतिबन्धित",
        "autoblocklist-submit": "खोज",
+       "autoblocklist-legend": "स्वतः अवरोध सूची",
        "autoblocklist-empty": "प्रतिबन्धसूची खाली अछि।",
        "ipblocklist": "प्रतिबन्धित प्रयोक्ता सभ",
        "ipblocklist-legend": "प्रतिबन्धित प्रयोक्ताकेँ ताकू",
        "createaccountblock": "लेखा निर्माण अशक्त कएल",
        "emailblock": "ई-पत्र प्रतिबन्धित",
        "blocklist-nousertalk": "अपन वार्ता पन्ना सम्पादित नै कऽ सकब",
+       "blocklist-editing": "सम्पादन कऽ रहल छी",
        "ipblocklist-empty": "प्रतिबन्धसूची खाली अछि।",
        "ipblocklist-no-results": "आग्रह कएल अनिकेत वा प्रयोक्तानाम प्रतिबन्धित नै कएल गेल।",
        "blocklink": "प्रतिबन्धित",
        "movenotallowedfile": "अहाँकेँ संचिका सभकेँ घसकेबाक अधिकार नै अछि।",
        "cant-move-user-page": "अहाँकेँ प्रयोक्ता पन्ना सभकेँ घसकेबाक अधिकार नै अछि (उपपन्ना सभकेँ छोड़ि कऽ)।",
        "cant-move-to-user-page": "अहाँकेँ कोनो पन्नाकेँ प्रयोक्ता पन्ना लग घसकेबाक अधिकार नै अछि (प्रयोक्ता उपपन्ना लग छोड़ि कऽ)।",
+       "cant-move-subpages": "अहाँकेँ पन्ना घसकेबाक अधिकार नै अछि।",
        "newtitle": "नव शीर्षक:",
        "move-watch": "लिङ्क पन्ना आ लक्षित पन्ना देखी",
        "movepagebtn": "नाम परिवर्तन करी",
        "movelogpagetext": "नाम बदलल गेल लेख कऽ सूचि नीचां देल गेल अछि",
        "movesubpage": "{{PLURAL:$1|उप पन्ना|उप पन्ना}}",
        "movesubpagetext": "नीचां $1 {{PLURAL:$1| पन्ना देखाओल गएल अछि, जे अहि पन्नाकऽ उप पन्ना अछि|पन्ना देखावोल गएल अछि, जे अहि पन्नाकऽ उप पन्ना अछि}}।",
+       "movesubpagetalktext": "नीचां $1 {{PLURAL:$1| पन्ना देखाओल गएल अछि, जे अहि पन्नाकऽ उप पन्ना अछि|पन्ना देखावोल गएल अछि, जे अहि पन्नाकऽ उप पन्ना अछि}}।",
        "movenosubpage": "अहि पन्ना कऽ कोनो उप पन्ना नहि अछि।",
        "movereason": "कारण:",
        "revertmove": "पूर्ववत्",
        "previousdiff": "← पुरान सम्पादन",
        "nextdiff": "नव सम्पादन →",
        "mediawarning": "'''चेतौनी''': ई संचिका प्रकार विषाणु कूटशब्द युक्त रहि सकैए।\nएकरा प्रयोग केलापर अहाँक तंत्रकेँ किछु समझौता करऽ पड़ि सकै छै।",
-       "imagemaxsize": "à¤\9aितà¥\8dर à¤\86à¤\95ारà¤\95 à¤¸à¥\80मा:<br />''(सà¤\82à¤\9aिà¤\95ा à¤µà¤°à¥\8dणन à¤ªà¤¨à¥\8dना à¤²à¥\87ल)''",
+       "imagemaxsize": "सà¤\82à¤\9aिà¤\95ा à¤µà¤°à¥\8dणन à¤ªà¤¨à¥\8dना à¤²à¥\87ल à¤\9aितà¥\8dर à¤\86à¤\95ारà¤\95 à¤¸à¥\80मा:",
        "thumbsize": "संकुचितचित्र आकार:",
        "widthheight": "$1 × $2",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|पन्ना|पन्ना सभ}}",
        "confirm-unwatch-top": "ऐ पन्नाकेँ हमर साकांक्ष सूचीसँ हटाउ",
        "confirm-rollback-button": "ठीक अछि",
        "confirm-rollback-top": "ई पृष्ठ सम्पादन पूर्ववत करी?",
+       "confirm-mcrrestore-title": "संशोधन सभकेँ घुराउ",
+       "confirm-mcrundo-title": "परिवर्तन पुरान स्थिति पर आनी",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← पहिलुका पृष्ठ",
        "imgmultipagenext": "अगुलका पृष्ठ →",
        "tags-deactivate": "निष्क्रिय करी",
        "tags-hitcount": "$1 {{PLURAL:$1|परिवर्तन|परिवर्तनसभ}}",
        "tags-manage-no-permission": "अहाँकेँ पन्ना घसकेबाक अधिकार नै अछि।",
-       "tags-manage-blocked": "अहाँ प्रतिबन्धित रहैत समय ट्यागमे कोनो जोडए या हटाबैक कार्य नै करि सकैत छी।",
+       "tags-manage-blocked": "अहाँक {{GENDER:$1|you}} प्रतिबन्धित रहैत समय ट्यागमे कोनो जोडए या हटाबैक कार्य नै करि सकैत छी।",
        "tags-create-heading": "एकटा नयाँ विकि-समूह बनाबु",
        "tags-create-explanation": "पुनः निर्धारित रूप से, नवनिर्मित टैग प्रयोगकर्तासभ आर बॉट के लेल हाजीर राहत।",
        "tags-create-tag-name": "चेन्हक नाम:",
        "compare-title-not-exists": "जे शीर्षक अहाँ कहलौं से अछिये नै।",
        "compare-revision-not-exists": "जे संशोधन अहाँ कहलौं से अछिये नै।",
        "diff-form": "अन्तर",
+       "diff-form-submit": "(कोनो अंतर नै)",
        "permanentlink": "स्थायी लिङ्क",
        "permanentlink-revid": "संशोधन",
        "permanentlink-submit": "संशोधन में जाउ",
        "htmlform-date-placeholder": "YYYY-MM-DD",
        "htmlform-time-placeholder": "HH:MM:SS",
        "htmlform-datetime-placeholder": "YYYY-MM-DD HH:MM:SS",
-       "htmlform-title-not-exists": "अस्तित्व में नहि अछि",
+       "htmlform-title-not-exists": "$1 अस्तित्व में नै अछि",
+       "htmlform-user-not-exists": "'''$1''' नै अछि।",
        "logentry-delete-delete": "$1 पृष्ठ $3 {{GENDER:$2|मेटौलक}}",
        "logentry-delete-restore": "$1 {{GENDER:$2|restored}} page $3",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|दबाएल}} page $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 revision|$1 revisions}} घुराएल",
+       "restore-count-files": "{{PLURAL:$1|1 संचिका|$1 संचिका सभ}} आनल",
        "logentry-delete-event": "$1द्वारा $3 पृष्ठक लौग {{PLURAL:$5|प्रविष्टि|प्रविष्टिसभ}}क दृश्यता {{GENDER:$2|परिवर्तित केलक}}: $4",
        "logentry-delete-revision": "$1 द्वारा $3 पृष्ठक {{PLURAL:$5|एक अवतरण|$5 अवतरणसभ}}क दृश्यता {{GENDER:$2|परिवर्तित}}: $4",
        "logentry-delete-event-legacy": "$1द्वारा $3 पृष्ठ पर लौग क्रियासभक दृश्यता {{GENDER:$2|परिवर्तित केलक}}",
        "logentry-newusers-byemail": "$1 द्वारा प्रयोक्ता खाता $3 {{GENDER:$2|बनाओल}} गेल आ कूटशब्द ई-पत्र द्वारा भेजल गेल",
        "logentry-newusers-autocreate": "खाता $1 छल {{GENDER:$2|बनाएल}} स्वतः",
        "logentry-upload-upload": "$1 {{GENDER:$2|ए}} $3 अपलोड केलक",
+       "logentry-managetags-create": "$1 {{GENDER:$2|दबाएल}} page $3",
        "log-name-tag": "ट्याग लौग",
        "rightsnone": "(कोनो नै)",
        "feedback-adding": "पन्ना उपर प्रतिक्रिया जोडु ...",
        "pagelang-language": "भाषा",
        "pagelang-use-default": "डिफल्ट भाषा प्रयोग करी",
        "pagelang-select-lang": "भाषा चुनु",
+       "pagelang-reason": "कारण",
        "pagelang-submit": "भेजी",
+       "pagelang-nonexistent-page": "$1 पृष्ठ अस्तित्वमे नै अछि।",
        "right-pagelang": "पृष्ठ भाषा परिवर्तन करी",
        "action-pagelang": "पृष्ठ भाषा परिवर्तन करी",
        "log-name-pagelang": "भाषा परिवर्तन लग",
        "log-description-pagelang": "ई पृष्ठ भाषासभमे परिवर्तनक लग छी।",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|बदलि देल गेल}} पृष्ठ भाषा $3 क लेल $4 सँ $5।",
        "mediastatistics": "मिडिया तथ्याङ्क",
+       "mediastatistics-table-mimetype": "माइम प्रकार",
+       "mediastatistics-table-count": "फाइल सभके संख्या",
+       "mediastatistics-header-unknown": "अज्ञात",
+       "mediastatistics-header-audio": "ऑडियो",
+       "mediastatistics-header-video": "भिडियो",
+       "mediastatistics-header-total": "सभ फ़िल्टर",
        "special-characters-group-latin": "ल्याटिन",
        "special-characters-group-latinextended": "ल्याटिन विस्तारित",
        "special-characters-group-ipa": "आइपीए",
        "special-characters-title-endash": "एन डैश",
        "special-characters-title-emdash": "एम डैश",
        "special-characters-title-minus": "ऋण चिह्न",
+       "mw-widgets-categoryselector-add-category-placeholder": "श्रेणी जोड़",
+       "mw-widgets-usersmultiselect-placeholder": "और जोड़ु",
+       "mw-widgets-titlesmultiselect-placeholder": "और जोड़ु",
+       "date-range-from": "दिन से (शुरू):",
+       "date-range-to": "दिन तक (समाप्त):",
+       "sessionprovider-generic": "$1 सत्र",
        "randomrootpage": "अविशिष्ट मूल पृष्ठ",
        "log-action-filter-block": "प्रतिबन्धक प्रकार:",
        "log-action-filter-delete": "मेटबैक प्रकार:",
        "log-action-filter-block-block": "अवरोध",
        "log-action-filter-block-reblock": "अवरोध परिवर्तन",
        "log-action-filter-block-unblock": "अवरोधरहित",
-       "log-action-filter-contentmodel-change": "सामग्रीक नमूना परिवर्तन"
+       "log-action-filter-contentmodel-change": "सामग्रीक नमूना परिवर्तन",
+       "log-action-filter-delete-revision": "खाली मेटाएल",
+       "log-action-filter-managetags-create": "प्रयोक्ता रचना लग",
+       "log-action-filter-newusers-create": "अज्ञात सदस्य द्वारा निर्मित",
+       "log-action-filter-newusers-autocreate": "स्वचालित निर्माण",
+       "log-action-filter-protect-protect": "सुरक्षा",
+       "log-action-filter-protect-modify": "सुरक्षा परिवर्तन",
+       "log-action-filter-protect-unprotect": "असुरक्षा",
+       "log-action-filter-protect-move_prot": "पन्ना संरक्षण",
+       "log-action-filter-rights-autopromote": "स्वतः परिवर्तन",
+       "log-action-filter-suppress-event": "लॉग अवरोध",
+       "log-action-filter-suppress-revision": "संशोधन अवरोध",
+       "log-action-filter-suppress-delete": "पृष्ठ अवरोध",
+       "log-action-filter-upload-upload": "नया अपलोड",
+       "authmanager-create-disabled": "लेखा निर्माण अशक्त कएल",
+       "authmanager-userdoesnotexist": "प्रयोक्ता खाता \"$1\" पंजीकृत नै अछि।",
+       "authmanager-email-label": "इमेल",
+       "authmanager-email-help": "ई-पत्र ठेगान:",
+       "authmanager-realname-label": "असली नाम",
+       "authmanager-provider-temporarypassword": "तात्कालिक कूटशब्द:",
+       "authprovider-resetpass-skip-label": "छाेड",
+       "authform-wrongtoken": "गलत टोकन",
+       "cannotauth-not-allowed-title": "अनुमति नै मिलली।",
+       "changecredentials": "साख बदल",
+       "changecredentials-submit": "साख बदल",
+       "removecredentials": "परिचय निकाल",
+       "credentialsform-provider": "परिचय प्रकार :",
+       "credentialsform-account": "खाता क नाम:",
+       "restrictionsfield-badip": "अमान्य अनिकेत क्षेत्र: $1",
+       "edit-error-short": "त्रुटि: $1",
+       "edit-error-long": "त्रुटि:\n\n$1",
+       "revid": "संशोधन $1",
+       "pageid": "पेज आईडी $1",
+       "pagedata-bad-title": "अवैध शीर्षक: $1.",
+       "passwordpolicies-group": "समूह",
+       "passwordpolicies-policies": "राजनीति",
+       "passwordpolicies-policy-minimalpasswordlength": "कूटशब्द कमसँ कम {{PLURAL:$1|1 वर्ण|$1 वर्णक}} हुअए।"
 }
index 29e3222..b9b6c35 100644 (file)
        "rcfilters-watchlist-edit-watchlist-button": "Уреди набљудувани",
        "rcfilters-watchlist-showupdated": "Промени во страниците што ги немате посетено откако се случиле се <strong>задебелени</strong>.",
        "rcfilters-preference-label": "Користи посредник без JavaScript",
-       "rcfilters-preference-help": "Ги вчитува скорешните промени без филтри или можност за истакнување.",
+       "rcfilters-preference-help": "Ги вчитува скорешните промени без филтерско пребарување или можност за истакнување.",
        "rcfilters-watchlist-preference-label": "Користи посредник без JavaScript",
-       "rcfilters-watchlist-preference-help": "Ги вчитува набљудуваните без филтри или можност за истакнување.",
+       "rcfilters-watchlist-preference-help": "Ги вчитува набљудуваните без филтерско пребарување или можност за истакнување.",
        "rcfilters-filter-showlinkedfrom-label": "Прикажи промени во страници кои водат од",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Страници кон кои води</strong> избраната страница",
        "rcfilters-filter-showlinkedto-label": "Прикажи промени во страници кои водат кон",
index c5972e6..b2c1a4e 100644 (file)
        "badretype": "तुम्ही टाकलेले परवलीचे शब्द जुळत नाहीत.",
        "usernameinprogress": "या सदस्यनावाचे खाते तयार करण्याचे काम प्रगतीपथावर आहे. कृपया थांबा.",
        "userexists": "तुम्ही टाकलेले सदस्यनाम पूर्वीच वापरात आहे.\nकृपया वेगळे सदस्यनाम निवडा.",
-       "loginerror": "सनà¥\8bà¤\82द-पà¥\8dरवà¥\87शात चूक झाली आहे",
+       "loginerror": "तà¥\81मà¥\8dहà¥\80 à¤\86लà¥\8dयाà¤\9aà¥\80 à¤¨à¥\8bà¤\82द à¤\95रणà¥\8dयात चूक झाली आहे",
        "createacct-error": "खाते तयार करण्यात चुकी",
        "createaccounterror": "हे खाते तयार करता येऊ शकले नाही:$1",
        "nocookiesnew": "सदस्य खाते तयार झाले ,पण तुम्ही सनोंद-प्रवेशित(लॉग्डईन) नाहीत.{{SITENAME}} सदस्यांना सनोंद-प्रवेश देतांना त्यांचे स्मृतिशेष (कुकिज) वापरते.तुम्ही स्मृतिशेष सुविधा अनुपलब्ध ठेवली आहे.ती कृपया उपलब्ध करा,आणि नंतर तुमच्या नवीन सदस्य नावाने आणि परवलीने दाखल व्हा.",
        "nosuchuser": "\"$1\" या नावाचा कोणताही सदस्य नाही.तुमचे शुद्धलेखन तपासा, किंवा [[Special:CreateAccount|नवीन खाते]] तयार करा.",
        "nosuchusershort": "\"$1\" या नावाचा सदस्य नाही. लिहीताना आपली चूक तर नाही ना झाली?",
        "nouserspecified": "तुम्हाला सदस्यनाव नमूद करावे लागेल.",
-       "login-userblocked": "हा à¤¸à¤¦à¤¸à¥\8dय â\80\99पà¥\8dरतिबà¤\82धितâ\80\99 à¤\86हà¥\87. à¤¤à¥\8dयास à¤¸à¤¨à¥\8bà¤\82द-पà¥\8dरवà¥\87शाची परवानगी नाही.",
+       "login-userblocked": "हा à¤¸à¤¦à¤¸à¥\8dय â\80\99पà¥\8dरतिबà¤\82धितâ\80\99 à¤\86हà¥\87. à¤¤à¥\8dयाला à¤\86लà¥\8dयाà¤\9aà¥\80 à¤¨à¥\8bà¤\82द à¤\95रणà¥\8dयाची परवानगी नाही.",
        "wrongpassword": "सदस्यनाव अथवा परवलीचा शब्द चुकीचा टाकण्यात आला आहे. पुन्हा एकदा प्रयत्न करा.",
        "wrongpasswordempty": "परवलीचा शब्द कोरा आहे; पुन्हा प्रयत्न करा.",
        "passwordtooshort": "तुमच्या परवलीच्या शब्दात किमान {{PLURAL:$1|१ अक्षर |$1 अक्षरे}} हवे/हवीत.",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|चर्चा]]) चे सदस्यखाते तयार करण्यात आले आहे.",
        "createaccount-title": "{{SITENAME}} साठी खाते तयार करणे",
        "createaccount-text": "तुमचा विपत्र पत्ता घेउन {{SITENAME}} ($4)वर \"$2\" नावाच्या कोण्या एकाने \"$3\" परवलीने खाते उघडले आहे. कृपया आपण सनोंद-प्रवेश करून आपला परवलीचा शब्द बदलावा.\n\nजर ही खातेनोंदणी चुकिने झाली असेल तर, तुम्ही या संदेशाकडे दुर्लक्ष करू शकता.",
-       "login-throttled": "तà¥\81मà¥\8dहà¥\80 à¤¨à¥\81à¤\95तà¥\87à¤\9a à¤¸à¤¨à¥\8bà¤\82द- à¤ªà¥\8dरवà¥\87शासाठी अनेकानेक प्रयत्न केले आहेत.\nकृपया, पुन्हा प्रयत्न करण्याआधी $1 थोडी उसंत घ्या.",
+       "login-throttled": "तà¥\81मà¥\8dहà¥\80 à¤¨à¥\81à¤\95तà¥\87à¤\9a à¤\86लà¥\8dयाà¤\9aà¥\80 à¤¨à¥\8bà¤\82द à¤\95रणà¥\8dयासाठी अनेकानेक प्रयत्न केले आहेत.\nकृपया, पुन्हा प्रयत्न करण्याआधी $1 थोडी उसंत घ्या.",
        "login-abort-generic": "तुमचा प्रवेश अयशस्वी होऊन रद्द झाला.",
        "login-migrated-generic": "आपल्या खात्याचे स्थलांतर झाले आहे,या विकिवर आपले सदस्यनाव आता यापुढे अस्तित्वात राहणार नाही.",
        "loginlanguagelabel": "भाषा: $1",
        "createacct-another-realname-tip": "आपले खरे नाव टाकणे वैकल्पिक आहे.\nजर आपण ते द्यायचे ठरविले तर,ते आपल्या कामाचा मूळ स्रोत म्णून देण्यास वापरले जाईल.",
        "pt-login": "सनोंद-प्रवेश करा",
        "pt-login-button": "सनोंद-प्रवेश करा",
-       "pt-login-continue-button": "लà¥\89à¤\97िन à¤¸à¥\81रà¥\82 ठेवा",
+       "pt-login-continue-button": "à¤\86लà¥\8dयाà¤\9aà¥\80 à¤¨à¥\8bà¤\82द à¤¤à¤¶à¥\80à¤\9a ठेवा",
        "pt-createaccount": "खाते बनवा",
        "pt-userlogout": "सनोंद-निर्गम",
        "php-mail-error-unknown": "पीएचपीच्या विपत्र() पर्यायात अज्ञात चूक",
        "retypenew": "पुन्हा एकदा परवलीचा शब्द टंका:",
        "resetpass_submit": "परवलीचा शब्द टाका आणि सनोंद-प्रवेश करा",
        "changepassword-success": "तुमचा परवलीचा शब्द बदललेला आहे!",
-       "changepassword-throttled": "तà¥\81मà¥\8dहà¥\80 à¤¨à¥\81à¤\95तà¥\87à¤\9a à¤¸à¤¨à¥\8bà¤\82द- à¤ªà¥\8dरवà¥\87शासाठी अनेकानेक प्रयत्न केले आहेत.\nकृपया, पुन्हा प्रयत्न करण्याआधी $1 थोडी उसंत घ्या.",
+       "changepassword-throttled": "तà¥\81मà¥\8dहà¥\80 à¤¨à¥\81à¤\95तà¥\87à¤\9a à¤\86लà¥\8dयाà¤\9aà¥\80 à¤¨à¥\8bà¤\82द à¤\95रणà¥\8dयासाठी अनेकानेक प्रयत्न केले आहेत.\nकृपया, पुन्हा प्रयत्न करण्याआधी $1 थोडी उसंत घ्या.",
        "botpasswords": "सांगकाम्याचे परवलीचे शब्द",
        "botpasswords-summary": "<em>सांगकाम्याचे परवलीचे शब्द</em>हे त्या खात्याची मुख्य सनोंद-प्रवेश अधिकारपत्रे न वापरता, एपीआय मार्फत, सदस्य खात्याच्या प्रवेशास पोहोच देतात.सांगकाम्याचा परवलीचा शब्द वापरुन सनोंद प्रवेश केलेल्यांचे उपलब्ध सदस्य अधिकार प्रतिबंधित असू शकतात.\n\nजर आपणास कळत नसेल आपण हे कां करीत आहोत,तर आपण ते बहुतेक करावयास नको.कोणीही आपणास असे कधीही सांगु नये कि यापैकी एखादे उत्पादित करा व त्यांना द्या.",
        "botpasswords-disabled": "सांगकाम्यांचे परवलीचे शब्द अक्षम केले आहेत.",
        "botpasswords-deleted-body": "{{GENDER:$2|सदस्य}} \"$2\" साठी,\"$1\" या सांगकाम्याच्या नावाचा परवलीचा शब्द वगळला.",
        "botpasswords-newpassword": "<strong>$1</strong>द्वारे सनोंद प्रवेशास नविन परवलीचा शब्द <strong>$2</strong>आहे. <em>कृपया याची भविष्यातील संदर्भासाठी नोंद ठेवा.</em>(जून्या सांगकाम्यांसाठी, ज्यांचेसाठी सदस्यनाम हे मूळ सदस्यनावच असणे आवश्यक आहे, आपण  <strong>$3</strong> हे सदस्यनाम म्हणून व <strong>$4</strong> हा परवलीचा शब्द म्हणून वापरू शकता.)",
        "botpasswords-no-provider": "सांगकाम्यापरवलीशब्दसत्रपुरवठादार उपलब्ध नाही.",
-       "botpasswords-restriction-failed": "साà¤\82à¤\97à¤\95ामà¥\8dया à¤ªà¤°à¤µà¤²à¥\80à¤\9aà¥\8dया à¤¶à¤¬à¥\8dदावर à¤\85सलà¥\87लà¥\87 à¤ªà¥\8dरतिबà¤\82ध à¤¯à¤¾ à¤¸à¤¨à¥\8bà¤\82द à¤ªà¥\8dरवà¥\87शास à¤\85à¤\9fà¤\95ाव à¤\95रà¥\80त आहेत.",
+       "botpasswords-restriction-failed": "साà¤\82à¤\97à¤\95ामà¥\8dया à¤ªà¤°à¤µà¤²à¥\80à¤\9aà¥\8dया à¤¶à¤¬à¥\8dदावर à¤\85सलà¥\87लà¥\87 à¤ªà¥\8dरतिबà¤\82ध à¤¯à¤¾ à¤\86लà¥\8dयाà¤\9aà¥\80 à¤¨à¥\8bà¤\82द à¤\95रणà¥\8dयास à¤¥à¤¾à¤\82बवित आहेत.",
        "botpasswords-invalid-name": "नमूद केलेल्या सदस्यनावात सांगकाम्याचा परवलीचा शब्द-विभाजक (\"$1\") नाही.",
        "botpasswords-not-exist": "सदस्य \"$1\" चा \"$2\" नावाचा सांगकाम्या परवलीचा शब्द नाही.",
+       "botpasswords-locked": "तुम्ही तुमच्या सांगकाम्या खात्यावरून आल्याची नोंद करू शकत नाही, हे खाते बंद केले गेले आहे.",
        "resetpass_forbidden": "परवलीचे शब्द बदलता येत नाहीत.",
        "resetpass_forbidden-reason": "परवलीचे शब्द बदलता येऊ शकत नाहीत:$1",
        "resetpass-no-info": "या पानामध्ये थेट जाण्यासाठी तुम्हास  सनोंद-प्रवेशित असावयास हवे.",
        "changeemail-none": "(काहीही नाही)",
        "changeemail-password": "तुमचा {{SITENAME}} परवलीचा शब्द:",
        "changeemail-submit": "ईमेल बदला",
-       "changeemail-throttled": "तà¥\81मà¥\8dहà¥\80 à¤¨à¥\81à¤\95तà¥\87à¤\9a à¤¸à¤¨à¥\8bà¤\82द- à¤ªà¥\8dरवà¥\87शासाठà¥\80 à¤\85नेक प्रयत्न केले आहेत.\nकृपया, पुन्हा प्रयत्न करण्याआधी $1 थोडी उसंत घ्या.",
+       "changeemail-throttled": "तà¥\81मà¥\8dहà¥\80 à¤¨à¥\81à¤\95तà¥\87à¤\9a à¤\86लà¥\8dयाà¤\9aà¥\80 à¤¨à¥\8bà¤\82द à¤\95रणà¥\8dयासाठà¥\80 à¤\85नà¥\87à¤\95ानेक प्रयत्न केले आहेत.\nकृपया, पुन्हा प्रयत्न करण्याआधी $1 थोडी उसंत घ्या.",
        "changeemail-nochange": "कृपया  वेगळा नविन विपत्रपत्ता टाका.",
        "resettokens": "ओळखचिन्ह (टोकन) पुनर्स्थापित करा",
        "resettokens-text": "येथे आपल्या खात्यात असलेला व्यक्तिगत मजकूरापर्यंत पोचण्यासाठी आपण ओळखचिन्ह(टोकन) पुनर्स्थापित करू शकता.\nआपण जर तो अपघाताने कोणासमवेत सहभागीला असेल किंवा आपले खात्याची आपण तडजोड केली असल्यास, हे करावयास हवे.",
        "confirmedittext": "तुम्ही संपादने करण्यापूर्वी तुमचा विपत्र पत्ता प्रमाणित करणे आवश्यक आहे. तुमचा विपत्र पत्ता तुमच्या [[Special:Preferences|सदस्य पसंती]]तून लिहा व सिद्ध करा.",
        "nosuchsectiontitle": "असा विभाग नाही.",
        "nosuchsectiontext": "तुम्ही अस्तिवात नसलेला विभाग संपादन करण्याचा प्रयत्न केला आहे.हे पान आपण बघत असतांना तो हलविल्या किंवा वगळल्या गेला आहे.",
-       "loginreqtitle": "सनà¥\8bà¤\82द-पà¥\8dरवà¥\87श आवश्यक आहे",
+       "loginreqtitle": "à¤\86लà¥\8dयाà¤\9aà¥\80 à¤¨à¥\8bà¤\82द à¤\95रणà¥\87 आवश्यक आहे",
        "loginreqlink": "\nसनोंद-प्रवेश करा",
        "loginreqpagetext": "तुम्ही इतर पाने पहाण्याकरिता $1 केलेच पाहिजे.",
        "accmailtitle": "परवलीचा शब्द पाठविण्यात आलेला आहे.",
        "prefs-displaywatchlist": "प्रदर्शन पर्याय",
        "prefs-tokenwatchlist": "ओळखचिन्ह",
        "prefs-diffs": "फरक",
-       "prefs-help-prefershttps": "हा à¤ªà¤¸à¤\82तà¥\80à¤\95à¥\8dरम à¤\86पलà¥\8dया à¤ªà¥\81ढà¥\80ल à¤¸à¤¨à¥\8bà¤\82द à¤ªà¥\8dरवà¥\87शानंतर कार्यान्वित होईल.",
+       "prefs-help-prefershttps": "हा à¤ªà¤¸à¤\82तà¥\80à¤\95à¥\8dरम à¤\86पलà¥\8dया à¤ªà¥\81ढà¥\80ल à¤\86लà¥\8dयाà¤\9aà¥\80 à¤¨à¥\8bà¤\82द à¤\95à¥\87लà¥\8dयानंतर कार्यान्वित होईल.",
        "prefswarning-warning": "आपण आपल्या पसंतीक्रमात केलेला बदल अद्याप जतन झाला नाही.जर आपण \"$1\" न टिचकता, या पानावरुन दुसरीकडे गेलात तर आपला पसंतीक्रम अद्यतन होणार नाही.",
        "prefs-tabs-navigation-hint": "उपयुक्त सूचना:आपण कळींच्या यादीत, कळींदरम्यानच्या सुचालनास डावी व उजवी बाण-कळ वापरु शकता.",
        "userrights": "सदस्य अधिकार",
index afc4d65..77b03c8 100644 (file)
        "move": "Mover",
        "movethispage": "Mover esta página",
        "unusedimagestext": "Os seguintes ficheiros existem mas não são usados em nenhuma página.\nNote que outros sítios na Internet podem ter hiperligações para um ficheiro através de um URL direto e, por isso, podem estar listados ficheiros que estão a ser ativamente usados por entidades externas.",
+       "unusedimagestext-categorizedimgisused": "Os seguintes ficheiros existem mas não foram incorporados em nenhuma página. Considera-se que as imagens categorizadas estão a ser usadas, mesmo que não tenham sido incorporadas em nenhuma página.\nNote que é possível que outros sítios da Internet tenham hiperligações para um ficheiro com um URL direto; esse ficheiro poderá aparecer nesta lista, apesar de estar em uso ativo.",
        "unusedcategoriestext": "As seguintes categorias existem, embora nenhuma página ou categoria faça uso delas.",
        "notargettitle": "Sem alvo",
        "notargettext": "Especifique sobre que página alvo ou utilizador pretende executar esta função.",
index 6b9fa15..c0dc7ca 100644 (file)
        "ipb-sitewide": "A type of block the user can select from on [[Special:Block]].",
        "ipb-partial": "A type of block the user can select from on [[Special:Block]].",
        "ipb-type-label": "The label of the type of editing restriction the admin would like to impose on [[Special:Block]].",
-       "ipb-pages-label": "The label for a autocomplete text field to specify pages to block a user from editing on [[Special:Block]].",
+       "ipb-pages-label": "The label for an autocomplete text field to specify pages to block a user from editing on [[Special:Block]].",
        "badipaddress": "An error message shown when one entered an invalid IP address in blocking page.",
        "blockipsuccesssub": "Used as page title in [[Special:Block]].\n\nThis message is the subject for the following message:\n* {{msg-mw|Blockipsuccesstext}}",
        "blockipsuccesstext": "Used in [[Special:Block]].\nThe title (subject) for this message is {{msg-mw|Blockipsuccesssub}}.\n\nParameters:\n* $1 - username, can be used for GENDER",
index 5270869..0017297 100644 (file)
        "move": "Переименовать",
        "movethispage": "Переименовать эту страницу",
        "unusedimagestext": "Следующие файлы не используются ни на одной странице.\nПожалуйста, учтите, что другие веб-сайты могут непосредственно ссылаться на этот файл (его URL), таким образом он может использоваться несмотря на вхождение в этот список.",
+       "unusedimagestext-categorizedimgisused": "Следующие файлы существуют, но не включены ни в одну страницу. Категоризируемые изображения считаются используемыми, несмотря на то что не присутствуют ни в одной странице.\nОбратите внимание, что другие вебсайты могут ссылаться на файл по прямому URL-адресу, и они будут находиться несмотря на активное использование.",
        "unusedcategoriestext": "Существуют следующие страницы категорий, не содержащие статей или других категорий.",
        "notargettitle": "Не указана цель",
        "notargettext": "Вы не указали целевую страницу или участника для этого действия.",
index bc4fb00..9b44b35 100644 (file)
        "rcfilters-watchlist-edit-watchlist-button": "Uredi svoj seznam nadzorovanih strani",
        "rcfilters-watchlist-showupdated": "Spremembe strani, ki jih niste obiskali od zadnje spremembe, so prikazane <strong>krepko</strong>, z močnimi oznakami.",
        "rcfilters-preference-label": "Uporabi vmesnik brez JavaScripta",
-       "rcfilters-preference-help": "Naloži Zadnje spremembe brez filtrov in možnosti obarvanja.",
+       "rcfilters-preference-help": "Naloži Zadnje spremembe brez iskalnih filtrov in možnosti obarvanja.",
        "rcfilters-watchlist-preference-label": "Uporabi vmesnik brez JavaScripta",
-       "rcfilters-watchlist-preference-help": "Naloži Spisek nadzorov brez filtrov in možnosti obarvanja.",
+       "rcfilters-watchlist-preference-help": "Naloži Spisek nadzorov brez iskalnih filtrov in možnosti obarvanja.",
        "rcfilters-filter-showlinkedfrom-label": "Pokaži spremembe na straneh, na katere se povezuje",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Strani, na katere kaže</strong> izbrana stran",
        "rcfilters-filter-showlinkedto-label": "Pokaži spremembe na straneh, ki kažejo na",
index 2e40dc3..69c3250 100644 (file)
        "editpage-invalidcontentmodel-text": "Контентна модель «$1» не підтримується.",
        "editpage-notsupportedcontentformat-title": "Формат вмісту не підтримується",
        "editpage-notsupportedcontentformat-text": "Формат вмісту $1 не підтримується моделлю вмісту $2.",
+       "slot-name-main": "Головна",
        "content-model-wikitext": "вікітекст",
        "content-model-text": "звичайний текст",
        "content-model-javascript": "JavaScript",
        "search-file-match": "(збігається із вмістом файлу)",
        "search-suggest": "Можливо, ви мали на увазі: $1",
        "search-rewritten": "Показуються результати для $1. Шукати натомість $2.",
-       "search-interwiki-caption": "Результати з братніх проектів",
+       "search-interwiki-caption": "Результати із сестринських проектів",
        "search-interwiki-default": "Результати із $1:",
        "search-interwiki-more": "(більше)",
        "search-interwiki-more-results": "більше результатів",
index 5024688..5dfbab7 100644 (file)
@@ -61,7 +61,7 @@
                createSpinner: function ( opts ) {
                        var $spinner;
 
-                       if ( opts !== undefined && $.type( opts ) !== 'object' ) {
+                       if ( typeof opts === 'string' ) {
                                opts = {
                                        id: opts
                                };
index 44baa8b..ff7a40f 100644 (file)
         *
         * @static
         * @param {string} title
-        * @param {number} [defaultNamespace=NS_MAIN]
+        * @param {number|Object} [defaultNamespaceOrOptions=NS_MAIN]
         *  If given, will used as default namespace for the given title.
+        *  This method can also be called with two arguments, in which case
+        *  this becomes options (see below).
         * @param {Object} [options] additional options
         * @param {boolean} [options.forUploading=true]
         *  Makes sure that a file is uploadable under the title returned.
         *  Automatically assumed if the title is created in the Media namespace.
         * @return {mw.Title|null} A valid Title object or null if the input cannot be turned into a valid title
         */
-       Title.newFromUserInput = function ( title, defaultNamespace, options ) {
-               var namespace, m, id, ext, parts;
+       Title.newFromUserInput = function ( title, defaultNamespaceOrOptions, options ) {
+               var namespace, m, id, ext, parts,
+                       defaultNamespace;
 
                // defaultNamespace is optional; check whether options moves up
-               if ( arguments.length < 3 && $.type( defaultNamespace ) === 'object' ) {
-                       options = defaultNamespace;
-                       defaultNamespace = undefined;
+               if ( arguments.length < 3 && typeof defaultNamespace === 'object' ) {
+                       options = defaultNamespaceOrOptions;
+               } else {
+                       defaultNamespace = defaultNamespaceOrOptions;
                }
 
                // merge options into defaults
index 5923ff8..76038f6 100644 (file)
@@ -26,7 +26,7 @@
                 * @param {string} key
                 * @param {string|null} value Value of cookie. If `value` is `null` then this method will
                 *   instead remove a cookie by name of `key`.
-                * @param {Object|Date} [options] Options object, or expiry date
+                * @param {Object|Date|number} [options] Options object, or expiry date
                 * @param {Date|number|null} [options.expires] The expiry date of the cookie, or lifetime in seconds.
                 *
                 *   If `options.expires` is null, then a session cookie is set.
@@ -61,8 +61,8 @@
                        };
 
                        // Options argument can also be a shortcut for the expiry
-                       // Expiry can be a Date or null
-                       if ( $.type( options ) !== 'object' ) {
+                       // Expiry can be a Date, number or null
+                       if ( !options || options instanceof Date || typeof options === 'number' ) {
                                // Also takes care of options = undefined, in which case we also don't need $.extend()
                                defaultOptions.expires = options;
                                options = defaultOptions;
index 8f8ef53..781ad08 100644 (file)
 
                xhr = $.getJSON( this.getAPIurl(), allParams )
                        .done( function ( data ) {
-                               if (
-                                       $.type( data ) !== 'array' ||
-                                       (
-                                               $.type( data ) === 'array' &&
-                                               data.length === 0
-                                       )
-                               ) {
-                                       deferred.resolve();
-                               } else {
+                               if ( Array.isArray( data ) && data.length ) {
                                        deferred.resolve( data );
+                               } else {
+                                       deferred.resolve();
                                }
                        } );
                return deferred.promise( { abort: xhr.abort } );
index 9283b16..e8eb0ae 100644 (file)
@@ -7,7 +7,7 @@
  * @author Trevor Parscal <tparscal@wikimedia.org>
  */
 ( function () {
-       /* global console, mw */
+       /* global mw */
        /* eslint-disable no-console */
        var original = mw.log;
 
index 286a1a4..a8aa936 100644 (file)
@@ -461,7 +461,7 @@ Talk for this IP
 [http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:5bbc19f4&amp;action=edit 07575f81]&lt;br&gt;
 [[MediaWiki_talk:5bbc19f4|Talk]]
 &lt;/td&gt;&lt;td&gt;
-----&amp;#39;&amp;#39;This is the discussion page for an anonymous user who has not created an account yet or who does not use it. We therefore have to use the numerical &amp;#91;&amp;#91;IP address]] to identify him/her. Such an IP address can be shared by several users. If you are an anonymous user and feel that irrelevant comments have been directed at you, please &amp;#91;&amp;#91;Special:Userlogin&amp;#124;create an account or log in]] to avoid future confusion with other anonymous users.&amp;#39;&amp;#39; 
+----&amp;#39;&amp;#39;This is the discussion page for an anonymous user who has not created an account yet or who does not use it. We therefore have to use the numerical &amp;#91;&amp;#91;IP address]] to identify them. Such an IP address can be shared by several users. If you are an anonymous user and feel that irrelevant comments have been directed at you, please &amp;#91;&amp;#91;Special:Userlogin&amp;#124;create an account or log in]] to avoid future confusion with other anonymous users.&amp;#39;&amp;#39; 
 &lt;/td&gt;&lt;td&gt;
 <template lineStart="1"><title>int:5bbc19f4</title></template>
 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
index 3212ae1..3bae4aa 100644 (file)
@@ -461,7 +461,7 @@ Talk for this IP
 [http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:5bbc19f4&action=edit 07575f81]<br>
 [[MediaWiki_talk:5bbc19f4|Talk]]
 </td><td>
-----&#39;&#39;This is the discussion page for an anonymous user who has not created an account yet or who does not use it. We therefore have to use the numerical &#91;&#91;IP address]] to identify him/her. Such an IP address can be shared by several users. If you are an anonymous user and feel that irrelevant comments have been directed at you, please &#91;&#91;Special:Userlogin&#124;create an account or log in]] to avoid future confusion with other anonymous users.&#39;&#39; 
+----&#39;&#39;This is the discussion page for an anonymous user who has not created an account yet or who does not use it. We therefore have to use the numerical &#91;&#91;IP address]] to identify them. Such an IP address can be shared by several users. If you are an anonymous user and feel that irrelevant comments have been directed at you, please &#91;&#91;Special:Userlogin&#124;create an account or log in]] to avoid future confusion with other anonymous users.&#39;&#39; 
 </td><td>
 {{int:5bbc19f4}}
 </td></tr><tr><td>
index 3f3cc2c..84e1d4e 100644 (file)
                var i;
                for ( i = 0; i < cases.valid.length; i++ ) {
                        assert.strictEqual(
-                               $.type( mw.Title.newFromText( cases.valid[ i ] ) ),
+                               typeof mw.Title.newFromText( cases.valid[ i ] ),
                                'object',
                                cases.valid[ i ]
                        );
                }
                for ( i = 0; i < cases.invalid.length; i++ ) {
                        assert.strictEqual(
-                               $.type( mw.Title.newFromText( cases.invalid[ i ] ) ),
-                               'null',
+                               mw.Title.newFromText( cases.invalid[ i ] ),
+                               null,
                                cases.invalid[ i ]
                        );
                }
 
                                assert.notStrictEqual( title, null, prefix + 'Parses successfully' );
                                assert.strictEqual( title.toText(), thisCase.expected, prefix + 'Title as expected' );
+                               if ( thisCase.defaultNamespace === undefined ) {
+                                       title = mw.Title.newFromUserInput( thisCase.title, thisCase.options );
+                                       assert.strictEqual( title.toText(), thisCase.expected, prefix + 'Skipping namespace argument' );
+                               }
                        } else {
                                assert.strictEqual( title, null, thisCase.description + ', should not produce an mw.Title object' );
                        }