From: jenkins-bot Date: Thu, 28 Aug 2014 22:15:08 +0000 (+0000) Subject: Merge "Made findMissingFiles support scanning files changed in a time range" X-Git-Tag: 1.31.0-rc.0~14239 X-Git-Url: https://git.cyclocoop.org/%242?a=commitdiff_plain;h=e0afc58e038ae28c07ca36a4ad4a9b8dcfb3b9dc;hp=f2fc6b1f1f902ac4909573e8eab10ce7fa5625e2;p=lhc%2Fweb%2Fwiklou.git Merge "Made findMissingFiles support scanning files changed in a time range" --- diff --git a/RELEASE-NOTES-1.24 b/RELEASE-NOTES-1.24 index 2bf5090a7f..1205cebe15 100644 --- a/RELEASE-NOTES-1.24 +++ b/RELEASE-NOTES-1.24 @@ -42,8 +42,8 @@ production. configurations are $wgDeletedDirectory and $wgHashedUploadDirectory. * The deprecated $wgUseCommaCount variable has been removed. * $wgEnableSorbs and $wgSorbsUrl have been removed. -* The UserCryptPassword and UserComparePassword hooks are no longer called. Any extensions - using them must be updated to use the Password Hashing API. +* The UserCryptPassword and UserComparePassword hooks are no longer called. + Any extensions using them must be updated to use the Password Hashing API. * $wgCompiledFiles has been removed. * $wgSortSpecialPages was removed, the listing on Special:SpecialPages is now always sorted. @@ -65,6 +65,9 @@ production. may need to adjust your default user settings to compensate for the index change. * $wgDeferredUpdateList is now deprecated, you should use DeferredUpdates::addUpdate() instead. +* $wgCanonicalLanguageLinks has been removed. Per Google recommendations, we + will not send a rel=canonical pointing to a variant-neutral page, however + we will send rel=alternate. === New features in 1.24 === * Added a new hook, "WhatLinksHereProps", to allow extensions to annotate @@ -171,6 +174,9 @@ production. * (bug 35045) Redirects to sections will now update the URL in browser's address bar using the HTML5 History API. When [[Dog]] redirects to [[Animals#Dog]], the user will now see "Animals#Dog" in their browser instead of "Dog#Dog". +* API token handling has been rewritten. Any API module using tokens will need + to be updated. See the entry below under "Action API internal changes". +* Added HTMLAutoCompleteSelectField. === Bug fixes in 1.24 === * (bug 50572) MediaWiki:Blockip should support gender @@ -204,20 +210,20 @@ production. * (bug 69789) Title::getContentModel() now loads from the database when necessary instead of incorrectly returning the default content model. -=== Web API changes in 1.24 === +=== Action API changes in 1.24 === * action=parse API now supports prop=modules, which provides the list of ResourceLoader modules that should be used to enhance the parsed content. * action=query&meta=siteinfo&siprop=interwikimap returns a new "protorel" - field which is true iff protocol-relative urls can be used to access + field which is true if protocol-relative urls can be used to access a particular interwiki map entry. -* ApiQueryLogEvents now provides logpage, which is the page ID from the +* list=logevents now provides logpage, which is the page ID from the logging table, if ids are requested and the user has the permissions. * action=edit now requires that appendtext, prependtext, or section=new be used when using the 'redirect' parameter, to prevent clients accidentally overwriting the target page with the content of the redirect. -* action=logevents will now return an error if both letitle and leprefix are +* list=logevents will now return an error if both letitle and leprefix are specified. -* action=logevents has a new parameter, lenamespace, to allow filtering by +* list=logevents has a new parameter, lenamespace, to allow filtering by namespace. * action=expandtemplates has a new parameter, prop, and a new output format. The old format is still used if prop isn't provided, but this is deprecated. @@ -229,6 +235,21 @@ production. * (bug 60734) Actions that use ApiPageSet (e.g. purge, watch, setnotificationtimestamp) will now include continuation information when using a generator. +* Removed 'props' and 'errors' from action=paraminfo, as they have extremely + limited use and are generally inaccurate, unmaintained, and impossible to + properly maintain. +* Formats dbg, dump, txt, wddx, and yaml are now deprecated. +* action=paraminfo now indicates when a parameter is specifying a submodule. +* The iwurl parameter to prop=iwlinks is deprecated in favor of iwprop=url, for + parallelism with prop=langlinks. +* All tokens should be fetched from action=query&meta=tokens; all other methods + of fetching tokens are deprecated. The value needed for meta=tokens's 'type' + parameter for each module is documented in the action=help output and is + returned from action=paraminfo. + +=== Action API internal changes in 1.24 === +* Methods for handling continuation are added to ApiResult, so actions other + than query that use generators can easily support continuation. * $wgAPIModules (and the related $wgAPIFormatModules, $wgAPIMetaModules, $wgAPIPropModules, and $wgAPIListModules settings) now allow API modules to be specified using a "module spec" array instead of a plain class name. @@ -237,16 +258,66 @@ production. to use for the module. This is intended for extensions that want control over the instantiation of their API modules, to allow for proper dependency injection. -* Removed 'props' and 'errors' from action=paraminfo, as they have extremely - limited use and are generally inaccurate, unmaintained, and impossible to - properly maintain. Also removed the corresponding methods from ApiBase and - the 'APIGetPossibleErrors' and 'APIGetResultProperties' hooks. -* Formats dbg, dump, txt, wddx, and yaml are now deprecated. -* action=paraminfo now indicates when a parameter is specifying a submodule. - Internally, a new param type 'submodule' is available to indicate this which - automatically queries the list of submodule names from the ApiModuleManager. -* The iwurl parameter to prop=iwlinks is deprecated in favor of iwprop=url, for - parallelism with prop=langlinks. +* A new param type 'submodule' is available. Parameters of this type will take + the list of valid values from the module's ApiModuleManager for the group + corresponding to the parameter name. +* The 'APIGetPossibleErrors' and 'APIGetResultProperties' hooks are no longer used. +* API token handling has been rewritten. Any API module using tokens will need + to be updated: + * ApiBase::needsToken now returns a token type instead of boolean true when a + token is needed. Returning true will throw an exception. See documentation + of that method for details. + * Information for the 'token' parameter is automatically set by ApiBase + getFinalParams and getFinalParamDescription. + * ApiBase::getTokenSalt has been removed. + * The hooks APIQueryInfoTokens, APIQueryRevisionsTokens, + APIQueryRecentChangesTokens, APIQueryUsersTokens, and + ApiTokensGetTokenTypes are deprecated, but are still called to support + backwards-compatible token access. +* ApiBase::validateLimit and ApiBase::validateTimestamp are now protected. +* The following methods have been deprecated and may be removed in a future + release: + * ApiBase::getResultProperties + * ApiBase::getFinalResultProperties + * ApiBase::addTokenProperties + * ApiBase::getRequireOnlyOneParameterErrorMessages + * ApiBase::getRequireMaxOneParameterErrorMessages + * ApiBase::getRequireAtLeastOneParameterErrorMessages + * ApiBase::getTitleOrPageIdErrorMessage + * ApiBase::getPossibleErrors + * ApiBase::getFinalPossibleErrors + * ApiBase::parseErrors + * ApiQuery::setGeneratorContinue + * ApiQueryBase::checkRowCount + * ApiQueryBase::titleToKey + * ApiQueryBase::keyToTitle + * ApiQueryBase::keyPartToTitle + * ApiQueryInfo::getTokenFunctions + * ApiQueryInfo::resetTokenCache + * ApiQueryInfo::getEditToken + * ApiQueryInfo::getDeleteToken + * ApiQueryInfo::getProtectToken + * ApiQueryInfo::getMoveToken + * ApiQueryInfo::getBlockToken + * ApiQueryInfo::getUnblockToken + * ApiQueryInfo::getEmailToken + * ApiQueryInfo::getImportToken + * ApiQueryInfo::getWatchToken + * ApiQueryInfo::getOptionsToken + * ApiQueryRecentChanges::getTokenFunctions + * ApiQueryRecentChanges::getPatrolToken + * ApiQueryRevisions::getTokenFunctions + * ApiQueryRevisions::getRollbackToken + * ApiQueryUsers::getTokenFunctions + * ApiQueryUsers::getUserrightsToken +* The following classes have been deprecated and may be removed in a future + release: + * ApiFormatDbg + * ApiFormatDump + * ApiFormatTxt + * ApiFormatWddx + * ApiFormatYaml + * ApiTokens === Languages updated in 1.24 === @@ -359,6 +430,8 @@ changes to languages because of Bugzilla reports. Running update.php on MySQL < v5.1 may result in heavy processing. * RSS and Atom feeds generated by MediaWiki no longer include a fallback stylesheet. It was ignored by most browsers these days anyway. +* SpecialSearchNoResults hook has been removed. SpecialSearchResults is now + called unconditionally. ==== Renamed classes ==== * CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression diff --git a/docs/hooks.txt b/docs/hooks.txt index d704eb54be..ad5377efb1 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -402,36 +402,39 @@ an action=query submodule. Use this to extend core API modules. &$module: Module object &$resultPageSet: ApiPageSet object -'APIQueryInfoTokens': Use this hook to add custom tokens to prop=info. Every -token has an action, which will be used in the intoken parameter and in the -output (actiontoken="..."), and a callback function which should return the -token, or false if the user isn't allowed to obtain it. The prototype of the -callback function is func($pageid, $title), where $pageid is the page ID of the -page the token is requested for and $title is the associated Title object. In -the hook, just add your callback to the $tokenFunctions array and return true -(returning false makes no sense). +'APIQueryInfoTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead. +Use this hook to add custom tokens to prop=info. Every token has an action, +which will be used in the intoken parameter and in the output +(actiontoken="..."), and a callback function which should return the token, or +false if the user isn't allowed to obtain it. The prototype of the callback +function is func($pageid, $title), where $pageid is the page ID of the page the +token is requested for and $title is the associated Title object. In the hook, +just add your callback to the $tokenFunctions array and return true (returning +false makes no sense). $tokenFunctions: array(action => callback) -'APIQueryRevisionsTokens': Use this hook to add custom tokens to prop=revisions. -Every token has an action, which will be used in the rvtoken parameter and in -the output (actiontoken="..."), and a callback function which should return the -token, or false if the user isn't allowed to obtain it. The prototype of the -callback function is func($pageid, $title, $rev), where $pageid is the page ID -of the page associated to the revision the token is requested for, $title the +'APIQueryRevisionsTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead. +Use this hook to add custom tokens to prop=revisions. Every token has an +action, which will be used in the rvtoken parameter and in the output +(actiontoken="..."), and a callback function which should return the token, or +false if the user isn't allowed to obtain it. The prototype of the callback +function is func($pageid, $title, $rev), where $pageid is the page ID of the +page associated to the revision the token is requested for, $title the associated Title object and $rev the associated Revision object. In the hook, just add your callback to the $tokenFunctions array and return true (returning false makes no sense). $tokenFunctions: array(action => callback) -'APIQueryRecentChangesTokens': Use this hook to add custom tokens to -list=recentchanges. Every token has an action, which will be used in the rctoken -parameter and in the output (actiontoken="..."), and a callback function which -should return the token, or false if the user isn't allowed to obtain it. The -prototype of the callback function is func($pageid, $title, $rc), where $pageid -is the page ID of the page associated to the revision the token is requested -for, $title the associated Title object and $rc the associated RecentChange -object. In the hook, just add your callback to the $tokenFunctions array and -return true (returning false makes no sense). +'APIQueryRecentChangesTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead. +Use this hook to add custom tokens to list=recentchanges. Every token has an +action, which will be used in the rctoken parameter and in the output +(actiontoken="..."), and a callback function which should return the token, or +false if the user isn't allowed to obtain it. The prototype of the callback +function is func($pageid, $title, $rc), where $pageid is the page ID of the +page associated to the revision the token is requested for, $title the +associated Title object and $rc the associated RecentChange object. In the +hook, just add your callback to the $tokenFunctions array and return true +(returning false makes no sense). $tokenFunctions: array(action => callback) 'APIQuerySiteInfoGeneralInfo': Use this hook to add extra information to the @@ -443,13 +446,19 @@ $module: the current ApiQuerySiteInfo module sites statistics information. &$results: array of results, add things here -'APIQueryUsersTokens': Use this hook to add custom token to list=users. Every -token has an action, which will be used in the ustoken parameter and in the -output (actiontoken="..."), and a callback function which should return the -token, or false if the user isn't allowed to obtain it. The prototype of the -callback function is func($user) where $user is the User object. In the hook, -just add your callback to the $tokenFunctions array and return true (returning -false makes no sense). +'ApiQueryTokensRegisterTypes': Use this hook to add additional token types to +action=query&meta=tokens. Note that most modules will probably be able to use +the 'csrf' token instead of creating their own token types. +&$salts: array( type => salt to pass to User::getEditToken() ) + +'APIQueryUsersTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead. +Use this hook to add custom token to list=users. Every token has an action, +which will be used in the ustoken parameter and in the output +(actiontoken="..."), and a callback function which should return the token, or +false if the user isn't allowed to obtain it. The prototype of the callback +function is func($user) where $user is the User object. In the hook, just add +your callback to the $tokenFunctions array and return true (returning false +makes no sense). $tokenFunctions: array(action => callback) 'ApiMain::onException': Called by ApiMain::executeActionWithErrorHandling() when @@ -463,8 +472,8 @@ key for the array that represents the service data. In this data array, the key-value-pair identified by the apiLink key is required. &$apis: array of services -'ApiTokensGetTokenTypes': Use this hook to extend action=tokens with new token -types. +'ApiTokensGetTokenTypes': DEPRECATED! Use ApiQueryTokensRegisterTypes instead. +Use this hook to extend action=tokens with new token types. &$tokenTypes: supported token types in format 'type' => callback function used to retrieve this type of tokens. @@ -2504,16 +2513,11 @@ $specialSearch: SpecialSearch object ($this) $output: $wgOut $term: Search term specified by the user -'SpecialSearchResults': Called before search result display when there are -matches. +'SpecialSearchResults': Called before search result display $term: string of search term &$titleMatches: empty or SearchResultSet object &$textMatches: empty or SearchResultSet object -'SpecialSearchNoResults': Called before search result display when there are no -matches. -$term: string of search term - 'SpecialStatsAddExtra': Add extra statistic at the end of Special:Statistics. &$extraStats: Array to save the new stats ( $extraStats[''] => ; ) diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index 2c71ce869e..04802f9e97 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -81,6 +81,7 @@ $wgAutoloadLocalClasses = array( 'Html' => 'includes/Html.php', 'HtmlFormatter' => 'includes/HtmlFormatter.php', 'HTMLApiField' => 'includes/htmlform/HTMLApiField.php', + 'HTMLAutoCompleteSelectField' => 'includes/htmlform/HTMLAutoCompleteSelectField.php', 'HTMLButtonField' => 'includes/htmlform/HTMLButtonField.php', 'HTMLCheckField' => 'includes/htmlform/HTMLCheckField.php', 'HTMLCheckMatrix' => 'includes/htmlform/HTMLCheckMatrix.php', @@ -227,7 +228,7 @@ $wgAutoloadLocalClasses = array( 'ApiFormatBase' => 'includes/api/ApiFormatBase.php', 'ApiFormatDbg' => 'includes/api/ApiFormatDbg.php', 'ApiFormatDump' => 'includes/api/ApiFormatDump.php', - 'ApiFormatFeedWrapper' => 'includes/api/ApiFormatBase.php', + 'ApiFormatFeedWrapper' => 'includes/api/ApiFormatFeedWrapper.php', 'ApiFormatJson' => 'includes/api/ApiFormatJson.php', 'ApiFormatNone' => 'includes/api/ApiFormatNone.php', 'ApiFormatPhp' => 'includes/api/ApiFormatPhp.php', @@ -301,6 +302,7 @@ $wgAutoloadLocalClasses = array( 'ApiQuerySiteinfo' => 'includes/api/ApiQuerySiteinfo.php', 'ApiQueryStashImageInfo' => 'includes/api/ApiQueryStashImageInfo.php', 'ApiQueryTags' => 'includes/api/ApiQueryTags.php', + 'ApiQueryTokens' => 'includes/api/ApiQueryTokens.php', 'ApiQueryUserInfo' => 'includes/api/ApiQueryUserInfo.php', 'ApiQueryUsers' => 'includes/api/ApiQueryUsers.php', 'ApiQueryWatchlist' => 'includes/api/ApiQueryWatchlist.php', diff --git a/includes/CategoryViewer.php b/includes/CategoryViewer.php index ec8efae7b7..60694c95e3 100644 --- a/includes/CategoryViewer.php +++ b/includes/CategoryViewer.php @@ -87,12 +87,11 @@ class CategoryViewer extends ContextSource { function __construct( $title, IContextSource $context, $from = array(), $until = array(), $query = array() ) { - global $wgCategoryPagingLimit; $this->title = $title; $this->setContext( $context ); $this->from = $from; $this->until = $until; - $this->limit = $wgCategoryPagingLimit; + $this->limit = $context->getConfig()->get( 'CategoryPagingLimit' ); $this->cat = Category::newFromTitle( $title ); $this->query = $query; $this->collation = Collation::singleton(); @@ -105,10 +104,10 @@ class CategoryViewer extends ContextSource { * @return string HTML output */ public function getHTML() { - global $wgCategoryMagicGallery; wfProfileIn( __METHOD__ ); - $this->showGallery = $wgCategoryMagicGallery && !$this->getOutput()->mNoGallery; + $this->showGallery = $this->getConfig()->get( 'CategoryMagicGallery' ) + && !$this->getOutput()->mNoGallery; $this->clearCategoryState(); $this->doCategoryQuery(); diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 14799c6464..5fc73776a9 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -2699,11 +2699,6 @@ $wgDisableLangConversion = false; */ $wgDisableTitleConversion = false; -/** - * Whether to enable canonical language links in meta data. - */ -$wgCanonicalLanguageLinks = true; - /** * Default variant code, if false, the default will be the language code */ diff --git a/includes/Linker.php b/includes/Linker.php index 05bace5dbf..f0b16ab981 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -909,10 +909,10 @@ class Linker { $thumb15 = $file->transform( $hp15 ); $thumb20 = $file->transform( $hp20 ); - if ( $thumb15 && $thumb15->getUrl() !== $thumb->getUrl() ) { + if ( $thumb15 && !$thumb15->isError() && $thumb15->getUrl() !== $thumb->getUrl() ) { $thumb->responsiveUrls['1.5'] = $thumb15->getUrl(); } - if ( $thumb20 && $thumb20->getUrl() !== $thumb->getUrl() ) { + if ( $thumb20 && !$thumb20->isError() && $thumb20->getUrl() !== $thumb->getUrl() ) { $thumb->responsiveUrls['2'] = $thumb20->getUrl(); } } diff --git a/includes/MediaWiki.php b/includes/MediaWiki.php index da4af2fd99..0424633a93 100644 --- a/includes/MediaWiki.php +++ b/includes/MediaWiki.php @@ -682,7 +682,8 @@ class MediaWiki { $query = array( 'title' => 'Special:RunJobs', 'tasks' => 'jobs', 'maxjobs' => $n, 'sigexpiry' => time() + 5 ); - $query['signature'] = SpecialRunJobs::getQuerySignature( $query ); + $query['signature'] = SpecialRunJobs::getQuerySignature( + $query, $this->config->get( 'SecretKey' ) ); $errno = $errstr = null; $info = wfParseUrl( $this->config->get( 'Server' ) ); diff --git a/includes/OutputPage.php b/includes/OutputPage.php index 8d50e41562..fbd80c955f 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -3336,25 +3336,23 @@ $templates } # Language variants - if ( !$config->get( 'DisableLangConversion' ) && $config->get( 'CanonicalLanguageLinks' ) ) { + if ( !$config->get( 'DisableLangConversion' ) ) { $lang = $this->getTitle()->getPageLanguage(); if ( $lang->hasVariants() ) { - - $urlvar = $lang->getURLVariant(); - - if ( !$urlvar ) { - $variants = $lang->getVariants(); - foreach ( $variants as $_v ) { - $tags["variant-$_v"] = Html::element( 'link', array( - 'rel' => 'alternate', - 'hreflang' => wfBCP47( $_v ), - 'href' => $this->getTitle()->getLocalURL( array( 'variant' => $_v ) ) ) - ); - } - } else { - $canonicalUrl = $this->getTitle()->getLocalURL(); + $variants = $lang->getVariants(); + foreach ( $variants as $_v ) { + $tags["variant-$_v"] = Html::element( 'link', array( + 'rel' => 'alternate', + 'hreflang' => wfBCP47( $_v ), + 'href' => $this->getTitle()->getLocalURL( array( 'variant' => $_v ) ) ) + ); } } + # x-default link per https://support.google.com/webmasters/answer/189077?hl=en + $tags["variant-x-default"] = Html::element( 'link', array( + 'rel' => 'alternate', + 'hreflang' => 'x-default', + 'href' => $this->getTitle()->getLocalURL() ) ); } # Copyright diff --git a/includes/Revision.php b/includes/Revision.php index cad9f2ce59..28a825d051 100644 --- a/includes/Revision.php +++ b/includes/Revision.php @@ -1658,7 +1658,7 @@ class Revision implements IDBAccessObject { * instead of just plain userrights * @return bool */ - public static function userCanBitfield( $bitfield, $field, User $user = null , + public static function userCanBitfield( $bitfield, $field, User $user = null, Title $title = null ) { if ( $bitfield & $field ) { // aspect is deleted @@ -1680,7 +1680,7 @@ class Revision implements IDBAccessObject { } else { $text = $title->getPrefixedText(); wfDebug( "Checking for $permissionlist on $text due to $field match on $bitfield\n" ); - foreach( $permissions as $perm ) { + foreach ( $permissions as $perm ) { if ( $title->userCan( $perm, $user ) ) { return true; } diff --git a/includes/Setup.php b/includes/Setup.php index acceb59d04..cddb30bd4d 100644 --- a/includes/Setup.php +++ b/includes/Setup.php @@ -265,16 +265,16 @@ if ( $wgSkipSkin ) { // Register skins // Use a closure to avoid leaking into global state -call_user_func( function() use ( $wgValidSkinNames ) { +call_user_func( function () use ( $wgValidSkinNames ) { $factory = SkinFactory::getDefaultInstance(); foreach ( $wgValidSkinNames as $name => $skin ) { - $factory->register( $name, $skin, function() use ( $name, $skin ) { + $factory->register( $name, $skin, function () use ( $name, $skin ) { $class = "Skin$skin"; return new $class( $name ); } ); } // Register a hidden "fallback" skin - $factory->register( 'fallback', 'Fallback', function() { + $factory->register( 'fallback', 'Fallback', function () { return new SkinFallback; } ); } ); @@ -596,7 +596,7 @@ if ( !is_object( $wgAuth ) ) { $wgTitle = null; /** - * @deprecated 1.24 Use DeferredUpdates::addUpdate instead + * @deprecated since 1.24 Use DeferredUpdates::addUpdate instead * @var array */ $wgDeferredUpdateList = array(); diff --git a/includes/Title.php b/includes/Title.php index bcf9cbd851..7fdeb05511 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -2265,7 +2265,7 @@ class Title { } elseif ( $action == 'delete' ) { $tempErrors = $this->checkPageRestrictions( 'edit', $user, array(), $doExpensiveQueries, true ); - if( !$tempErrors ) { + if ( !$tempErrors ) { $tempErrors = $this->checkCascadingSourcesRestrictions( 'edit', $user, $tempErrors, $doExpensiveQueries, true ); } diff --git a/includes/WatchedItem.php b/includes/WatchedItem.php index d9a1e80ec7..ab136b8954 100644 --- a/includes/WatchedItem.php +++ b/includes/WatchedItem.php @@ -274,7 +274,7 @@ class WatchedItem { * @param WatchedItem[] $items * @return bool */ - static public function batchAddWatch( array $items ) { + public static function batchAddWatch( array $items ) { $section = new ProfileSection( __METHOD__ ); if ( wfReadOnly() ) { @@ -309,7 +309,7 @@ class WatchedItem { } $dbw = wfGetDB( DB_MASTER ); - foreach( array_chunk( $rows, 100 ) as $toInsert ) { + foreach ( array_chunk( $rows, 100 ) as $toInsert ) { // Use INSERT IGNORE to avoid overwriting the notification timestamp // if there's already an entry for this page $dbw->insert( 'watchlist', $toInsert, __METHOD__, 'IGNORE' ); diff --git a/includes/api/ApiBase.php b/includes/api/ApiBase.php index fc87a4767f..6914b02974 100644 --- a/includes/api/ApiBase.php +++ b/includes/api/ApiBase.php @@ -109,9 +109,11 @@ abstract class ApiBase extends ContextSource { } } - /***************************************************************************** - * ABSTRACT METHODS * - *****************************************************************************/ + + /************************************************************************//** + * @name Methods to implement + * @{ + */ /** * Evaluates the parameters, performs the requested query, and sets up @@ -132,440 +134,232 @@ abstract class ApiBase extends ContextSource { abstract public function execute(); /** - * Returns a string that identifies the version of the extending class. - * Typically includes the class name, the svn revision, timestamp, and - * last author. Usually done with SVN's Id keyword - * @return string - * @deprecated since 1.21, version string is no longer supported + * Get the module manager, or null if this module has no sub-modules + * @since 1.21 + * @return ApiModuleManager */ - public function getVersion() { - wfDeprecated( __METHOD__, '1.21' ); + public function getModuleManager() { + return null; + } - return ''; + /** + * If the module may only be used with a certain format module, + * it should override this method to return an instance of that formatter. + * A value of null means the default format will be used. + * @return mixed Instance of a derived class of ApiFormatBase, or null + */ + public function getCustomPrinter() { + return null; } /** - * Get the name of the module being executed by this instance - * @return string + * Returns the description string for this module + * @return string|array */ - public function getModuleName() { - return $this->mModuleName; + protected function getDescription() { + return false; } /** - * Get the module manager, or null if this module has no sub-modules - * @since 1.21 - * @return ApiModuleManager + * Returns usage examples for this module. Return false if no examples are available. + * @return bool|string|array */ - public function getModuleManager() { - return null; + protected function getExamples() { + return false; } /** - * Get parameter prefix (usually two letters or an empty string). - * @return string + * @return bool|string|array Returns a false if the module has no help URL, + * else returns a (array of) string */ - public function getModulePrefix() { - return $this->mModulePrefix; + public function getHelpUrls() { + return false; } /** - * Get the name of the module as shown in the profiler log + * Returns an array of allowed parameters (parameter name) => (default + * value) or (parameter name) => (array with PARAM_* constants as keys) + * Don't call this function directly: use getFinalParams() to allow + * hooks to modify parameters as needed. * - * @param DatabaseBase|bool $db + * Some derived classes may choose to handle an integer $flags parameter + * in the overriding methods. Callers of this method can pass zero or + * more OR-ed flags like GET_VALUES_FOR_HELP. * - * @return string + * @return array|bool */ - public function getModuleProfileName( $db = false ) { - if ( $db ) { - return 'API:' . $this->mModuleName . '-DB'; - } - - return 'API:' . $this->mModuleName; + protected function getAllowedParams( /* $flags = 0 */ ) { + // int $flags is not declared because it causes "Strict standards" + // warning. Most derived classes do not implement it. + return false; } /** - * Get the main module - * @return ApiMain + * Returns an array of parameter descriptions. + * Don't call this function directly: use getFinalParamDescription() to + * allow hooks to modify descriptions as needed. + * @return array|bool False on no parameter descriptions */ - public function getMain() { - return $this->mMainModule; + protected function getParamDescription() { + return false; } /** - * Returns true if this module is the main module ($this === $this->mMainModule), - * false otherwise. + * Indicates if this module needs maxlag to be checked * @return bool */ - public function isMain() { - return $this === $this->mMainModule; + public function shouldCheckMaxlag() { + return true; } /** - * Get the result object - * @return ApiResult + * Indicates whether this module requires read rights + * @return bool */ - public function getResult() { - // Main module has getResult() method overridden - // Safety - avoid infinite loop: - if ( $this->isMain() ) { - ApiBase::dieDebug( __METHOD__, 'base method was called on main module. ' ); - } - - return $this->getMain()->getResult(); + public function isReadMode() { + return true; } /** - * Get the result data array (read-only) - * @return array + * Indicates whether this module requires write mode + * @return bool */ - public function getResultData() { - return $this->getResult()->getData(); + public function isWriteMode() { + return false; } /** - * Set warning section for this module. Users should monitor this - * section to notice any changes in API. Multiple calls to this - * function will result in the warning messages being separated by - * newlines - * @param string $warning Warning message + * Indicates whether this module must be called with a POST request + * @return bool */ - public function setWarning( $warning ) { - $result = $this->getResult(); - $data = $result->getData(); - $moduleName = $this->getModuleName(); - if ( isset( $data['warnings'][$moduleName] ) ) { - // Don't add duplicate warnings - $oldWarning = $data['warnings'][$moduleName]['*']; - $warnPos = strpos( $oldWarning, $warning ); - // If $warning was found in $oldWarning, check if it starts at 0 or after "\n" - if ( $warnPos !== false && ( $warnPos === 0 || $oldWarning[$warnPos - 1] === "\n" ) ) { - // Check if $warning is followed by "\n" or the end of the $oldWarning - $warnPos += strlen( $warning ); - if ( strlen( $oldWarning ) <= $warnPos || $oldWarning[$warnPos] === "\n" ) { - return; - } - } - // If there is a warning already, append it to the existing one - $warning = "$oldWarning\n$warning"; - } - $msg = array(); - ApiResult::setContent( $msg, $warning ); - $result->addValue( 'warnings', $moduleName, - $msg, ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK ); + public function mustBePosted() { + return $this->needsToken() !== false; } /** - * If the module may only be used with a certain format module, - * it should override this method to return an instance of that formatter. - * A value of null means the default format will be used. - * @return mixed Instance of a derived class of ApiFormatBase, or null + * Returns the token type this module requires in order to execute. + * + * Modules are strongly encouraged to use the core 'csrf' type unless they + * have specialized security needs. If the token type is not one of the + * core types, you must use the ApiQueryTokensRegisterTypes hook to + * register it. + * + * Returning a non-falsey value here will cause self::getFinalParams() to + * return a required string 'token' parameter and + * self::getFinalParamDescription() to ensure there is standardized + * documentation for it. Also, self::mustBePosted() must return true when + * tokens are used. + * + * In previous versions of MediaWiki, true was a valid return value. + * Returning true will generate errors indicating that the API module needs + * updating. + * + * @return string|false */ - public function getCustomPrinter() { - return null; + public function needsToken() { + return false; } /** - * Generates help message for this module, or false if there is no description - * @return string|bool + * Fetch the salt used in the Web UI corresponding to this module. + * + * Only override this if the Web UI uses a token with a non-constant salt. + * + * @since 1.24 + * @param array $params All supplied parameters for the module + * @return string|array|null */ - public function makeHelpMsg() { - static $lnPrfx = "\n "; - - $msg = $this->getFinalDescription(); - - if ( $msg !== false ) { - - if ( !is_array( $msg ) ) { - $msg = array( - $msg - ); - } - $msg = $lnPrfx . implode( $lnPrfx, $msg ) . "\n"; - - $msg .= $this->makeHelpArrayToString( $lnPrfx, false, $this->getHelpUrls() ); - - if ( $this->isReadMode() ) { - $msg .= "\nThis module requires read rights"; - } - if ( $this->isWriteMode() ) { - $msg .= "\nThis module requires write rights"; - } - if ( $this->mustBePosted() ) { - $msg .= "\nThis module only accepts POST requests"; - } - if ( $this->isReadMode() || $this->isWriteMode() || - $this->mustBePosted() - ) { - $msg .= "\n"; - } - - // Parameters - $paramsMsg = $this->makeHelpMsgParameters(); - if ( $paramsMsg !== false ) { - $msg .= "Parameters:\n$paramsMsg"; - } + protected function getWebUITokenSalt( array $params ) { + return null; + } - $examples = $this->getExamples(); - if ( $examples ) { - if ( !is_array( $examples ) ) { - $examples = array( - $examples - ); - } - $msg .= "Example" . ( count( $examples ) > 1 ? 's' : '' ) . ":\n"; - foreach ( $examples as $k => $v ) { - if ( is_numeric( $k ) ) { - $msg .= " $v\n"; - } else { - if ( is_array( $v ) ) { - $msgExample = implode( "\n", array_map( array( $this, 'indentExampleText' ), $v ) ); - } else { - $msgExample = " $v"; - } - $msgExample .= ":"; - $msg .= wordwrap( $msgExample, 100, "\n" ) . "\n $k\n"; - } - } - } - } + /**@}*/ - return $msg; - } + /************************************************************************//** + * @name Data access methods + * @{ + */ /** - * @param string $item + * Get the name of the module being executed by this instance * @return string */ - private function indentExampleText( $item ) { - return " " . $item; + public function getModuleName() { + return $this->mModuleName; } /** - * @param string $prefix Text to split output items - * @param string $title What is being output - * @param string|array $input + * Get parameter prefix (usually two letters or an empty string). * @return string */ - protected function makeHelpArrayToString( $prefix, $title, $input ) { - if ( $input === false ) { - return ''; - } - if ( !is_array( $input ) ) { - $input = array( $input ); - } - - if ( count( $input ) > 0 ) { - if ( $title ) { - $msg = $title . ( count( $input ) > 1 ? 's' : '' ) . ":\n "; - } else { - $msg = ' '; - } - $msg .= implode( $prefix, $input ) . "\n"; - - return $msg; - } - - return ''; + public function getModulePrefix() { + return $this->mModulePrefix; } /** - * Generates the parameter descriptions for this module, to be displayed in the - * module's help. - * @return string|bool + * Get the main module + * @return ApiMain */ - public function makeHelpMsgParameters() { - $params = $this->getFinalParams( ApiBase::GET_VALUES_FOR_HELP ); - if ( $params ) { - - $paramsDescription = $this->getFinalParamDescription(); - $msg = ''; - $paramPrefix = "\n" . str_repeat( ' ', 24 ); - $descWordwrap = "\n" . str_repeat( ' ', 28 ); - foreach ( $params as $paramName => $paramSettings ) { - $desc = isset( $paramsDescription[$paramName] ) ? $paramsDescription[$paramName] : ''; - if ( is_array( $desc ) ) { - $desc = implode( $paramPrefix, $desc ); - } - - //handle shorthand - if ( !is_array( $paramSettings ) ) { - $paramSettings = array( - self::PARAM_DFLT => $paramSettings, - ); - } - - //handle missing type - if ( !isset( $paramSettings[ApiBase::PARAM_TYPE] ) ) { - $dflt = isset( $paramSettings[ApiBase::PARAM_DFLT] ) - ? $paramSettings[ApiBase::PARAM_DFLT] - : null; - if ( is_bool( $dflt ) ) { - $paramSettings[ApiBase::PARAM_TYPE] = 'boolean'; - } elseif ( is_string( $dflt ) || is_null( $dflt ) ) { - $paramSettings[ApiBase::PARAM_TYPE] = 'string'; - } elseif ( is_int( $dflt ) ) { - $paramSettings[ApiBase::PARAM_TYPE] = 'integer'; - } - } - - if ( isset( $paramSettings[self::PARAM_DEPRECATED] ) - && $paramSettings[self::PARAM_DEPRECATED] - ) { - $desc = "DEPRECATED! $desc"; - } - - if ( isset( $paramSettings[self::PARAM_REQUIRED] ) - && $paramSettings[self::PARAM_REQUIRED] - ) { - $desc .= $paramPrefix . "This parameter is required"; - } - - $type = isset( $paramSettings[self::PARAM_TYPE] ) - ? $paramSettings[self::PARAM_TYPE] - : null; - if ( isset( $type ) ) { - $hintPipeSeparated = true; - $multi = isset( $paramSettings[self::PARAM_ISMULTI] ) - ? $paramSettings[self::PARAM_ISMULTI] - : false; - if ( $multi ) { - $prompt = 'Values (separate with \'|\'): '; - } else { - $prompt = 'One value: '; - } - - if ( $type === 'submodule' ) { - $type = $this->getModuleManager()->getNames( $paramName ); - sort( $type ); - } - if ( is_array( $type ) ) { - $choices = array(); - $nothingPrompt = ''; - foreach ( $type as $t ) { - if ( $t === '' ) { - $nothingPrompt = 'Can be empty, or '; - } else { - $choices[] = $t; - } - } - $desc .= $paramPrefix . $nothingPrompt . $prompt; - $choicesstring = implode( ', ', $choices ); - $desc .= wordwrap( $choicesstring, 100, $descWordwrap ); - $hintPipeSeparated = false; - } else { - switch ( $type ) { - case 'namespace': - // Special handling because namespaces are - // type-limited, yet they are not given - $desc .= $paramPrefix . $prompt; - $desc .= wordwrap( implode( ', ', MWNamespace::getValidNamespaces() ), - 100, $descWordwrap ); - $hintPipeSeparated = false; - break; - case 'limit': - $desc .= $paramPrefix . "No more than {$paramSettings[self::PARAM_MAX]}"; - if ( isset( $paramSettings[self::PARAM_MAX2] ) ) { - $desc .= " ({$paramSettings[self::PARAM_MAX2]} for bots)"; - } - $desc .= ' allowed'; - break; - case 'integer': - $s = $multi ? 's' : ''; - $hasMin = isset( $paramSettings[self::PARAM_MIN] ); - $hasMax = isset( $paramSettings[self::PARAM_MAX] ); - if ( $hasMin || $hasMax ) { - if ( !$hasMax ) { - $intRangeStr = "The value$s must be no less than " . - "{$paramSettings[self::PARAM_MIN]}"; - } elseif ( !$hasMin ) { - $intRangeStr = "The value$s must be no more than " . - "{$paramSettings[self::PARAM_MAX]}"; - } else { - $intRangeStr = "The value$s must be between " . - "{$paramSettings[self::PARAM_MIN]} and {$paramSettings[self::PARAM_MAX]}"; - } - - $desc .= $paramPrefix . $intRangeStr; - } - break; - case 'upload': - $desc .= $paramPrefix . "Must be posted as a file upload using multipart/form-data"; - break; - } - } - - if ( $multi ) { - if ( $hintPipeSeparated ) { - $desc .= $paramPrefix . "Separate values with '|'"; - } - - $isArray = is_array( $type ); - if ( !$isArray - || $isArray && count( $type ) > self::LIMIT_SML1 - ) { - $desc .= $paramPrefix . "Maximum number of values " . - self::LIMIT_SML1 . " (" . self::LIMIT_SML2 . " for bots)"; - } - } - } - - $default = isset( $paramSettings[self::PARAM_DFLT] ) ? $paramSettings[self::PARAM_DFLT] : null; - if ( !is_null( $default ) && $default !== false ) { - $desc .= $paramPrefix . "Default: $default"; - } - - $msg .= sprintf( " %-19s - %s\n", $this->encodeParamName( $paramName ), $desc ); - } - - return $msg; - } - - return false; + public function getMain() { + return $this->mMainModule; } /** - * Returns the description string for this module - * @return string|array + * Returns true if this module is the main module ($this === $this->mMainModule), + * false otherwise. + * @return bool */ - protected function getDescription() { - return false; + public function isMain() { + return $this === $this->mMainModule; } /** - * Returns usage examples for this module. Return false if no examples are available. - * @return bool|string|array + * Get the result object + * @return ApiResult */ - protected function getExamples() { - return false; + public function getResult() { + // Main module has getResult() method overridden + // Safety - avoid infinite loop: + if ( $this->isMain() ) { + ApiBase::dieDebug( __METHOD__, 'base method was called on main module. ' ); + } + + return $this->getMain()->getResult(); } /** - * Returns an array of allowed parameters (parameter name) => (default - * value) or (parameter name) => (array with PARAM_* constants as keys) - * Don't call this function directly: use getFinalParams() to allow - * hooks to modify parameters as needed. - * - * Some derived classes may choose to handle an integer $flags parameter - * in the overriding methods. Callers of this method can pass zero or - * more OR-ed flags like GET_VALUES_FOR_HELP. - * - * @return array|bool + * Get the result data array (read-only) + * @return array */ - protected function getAllowedParams( /* $flags = 0 */ ) { - // int $flags is not declared because it causes "Strict standards" - // warning. Most derived classes do not implement it. - return false; + public function getResultData() { + return $this->getResult()->getData(); + } + + /** + * Gets a default slave database connection object + * @return DatabaseBase + */ + protected function getDB() { + if ( !isset( $this->mSlaveDB ) ) { + $this->profileDBIn(); + $this->mSlaveDB = wfGetDB( DB_SLAVE, 'api' ); + $this->profileDBOut(); + } + + return $this->mSlaveDB; } /** - * Returns an array of parameter descriptions. - * Don't call this function directly: use getFinalParamDescription() to - * allow hooks to modify descriptions as needed. - * @return array|bool False on no parameter descriptions + * Get final module description, after hooks have had a chance to tweak it as + * needed. + * + * @return array|bool False on no parameters */ - protected function getParamDescription() { - return false; + public function getFinalDescription() { + $desc = $this->getDescription(); + wfRunHooks( 'APIGetDescription', array( &$this, &$desc ) ); + + return $desc; } /** @@ -578,6 +372,14 @@ abstract class ApiBase extends ContextSource { */ public function getFinalParams( $flags = 0 ) { $params = $this->getAllowedParams( $flags ); + + if ( $this->needsToken() ) { + $params['token'] = array( + ApiBase::PARAM_TYPE => 'string', + ApiBase::PARAM_REQUIRED => true, + ); + } + wfRunHooks( 'APIGetAllowedParams', array( &$this, &$params, $flags ) ); return $params; @@ -591,56 +393,32 @@ abstract class ApiBase extends ContextSource { */ public function getFinalParamDescription() { $desc = $this->getParamDescription(); - wfRunHooks( 'APIGetParamDescription', array( &$this, &$desc ) ); - return $desc; - } + $tokenType = $this->needsToken(); + if ( $tokenType ) { + if ( !isset( $desc['token'] ) ) { + $desc['token'] = array(); + } elseif ( !is_array( $desc['token'] ) ) { + // We ignore a plain-string token, because it's probably an + // extension that is supplying the string for BC. + $desc['token'] = array(); + } + array_unshift( $desc['token'], + "A '$tokenType' token retrieved from action=query&meta=tokens" + ); + } - /** - * Formerly used to fetch a list of possible properites in the result, - * somehow organized with respect to the prop parameter that causes them to - * be returned. The specific semantics of the return value was never - * specified. Since this was never possible to be accurately updated, it - * has been removed. - * - * @deprecated since 1.24 - * @return array|bool - */ - protected function getResultProperties() { - wfDeprecated( __METHOD__, '1.24' ); - return false; - } + wfRunHooks( 'APIGetParamDescription', array( &$this, &$desc ) ); - /** - * @see self::getResultProperties() - * @deprecated since 1.24 - * @return array|bool - */ - public function getFinalResultProperties() { - wfDeprecated( __METHOD__, '1.24' ); - return array(); + return $desc; } - /** - * @see self::getResultProperties() - * @deprecated since 1.24 - */ - protected static function addTokenProperties( &$props, $tokenFunctions ) { - wfDeprecated( __METHOD__, '1.24' ); - } + /**@}*/ - /** - * Get final module description, after hooks have had a chance to tweak it as - * needed. - * - * @return array|bool False on no parameters + /************************************************************************//** + * @name Parameter handling + * @{ */ - public function getFinalDescription() { - $desc = $this->getDescription(); - wfRunHooks( 'APIGetDescription', array( &$this, &$desc ) ); - - return $desc; - } /** * This method mangles parameter name based on the prefix supplied to the constructor. @@ -718,16 +496,6 @@ abstract class ApiBase extends ContextSource { } } - /** - * @see self::getPossibleErrors() - * @deprecated since 1.24 - * @return array - */ - public function getRequireOnlyOneParameterErrorMessages( $params ) { - wfDeprecated( __METHOD__, '1.24' ); - return array(); - } - /** * Die if more than one of a certain set of parameters is set and not false. * @@ -750,16 +518,6 @@ abstract class ApiBase extends ContextSource { } } - /** - * @see self::getPossibleErrors() - * @deprecated since 1.24 - * @return array - */ - public function getRequireMaxOneParameterErrorMessages( $params ) { - wfDeprecated( __METHOD__, '1.24' ); - return array(); - } - /** * Die if none of a certain set of parameters is set and not false. * @@ -784,13 +542,13 @@ abstract class ApiBase extends ContextSource { } /** - * @see self::getPossibleErrors() - * @deprecated since 1.24 - * @return array + * Callback function used in requireOnlyOneParameter to check whether required parameters are set + * + * @param object $x Parameter to check is not null/false + * @return bool */ - public function getRequireAtLeastOneParameterErrorMessages( $params ) { - wfDeprecated( __METHOD__, '1.24' ); - return array(); + private function parameterNotEmpty( $x ) { + return !is_null( $x ) && $x !== false; } /** @@ -833,26 +591,6 @@ abstract class ApiBase extends ContextSource { return $pageObj; } - /** - * @see self::getPossibleErrors() - * @deprecated since 1.24 - * @return array - */ - public function getTitleOrPageIdErrorMessage() { - wfDeprecated( __METHOD__, '1.24' ); - return array(); - } - - /** - * Callback function used in requireOnlyOneParameter to check whether required parameters are set - * - * @param object $x Parameter to check is not null/false - * @return bool - */ - private function parameterNotEmpty( $x ) { - return !is_null( $x ) && $x !== false; - } - /** * Return true if we're to watch the page, false if not, null if no change. * @param string $watchlist Valid values: 'watch', 'unwatch', 'preferences', 'nochange' @@ -894,21 +632,6 @@ abstract class ApiBase extends ContextSource { } } - /** - * Set a watch (or unwatch) based the based on a watchlist parameter. - * @param string $watch Valid values: 'watch', 'unwatch', 'preferences', 'nochange' - * @param Title $titleObj The article's title to change - * @param string $userOption The user option to consider when $watch=preferences - */ - protected function setWatch( $watch, $titleObj, $userOption = null ) { - $value = $this->getWatchlistValue( $watch, $titleObj, $userOption ); - if ( $value === null ) { - return; - } - - WatchAction::doWatchOrUnwatch( $value, $titleObj, $this->getUser() ); - } - /** * Using the settings determine the value for the given parameter * @@ -1204,7 +927,7 @@ abstract class ApiBase extends ContextSource { * @param int $botMax Maximum value for sysops/bots * @param bool $enforceLimits Whether to enforce (die) if value is outside limits */ - function validateLimit( $paramName, &$value, $min, $max, $botMax = null, $enforceLimits = false ) { + protected function validateLimit( $paramName, &$value, $min, $max, $botMax = null, $enforceLimits = false ) { if ( !is_null( $min ) && $value < $min ) { $msg = $this->encodeParamName( $paramName ) . " may not be less than $min (set to $value)"; @@ -1242,7 +965,7 @@ abstract class ApiBase extends ContextSource { * @param string $encParamName Parameter name * @return string Validated and normalized parameter */ - function validateTimestamp( $value, $encParamName ) { + protected function validateTimestamp( $value, $encParamName ) { $unixTimestamp = wfTimestamp( TS_UNIX, $value ); if ( $unixTimestamp === false ) { $this->dieUsage( @@ -1254,6 +977,44 @@ abstract class ApiBase extends ContextSource { return wfTimestamp( TS_MW, $unixTimestamp ); } + /** + * Validate the supplied token. + * + * @since 1.24 + * @param string $token Supplied token + * @param array $params All supplied parameters for the module + * @return bool + */ + public final function validateToken( $token, array $params ) { + $tokenType = $this->needsToken(); + $salts = ApiQueryTokens::getTokenTypeSalts(); + if ( !isset( $salts[$tokenType] ) ) { + throw new MWException( + "Module '{$this->getModuleName()}' tried to use token type '$tokenType' " . + 'without registering it' + ); + } + + if ( $this->getUser()->matchEditToken( + $token, + $salts[$tokenType], + $this->getRequest() + ) ) { + return true; + } + + $webUiSalt = $this->getWebUITokenSalt( $params ); + if ( $webUiSalt !== null && $this->getUser()->matchEditToken( + $token, + $webUiSalt, + $this->getRequest() + ) ) { + return true; + } + + return false; + } + /** * Validate and normalize of parameters of type 'user' * @param string $value Parameter value @@ -1268,8 +1029,117 @@ abstract class ApiBase extends ContextSource { "baduser_{$encParamName}" ); } - - return $title->getText(); + + return $title->getText(); + } + + /**@}*/ + + /************************************************************************//** + * @name Utility methods + * @{ + */ + + /** + * Set a watch (or unwatch) based the based on a watchlist parameter. + * @param string $watch Valid values: 'watch', 'unwatch', 'preferences', 'nochange' + * @param Title $titleObj The article's title to change + * @param string $userOption The user option to consider when $watch=preferences + */ + protected function setWatch( $watch, $titleObj, $userOption = null ) { + $value = $this->getWatchlistValue( $watch, $titleObj, $userOption ); + if ( $value === null ) { + return; + } + + WatchAction::doWatchOrUnwatch( $value, $titleObj, $this->getUser() ); + } + + /** + * Truncate an array to a certain length. + * @param array $arr Array to truncate + * @param int $limit Maximum length + * @return bool True if the array was truncated, false otherwise + */ + public static function truncateArray( &$arr, $limit ) { + $modified = false; + while ( count( $arr ) > $limit ) { + array_pop( $arr ); + $modified = true; + } + + return $modified; + } + + /** + * Gets the user for whom to get the watchlist + * + * @param array $params + * @return User + */ + public function getWatchlistUser( $params ) { + if ( !is_null( $params['owner'] ) && !is_null( $params['token'] ) ) { + $user = User::newFromName( $params['owner'], false ); + if ( !( $user && $user->getId() ) ) { + $this->dieUsage( 'Specified user does not exist', 'bad_wlowner' ); + } + $token = $user->getOption( 'watchlisttoken' ); + if ( $token == '' || $token != $params['token'] ) { + $this->dieUsage( + 'Incorrect watchlist token provided -- please set a correct token in Special:Preferences', + 'bad_wltoken' + ); + } + } else { + if ( !$this->getUser()->isLoggedIn() ) { + $this->dieUsage( 'You must be logged-in to have a watchlist', 'notloggedin' ); + } + if ( !$this->getUser()->isAllowed( 'viewmywatchlist' ) ) { + $this->dieUsage( 'You don\'t have permission to view your watchlist', 'permissiondenied' ); + } + $user = $this->getUser(); + } + + return $user; + } + + /**@}*/ + + /************************************************************************//** + * @name Warning and error reporting + * @{ + */ + + /** + * Set warning section for this module. Users should monitor this + * section to notice any changes in API. Multiple calls to this + * function will result in the warning messages being separated by + * newlines + * @param string $warning Warning message + */ + public function setWarning( $warning ) { + $result = $this->getResult(); + $data = $result->getData(); + $moduleName = $this->getModuleName(); + if ( isset( $data['warnings'][$moduleName] ) ) { + // Don't add duplicate warnings + $oldWarning = $data['warnings'][$moduleName]['*']; + $warnPos = strpos( $oldWarning, $warning ); + // If $warning was found in $oldWarning, check if it starts at 0 or after "\n" + if ( $warnPos !== false && ( $warnPos === 0 || $oldWarning[$warnPos - 1] === "\n" ) ) { + // Check if $warning is followed by "\n" or the end of the $oldWarning + $warnPos += strlen( $warning ); + if ( strlen( $oldWarning ) <= $warnPos || $oldWarning[$warnPos] === "\n" ) { + return; + } + } + // If there is a warning already, append it to the existing one + $warning = "$oldWarning\n$warning"; + } + $msg = array(); + ApiResult::setContent( $msg, $warning ); + $result->addValue( 'warnings', $moduleName, + $msg, ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK ); } /** @@ -1286,22 +1156,6 @@ abstract class ApiBase extends ContextSource { $this->setWarning( $msg ); } - /** - * Truncate an array to a certain length. - * @param array $arr Array to truncate - * @param int $limit Maximum length - * @return bool True if the array was truncated, false otherwise - */ - public static function truncateArray( &$arr, $limit ) { - $modified = false; - while ( count( $arr ) > $limit ) { - array_pop( $arr ); - $modified = true; - } - - return $modified; - } - /** * Throw a UsageException, which will (if uncaught) call the main module's * error handler and die with an error message. @@ -1963,139 +1817,298 @@ abstract class ApiBase extends ContextSource { throw new MWException( "Internal error in $method: $message" ); } + /**@}*/ + + /************************************************************************//** + * @name Help message generation + * @{ + */ + /** - * Indicates if this module needs maxlag to be checked - * @return bool + * Generates help message for this module, or false if there is no description + * @return string|bool */ - public function shouldCheckMaxlag() { - return true; + public function makeHelpMsg() { + static $lnPrfx = "\n "; + + $msg = $this->getFinalDescription(); + + if ( $msg !== false ) { + + if ( !is_array( $msg ) ) { + $msg = array( + $msg + ); + } + $msg = $lnPrfx . implode( $lnPrfx, $msg ) . "\n"; + + $msg .= $this->makeHelpArrayToString( $lnPrfx, false, $this->getHelpUrls() ); + + if ( $this->isReadMode() ) { + $msg .= "\nThis module requires read rights"; + } + if ( $this->isWriteMode() ) { + $msg .= "\nThis module requires write rights"; + } + if ( $this->mustBePosted() ) { + $msg .= "\nThis module only accepts POST requests"; + } + if ( $this->isReadMode() || $this->isWriteMode() || + $this->mustBePosted() + ) { + $msg .= "\n"; + } + + // Parameters + $paramsMsg = $this->makeHelpMsgParameters(); + if ( $paramsMsg !== false ) { + $msg .= "Parameters:\n$paramsMsg"; + } + + $examples = $this->getExamples(); + if ( $examples ) { + if ( !is_array( $examples ) ) { + $examples = array( + $examples + ); + } + $msg .= "Example" . ( count( $examples ) > 1 ? 's' : '' ) . ":\n"; + foreach ( $examples as $k => $v ) { + if ( is_numeric( $k ) ) { + $msg .= " $v\n"; + } else { + if ( is_array( $v ) ) { + $msgExample = implode( "\n", array_map( array( $this, 'indentExampleText' ), $v ) ); + } else { + $msgExample = " $v"; + } + $msgExample .= ":"; + $msg .= wordwrap( $msgExample, 100, "\n" ) . "\n $k\n"; + } + } + } + } + + return $msg; } /** - * Indicates whether this module requires read rights - * @return bool + * @param string $item + * @return string */ - public function isReadMode() { - return true; + private function indentExampleText( $item ) { + return " " . $item; } /** - * Indicates whether this module requires write mode - * @return bool + * @param string $prefix Text to split output items + * @param string $title What is being output + * @param string|array $input + * @return string */ - public function isWriteMode() { - return false; + protected function makeHelpArrayToString( $prefix, $title, $input ) { + if ( $input === false ) { + return ''; + } + if ( !is_array( $input ) ) { + $input = array( $input ); + } + + if ( count( $input ) > 0 ) { + if ( $title ) { + $msg = $title . ( count( $input ) > 1 ? 's' : '' ) . ":\n "; + } else { + $msg = ' '; + } + $msg .= implode( $prefix, $input ) . "\n"; + + return $msg; + } + + return ''; } /** - * Indicates whether this module must be called with a POST request - * @return bool + * Generates the parameter descriptions for this module, to be displayed in the + * module's help. + * @return string|bool */ - public function mustBePosted() { - return false; - } + public function makeHelpMsgParameters() { + $params = $this->getFinalParams( ApiBase::GET_VALUES_FOR_HELP ); + if ( $params ) { + + $paramsDescription = $this->getFinalParamDescription(); + $msg = ''; + $paramPrefix = "\n" . str_repeat( ' ', 24 ); + $descWordwrap = "\n" . str_repeat( ' ', 28 ); + foreach ( $params as $paramName => $paramSettings ) { + $desc = isset( $paramsDescription[$paramName] ) ? $paramsDescription[$paramName] : ''; + if ( is_array( $desc ) ) { + $desc = implode( $paramPrefix, $desc ); + } + + //handle shorthand + if ( !is_array( $paramSettings ) ) { + $paramSettings = array( + self::PARAM_DFLT => $paramSettings, + ); + } + + //handle missing type + if ( !isset( $paramSettings[ApiBase::PARAM_TYPE] ) ) { + $dflt = isset( $paramSettings[ApiBase::PARAM_DFLT] ) + ? $paramSettings[ApiBase::PARAM_DFLT] + : null; + if ( is_bool( $dflt ) ) { + $paramSettings[ApiBase::PARAM_TYPE] = 'boolean'; + } elseif ( is_string( $dflt ) || is_null( $dflt ) ) { + $paramSettings[ApiBase::PARAM_TYPE] = 'string'; + } elseif ( is_int( $dflt ) ) { + $paramSettings[ApiBase::PARAM_TYPE] = 'integer'; + } + } + + if ( isset( $paramSettings[self::PARAM_DEPRECATED] ) + && $paramSettings[self::PARAM_DEPRECATED] + ) { + $desc = "DEPRECATED! $desc"; + } + + if ( isset( $paramSettings[self::PARAM_REQUIRED] ) + && $paramSettings[self::PARAM_REQUIRED] + ) { + $desc .= $paramPrefix . "This parameter is required"; + } + + $type = isset( $paramSettings[self::PARAM_TYPE] ) + ? $paramSettings[self::PARAM_TYPE] + : null; + if ( isset( $type ) ) { + $hintPipeSeparated = true; + $multi = isset( $paramSettings[self::PARAM_ISMULTI] ) + ? $paramSettings[self::PARAM_ISMULTI] + : false; + if ( $multi ) { + $prompt = 'Values (separate with \'|\'): '; + } else { + $prompt = 'One value: '; + } + + if ( $type === 'submodule' ) { + $type = $this->getModuleManager()->getNames( $paramName ); + sort( $type ); + } + if ( is_array( $type ) ) { + $choices = array(); + $nothingPrompt = ''; + foreach ( $type as $t ) { + if ( $t === '' ) { + $nothingPrompt = 'Can be empty, or '; + } else { + $choices[] = $t; + } + } + $desc .= $paramPrefix . $nothingPrompt . $prompt; + $choicesstring = implode( ', ', $choices ); + $desc .= wordwrap( $choicesstring, 100, $descWordwrap ); + $hintPipeSeparated = false; + } else { + switch ( $type ) { + case 'namespace': + // Special handling because namespaces are + // type-limited, yet they are not given + $desc .= $paramPrefix . $prompt; + $desc .= wordwrap( implode( ', ', MWNamespace::getValidNamespaces() ), + 100, $descWordwrap ); + $hintPipeSeparated = false; + break; + case 'limit': + $desc .= $paramPrefix . "No more than {$paramSettings[self::PARAM_MAX]}"; + if ( isset( $paramSettings[self::PARAM_MAX2] ) ) { + $desc .= " ({$paramSettings[self::PARAM_MAX2]} for bots)"; + } + $desc .= ' allowed'; + break; + case 'integer': + $s = $multi ? 's' : ''; + $hasMin = isset( $paramSettings[self::PARAM_MIN] ); + $hasMax = isset( $paramSettings[self::PARAM_MAX] ); + if ( $hasMin || $hasMax ) { + if ( !$hasMax ) { + $intRangeStr = "The value$s must be no less than " . + "{$paramSettings[self::PARAM_MIN]}"; + } elseif ( !$hasMin ) { + $intRangeStr = "The value$s must be no more than " . + "{$paramSettings[self::PARAM_MAX]}"; + } else { + $intRangeStr = "The value$s must be between " . + "{$paramSettings[self::PARAM_MIN]} and {$paramSettings[self::PARAM_MAX]}"; + } + + $desc .= $paramPrefix . $intRangeStr; + } + break; + case 'upload': + $desc .= $paramPrefix . "Must be posted as a file upload using multipart/form-data"; + break; + } + } - /** - * Returns whether this module requires a token to execute - * It is used to show possible errors in action=paraminfo - * see bug 25248 - * @return bool - */ - public function needsToken() { - return false; - } + if ( $multi ) { + if ( $hintPipeSeparated ) { + $desc .= $paramPrefix . "Separate values with '|'"; + } - /** - * Returns the token salt if there is one, - * '' if the module doesn't require a salt, - * else false if the module doesn't need a token - * You have also to override needsToken() - * Value is passed to User::getEditToken - * @return bool|string|array - */ - public function getTokenSalt() { - return false; - } + $isArray = is_array( $type ); + if ( !$isArray + || $isArray && count( $type ) > self::LIMIT_SML1 + ) { + $desc .= $paramPrefix . "Maximum number of values " . + self::LIMIT_SML1 . " (" . self::LIMIT_SML2 . " for bots)"; + } + } + } - /** - * Gets the user for whom to get the watchlist - * - * @param array $params - * @return User - */ - public function getWatchlistUser( $params ) { - if ( !is_null( $params['owner'] ) && !is_null( $params['token'] ) ) { - $user = User::newFromName( $params['owner'], false ); - if ( !( $user && $user->getId() ) ) { - $this->dieUsage( 'Specified user does not exist', 'bad_wlowner' ); - } - $token = $user->getOption( 'watchlisttoken' ); - if ( $token == '' || $token != $params['token'] ) { - $this->dieUsage( - 'Incorrect watchlist token provided -- please set a correct token in Special:Preferences', - 'bad_wltoken' - ); - } - } else { - if ( !$this->getUser()->isLoggedIn() ) { - $this->dieUsage( 'You must be logged-in to have a watchlist', 'notloggedin' ); - } - if ( !$this->getUser()->isAllowed( 'viewmywatchlist' ) ) { - $this->dieUsage( 'You don\'t have permission to view your watchlist', 'permissiondenied' ); + $default = isset( $paramSettings[self::PARAM_DFLT] ) ? $paramSettings[self::PARAM_DFLT] : null; + if ( !is_null( $default ) && $default !== false ) { + $desc .= $paramPrefix . "Default: $default"; + } + + $msg .= sprintf( " %-19s - %s\n", $this->encodeParamName( $paramName ), $desc ); } - $user = $this->getUser(); - } - return $user; - } + return $msg; + } - /** - * @return bool|string|array Returns a false if the module has no help URL, - * else returns a (array of) string - */ - public function getHelpUrls() { return false; } - /** - * This formerly attempted to return a list of all possible errors returned - * by the module. However, this was impossible to maintain in many cases - * since errors could come from other areas of MediaWiki and in some cases - * from arbitrary extension hooks. Since a partial list claiming to be - * comprehensive is unlikely to be useful, it was removed. - * - * @deprecated since 1.24 - * @return array - */ - public function getPossibleErrors() { - wfDeprecated( __METHOD__, '1.24' ); - return array(); - } + /**@}*/ - /** - * @see self::getPossibleErrors() - * @deprecated since 1.24 - * @return array + /************************************************************************//** + * @name Profiling + * @{ */ - public function getFinalPossibleErrors() { - wfDeprecated( __METHOD__, '1.24' ); - return array(); - } /** - * @see self::getPossibleErrors() - * @deprecated since 1.24 - * @return array + * Profiling: total module execution time */ - public function parseErrors( $errors ) { - wfDeprecated( __METHOD__, '1.24' ); - return array(); - } + private $mTimeIn = 0, $mModuleTime = 0; /** - * Profiling: total module execution time + * Get the name of the module as shown in the profiler log + * + * @param DatabaseBase|bool $db + * + * @return string */ - private $mTimeIn = 0, $mModuleTime = 0; + public function getModuleProfileName( $db = false ) { + if ( $db ) { + return 'API:' . $this->mModuleName . '-DB'; + } + + return 'API:' . $this->mModuleName; + } /** * Start module profiling @@ -2206,35 +2219,6 @@ abstract class ApiBase extends ContextSource { return $this->mDBTime; } - /** - * Gets a default slave database connection object - * @return DatabaseBase - */ - protected function getDB() { - if ( !isset( $this->mSlaveDB ) ) { - $this->profileDBIn(); - $this->mSlaveDB = wfGetDB( DB_SLAVE, 'api' ); - $this->profileDBOut(); - } - - return $this->mSlaveDB; - } - - /** - * Debugging function that prints a value and an optional backtrace - * @param mixed $value Value to print - * @param string $name Description of the printed value - * @param bool $backtrace If true, print a backtrace - */ - public static function debugPrint( $value, $name = 'unknown', $backtrace = false ) { - print "\n\n
Debugging value '$name':\n\n";
-		var_export( $value );
-		if ( $backtrace ) {
-			print "\n" . wfBacktrace();
-		}
-		print "\n
\n"; - } - /** * Write logging information for API features to a debug log, for usage * analysis. @@ -2249,4 +2233,139 @@ abstract class ApiBase extends ContextSource { ' "' . addslashes( $request->getHeader( 'User-agent' ) ) . '"'; wfDebugLog( 'api-feature-usage', $s, 'private' ); } + + /**@}*/ + + /************************************************************************//** + * @name Deprecated + * @{ + */ + + /** + * Formerly returned a string that identifies the version of the extending + * class. Typically included the class name, the svn revision, timestamp, + * and last author. Usually done with SVN's Id keyword + * + * @deprecated since 1.21, version string is no longer supported + * @return string + */ + public function getVersion() { + wfDeprecated( __METHOD__, '1.21' ); + return ''; + } + + /** + * Formerly used to fetch a list of possible properites in the result, + * somehow organized with respect to the prop parameter that causes them to + * be returned. The specific semantics of the return value was never + * specified. Since this was never possible to be accurately updated, it + * has been removed. + * + * @deprecated since 1.24 + * @return array|bool + */ + protected function getResultProperties() { + wfDeprecated( __METHOD__, '1.24' ); + return false; + } + + /** + * @see self::getResultProperties() + * @deprecated since 1.24 + * @return array|bool + */ + public function getFinalResultProperties() { + wfDeprecated( __METHOD__, '1.24' ); + return array(); + } + + /** + * @see self::getResultProperties() + * @deprecated since 1.24 + */ + protected static function addTokenProperties( &$props, $tokenFunctions ) { + wfDeprecated( __METHOD__, '1.24' ); + } + + /** + * @see self::getPossibleErrors() + * @deprecated since 1.24 + * @return array + */ + public function getRequireOnlyOneParameterErrorMessages( $params ) { + wfDeprecated( __METHOD__, '1.24' ); + return array(); + } + + /** + * @see self::getPossibleErrors() + * @deprecated since 1.24 + * @return array + */ + public function getRequireMaxOneParameterErrorMessages( $params ) { + wfDeprecated( __METHOD__, '1.24' ); + return array(); + } + + /** + * @see self::getPossibleErrors() + * @deprecated since 1.24 + * @return array + */ + public function getRequireAtLeastOneParameterErrorMessages( $params ) { + wfDeprecated( __METHOD__, '1.24' ); + return array(); + } + + /** + * @see self::getPossibleErrors() + * @deprecated since 1.24 + * @return array + */ + public function getTitleOrPageIdErrorMessage() { + wfDeprecated( __METHOD__, '1.24' ); + return array(); + } + + /** + * This formerly attempted to return a list of all possible errors returned + * by the module. However, this was impossible to maintain in many cases + * since errors could come from other areas of MediaWiki and in some cases + * from arbitrary extension hooks. Since a partial list claiming to be + * comprehensive is unlikely to be useful, it was removed. + * + * @deprecated since 1.24 + * @return array + */ + public function getPossibleErrors() { + wfDeprecated( __METHOD__, '1.24' ); + return array(); + } + + /** + * @see self::getPossibleErrors() + * @deprecated since 1.24 + * @return array + */ + public function getFinalPossibleErrors() { + wfDeprecated( __METHOD__, '1.24' ); + return array(); + } + + /** + * @see self::getPossibleErrors() + * @deprecated since 1.24 + * @return array + */ + public function parseErrors( $errors ) { + wfDeprecated( __METHOD__, '1.24' ); + return array(); + } + + /**@}*/ } + +/** + * For really cool vim folding this needs to be at the end: + * vim: foldmarker=@{,@} foldmethod=marker + */ diff --git a/includes/api/ApiBlock.php b/includes/api/ApiBlock.php index 4fa50a43d6..07f62c668c 100644 --- a/includes/api/ApiBlock.php +++ b/includes/api/ApiBlock.php @@ -152,7 +152,6 @@ class ApiBlock extends ApiBase { ApiBase::PARAM_TYPE => 'string', ApiBase::PARAM_REQUIRED => true ), - 'token' => null, 'expiry' => 'never', 'reason' => '', 'anononly' => false, @@ -169,7 +168,6 @@ class ApiBlock extends ApiBase { public function getParamDescription() { return array( 'user' => 'Username, IP address or IP range you want to block', - 'token' => 'A block token previously obtained through prop=info', 'expiry' => 'Relative expiry time, e.g. \'5 months\' or \'2 weeks\'. ' . 'If set to \'infinite\', \'indefinite\' or \'never\', the block will never expire.', 'reason' => 'Reason for block', @@ -192,17 +190,13 @@ class ApiBlock extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getExamples() { return array( - 'api.php?action=block&user=123.5.5.12&expiry=3%20days&reason=First%20strike', - 'api.php?action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail=' + 'api.php?action=block&user=123.5.5.12&expiry=3%20days&reason=First%20strike&token=123ABC', + 'api.php?action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail=&token=123ABC' ); } diff --git a/includes/api/ApiDelete.php b/includes/api/ApiDelete.php index aab0303275..abca824545 100644 --- a/includes/api/ApiDelete.php +++ b/includes/api/ApiDelete.php @@ -188,10 +188,6 @@ class ApiDelete extends ApiBase { 'pageid' => array( ApiBase::PARAM_TYPE => 'integer' ), - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'reason' => null, 'watch' => array( ApiBase::PARAM_DFLT => false, @@ -220,7 +216,6 @@ class ApiDelete extends ApiBase { return array( 'title' => "Title of the page you want to delete. Cannot be used together with {$p}pageid", 'pageid' => "Page ID of the page you want to delete. Cannot be used together with {$p}title", - 'token' => 'A delete token previously retrieved through prop=info', 'reason' => 'Reason for the deletion. If not set, an automatically generated reason will be used', 'watch' => 'Add the page to your watchlist', @@ -236,11 +231,7 @@ class ApiDelete extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getExamples() { diff --git a/includes/api/ApiEditPage.php b/includes/api/ApiEditPage.php index 9126ad3c6b..8a762714eb 100644 --- a/includes/api/ApiEditPage.php +++ b/includes/api/ApiEditPage.php @@ -513,10 +513,6 @@ class ApiEditPage extends ApiBase { ApiBase::PARAM_TYPE => 'string', ), 'text' => null, - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'summary' => null, 'minor' => false, 'notminor' => false, @@ -575,8 +571,8 @@ class ApiEditPage extends ApiBase { 'sectiontitle' => 'The title for a new section', 'text' => 'Page content', 'token' => array( - 'Edit token. You can get one of these through prop=info.', - "The token should always be sent as the last parameter, or at " . + /* Standard description is automatically prepended */ + 'The token should always be sent as the last parameter, or at ' . "least, after the {$p}text parameter" ), 'summary' @@ -589,7 +585,8 @@ class ApiEditPage extends ApiBase { 'Used to detect edit conflicts; leave unset to ignore conflicts' ), 'starttimestamp' => array( - 'Timestamp when you obtained the edit token.', + 'Timestamp when you began the editing process, e.g. when the current page content ' . + 'was loaded for editing.', 'Used to detect edit conflicts; leave unset to ignore conflicts' ), 'recreate' => 'Override any errors about the article having been deleted in the meantime', @@ -616,11 +613,7 @@ class ApiEditPage extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getExamples() { diff --git a/includes/api/ApiEmailUser.php b/includes/api/ApiEmailUser.php index 1a4d67d9ff..d35b848bc1 100644 --- a/includes/api/ApiEmailUser.php +++ b/includes/api/ApiEmailUser.php @@ -94,10 +94,6 @@ class ApiEmailUser extends ApiBase { ApiBase::PARAM_TYPE => 'string', ApiBase::PARAM_REQUIRED => true ), - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'ccme' => false, ); } @@ -107,7 +103,6 @@ class ApiEmailUser extends ApiBase { 'target' => 'User to send email to', 'subject' => 'Subject header', 'text' => 'Mail body', - 'token' => 'A token previously acquired via prop=info', 'ccme' => 'Send a copy of this mail to me', ); } @@ -117,16 +112,12 @@ class ApiEmailUser extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getExamples() { return array( - 'api.php?action=emailuser&target=WikiSysop&text=Content' + 'api.php?action=emailuser&target=WikiSysop&text=Content&token=123ABC' => 'Send an email to the User "WikiSysop" with the text "Content"', ); } diff --git a/includes/api/ApiFileRevert.php b/includes/api/ApiFileRevert.php index 58e4ff9336..f518e172e3 100644 --- a/includes/api/ApiFileRevert.php +++ b/includes/api/ApiFileRevert.php @@ -132,17 +132,12 @@ class ApiFileRevert extends ApiBase { ApiBase::PARAM_TYPE => 'string', ApiBase::PARAM_REQUIRED => true, ), - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), ); } public function getParamDescription() { return array( 'filename' => 'Target filename without the File: prefix', - 'token' => 'Edit token. You can get one of these through prop=info', 'comment' => 'Upload comment', 'archivename' => 'Archive name of the revision to revert to', ); @@ -155,11 +150,7 @@ class ApiFileRevert extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getExamples() { diff --git a/includes/api/ApiFormatBase.php b/includes/api/ApiFormatBase.php index 0e3b6123d9..9165ce8805 100644 --- a/includes/api/ApiFormatBase.php +++ b/includes/api/ApiFormatBase.php @@ -352,79 +352,3 @@ See the complete documentation, $this->setWarning( "format=$name has been deprecated. Please use format=json$fm instead." ); } } - -/** - * This printer is used to wrap an instance of the Feed class - * @ingroup API - */ -class ApiFormatFeedWrapper extends ApiFormatBase { - - public function __construct( ApiMain $main ) { - parent::__construct( $main, 'feed' ); - } - - /** - * Call this method to initialize output data. See execute() - * @param ApiResult $result - * @param object $feed An instance of one of the $wgFeedClasses classes - * @param array $feedItems Array of FeedItem objects - */ - public static function setResult( $result, $feed, $feedItems ) { - // Store output in the Result data. - // This way we can check during execution if any error has occurred - // Disable size checking for this because we can't continue - // cleanly; size checking would cause more problems than it'd - // solve - $result->addValue( null, '_feed', $feed, ApiResult::NO_SIZE_CHECK ); - $result->addValue( null, '_feeditems', $feedItems, ApiResult::NO_SIZE_CHECK ); - } - - /** - * Feed does its own headers - * - * @return null - */ - public function getMimeType() { - return null; - } - - /** - * Optimization - no need to sanitize data that will not be needed - * - * @return bool - */ - public function getNeedsRawData() { - return true; - } - - /** - * ChannelFeed doesn't give us a method to print errors in a friendly - * manner, so just punt errors to the default printer. - * @return bool - */ - public function canPrintErrors() { - return false; - } - - /** - * This class expects the result data to be in a custom format set by self::setResult() - * $result['_feed'] - an instance of one of the $wgFeedClasses classes - * $result['_feeditems'] - an array of FeedItem instances - */ - public function execute() { - $data = $this->getResultData(); - if ( isset( $data['_feed'] ) && isset( $data['_feeditems'] ) ) { - $feed = $data['_feed']; - $items = $data['_feeditems']; - - $feed->outHeader(); - foreach ( $items as & $item ) { - $feed->outItem( $item ); - } - $feed->outFooter(); - } else { - // Error has occurred, print something useful - ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' ); - } - } -} diff --git a/includes/api/ApiFormatDbg.php b/includes/api/ApiFormatDbg.php index 61ed18f464..5ec518b358 100644 --- a/includes/api/ApiFormatDbg.php +++ b/includes/api/ApiFormatDbg.php @@ -26,6 +26,7 @@ /** * API PHP's var_export() output formatter + * @deprecated since 1.24 * @ingroup API */ class ApiFormatDbg extends ApiFormatBase { diff --git a/includes/api/ApiFormatDump.php b/includes/api/ApiFormatDump.php index 7d3224604a..d4c7cab4f3 100644 --- a/includes/api/ApiFormatDump.php +++ b/includes/api/ApiFormatDump.php @@ -26,6 +26,7 @@ /** * API PHP's var_dump() output formatter + * @deprecated since 1.24 * @ingroup API */ class ApiFormatDump extends ApiFormatBase { diff --git a/includes/api/ApiFormatFeedWrapper.php b/includes/api/ApiFormatFeedWrapper.php new file mode 100644 index 0000000000..92600067f1 --- /dev/null +++ b/includes/api/ApiFormatFeedWrapper.php @@ -0,0 +1,101 @@ +@gmail.com" + * + * 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 + */ + +/** + * This printer is used to wrap an instance of the Feed class + * @ingroup API + */ +class ApiFormatFeedWrapper extends ApiFormatBase { + + public function __construct( ApiMain $main ) { + parent::__construct( $main, 'feed' ); + } + + /** + * Call this method to initialize output data. See execute() + * @param ApiResult $result + * @param object $feed An instance of one of the $wgFeedClasses classes + * @param array $feedItems Array of FeedItem objects + */ + public static function setResult( $result, $feed, $feedItems ) { + // Store output in the Result data. + // This way we can check during execution if any error has occurred + // Disable size checking for this because we can't continue + // cleanly; size checking would cause more problems than it'd + // solve + $result->addValue( null, '_feed', $feed, ApiResult::NO_SIZE_CHECK ); + $result->addValue( null, '_feeditems', $feedItems, ApiResult::NO_SIZE_CHECK ); + } + + /** + * Feed does its own headers + * + * @return null + */ + public function getMimeType() { + return null; + } + + /** + * Optimization - no need to sanitize data that will not be needed + * + * @return bool + */ + public function getNeedsRawData() { + return true; + } + + /** + * ChannelFeed doesn't give us a method to print errors in a friendly + * manner, so just punt errors to the default printer. + * @return bool + */ + public function canPrintErrors() { + return false; + } + + /** + * This class expects the result data to be in a custom format set by self::setResult() + * $result['_feed'] - an instance of one of the $wgFeedClasses classes + * $result['_feeditems'] - an array of FeedItem instances + */ + public function execute() { + $data = $this->getResultData(); + if ( isset( $data['_feed'] ) && isset( $data['_feeditems'] ) ) { + $feed = $data['_feed']; + $items = $data['_feeditems']; + + $feed->outHeader(); + foreach ( $items as & $item ) { + $feed->outItem( $item ); + } + $feed->outFooter(); + } else { + // Error has occurred, print something useful + ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' ); + } + } +} diff --git a/includes/api/ApiFormatTxt.php b/includes/api/ApiFormatTxt.php index 3de2943d46..c451ed7756 100644 --- a/includes/api/ApiFormatTxt.php +++ b/includes/api/ApiFormatTxt.php @@ -26,6 +26,7 @@ /** * API Text output formatter + * @deprecated since 1.24 * @ingroup API */ class ApiFormatTxt extends ApiFormatBase { diff --git a/includes/api/ApiFormatWddx.php b/includes/api/ApiFormatWddx.php index a08c3abc12..ba90c2603a 100644 --- a/includes/api/ApiFormatWddx.php +++ b/includes/api/ApiFormatWddx.php @@ -26,6 +26,7 @@ /** * API WDDX output formatter + * @deprecated since 1.24 * @ingroup API */ class ApiFormatWddx extends ApiFormatBase { diff --git a/includes/api/ApiFormatYaml.php b/includes/api/ApiFormatYaml.php index 9f9b0577dd..3798f89409 100644 --- a/includes/api/ApiFormatYaml.php +++ b/includes/api/ApiFormatYaml.php @@ -26,6 +26,7 @@ /** * API YAML output formatter + * @deprecated since 1.24 * @ingroup API */ class ApiFormatYaml extends ApiFormatJson { diff --git a/includes/api/ApiImageRotate.php b/includes/api/ApiImageRotate.php index 26def4410c..20396dd761 100644 --- a/includes/api/ApiImageRotate.php +++ b/includes/api/ApiImageRotate.php @@ -184,10 +184,6 @@ class ApiImageRotate extends ApiBase { ApiBase::PARAM_TYPE => array( '90', '180', '270' ), ApiBase::PARAM_REQUIRED => true ), - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'continue' => '', ); if ( $flags ) { @@ -202,7 +198,6 @@ class ApiImageRotate extends ApiBase { return $pageSet->getFinalParamDescription() + array( 'rotation' => 'Degrees to rotate image clockwise', - 'token' => 'Edit token. You can get one of these through action=tokens', 'continue' => 'When more results are available, use this to continue', ); } @@ -212,11 +207,7 @@ class ApiImageRotate extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getExamples() { diff --git a/includes/api/ApiImport.php b/includes/api/ApiImport.php index 25ce89b9e5..b11348e5b1 100644 --- a/includes/api/ApiImport.php +++ b/includes/api/ApiImport.php @@ -99,10 +99,6 @@ class ApiImport extends ApiBase { public function getAllowedParams() { return array( - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'summary' => null, 'xml' => array( ApiBase::PARAM_TYPE => 'upload', @@ -122,7 +118,6 @@ class ApiImport extends ApiBase { public function getParamDescription() { return array( - 'token' => 'Import token obtained through prop=info', 'summary' => 'Import summary', 'xml' => 'Uploaded XML file', 'interwikisource' => 'For interwiki imports: wiki to import from', @@ -143,11 +138,7 @@ class ApiImport extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getExamples() { diff --git a/includes/api/ApiMain.php b/includes/api/ApiMain.php index 3919c755ae..7f711b7cc6 100644 --- a/includes/api/ApiMain.php +++ b/includes/api/ApiMain.php @@ -736,6 +736,11 @@ class ApiMain extends ApiBase { } } + if ( $this->getParameter( 'curtimestamp' ) ) { + $result->addValue( null, 'curtimestamp', wfTimestamp( TS_ISO_8601, time() ), + ApiResult::NO_SIZE_CHECK ); + } + $params = $this->extractRequestParams(); $this->mAction = $params['action']; @@ -759,18 +764,35 @@ class ApiMain extends ApiBase { } $moduleParams = $module->extractRequestParams(); - // Die if token required, but not provided - $salt = $module->getTokenSalt(); - if ( $salt !== false ) { + // Check token, if necessary + if ( $module->needsToken() === true ) { + throw new MWException( + "Module '{$module->getModuleName()}' must be updated for the new token handling. " . + "See documentation for ApiBase::needsToken for details." + ); + } + if ( $module->needsToken() ) { + if ( !$module->mustBePosted() ) { + throw new MWException( + "Module '{$module->getModuleName()}' must require POST to use tokens." + ); + } + if ( !isset( $moduleParams['token'] ) ) { $this->dieUsageMsg( array( 'missingparam', 'token' ) ); } - if ( !$this->getUser()->matchEditToken( - $moduleParams['token'], - $salt, - $this->getContext()->getRequest() ) - ) { + if ( array_key_exists( + $module->encodeParamName( 'token' ), + $this->getRequest()->getQueryValues() + ) ) { + $this->dieUsage( + "The '{$module->encodeParamName( 'token' )}' parameter must be POSTed", + 'mustposttoken' + ); + } + + if ( !$module->validateToken( $moduleParams['token'], $moduleParams ) ) { $this->dieUsageMsg( 'sessionfailure' ); } } @@ -1112,6 +1134,7 @@ class ApiMain extends ApiBase { ), 'requestid' => null, 'servedby' => false, + 'curtimestamp' => false, 'origin' => null, ); } @@ -1139,6 +1162,7 @@ class ApiMain extends ApiBase { 'requestid' => 'Request ID to distinguish requests. This will just be output back to you', 'servedby' => 'Include the hostname that served the request in the ' . 'results. Unconditionally shown on error', + 'curtimestamp' => 'Include the current timestamp in the result.', 'origin' => array( 'When accessing the API using a cross-domain AJAX request (CORS), set this to the', 'originating domain. This must be included in any pre-flight request, and', diff --git a/includes/api/ApiMove.php b/includes/api/ApiMove.php index 602a905311..04e931d2f3 100644 --- a/includes/api/ApiMove.php +++ b/includes/api/ApiMove.php @@ -195,10 +195,6 @@ class ApiMove extends ApiBase { ApiBase::PARAM_TYPE => 'string', ApiBase::PARAM_REQUIRED => true ), - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'reason' => '', 'movetalk' => false, 'movesubpages' => false, @@ -231,7 +227,6 @@ class ApiMove extends ApiBase { 'from' => "Title of the page you want to move. Cannot be used together with {$p}fromid", 'fromid' => "Page ID of the page you want to move. Cannot be used together with {$p}from", 'to' => 'Title you want to rename the page to', - 'token' => 'A move token previously retrieved through prop=info', 'reason' => 'Reason for the move', 'movetalk' => 'Move the talk page, if it exists', 'movesubpages' => 'Move subpages, if applicable', @@ -249,11 +244,7 @@ class ApiMove extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getExamples() { diff --git a/includes/api/ApiOptions.php b/includes/api/ApiOptions.php index 8ac9b9afb0..b01dc3e239 100644 --- a/includes/api/ApiOptions.php +++ b/includes/api/ApiOptions.php @@ -135,10 +135,6 @@ class ApiOptions extends ApiBase { $optionKinds[] = 'all'; return array( - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'reset' => false, 'resetkinds' => array( ApiBase::PARAM_TYPE => $optionKinds, @@ -159,7 +155,6 @@ class ApiOptions extends ApiBase { public function getParamDescription() { return array( - 'token' => 'An options token previously obtained through the action=tokens', 'reset' => 'Resets preferences to the site defaults', 'resetkinds' => 'List of types of options to reset when the "reset" option is set', 'change' => array( 'List of changes, formatted name=value (e.g. skin=vector), ' . @@ -183,11 +178,7 @@ class ApiOptions extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getHelpUrls() { diff --git a/includes/api/ApiParamInfo.php b/includes/api/ApiParamInfo.php index f81f3d9237..067b2f5968 100644 --- a/includes/api/ApiParamInfo.php +++ b/includes/api/ApiParamInfo.php @@ -198,6 +198,10 @@ class ApiParamInfo extends ApiBase { $a['required'] = ''; } + if ( $n === 'token' && $obj->needsToken() ) { + $a['tokentype'] = $obj->needsToken(); + } + if ( isset( $p[ApiBase::PARAM_DFLT] ) ) { $type = $p[ApiBase::PARAM_TYPE]; if ( $type === 'boolean' ) { diff --git a/includes/api/ApiPatrol.php b/includes/api/ApiPatrol.php index 9690952968..8b66781a4d 100644 --- a/includes/api/ApiPatrol.php +++ b/includes/api/ApiPatrol.php @@ -77,10 +77,6 @@ class ApiPatrol extends ApiBase { public function getAllowedParams() { return array( - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'rcid' => array( ApiBase::PARAM_TYPE => 'integer' ), @@ -92,7 +88,6 @@ class ApiPatrol extends ApiBase { public function getParamDescription() { return array( - 'token' => 'Patrol token obtained from list=recentchanges', 'rcid' => 'Recentchanges ID to patrol', 'revid' => 'Revision ID to patrol', ); @@ -103,17 +98,13 @@ class ApiPatrol extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { return 'patrol'; } public function getExamples() { return array( - 'api.php?action=patrol&token=123abc&rcid=230672766', - 'api.php?action=patrol&token=123abc&revid=230672766' + 'api.php?action=patrol&token=123ABC&rcid=230672766', + 'api.php?action=patrol&token=123ABC&revid=230672766' ); } diff --git a/includes/api/ApiProtect.php b/includes/api/ApiProtect.php index 844d1ccee7..a3d12b7fc0 100644 --- a/includes/api/ApiProtect.php +++ b/includes/api/ApiProtect.php @@ -148,10 +148,6 @@ class ApiProtect extends ApiBase { 'pageid' => array( ApiBase::PARAM_TYPE => 'integer', ), - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'protections' => array( ApiBase::PARAM_ISMULTI => true, ApiBase::PARAM_REQUIRED => true, @@ -185,7 +181,6 @@ class ApiProtect extends ApiBase { return array( 'title' => "Title of the page you want to (un)protect. Cannot be used together with {$p}pageid", 'pageid' => "ID of the page you want to (un)protect. Cannot be used together with {$p}title", - 'token' => 'A protect token previously retrieved through prop=info', 'protections' => 'List of protection levels, formatted action=group (e.g. edit=sysop)', 'expiry' => array( 'Expiry timestamps. If only one timestamp is ' . @@ -208,11 +203,7 @@ class ApiProtect extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getExamples() { diff --git a/includes/api/ApiQuery.php b/includes/api/ApiQuery.php index 9ffcf0e5d3..3d6372c5e0 100644 --- a/includes/api/ApiQuery.php +++ b/includes/api/ApiQuery.php @@ -108,6 +108,7 @@ class ApiQuery extends ApiBase { 'siteinfo' => 'ApiQuerySiteinfo', 'userinfo' => 'ApiQueryUserInfo', 'filerepoinfo' => 'ApiQueryFileRepoInfo', + 'tokens' => 'ApiQueryTokens', ); /** diff --git a/includes/api/ApiQueryBase.php b/includes/api/ApiQueryBase.php index 6680316390..afb939befe 100644 --- a/includes/api/ApiQueryBase.php +++ b/includes/api/ApiQueryBase.php @@ -47,6 +47,11 @@ abstract class ApiQueryBase extends ApiBase { $this->resetQueryParams(); } + /************************************************************************//** + * @name Methods to implement + * @{ + */ + /** * Get the cache mode for the data generated by this module. Override * this in the module subclass. For possible return values and other @@ -62,6 +67,68 @@ abstract class ApiQueryBase extends ApiBase { return 'private'; } + /** + * Override this method to request extra fields from the pageSet + * using $pageSet->requestField('fieldName') + * @param ApiPageSet $pageSet + */ + public function requestExtraData( $pageSet ) { + } + + /**@}*/ + + /************************************************************************//** + * @name Data access + * @{ + */ + + /** + * Get the main Query module + * @return ApiQuery + */ + public function getQuery() { + return $this->mQueryModule; + } + + /** + * Get the Query database connection (read-only) + * @return DatabaseBase + */ + protected function getDB() { + if ( is_null( $this->mDb ) ) { + $this->mDb = $this->getQuery()->getDB(); + } + + return $this->mDb; + } + + /** + * Selects the query database connection with the given name. + * See ApiQuery::getNamedDB() for more information + * @param string $name Name to assign to the database connection + * @param int $db One of the DB_* constants + * @param array $groups Query groups + * @return DatabaseBase + */ + public function selectNamedDB( $name, $db, $groups ) { + $this->mDb = $this->getQuery()->getNamedDB( $name, $db, $groups ); + } + + /** + * Get the PageSet object to work on + * @return ApiPageSet + */ + protected function getPageSet() { + return $this->getQuery()->getPageSet(); + } + + /**@}*/ + + /************************************************************************//** + * @name Querying + * @{ + */ + /** * Blank the internal arrays with query parameters */ @@ -305,29 +372,64 @@ abstract class ApiQueryBase extends ApiBase { } /** - * Estimate the row count for the SELECT query that would be run if we - * called select() right now, and check if it's acceptable. - * @return bool True if acceptable, false otherwise + * @param string $query + * @param string $protocol + * @return null|string */ - protected function checkRowCount() { - $db = $this->getDB(); - $this->profileDBIn(); - $rowcount = $db->estimateRowCount( - $this->tables, - $this->fields, - $this->where, - __METHOD__, - $this->options - ); - $this->profileDBOut(); + public function prepareUrlQuerySearchString( $query = null, $protocol = null ) { + $db = $this->getDb(); + if ( !is_null( $query ) || $query != '' ) { + if ( is_null( $protocol ) ) { + $protocol = 'http://'; + } - if ( $rowcount > $this->getConfig()->get( 'APIMaxDBRows' ) ) { - return false; + $likeQuery = LinkFilter::makeLikeArray( $query, $protocol ); + if ( !$likeQuery ) { + $this->dieUsage( 'Invalid query', 'bad_query' ); + } + + $likeQuery = LinkFilter::keepOneWildcard( $likeQuery ); + + return 'el_index ' . $db->buildLike( $likeQuery ); + } elseif ( !is_null( $protocol ) ) { + return 'el_index ' . $db->buildLike( "$protocol", $db->anyString() ); } - return true; + return null; } + /** + * Filters hidden users (where the user doesn't have the right to view them) + * Also adds relevant block information + * + * @param bool $showBlockInfo + * @return void + */ + public function showHiddenUsersAddBlockInfo( $showBlockInfo ) { + $this->addTables( 'ipblocks' ); + $this->addJoinConds( array( + 'ipblocks' => array( 'LEFT JOIN', 'ipb_user=user_id' ), + ) ); + + $this->addFields( 'ipb_deleted' ); + + if ( $showBlockInfo ) { + $this->addFields( array( 'ipb_id', 'ipb_by', 'ipb_by_text', 'ipb_reason', 'ipb_expiry' ) ); + } + + // Don't show hidden names + if ( !$this->getUser()->isAllowed( 'hideuser' ) ) { + $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' ); + } + } + + /**@}*/ + + /************************************************************************//** + * @name Utility methods + * @{ + */ + /** * Add information (title and namespace) about a Title object to a * result array @@ -340,22 +442,6 @@ abstract class ApiQueryBase extends ApiBase { $arr[$prefix . 'title'] = $title->getPrefixedText(); } - /** - * Override this method to request extra fields from the pageSet - * using $pageSet->requestField('fieldName') - * @param ApiPageSet $pageSet - */ - public function requestExtraData( $pageSet ) { - } - - /** - * Get the main Query module - * @return ApiQuery - */ - public function getQuery() { - return $this->mQueryModule; - } - /** * Add a sub-element under the page element with the given page ID * @param int $pageId Page ID @@ -405,89 +491,21 @@ abstract class ApiQueryBase extends ApiBase { } /** - * Get the Query database connection (read-only) - * @return DatabaseBase - */ - protected function getDB() { - if ( is_null( $this->mDb ) ) { - $this->mDb = $this->getQuery()->getDB(); - } - - return $this->mDb; - } - - /** - * Selects the query database connection with the given name. - * See ApiQuery::getNamedDB() for more information - * @param string $name Name to assign to the database connection - * @param int $db One of the DB_* constants - * @param array $groups Query groups - * @return DatabaseBase - */ - public function selectNamedDB( $name, $db, $groups ) { - $this->mDb = $this->getQuery()->getNamedDB( $name, $db, $groups ); - } - - /** - * Get the PageSet object to work on - * @return ApiPageSet - */ - protected function getPageSet() { - return $this->getQuery()->getPageSet(); - } - - /** - * Convert a title to a DB key - * @param string $title Page title with spaces - * @return string Page title with underscores - */ - public function titleToKey( $title ) { - // Don't throw an error if we got an empty string - if ( trim( $title ) == '' ) { - return ''; - } - $t = Title::newFromText( $title ); - if ( !$t ) { - $this->dieUsageMsg( array( 'invalidtitle', $title ) ); - } - - return $t->getPrefixedDBkey(); - } - - /** - * The inverse of titleToKey() - * @param string $key Page title with underscores - * @return string Page title with spaces - */ - public function keyToTitle( $key ) { - // Don't throw an error if we got an empty string - if ( trim( $key ) == '' ) { - return ''; - } - $t = Title::newFromDBkey( $key ); - // This really shouldn't happen but we gotta check anyway - if ( !$t ) { - $this->dieUsageMsg( array( 'invalidtitle', $key ) ); - } - - return $t->getPrefixedText(); - } - - /** - * An alternative to titleToKey() that doesn't trim trailing spaces, and - * does not mangle the input if starts with something that looks like a - * namespace. It is advisable to pass the namespace parameter in order to - * handle per-namespace capitalization settings. - * @param string $titlePart Title part with spaces - * @param int $defaultNamespace Namespace to assume - * @return string Title part with underscores + * Convert an input title or title prefix into a dbkey. + * + * $namespace should always be specified in order to handle per-namespace + * capitalization settings. + * + * @param string $titlePart Title part + * @param int $defaultNamespace Namespace of the title + * @return string DBkey (no namespace prefix) */ - public function titlePartToKey( $titlePart, $defaultNamespace = NS_MAIN ) { - $t = Title::makeTitleSafe( $defaultNamespace, $titlePart . 'x' ); + public function titlePartToKey( $titlePart, $namespace = NS_MAIN ) { + $t = Title::makeTitleSafe( $namespace, $titlePart . 'x' ); if ( !$t ) { $this->dieUsageMsg( array( 'invalidtitle', $titlePart ) ); } - if ( $defaultNamespace != $t->getNamespace() || $t->isExternal() ) { + if ( $namespace != $t->getNamespace() || $t->isExternal() ) { // This can happen in two cases. First, if you call titlePartToKey with a title part // that looks like a namespace, but with $defaultNamespace = NS_MAIN. It would be very // difficult to handle such a case. Such cases cannot exist and are therefore treated @@ -499,15 +517,6 @@ abstract class ApiQueryBase extends ApiBase { return substr( $t->getDbKey(), 0, -1 ); } - /** - * An alternative to keyToTitle() that doesn't trim trailing spaces - * @param string $keyPart Key part with spaces - * @return string Key part with underscores - */ - public function keyPartToTitle( $keyPart ) { - return substr( $this->keyToTitle( $keyPart . 'x' ), 0, -1 ); - } - /** * Gets the personalised direction parameter description * @@ -523,58 +532,6 @@ abstract class ApiQueryBase extends ApiBase { ); } - /** - * @param string $query - * @param string $protocol - * @return null|string - */ - public function prepareUrlQuerySearchString( $query = null, $protocol = null ) { - $db = $this->getDb(); - if ( !is_null( $query ) || $query != '' ) { - if ( is_null( $protocol ) ) { - $protocol = 'http://'; - } - - $likeQuery = LinkFilter::makeLikeArray( $query, $protocol ); - if ( !$likeQuery ) { - $this->dieUsage( 'Invalid query', 'bad_query' ); - } - - $likeQuery = LinkFilter::keepOneWildcard( $likeQuery ); - - return 'el_index ' . $db->buildLike( $likeQuery ); - } elseif ( !is_null( $protocol ) ) { - return 'el_index ' . $db->buildLike( "$protocol", $db->anyString() ); - } - - return null; - } - - /** - * Filters hidden users (where the user doesn't have the right to view them) - * Also adds relevant block information - * - * @param bool $showBlockInfo - * @return void - */ - public function showHiddenUsersAddBlockInfo( $showBlockInfo ) { - $this->addTables( 'ipblocks' ); - $this->addJoinConds( array( - 'ipblocks' => array( 'LEFT JOIN', 'ipb_user=user_id' ), - ) ); - - $this->addFields( 'ipb_deleted' ); - - if ( $showBlockInfo ) { - $this->addFields( array( 'ipb_id', 'ipb_by', 'ipb_by_text', 'ipb_reason', 'ipb_expiry' ) ); - } - - // Don't show hidden names - if ( !$this->getUser()->isAllowed( 'hideuser' ) ) { - $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' ); - } - } - /** * @param string $hash * @return bool @@ -604,6 +561,94 @@ abstract class ApiQueryBase extends ApiBase { 'viewsuppressed' ); } + + /**@}*/ + + /************************************************************************//** + * @name Deprecated + * @{ + */ + + /** + * Estimate the row count for the SELECT query that would be run if we + * called select() right now, and check if it's acceptable. + * @deprecated since 1.24 + * @return bool True if acceptable, false otherwise + */ + protected function checkRowCount() { + wfDeprecated( __METHOD__, 1.24 ); + $db = $this->getDB(); + $this->profileDBIn(); + $rowcount = $db->estimateRowCount( + $this->tables, + $this->fields, + $this->where, + __METHOD__, + $this->options + ); + $this->profileDBOut(); + + if ( $rowcount > $this->getConfig()->get( 'APIMaxDBRows' ) ) { + return false; + } + + return true; + } + + /** + * Convert a title to a DB key + * @deprecated since 1.24, past uses of this were always incorrect and should + * have used self::titlePartToKey() instead + * @param string $title Page title with spaces + * @return string Page title with underscores + */ + public function titleToKey( $title ) { + wfDeprecated( __METHOD__, 1.24 ); + // Don't throw an error if we got an empty string + if ( trim( $title ) == '' ) { + return ''; + } + $t = Title::newFromText( $title ); + if ( !$t ) { + $this->dieUsageMsg( array( 'invalidtitle', $title ) ); + } + + return $t->getPrefixedDBkey(); + } + + /** + * The inverse of titleToKey() + * @deprecated since 1.24, unused and probably never needed + * @param string $key Page title with underscores + * @return string Page title with spaces + */ + public function keyToTitle( $key ) { + wfDeprecated( __METHOD__, 1.24 ); + // Don't throw an error if we got an empty string + if ( trim( $key ) == '' ) { + return ''; + } + $t = Title::newFromDBkey( $key ); + // This really shouldn't happen but we gotta check anyway + if ( !$t ) { + $this->dieUsageMsg( array( 'invalidtitle', $key ) ); + } + + return $t->getPrefixedText(); + } + + /** + * Inverse of titlePartToKey() + * @deprecated since 1.24, unused and probably never needed + * @param string $keyPart DBkey, with prefix + * @return string Key part with underscores + */ + public function keyPartToTitle( $keyPart ) { + wfDeprecated( __METHOD__, 1.24 ); + return substr( $this->keyToTitle( $keyPart . 'x' ), 0, -1 ); + } + + /**@}*/ } /** @@ -641,7 +686,7 @@ abstract class ApiQueryGeneratorBase extends ApiQueryBase { } /** - * Overrides base class to prepend 'g' to every generator parameter + * Overrides ApiBase to prepend 'g' to every generator parameter * @param string $paramName Parameter name * @return string Prefixed parameter name */ diff --git a/includes/api/ApiQueryDeletedrevs.php b/includes/api/ApiQueryDeletedrevs.php index 6b1185b882..9042696bee 100644 --- a/includes/api/ApiQueryDeletedrevs.php +++ b/includes/api/ApiQueryDeletedrevs.php @@ -61,6 +61,13 @@ class ApiQueryDeletedrevs extends ApiQueryBase { $fld_token = isset( $prop['token'] ); $fld_tags = isset( $prop['tags'] ); + if ( isset( $prop['token'] ) ) { + $p = $this->getModulePrefix(); + $this->setWarning( + "{$p}prop=token has been deprecated. Please use action=query&meta=tokens instead." + ); + } + // If we're in JSON callback mode, no tokens can be obtained if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) { $fld_token = false; @@ -493,7 +500,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase { ' len - Adds the length (bytes) of the revision', ' sha1 - Adds the SHA-1 (base 16) of the revision', ' content - Adds the content of the revision', - ' token - Gives the edit token', + ' token - DEPRECATED! Gives the edit token', ' tags - Tags for the revision', ), 'namespace' => 'Only list pages in this namespace (3)', diff --git a/includes/api/ApiQueryInfo.php b/includes/api/ApiQueryInfo.php index be1de9385b..3ac9c8ac1d 100644 --- a/includes/api/ApiQueryInfo.php +++ b/includes/api/ApiQueryInfo.php @@ -79,6 +79,7 @@ class ApiQueryInfo extends ApiQueryBase { * Get an array mapping token names to their handler functions. * The prototype for a token function is func($pageid, $title) * it should return a token or false (permission denied) + * @deprecated since 1.24 * @return array Array(tokenname => function) */ protected function getTokenFunctions() { @@ -110,10 +111,16 @@ class ApiQueryInfo extends ApiQueryBase { static protected $cachedTokens = array(); + /** + * @deprecated since 1.24 + */ public static function resetTokenCache() { ApiQueryInfo::$cachedTokens = array(); } + /** + * @deprecated since 1.24 + */ public static function getEditToken( $pageid, $title ) { // We could check for $title->userCan('edit') here, // but that's too expensive for this purpose @@ -131,6 +138,9 @@ class ApiQueryInfo extends ApiQueryBase { return ApiQueryInfo::$cachedTokens['edit']; } + /** + * @deprecated since 1.24 + */ public static function getDeleteToken( $pageid, $title ) { global $wgUser; if ( !$wgUser->isAllowed( 'delete' ) ) { @@ -145,6 +155,9 @@ class ApiQueryInfo extends ApiQueryBase { return ApiQueryInfo::$cachedTokens['delete']; } + /** + * @deprecated since 1.24 + */ public static function getProtectToken( $pageid, $title ) { global $wgUser; if ( !$wgUser->isAllowed( 'protect' ) ) { @@ -159,6 +172,9 @@ class ApiQueryInfo extends ApiQueryBase { return ApiQueryInfo::$cachedTokens['protect']; } + /** + * @deprecated since 1.24 + */ public static function getMoveToken( $pageid, $title ) { global $wgUser; if ( !$wgUser->isAllowed( 'move' ) ) { @@ -173,6 +189,9 @@ class ApiQueryInfo extends ApiQueryBase { return ApiQueryInfo::$cachedTokens['move']; } + /** + * @deprecated since 1.24 + */ public static function getBlockToken( $pageid, $title ) { global $wgUser; if ( !$wgUser->isAllowed( 'block' ) ) { @@ -187,11 +206,17 @@ class ApiQueryInfo extends ApiQueryBase { return ApiQueryInfo::$cachedTokens['block']; } + /** + * @deprecated since 1.24 + */ public static function getUnblockToken( $pageid, $title ) { // Currently, this is exactly the same as the block token return self::getBlockToken( $pageid, $title ); } + /** + * @deprecated since 1.24 + */ public static function getEmailToken( $pageid, $title ) { global $wgUser; if ( !$wgUser->canSendEmail() || $wgUser->isBlockedFromEmailUser() ) { @@ -206,6 +231,9 @@ class ApiQueryInfo extends ApiQueryBase { return ApiQueryInfo::$cachedTokens['email']; } + /** + * @deprecated since 1.24 + */ public static function getImportToken( $pageid, $title ) { global $wgUser; if ( !$wgUser->isAllowedAny( 'import', 'importupload' ) ) { @@ -220,6 +248,9 @@ class ApiQueryInfo extends ApiQueryBase { return ApiQueryInfo::$cachedTokens['import']; } + /** + * @deprecated since 1.24 + */ public static function getWatchToken( $pageid, $title ) { global $wgUser; if ( !$wgUser->isLoggedIn() ) { @@ -234,6 +265,9 @@ class ApiQueryInfo extends ApiQueryBase { return ApiQueryInfo::$cachedTokens['watch']; } + /** + * @deprecated since 1.24 + */ public static function getOptionsToken( $pageid, $title ) { global $wgUser; if ( !$wgUser->isLoggedIn() ) { @@ -784,6 +818,7 @@ class ApiQueryInfo extends ApiQueryBase { // need to be added to getCacheMode() ) ), 'token' => array( + ApiBase::PARAM_DEPRECATED => true, ApiBase::PARAM_DFLT => null, ApiBase::PARAM_ISMULTI => true, ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ) diff --git a/includes/api/ApiQueryRecentChanges.php b/includes/api/ApiQueryRecentChanges.php index 8ce6b55cba..6f0c5d3477 100644 --- a/includes/api/ApiQueryRecentChanges.php +++ b/includes/api/ApiQueryRecentChanges.php @@ -47,6 +47,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { * Get an array mapping token names to their handler functions. * The prototype for a token function is func($pageid, $title, $rc) * it should return a token or false (permission denied) + * @deprecated since 1.24 * @return array Array(tokenname => function) */ protected function getTokenFunctions() { @@ -69,6 +70,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { } /** + * @deprecated since 1.24 * @param int $pageid * @param Title $title * @param RecentChange|null $rc @@ -657,6 +659,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase { ) ), 'token' => array( + ApiBase::PARAM_DEPRECATED => true, ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ), ApiBase::PARAM_ISMULTI => true ), diff --git a/includes/api/ApiQueryRevisions.php b/includes/api/ApiQueryRevisions.php index 627de55623..da4ec19541 100644 --- a/includes/api/ApiQueryRevisions.php +++ b/includes/api/ApiQueryRevisions.php @@ -48,6 +48,7 @@ class ApiQueryRevisions extends ApiQueryBase { private $tokenFunctions; + /** @deprecated since 1.24 */ protected function getTokenFunctions() { // tokenname => function // function prototype is func($pageid, $title, $rev) @@ -72,6 +73,7 @@ class ApiQueryRevisions extends ApiQueryBase { } /** + * @deprecated since 1.24 * @param int $pageid * @param Title $title * @param Revision $rev @@ -748,6 +750,7 @@ class ApiQueryRevisions extends ApiQueryBase { 'parse' => false, 'section' => null, 'token' => array( + ApiBase::PARAM_DEPRECATED => true, ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ), ApiBase::PARAM_ISMULTI => true ), diff --git a/includes/api/ApiQuerySiteinfo.php b/includes/api/ApiQuerySiteinfo.php index f17ac29b81..04892a1ef0 100644 --- a/includes/api/ApiQuerySiteinfo.php +++ b/includes/api/ApiQuerySiteinfo.php @@ -138,6 +138,9 @@ class ApiQuerySiteinfo extends ApiQueryBase { $data['phpversion'] = PHP_VERSION; $data['phpsapi'] = PHP_SAPI; + if ( defined( 'HHVM_VERSION' ) ) { + $data['hhvmversion'] = HHVM_VERSION; + } $data['dbtype'] = $config->get( 'DBtype' ); $data['dbversion'] = $this->getDB()->getServerVersion(); diff --git a/includes/api/ApiQueryTokens.php b/includes/api/ApiQueryTokens.php new file mode 100644 index 0000000000..ba9c937712 --- /dev/null +++ b/includes/api/ApiQueryTokens.php @@ -0,0 +1,104 @@ +extractRequestParams(); + $res = array(); + + if ( $this->getMain()->getRequest()->getVal( 'callback' ) !== null ) { + $this->setWarning( 'Tokens may not be obtained when using a callback' ); + return; + } + + $salts = self::getTokenTypeSalts(); + foreach ( $params['type'] as $type ) { + $salt = $salts[$type]; + $val = $this->getUser()->getEditToken( $salt, $this->getRequest() ); + $res[$type . 'token'] = $val; + } + + $this->getResult()->addValue( 'query', $this->getModuleName(), $res ); + } + + public static function getTokenTypeSalts() { + static $salts = null; + if ( !$salts ) { + wfProfileIn( __METHOD__ ); + $salts = array( + 'csrf' => '', + 'watch' => 'watch', + 'patrol' => 'patrol', + 'rollback' => 'rollback', + 'userrights' => 'userrights', + ); + wfRunHooks( 'ApiQueryTokensRegisterTypes', array( &$salts ) ); + ksort( $salts ); + wfProfileOut( __METHOD__ ); + } + + return $salts; + } + + public function getAllowedParams() { + return array( + 'type' => array( + ApiBase::PARAM_DFLT => 'csrf', + ApiBase::PARAM_ISMULTI => true, + ApiBase::PARAM_TYPE => array_keys( self::getTokenTypeSalts() ), + ), + ); + } + + public function getParamDescription() { + return array( + 'type' => 'Type of token(s) to request' + ); + } + + public function getDescription() { + return 'Gets tokens for data-modifying actions.'; + } + + protected function getExamples() { + return array( + 'api.php?action=query&meta=tokens' => 'Retrieve a csrf token (the default)', + 'api.php?action=query&meta=tokens&type=watch|patrol' => 'Retrieve a watch token and a patrol token' + ); + } + + public function getCacheMode( $params ) { + return 'private'; + } +} diff --git a/includes/api/ApiQueryUserInfo.php b/includes/api/ApiQueryUserInfo.php index 6d70241049..8b7831cb8e 100644 --- a/includes/api/ApiQueryUserInfo.php +++ b/includes/api/ApiQueryUserInfo.php @@ -104,6 +104,12 @@ class ApiQueryUserInfo extends ApiQueryBase { $vals['options'] = $user->getOptions(); } + if ( isset( $this->prop['preferencestoken'] ) ) { + $p = $this->getModulePrefix(); + $this->setWarning( + "{$p}prop=preferencestoken has been deprecated. Please use action=query&meta=tokens instead." + ); + } if ( isset( $this->prop['preferencestoken'] ) && is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) && $user->isAllowed( 'editmyoptions' ) @@ -252,7 +258,7 @@ class ApiQueryUserInfo extends ApiQueryBase { ' rights - Lists all the rights the current user has', ' changeablegroups - Lists the groups the current user can add to and remove from', ' options - Lists all preferences the current user has set', - ' preferencestoken - Get a token to change current user\'s preferences', + ' preferencestoken - DEPRECATED! Get a token to change current user\'s preferences', ' editcount - Adds the current user\'s edit count', ' ratelimits - Lists all rate limits applying to the current user', ' realname - Adds the user\'s real name', diff --git a/includes/api/ApiQueryUsers.php b/includes/api/ApiQueryUsers.php index 84326a2950..b62d6a83e0 100644 --- a/includes/api/ApiQueryUsers.php +++ b/includes/api/ApiQueryUsers.php @@ -58,6 +58,7 @@ class ApiQueryUsers extends ApiQueryBase { * Get an array mapping token names to their handler functions. * The prototype for a token function is func($user) * it should return a token or false (permission denied) + * @deprecated since 1.24 * @return array Array of tokenname => function */ protected function getTokenFunctions() { @@ -80,6 +81,7 @@ class ApiQueryUsers extends ApiQueryBase { } /** + * @deprecated since 1.24 * @param User $user * @return string */ @@ -317,6 +319,7 @@ class ApiQueryUsers extends ApiQueryBase { ApiBase::PARAM_ISMULTI => true ), 'token' => array( + ApiBase::PARAM_DEPRECATED => true, ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ), ApiBase::PARAM_ISMULTI => true ), diff --git a/includes/api/ApiRevisionDelete.php b/includes/api/ApiRevisionDelete.php index 07a1a452b1..cbc3070422 100644 --- a/includes/api/ApiRevisionDelete.php +++ b/includes/api/ApiRevisionDelete.php @@ -195,10 +195,6 @@ class ApiRevisionDelete extends ApiBase { ApiBase::PARAM_TYPE => array( 'yes', 'no', 'nochange' ), ApiBase::PARAM_DFLT => 'nochange', ), - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'reason' => null, ); } @@ -211,7 +207,6 @@ class ApiRevisionDelete extends ApiBase { 'hide' => 'What to hide for each revision', 'show' => 'What to unhide for each revision', 'suppress' => 'Whether to suppress data from administrators as well as others', - 'token' => 'A delete token previously retrieved through action=tokens', 'reason' => 'Reason for the deletion/undeletion', ); } @@ -221,11 +216,7 @@ class ApiRevisionDelete extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getExamples() { diff --git a/includes/api/ApiRollback.php b/includes/api/ApiRollback.php index af6f9ffeef..f4d3c5414d 100644 --- a/includes/api/ApiRollback.php +++ b/includes/api/ApiRollback.php @@ -40,9 +40,19 @@ class ApiRollback extends ApiBase { private $mUser = null; public function execute() { + $user = $this->getUser(); $params = $this->extractRequestParams(); - // User and title already validated in call to getTokenSalt from Main + // WikiPage::doRollback needs a Web UI token, so get one of those if we + // validated based on an API rollback token. + $token = $params['token']; + if ( $user->matchEditToken( $token, 'rollback', $this->getRequest() ) ) { + $token = $this->getUser()->getEditToken( + $this->getWebUITokenSalt( $params ), + $this->getRequest() + ); + } + $titleObj = $this->getRbTitle( $params ); $pageObj = WikiPage::factory( $titleObj ); $summary = $params['summary']; @@ -50,10 +60,10 @@ class ApiRollback extends ApiBase { $retval = $pageObj->doRollback( $this->getRbUser( $params ), $summary, - $params['token'], + $token, $params['markbot'], $details, - $this->getUser() + $user ); if ( $retval ) { @@ -99,10 +109,6 @@ class ApiRollback extends ApiBase { ApiBase::PARAM_TYPE => 'string', ApiBase::PARAM_REQUIRED => true ), - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'summary' => '', 'markbot' => false, 'watchlist' => array( @@ -123,10 +129,11 @@ class ApiRollback extends ApiBase { return array( 'title' => "Title of the page you want to roll back. Cannot be used together with {$p}pageid", 'pageid' => "Page ID of the page you want to roll back. Cannot be used together with {$p}title", - 'user' => 'Name of the user whose edits are to be rolled back. If ' . - 'set incorrectly, you\'ll get a badtoken error.', - 'token' => 'A rollback token previously retrieved through ' . - "{$this->getModulePrefix()}prop=revisions", + 'user' => 'Name of the user whose edits are to be rolled back.', + 'token' => array( + /* Standard description automatically prepended */ + 'For compatibility, the token used in the web UI is also accepted.' + ), 'summary' => 'Custom edit summary. If empty, default summary will be used', 'markbot' => 'Mark the reverted edits and the revert as bot edits', 'watchlist' => 'Unconditionally add or remove the page from your watchlist, ' . @@ -142,12 +149,10 @@ class ApiRollback extends ApiBase { } public function needsToken() { - return true; + return 'rollback'; } - public function getTokenSalt() { - $params = $this->extractRequestParams(); - + protected function getWebUITokenSalt( array $params ) { return array( $this->getRbTitle( $params )->getPrefixedText(), $this->getRbUser( $params ) diff --git a/includes/api/ApiSetNotificationTimestamp.php b/includes/api/ApiSetNotificationTimestamp.php index 0433bc9c83..5d527fc79b 100644 --- a/includes/api/ApiSetNotificationTimestamp.php +++ b/includes/api/ApiSetNotificationTimestamp.php @@ -202,11 +202,7 @@ class ApiSetNotificationTimestamp extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getAllowedParams( $flags = 0 ) { @@ -214,7 +210,6 @@ class ApiSetNotificationTimestamp extends ApiBase { 'entirewatchlist' => array( ApiBase::PARAM_TYPE => 'boolean' ), - 'token' => null, 'timestamp' => array( ApiBase::PARAM_TYPE => 'timestamp' ), @@ -239,7 +234,6 @@ class ApiSetNotificationTimestamp extends ApiBase { 'timestamp' => 'Timestamp to which to set the notification timestamp', 'torevid' => 'Revision to set the notification timestamp to (one page only)', 'newerthanrevid' => 'Revision to set the notification timestamp newer than (one page only)', - 'token' => 'A token previously acquired via prop=info', 'continue' => 'When more results are available, use this to continue', ); } diff --git a/includes/api/ApiTokens.php b/includes/api/ApiTokens.php index 8e2ecfbe94..9287fe6e7f 100644 --- a/includes/api/ApiTokens.php +++ b/includes/api/ApiTokens.php @@ -25,11 +25,16 @@ */ /** + * @deprecated since 1.24 * @ingroup API */ class ApiTokens extends ApiBase { public function execute() { + $this->setWarning( + "action=tokens has been deprecated. Please use action=query&meta=tokens instead." + ); + $params = $this->extractRequestParams(); $res = array(); @@ -88,7 +93,10 @@ class ApiTokens extends ApiBase { } public function getDescription() { - return 'Gets tokens for data-modifying actions.'; + return array( + 'This module is deprecated in favor of action=query&meta=tokens.', + 'Gets tokens for data-modifying actions.' + ); } protected function getExamples() { diff --git a/includes/api/ApiUnblock.php b/includes/api/ApiUnblock.php index acb7ed2653..2854a82529 100644 --- a/includes/api/ApiUnblock.php +++ b/includes/api/ApiUnblock.php @@ -89,7 +89,6 @@ class ApiUnblock extends ApiBase { ApiBase::PARAM_TYPE => 'integer', ), 'user' => null, - 'token' => null, 'reason' => '', ); } @@ -102,7 +101,6 @@ class ApiUnblock extends ApiBase { "Cannot be used together with {$p}user", 'user' => "Username, IP address or IP range you want to unblock. " . "Cannot be used together with {$p}id", - 'token' => "An unblock token previously obtained through prop=info", 'reason' => 'Reason for unblock', ); } @@ -112,11 +110,7 @@ class ApiUnblock extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getExamples() { diff --git a/includes/api/ApiUndelete.php b/includes/api/ApiUndelete.php index df245cdeb3..07aad9f57d 100644 --- a/includes/api/ApiUndelete.php +++ b/includes/api/ApiUndelete.php @@ -96,10 +96,6 @@ class ApiUndelete extends ApiBase { ApiBase::PARAM_TYPE => 'string', ApiBase::PARAM_REQUIRED => true ), - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'reason' => '', 'timestamps' => array( ApiBase::PARAM_TYPE => 'timestamp', @@ -124,10 +120,6 @@ class ApiUndelete extends ApiBase { public function getParamDescription() { return array( 'title' => 'Title of the page you want to restore', - 'token' => array( - 'An undelete token previously retrieved through list=deletedrevs, or ', - 'a delete token retrieved through action=tokens.' - ), 'reason' => 'Reason for restoring', 'timestamps' => array( 'Timestamps of the revisions to restore.', @@ -151,11 +143,7 @@ class ApiUndelete extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getExamples() { diff --git a/includes/api/ApiUpload.php b/includes/api/ApiUpload.php index 368e7ce6a4..aa8fe21db0 100644 --- a/includes/api/ApiUpload.php +++ b/includes/api/ApiUpload.php @@ -688,10 +688,6 @@ class ApiUpload extends ApiBase { ApiBase::PARAM_DFLT => '' ), 'text' => null, - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'watch' => array( ApiBase::PARAM_DFLT => false, ApiBase::PARAM_DEPRECATED => true, @@ -735,7 +731,6 @@ class ApiUpload extends ApiBase { public function getParamDescription() { $params = array( 'filename' => 'Target filename', - 'token' => 'Edit token. You can get one of these through prop=info', 'comment' => 'Upload comment. Also used as the initial page text for new ' . 'files if "text" is not specified', 'text' => 'Initial page text for new files', @@ -771,24 +766,20 @@ class ApiUpload extends ApiBase { ' * Have the MediaWiki server fetch a file from a URL, using the "url" parameter', ' * Complete an earlier upload that failed due to warnings, using the "filekey" parameter', 'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when', - 'sending the "file". Also you must get and send an edit token before doing any upload stuff.' + 'sending the "file".', ); } public function needsToken() { - return true; - } - - public function getTokenSalt() { - return ''; + return 'csrf'; } public function getExamples() { return array( 'api.php?action=upload&filename=Wiki.png' . - '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png' + '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png&token=123ABC' => 'Upload from a URL', - 'api.php?action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1' + 'api.php?action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1&token=123ABC' => 'Complete an upload that failed due to warnings', ); } diff --git a/includes/api/ApiUserrights.php b/includes/api/ApiUserrights.php index 0bed859356..c3ceb3457b 100644 --- a/includes/api/ApiUserrights.php +++ b/includes/api/ApiUserrights.php @@ -35,7 +35,7 @@ class ApiUserrights extends ApiBase { public function execute() { $params = $this->extractRequestParams(); - $user = $this->getUrUser(); + $user = $this->getUrUser( $params ); $form = new UserrightsPage; $form->setContext( $this->getContext() ); @@ -53,14 +53,14 @@ class ApiUserrights extends ApiBase { } /** + * @param array $params * @return User */ - private function getUrUser() { + private function getUrUser( array $params ) { if ( $this->mUser !== null ) { return $this->mUser; } - $params = $this->extractRequestParams(); $this->requireOnlyOneParameter( $params, 'user', 'userid' ); $user = isset( $params['user'] ) ? $params['user'] : '#' . $params['userid']; @@ -101,10 +101,6 @@ class ApiUserrights extends ApiBase { ApiBase::PARAM_TYPE => User::getAllGroups(), ApiBase::PARAM_ISMULTI => true ), - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'reason' => array( ApiBase::PARAM_DFLT => '' ) @@ -117,7 +113,10 @@ class ApiUserrights extends ApiBase { 'userid' => 'User id', 'add' => 'Add the user to these groups', 'remove' => 'Remove the user from these groups', - 'token' => 'A userrights token previously retrieved through list=users', + 'token' => array( + /* Standard description automatically prepended */ + 'For compatibility, the token used in the web UI is also accepted.' + ), 'reason' => 'Reason for the change', ); } @@ -127,11 +126,11 @@ class ApiUserrights extends ApiBase { } public function needsToken() { - return true; + return 'userrights'; } - public function getTokenSalt() { - return $this->getUrUser()->getName(); + protected function getWebUITokenSalt( array $params ) { + return $this->getUrUser( $params )->getName(); } public function getExamples() { diff --git a/includes/api/ApiWatch.php b/includes/api/ApiWatch.php index 80602606c8..e6a660b36f 100644 --- a/includes/api/ApiWatch.php +++ b/includes/api/ApiWatch.php @@ -166,10 +166,6 @@ class ApiWatch extends ApiBase { } public function needsToken() { - return true; - } - - public function getTokenSalt() { return 'watch'; } @@ -181,10 +177,6 @@ class ApiWatch extends ApiBase { ), 'unwatch' => false, 'uselang' => null, - 'token' => array( - ApiBase::PARAM_TYPE => 'string', - ApiBase::PARAM_REQUIRED => true - ), 'continue' => '', ); if ( $flags ) { @@ -201,7 +193,6 @@ class ApiWatch extends ApiBase { 'title' => 'The page to (un)watch. use titles instead', 'unwatch' => 'If set the page will be unwatched rather than watched', 'uselang' => 'Language to show the message in', - 'token' => 'A token previously acquired via prop=info', 'continue' => 'When more results are available, use this to continue', ); } diff --git a/includes/content/MessageContent.php b/includes/content/MessageContent.php index abaac53f3a..edbd075ca9 100644 --- a/includes/content/MessageContent.php +++ b/includes/content/MessageContent.php @@ -106,7 +106,7 @@ class MessageContent extends AbstractContent { } /** - * @param int $maxLength Maximum length of the summary text, defaults to 250. + * @param int $maxlength Maximum length of the summary text, defaults to 250. * * @return string The summary text. * diff --git a/includes/context/RequestContext.php b/includes/context/RequestContext.php index 091e8da911..ede10fe93c 100644 --- a/includes/context/RequestContext.php +++ b/includes/context/RequestContext.php @@ -425,6 +425,7 @@ class RequestContext implements IContextSource { * Get the RequestContext object associated with the main request * and gives a warning to the log, to find places, where a context maybe is missing. * + * @param string $func * @return RequestContext * @since 1.24 */ diff --git a/includes/debug/MWDebug.php b/includes/debug/MWDebug.php index 01e0ba0bb6..fb11f368ea 100644 --- a/includes/debug/MWDebug.php +++ b/includes/debug/MWDebug.php @@ -538,7 +538,8 @@ class MWDebug { return array( 'mwVersion' => $wgVersion, - 'phpVersion' => PHP_VERSION, + 'phpEngine' => wfIsHHVM() ? 'HHVM' : 'PHP', + 'phpVersion' => wfIsHHVM() ? HHVM_VERSION : PHP_VERSION, 'gitRevision' => GitInfo::headSHA1(), 'gitBranch' => GitInfo::currentBranch(), 'gitViewUrl' => GitInfo::headViewUrl(), diff --git a/includes/filerepo/file/File.php b/includes/filerepo/file/File.php index 4fab33b9ec..ba2d4ac895 100644 --- a/includes/filerepo/file/File.php +++ b/includes/filerepo/file/File.php @@ -714,7 +714,7 @@ abstract class File { */ function canRender() { if ( !isset( $this->canRender ) ) { - $this->canRender = $this->getHandler() && $this->handler->canRender( $this ); + $this->canRender = $this->getHandler() && $this->handler->canRender( $this ) && $this->exists(); } return $this->canRender; diff --git a/includes/filerepo/file/OldLocalFile.php b/includes/filerepo/file/OldLocalFile.php index 0adcc73c62..710058fba6 100644 --- a/includes/filerepo/file/OldLocalFile.php +++ b/includes/filerepo/file/OldLocalFile.php @@ -404,4 +404,18 @@ class OldLocalFile extends LocalFile { return true; } + + /** + * If archive name is an empty string, then file does not "exist" + * + * This is the case for a couple files on Wikimedia servers where + * the old version is "lost". + */ + public function exists() { + $archiveName = $this->getArchiveName(); + if ( $archiveName === '' || !is_string( $archiveName ) ) { + return false; + } + return parent::exists(); + } } diff --git a/includes/htmlform/HTMLAutoCompleteSelectField.php b/includes/htmlform/HTMLAutoCompleteSelectField.php new file mode 100644 index 0000000000..49053628de --- /dev/null +++ b/includes/htmlform/HTMLAutoCompleteSelectField.php @@ -0,0 +1,165 @@ + false, + ); + + parent::__construct( $params ); + + if ( array_key_exists( 'autocomplete-messages', $this->mParams ) ) { + foreach ( $this->mParams['autocomplete-messages'] as $key => $value ) { + $key = $this->msg( $key )->plain(); + $this->autocomplete[$key] = strval( $value ); + } + } elseif ( array_key_exists( 'autocomplete', $this->mParams ) ) { + foreach ( $this->mParams['autocomplete'] as $key => $value ) { + $this->autocomplete[$key] = strval( $value ); + } + } + if ( !is_array( $this->autocomplete ) || !$this->autocomplete ) { + throw new MWException( 'HTMLAutoCompleteSelectField called without any autocompletions' ); + } + + $this->getOptions(); + if ( $this->mOptions && !in_array( 'other', $this->mOptions, true ) ) { + if ( isset( $params['other-message'] ) ) { + $msg = wfMessage( $params['other-message'] )->text(); + } elseif ( isset( $params['other'] ) ) { + $msg = $params['other']; + } else { + $msg = wfMessage( 'htmlform-selectorother-other' )->text(); + } + $this->mOptions[$msg] = 'other'; + } + } + + function loadDataFromRequest( $request ) { + if ( $request->getCheck( $this->mName ) ) { + $val = $request->getText( $this->mName . '-select', 'other' ); + + if ( $val === 'other' ) { + $val = $request->getText( $this->mName ); + if ( isset( $this->autocomplete[$val] ) ) { + $val = $this->autocomplete[$val]; + } + } + + return $val; + } else { + return $this->getDefault(); + } + } + + function validate( $value, $alldata ) { + $p = parent::validate( $value, $alldata ); + + if ( $p !== true ) { + return $p; + } + + $validOptions = HTMLFormField::flattenOptions( $this->getOptions() ); + + if ( in_array( strval( $value ), $validOptions, true ) ) { + return true; + } elseif ( in_array( strval( $value ), $this->autocomplete, true ) ) { + return true; + } elseif ( $this->mParams['require-match'] ) { + return $this->msg( 'htmlform-select-badoption' )->parse(); + } + + return true; + } + + function getAttributes( array $list ) { + $attribs = array( + 'type' => 'text', + 'data-autocomplete' => FormatJson::encode( array_keys( $this->autocomplete ) ), + ) + parent::getAttributes( $list ); + + if ( $this->getOptions() ) { + $attribs['data-hide-if'] = FormatJson::encode( + array( '!==', $this->mName . '-select', 'other' ) + ); + } + + return $attribs; + } + + function getInputHTML( $value ) { + $oldClass = $this->mClass; + $this->mClass = (array)$this->mClass; + + $valInSelect = false; + $ret = ''; + + if ( $this->getOptions() ) { + if ( $value !== false ) { + $value = strval( $value ); + $valInSelect = in_array( + $value, HTMLFormField::flattenOptions( $this->getOptions() ), true + ); + } + + $selected = $valInSelect ? $value : 'other'; + $select = new XmlSelect( $this->mName . '-select', $this->mID . '-select', $selected ); + $select->addOptions( $this->getOptions() ); + $select->setAttribute( 'class', 'mw-htmlform-select-or-other' ); + + if ( !empty( $this->mParams['disabled'] ) ) { + $select->setAttribute( 'disabled', 'disabled' ); + } + + if ( isset( $this->mParams['tabindex'] ) ) { + $select->setAttribute( 'tabindex', $this->mParams['tabindex'] ); + } + + $ret = $select->getHTML() . "
\n"; + + $this->mClass[] = 'mw-htmlform-hide-if'; + } + + if ( $valInSelect ) { + $value = ''; + } else { + $key = array_search( strval( $value ), $this->autocomplete, true ); + if ( $key !== false ) { + $value = $key; + } + } + + $this->mClass[] = 'mw-htmlform-autocomplete'; + $ret .= parent::getInputHTML( $valInSelect ? '' : $value ); + $this->mClass = $oldClass; + + return $ret; + } + +} diff --git a/includes/htmlform/HTMLForm.php b/includes/htmlform/HTMLForm.php index 3a455ab1d8..fc2222ad8c 100644 --- a/includes/htmlform/HTMLForm.php +++ b/includes/htmlform/HTMLForm.php @@ -120,6 +120,7 @@ class HTMLForm extends ContextSource { 'edittools' => 'HTMLEditTools', 'checkmatrix' => 'HTMLCheckMatrix', 'cloner' => 'HTMLFormFieldCloner', + 'autocompleteselect' => 'HTMLAutoCompleteSelectField', // HTMLTextField will output the correct type="" attribute automagically. // There are about four zillion other HTML5 input types, like range, but // we don't use those at the moment, so no point in adding all of them. @@ -936,7 +937,7 @@ class HTMLForm extends ContextSource { } if ( $useMediaWikiUIEverywhere ) { - if ( isset( $attrs['class' ] ) ) { + if ( isset( $attrs['class'] ) ) { $attrs['class'] .= ' mw-ui-button'; } else { $attrs['class'] = 'mw-ui-button'; diff --git a/includes/installer/Installer.php b/includes/installer/Installer.php index aca3119ca8..987925c747 100644 --- a/includes/installer/Installer.php +++ b/includes/installer/Installer.php @@ -434,7 +434,11 @@ abstract class Installer { public function doEnvironmentChecks() { // Php version has already been checked by entry scripts // Show message here for information purposes - $this->showMessage( 'config-env-php', PHP_VERSION ); + if ( wfIsHHVM() ) { + $this->showMessage( 'config-env-hhvm', HHVM_VERSION ); + } else { + $this->showMessage( 'config-env-php', PHP_VERSION ); + } $good = true; // Must go here because an old version of PCRE can prevent other checks from completing diff --git a/includes/installer/i18n/bn.json b/includes/installer/i18n/bn.json index 880e974737..1465a9638b 100644 --- a/includes/installer/i18n/bn.json +++ b/includes/installer/i18n/bn.json @@ -44,6 +44,8 @@ "config-db-install-account": "ইন্সটলের জন্য ব্যবহারকারী অ্যাকাউন্ট", "config-db-username": "ডেটাবেজের ব্যবহারকারী নাম:", "config-db-password": "ডেটাবেজের শব্দচাবি:", + "config-db-wiki-account": "সাধারণ অভিযানের জন্য ব্যবহারকারী একাউন্ট", + "config-db-prefix": "উপাত্তশালা ছক প্রিফিক্স:", "config-db-charset": "ডেটাবেজের অক্ষর সেট", "config-db-port": "ডেটাবেজ পোর্ট:", "config-db-schema": "মিডিয়াউইকির স্কিমা", @@ -51,6 +53,7 @@ "config-sqlite-dir": "এসকিউলাইট ডেটা ডিরেক্টরি:", "config-oracle-def-ts": "পূর্বনির্ধারিত টেবিলস্পেস", "config-oracle-temp-ts": "সাময়কি টেবিলস্পেস:", + "config-type-mssql": "মাইক্রোসফট এসকিউএল সার্ভার", "config-header-mysql": "মাইএসকিউএল সেটিংস", "config-header-postgres": "পোস্টগ্রেএসকিউএল সেটিংস", "config-header-sqlite": "এসকিউলাইট সেটিংস", diff --git a/includes/installer/i18n/cs.json b/includes/installer/i18n/cs.json index 0510bfcde4..eb98e32b37 100644 --- a/includes/installer/i18n/cs.json +++ b/includes/installer/i18n/cs.json @@ -314,6 +314,8 @@ "config-install-stats": "Inicializují se statistiky", "config-install-keys": "Vytvářejí se tajné klíče", "config-insecure-keys": "'''Upozornění:''' {{PLURAL:$2|Tajný klíč|Tajné klíče}} ($1) vytvořené v průběhu instalace {{PLURAL:$2|není|nejsou}} zcela {{PLURAL:$2|bezpečný|bezpečné}}. Zvažte {{PLURAL:$2|jeho|jejich}} ruční změnu.", + "config-install-updates": "Ruší se spuštění nepotřebných aktualizací", + "config-install-updates-failed": "Chyba: Vložení aktualizačních klíčů do tabulek selhalo s následující chybou: $1", "config-install-sysop": "Zakládá se uživatelský účet správce", "config-install-subscribe-fail": "Nelze se přihlásit k odběru mediawiki-announce: $1", "config-install-subscribe-notpossible": "Není nainstalován cURL a není dostupné allow_url_fopen.", diff --git a/includes/installer/i18n/de.json b/includes/installer/i18n/de.json index 532d7c1d63..284a356669 100644 --- a/includes/installer/i18n/de.json +++ b/includes/installer/i18n/de.json @@ -58,6 +58,7 @@ "config-env-good": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann installiert werden.", "config-env-bad": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann nicht installiert werden.", "config-env-php": "Die Skriptsprache „PHP“ ($1) ist installiert.", + "config-env-hhvm": "HHVM $1 ist installiert.", "config-unicode-using-utf8": "Zur Unicode-Normalisierung wird Brion Vibbers utf8_normalize.so eingesetzt.", "config-unicode-using-intl": "Zur Unicode-Normalisierung wird die [http://pecl.php.net/intl PECL-Erweiterung intl] eingesetzt.", "config-unicode-pure-php-warning": "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.\nSofern eine Website mit großer Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.", @@ -320,6 +321,8 @@ "config-install-stats": "Statistiken werden initialisiert", "config-install-keys": "Geheimschlüssel werden erstellt", "config-insecure-keys": "'''Warnung:''' {{PLURAL:$2|Der Geheimschlüssel|Die Geheimschlüssel}} $1, {{PLURAL:$2|der|die}} während des Installationsvorgangs generiert {{PLURAL:$2|wurde, ist|wurden, sind}} nicht sehr sicher. {{PLURAL:$2|Er sollte|Sie sollten}} manuell geändert werden.", + "config-install-updates": "Unnötige Aktualisierungen nicht ausführen", + "config-install-updates-failed": "Fehler: Das Einfügen von Aktualisierungsschlüssel in die Tabellen ist mit dem folgenden Fehler fehlgeschlagen: $1", "config-install-sysop": "Administratorkonto wird erstellt", "config-install-subscribe-fail": "Abonnieren von „mediawiki-announce“ ist gescheitert: $1", "config-install-subscribe-notpossible": "cURL ist nicht installiert und allow_url_fopen ist nicht verfügbar.", diff --git a/includes/installer/i18n/en.json b/includes/installer/i18n/en.json index ca328cfee5..1e1c2da7eb 100644 --- a/includes/installer/i18n/en.json +++ b/includes/installer/i18n/en.json @@ -44,6 +44,7 @@ "config-env-good": "The environment has been checked.\nYou can install MediaWiki.", "config-env-bad": "The environment has been checked.\nYou cannot install MediaWiki.", "config-env-php": "PHP $1 is installed.", + "config-env-hhvm": "HHVM $1 is installed.", "config-unicode-using-utf8": "Using Brion Vibber's utf8_normalize.so for Unicode normalization.", "config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalization.", "config-unicode-pure-php-warning": "Warning: The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].", diff --git a/includes/installer/i18n/et.json b/includes/installer/i18n/et.json index 13b61ed0b5..8fae026e6a 100644 --- a/includes/installer/i18n/et.json +++ b/includes/installer/i18n/et.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Avjoska", - "Pikne" + "Pikne", + "Boxmein" ] }, "config-information": "Teave", @@ -26,6 +27,7 @@ "config-page-upgradedoc": "Uuendamine", "config-page-existingwiki": "Olemasolev viki", "config-restart": "Jah, tee taaskäivitus", + "config-env-hhvm": "HHVM $1 on installitud.", "config-db-name": "Andmebaasi nimi:", "config-db-username": "Andmebaasi kasutajanimi:", "config-db-password": "Andmebaasi parool:", diff --git a/includes/installer/i18n/fa.json b/includes/installer/i18n/fa.json index d619cff2f6..d4fa13bb6b 100644 --- a/includes/installer/i18n/fa.json +++ b/includes/installer/i18n/fa.json @@ -6,7 +6,8 @@ "Ebraminio", "Omidh", "Pouyana", - "Reza1615" + "Reza1615", + "Alirezaaa" ] }, "config-desc": "نصب کنندهٔ ویکی‌مدیا", @@ -51,6 +52,7 @@ "config-env-good": "محیط بررسی شده‌است.\nشما می‌توانید مدیاویکی را نصب کنید.", "config-env-bad": "محیط بررسی شده‌است.\nشما نمی‌توانید مدیاویکی را نصب کنید.", "config-env-php": "پی‌اچ‌پی $1 نصب شده‌است.", + "config-env-hhvm": "HHVM $1 نصب شده‌است.", "config-unicode-using-utf8": "برای یونیکد عادی از Brion Vibber's utf8_normalize.so استفاده کنید.", "config-unicode-using-intl": "برای یونیکد عادی از [http://pecl.php.net/intl intl PECL extension] استفاده کنید.", "config-unicode-pure-php-warning": "'''هشدار:''' [http://pecl.php.net/intl intl PECL extension] برای کنترل یونیکد عادی در دسترس نیست،اجرای کاملاً آهسته به تعویق می‌افتد.\nاگر شما یک سایت پر‌ ترافیک را اجرا می‌کنید، باید کمی [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization] را بخوانید.", @@ -310,6 +312,8 @@ "config-install-stats": "شروع آمار", "config-install-keys": "تولید کلیدهای مخفی", "config-insecure-keys": "'''هشدار:''' {{PLURAL:$2|کلید امن|کلیدهای امن}} ($1) در طی نصب کاملاً ایمن {{PLURAL:$2|نیست|نیستند}}. تغییر دستی {{PLURAL:$2|آن|آنها}} را در نظر بگیرید.", + "config-install-updates": "جلوگیری از به روز رسانی‌های غیر ضروری در حال اجرا", + "config-install-updates-failed": "خطا: قراردادن کلیدهای به روز رسانی به داخل جداول با خطای روبرو مواجه شد: $1", "config-install-sysop": "ایجاد حساب کاربری مدیر", "config-install-subscribe-fail": "قادر تصدیق اعلام مدیاویکی نیست:$1", "config-install-subscribe-notpossible": "سی‌یوآر‌ال نصب نشده‌است و allow_url_fopen در دسترس نیست.", diff --git a/includes/installer/i18n/fr.json b/includes/installer/i18n/fr.json index 57d7444d4a..9fd6726e9a 100644 --- a/includes/installer/i18n/fr.json +++ b/includes/installer/i18n/fr.json @@ -66,6 +66,7 @@ "config-env-good": "L’environnement a été vérifié.\nVous pouvez installer MediaWiki.", "config-env-bad": "L’environnement a été vérifié.\nVous ne pouvez pas installer MediaWiki.", "config-env-php": "PHP $1 est installé.", + "config-env-hhvm": "HHVM $1 est installé.", "config-unicode-using-utf8": "Utilisation de utf8_normalize.so par Brion Vibber pour la normalisation Unicode.", "config-unicode-using-intl": "Utilisation de [http://pecl.php.net/intl l'extension PECL intl] pour la normalisation Unicode.", "config-unicode-pure-php-warning": "Attention : L'[http://pecl.php.net/intl extension PECL intl] n'est pas disponible pour la normalisation d’Unicode, retour à la version lente implémentée en PHP.\nSi votre site web sera très fréquenté, vous devriez lire ceci : [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ''Unicode normalization''] (en anglais).", @@ -328,6 +329,8 @@ "config-install-stats": "Initialisation des statistiques", "config-install-keys": "Génération de la clé secrète", "config-insecure-keys": "'''Avertissement''' : {{PLURAL:$2|Une clé de sécurité générée ($1) pendant l'installation n'est pas complètement sécuritaire. Envisagez de la modifier manuellement.|Des clés de sécurité générées ($1) pendant l'installation ne sont pas complètement sécuritaires. Envisagez de les modifier manuellement.}}", + "config-install-updates": "Empêcher l’exécution des mises à jour inutiles", + "config-install-updates-failed": "Erreur : L’insertion de clés modifiées dans les tables a échoué avec l’erreur suivante : $1", "config-install-sysop": "Création du compte administrateur", "config-install-subscribe-fail": "Impossible de s'abonner à mediawiki-announce : $1", "config-install-subscribe-notpossible": "cURL n’est pas installé et allow_url_fopen n’est pas disponible.", diff --git a/includes/installer/i18n/he.json b/includes/installer/i18n/he.json index 57e3c94c78..dd14e6335c 100644 --- a/includes/installer/i18n/he.json +++ b/includes/installer/i18n/he.json @@ -51,6 +51,7 @@ "config-env-good": "הסביבה שלכם נבדקה.\nאפשר להתקין מדיה־ויקי.", "config-env-bad": "הסביבה שלכם נבדקה.\nאי־אפשר להתקין מדיה־ויקי.", "config-env-php": "מותקנת PHP $1.", + "config-env-hhvm": "מותקנת HHVM $1.", "config-unicode-using-utf8": "משתמש ב־utf8_normalize.so של בריון ויבר לנרמול יוניקוד.", "config-unicode-using-intl": "משתמש ב[http://pecl.php.net/intl הרחבת intl PECL] לנרמול יוניקוד.", "config-unicode-pure-php-warning": "'''אזהרה''': [http://pecl.php.net/intl הרחבת intl PECL] אינה זמינה לטיפול בנרמול יוניקוד. משתמש ביישום PHP טהור ואטי יותר.\nאם זהו אתר בעל תעבורה גבוהה, כדאי לקרוא את המסמך הבא: [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].", @@ -310,6 +311,8 @@ "config-install-stats": "אתחול סטטיסטיקות", "config-install-keys": "יצירת מפתחות סודיים", "config-insecure-keys": "'''אזהרה''': {{PLURAL:$2|מפתח|מפתחות}} אבטחה ($1) {{PLURAL:$2|שנוצר|שנוצרו}} במהלך ההתקנה {{PLURAL:$2|אינו בטוח|אינם בטוחים}} מספיק. מומלץ לשקול לשנות {{PLURAL:$2|אותו|אותם}} ידנית.", + "config-install-updates": "למנוע הרצת עדכונים מיותרים", + "config-install-updates-failed": "שגיאה: הוספת מפתחות עדכון לטבלאות נכשל עם השגיאה הבאה: $1", "config-install-sysop": "יצירת חשבון מפעיל", "config-install-subscribe-fail": "הרישום ל־mediawiki-announce לא הצליח: $1", "config-install-subscribe-notpossible": "cURL אינה מותקנת ו־allow_url_fopen אינה זמינה.", diff --git a/includes/installer/i18n/lb.json b/includes/installer/i18n/lb.json index 994144200f..030e0c19de 100644 --- a/includes/installer/i18n/lb.json +++ b/includes/installer/i18n/lb.json @@ -100,6 +100,7 @@ "config-missing-db-name": "Dir musst e Wäert fir \"{{int:config-db-name}}\" aginn", "config-missing-db-host": "Dir musst e Wäert fir \"{{int:config-db-host}}\" aginn.", "config-missing-db-server-oracle": "Dir musst e Wäert fir \"{{int:config-db-host-oracle}}\" aginn", + "config-connection-error": "$1.\n\nKuckt den Numm vum Server, de Benotzernumm an d'Passwuert no a probéiert et nach eng Kéier.", "config-db-sys-user-exists-oracle": "De Benotzerkont \"$1\" gëtt et schonn. SYSDBA kann nëmme benotzt gi fir en neie Benotzerkont opzemaachen.", "config-postgres-old": "PostgreSQL $1 oder eng méi nei Versioun gëtt gebraucht, Dir hutt $2.", "config-mssql-old": "Microsoft SQL Server $1 oder eng méi rezent Versioun gëtt gebraucht. Dir hutt d'Versioun $2.", diff --git a/includes/installer/i18n/mk.json b/includes/installer/i18n/mk.json index 74359b2476..8784521e16 100644 --- a/includes/installer/i18n/mk.json +++ b/includes/installer/i18n/mk.json @@ -47,6 +47,7 @@ "config-env-good": "Околината е проверена.\nМожете да го воспоставите МедијаВики.", "config-env-bad": "Околината е проверена.\nНе можете да го воспоставите МедијаВики.", "config-env-php": "PHP $1 е воспоставен.", + "config-env-hhvm": "HHVM $1 е воспоставен.", "config-unicode-using-utf8": "Со utf8_normalize.so за уникодна нормализација од Брајон Вибер (Brion Vibber).", "config-unicode-using-intl": "Со додатокот [http://pecl.php.net/intl intl PECL] за уникодна нормализација.", "config-unicode-pure-php-warning": "'''Предупредување''': Додатокот [http://pecl.php.net/intl intl PECL] не е достапен за врши уникодна нормализација, враќајќи се на бавна примена на чист PHP.\n\nАко имате високопрометно мрежно место, тогаш ќе треба да прочитате повеќе за [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations уникодната нормализација].", @@ -309,6 +310,8 @@ "config-install-stats": "Ги подготвувам статистиките", "config-install-keys": "Создавање на тајни клучеви", "config-insecure-keys": "'''Предупредување:''' {{PLURAL:$2|Безбедносниот клуч $1 создаден во текот на воспоставката не е сосем безбеден|Безбедносните клучеви $1 создадени во текот на воспоставката не се сосем безбедни}}. Ви препорачуваме да {{PLURAL:$2|го|ги}} смените рачно.", + "config-install-updates": "Спречи вршење на непотребни поднови", + "config-install-updates-failed": "Грешка: Вметнувањето на подновни клучеви во табелите не успеа, со следнава грешка: $1", "config-install-sysop": "Создавање на администраторска корисничка сметка", "config-install-subscribe-fail": "Не можам да ве претплатам на известувањето mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL не е воспоставен, а allow_url_fopen не е достапно.", diff --git a/includes/installer/i18n/ms.json b/includes/installer/i18n/ms.json index 057410b65e..f9bcb9134b 100644 --- a/includes/installer/i18n/ms.json +++ b/includes/installer/i18n/ms.json @@ -135,9 +135,15 @@ "config-install-step-done": "siap", "config-install-step-failed": "gagal", "config-install-user-alreadyexists": "Pengguna \"$1\" sudah wujud", + "config-install-tables": "Mencipta jadual", "config-install-tables-exist": "Amaran: Nampaknya sudah terdapat jadual MediaWiki. Penciptaan dilangkau.", + "config-install-interwiki": "Mengisi jadual antara wiki lalai", + "config-install-interwiki-list": "Fail interwiki.list tidak dapat dibaca.", "config-install-interwiki-exists": "Amaran: Jadual antara wiki nampaknya sudah ada entri. Senarai asali dilangkau.", + "config-install-keys": "Menjana kunci-kunci rahsia", "config-insecure-keys": "Amaran: {{PLURAL:$2|Kunci keselamatan|Kunci-kunci keselamatan}} ($1) yang dihasilkan sewaktu pemasangan itu {{PLURAL:$2|adalah}} tidak selamat sepenuhnya. Oleh itu, {{PLURAL:$2|ia}} wajar ditukar secara manual.", + "config-install-sysop": "Membuka akaun pengguna pentadbir", + "config-install-mainpage": "Mewujudkan laman utama dengan kandungan lalai", "config-help": "bantuan", "mainpagetext": "'''MediaWiki telah berjaya dipasang.'''", "mainpagedocfooter": "Sila rujuk [//meta.wikimedia.org/wiki/Help:Contents Panduan Penggunaan] untuk maklumat mengenai penggunaan perisian wiki ini.\n\n== Permulaan ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Senarai tetapan konfigurasi]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Soalan Lazim MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Senarai surat keluaran MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Terjemahkan MediaWiki ke dalam bahasa anda]" diff --git a/includes/installer/i18n/pt.json b/includes/installer/i18n/pt.json index a827fac31d..835cf9b410 100644 --- a/includes/installer/i18n/pt.json +++ b/includes/installer/i18n/pt.json @@ -59,6 +59,7 @@ "config-env-good": "O ambiente foi verificado.\nPode instalar o MediaWiki.", "config-env-bad": "O ambiente foi verificado.\nNão pode instalar o MediaWiki.", "config-env-php": "O PHP $1 está instalado.", + "config-env-hhvm": "HHVM $1 está instalado.", "config-unicode-using-utf8": "A usar o utf8_normalize.so, por Brion Vibber, para a normalização Unicode.", "config-unicode-using-intl": "A usar a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.", "config-unicode-pure-php-warning": "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode. Irá recorrer-se à implementação em PHP puro, que é mais lenta.\nSe o seu site tem alto volume de tráfego, devia informar-se um pouco sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/pt normalização Unicode].", diff --git a/includes/installer/i18n/qqq.json b/includes/installer/i18n/qqq.json index 410b1d5195..c879843aff 100644 --- a/includes/installer/i18n/qqq.json +++ b/includes/installer/i18n/qqq.json @@ -62,6 +62,7 @@ "config-env-good": "See also:\n* {{msg-mw|Config-env-bad}}", "config-env-bad": "See also:\n* {{msg-mw|Config-env-good}}", "config-env-php": "Parameters:\n* $1 - the version of PHP that has been installed\nSee also:\n* {{msg-mw|config-env-php-toolow}}", + "config-env-hhvm": "Parameters:\n* $1 - the version of HHVM that has been installed", "config-unicode-using-utf8": "Status message in the MediaWiki installer environment checks.", "config-unicode-using-intl": "Status message in the MediaWiki installer environment checks.", "config-unicode-pure-php-warning": "PECL is the name of a group producing standard pieces of software for PHP, and intl is the name of their library handling some aspects of internationalization.", @@ -300,7 +301,7 @@ "config-install-step-done": "{{Identical|Done}}", "config-install-step-failed": "{{Identical|Failed}}", "config-install-extensions": "Notice shown to the user during the install about progress when extensions are being installed.", - "config-install-database": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}", + "config-install-database": "Message indicates the database is being set up\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-updates}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}", "config-install-schema": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}", "config-install-pg-schema-not-exist": "Error message shown to users picking PostgreSQL.", "config-install-pg-schema-failed": "Parameters:\n* $1 = database user name (usernames in the database are unrelated to wiki user names)\n* $2 =", @@ -315,7 +316,7 @@ "config-install-user-grant-failed": "Parameters:\n* $1 is the database username for which granting rights failed\n* $2 is the error message", "config-install-user-missing": "Used as PostgreSQL error message. Parameters:\n* $1 - database username\nSee also:\n* {{msg-mw|Config-install-user-missing-create}}", "config-install-user-missing-create": "Used as PostgreSQL error message. Parameters:\n* $1 - database username\nSee also:\n* {{msg-mw|Config-install-user-missing}}", - "config-install-tables": "Message indicates that the tables are being created\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}", + "config-install-tables": "Message indicates that the tables are being created\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-updates}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}", "config-install-tables-exist": "Error notice during the installation saying that the database already seems set up for MediaWiki, so it's continuing without taking that step.", "config-install-tables-failed": "Used as PostgreSQL error message. Parameters:\n* $1 - detailed error message", "config-install-interwiki": "Message indicates that the interwikitables are being populated\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}", @@ -324,7 +325,7 @@ "config-install-stats": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}", "config-install-keys": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}", "config-insecure-keys": "Parameters:\n* $1 - A list of names of the secret keys that were generated.\n* $2 - the number of items in the list $1, to be used with PLURAL.", - "config-install-updates": "Message indicating that the updatelog table is filled with keys of updates that won't be run when running database updates.", + "config-install-updates": "Message indicating that the updatelog table is filled with keys of updates that won't be run when running database updates.\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-updates}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}", "config-install-updates-failed": "Used as error message. Parameters:\n* $1 - detailed error message", "config-install-sysop": "Message indicates that the administrator user account is being created\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}", "config-install-subscribe-fail": "{{doc-important|\"[[m:mail:mediawiki-announce|mediawiki-announce]]\" is the name of a mailing list and should not be translated.}}\nA message displayed if the MediaWiki installer encounters an error making a request to lists.wikimedia.org which hosts the mailing list.\n* $1 - the HTTP error encountered, reproduced as is (English string)", diff --git a/includes/installer/i18n/ru.json b/includes/installer/i18n/ru.json index b5441c12bc..ccd88e8005 100644 --- a/includes/installer/i18n/ru.json +++ b/includes/installer/i18n/ru.json @@ -324,6 +324,8 @@ "config-install-stats": "Статистика инициализации", "config-install-keys": "Создание секретных ключей", "config-insecure-keys": "'''Предупреждение.''' {{PLURAL:$2|1=Ключ безопасности $1, созданный во время установки, недостаточно надёжен|Ключи безопасности $1, созданные во время установки, недостаточно надёжны}}. Рассмотрите возможность {{PLURAL:$2|1=его|их}} изменения вручную.", + "config-install-updates": "Предотвращение запуска ненужных обновлений", + "config-install-updates-failed": "Ошибка: Вставка ключей обновления в таблицы завершилась со следующей ошибкой: $1", "config-install-sysop": "Создание учётной записи администратора", "config-install-subscribe-fail": "Не удаётся подписаться на mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL не установлен и не доступна опция allow_url_fopen.", diff --git a/includes/installer/i18n/sv.json b/includes/installer/i18n/sv.json index b46902c4fa..2bdfb10072 100644 --- a/includes/installer/i18n/sv.json +++ b/includes/installer/i18n/sv.json @@ -51,6 +51,7 @@ "config-env-good": "Miljön har kontrollerats.\nDu kan installera MediaWiki.", "config-env-bad": "Miljön har kontrollerats.\nDu kan inte installera MediaWiki.", "config-env-php": "PHP $1 är installerat.", + "config-env-hhvm": "HHVM $1 är installerat.", "config-unicode-using-utf8": "Använder Brion Vibbers utf8_normalize.so för Unicode-normalisering.", "config-unicode-using-intl": "Använder [http://pecl.php.net/intl intl PECL-tillägget] för Unicode-normalisering.", "config-unicode-pure-php-warning": "'''Varning:''' [http://pecl.php.net/intl intl PECL-tillägget] är inte tillgängligt för att hantera Unicode-normalisering, faller tillbaka till en långsamt implementering i ren PHP.\nOm du driver en högtrafikerad webbplats bör du läsa lite om [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].", @@ -310,6 +311,8 @@ "config-install-stats": "Initierar statistik", "config-install-keys": "Genererar hemliga nycklar", "config-insecure-keys": "'''Varning:''' {{PLURAL:$2|En säkerhetsnyckel|Säkerhetsnycklar}} ($1) som generades under installationen är inte helt {{PLURAL:$2|säker|säkra}} . Överväg att ändra {{PLURAL:$2|den|dem}} manuellt.", + "config-install-updates": "Förhindra att onödiga uppdateringar körs", + "config-install-updates-failed": "Fel: Infogning av uppdateringsnycklar i tabeller misslyckades med följande fel:$1", "config-install-sysop": "Skapar administratörskonto", "config-install-subscribe-fail": "Det gick inte att prenumerera på mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL är inte installerad och allow_url_fopen är inte tillgänglig.", diff --git a/includes/installer/i18n/uk.json b/includes/installer/i18n/uk.json index 001a0f8d32..9eee1a7fd6 100644 --- a/includes/installer/i18n/uk.json +++ b/includes/installer/i18n/uk.json @@ -314,6 +314,7 @@ "config-install-stats": "Ініціалізація статистики", "config-install-keys": "Генерація секретних ключів", "config-insecure-keys": "'''Увага:''' {{PLURAL:$2|1=Секретний ключ|Секретні ключі}} ($1), {{PLURAL:$2|1=згенерований в процесі встановлення, недостатньо надійний|згенеровані в процесі встановлення, недостатньо надійні}}. Розгляньте можливість {{PLURAL:$2|1=його|їх}} заміни вручну.", + "config-install-updates-failed": "Помилка: Вставка оновленних ключів в таблиці не вдалося через таку помилку:$1", "config-install-sysop": "Створення облікового запису адміністратора", "config-install-subscribe-fail": "Не можливо підписатись на mediawiki-announce: $1", "config-install-subscribe-notpossible": "cURL не встановлено і опція allow_url_fopen не доступна.", diff --git a/includes/installer/i18n/zh-hans.json b/includes/installer/i18n/zh-hans.json index b297a19057..a4b64bceeb 100644 --- a/includes/installer/i18n/zh-hans.json +++ b/includes/installer/i18n/zh-hans.json @@ -325,6 +325,8 @@ "config-install-stats": "初始化统计", "config-install-keys": "生成密钥中", "config-insecure-keys": "'''警告''':在安装过程中生成的{{PLURAL:$2|安全密钥|安全密钥}}($1){{PLURAL:$2|并|并}}不一定安全。请考虑手动更改{{PLURAL:$2|它|它们}}。", + "config-install-updates": "防止运行不需要的更新", + "config-install-updates-failed": "错误:表格中插入更新关键字失败并出现如下错误:$1", "config-install-sysop": "正在创建管理员用户帐号", "config-install-subscribe-fail": "无法订阅mediawiki-announce:$1", "config-install-subscribe-notpossible": "没有安装cURL,allow_url_fopen也不可用。", diff --git a/includes/objectcache/MemcachedBagOStuff.php b/includes/objectcache/MemcachedBagOStuff.php index 54a464de00..53edcddec9 100644 --- a/includes/objectcache/MemcachedBagOStuff.php +++ b/includes/objectcache/MemcachedBagOStuff.php @@ -154,7 +154,7 @@ class MemcachedBagOStuff extends BagOStuff { if ( $expiry > 2592000 && $expiry < 1000000000 ) { $expiry = 2592000; } - return (int) $expiry; + return (int)$expiry; } /** diff --git a/includes/page/ImagePage.php b/includes/page/ImagePage.php index 380252f58a..5811f63185 100644 --- a/includes/page/ImagePage.php +++ b/includes/page/ImagePage.php @@ -1329,6 +1329,9 @@ class ImageHistoryList extends ContextSource { $url = $lang->userTimeAndDate( $timestamp, $user ); } $row .= '' . $url . ''; + } elseif ( !$file->exists() ) { + $row .= '' + . $lang->userTimeAndDate( $timestamp, $user ) . ''; } else { $url = $iscur ? $this->current->getUrl() : $this->current->getArchiveUrl( $img ); $row .= Xml::element( diff --git a/includes/resourceloader/ResourceLoaderLESSFunctions.php b/includes/resourceloader/ResourceLoaderLESSFunctions.php index eb1461f36f..987b9025c2 100644 --- a/includes/resourceloader/ResourceLoaderLESSFunctions.php +++ b/includes/resourceloader/ResourceLoaderLESSFunctions.php @@ -34,6 +34,8 @@ class ResourceLoaderLESSFunctions { * background-image: url(@url) !ie; * } * @endcode + * @param array $frame + * @param lessc $less */ public static function embeddable( $frame, $less ) { $base = pathinfo( $less->parser->sourceName, PATHINFO_DIRNAME ); @@ -54,6 +56,9 @@ class ResourceLoaderLESSFunctions { * background-image: embed('../images/button-bg.png'); * } * @endcode + * @param array $frame + * @param lessc $less + * @return string */ public static function embed( $frame, $less ) { $base = pathinfo( $less->parser->sourceName, PATHINFO_DIRNAME ); diff --git a/includes/resourceloader/ResourceLoaderStartUpModule.php b/includes/resourceloader/ResourceLoaderStartUpModule.php index 78fe45c72e..e455ef11ef 100644 --- a/includes/resourceloader/ResourceLoaderStartUpModule.php +++ b/includes/resourceloader/ResourceLoaderStartUpModule.php @@ -207,6 +207,13 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { continue; } + if ( $module->isRaw() ) { + // Don't register "raw" modules (like 'jquery' and 'mediawiki') client-side because + // depending on them is illegal anyway and would only lead to them being reloaded + // causing any state to be lost (like jQuery plugins, mw.config etc.) + continue; + } + // getModifiedTime() is supposed to return a UNIX timestamp, but it doesn't always // seem to do that, and custom implementations might forget. Coerce it to TS_UNIX $moduleMtime = wfTimestamp( TS_UNIX, $module->getModifiedTime( $context ) ); diff --git a/includes/resourceloader/ResourceLoaderUserTokensModule.php b/includes/resourceloader/ResourceLoaderUserTokensModule.php index e652422398..668467ca8c 100644 --- a/includes/resourceloader/ResourceLoaderUserTokensModule.php +++ b/includes/resourceloader/ResourceLoaderUserTokensModule.php @@ -44,8 +44,8 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule { return array( 'editToken' => $wgUser->getEditToken(), - 'patrolToken' => ApiQueryRecentChanges::getPatrolToken( null, null ), - 'watchToken' => ApiQueryInfo::getWatchToken( null, null ), + 'patrolToken' => $wgUser->getEditToken( 'patrol' ), + 'watchToken' => $wgUser->getEditToken( 'watch' ), ); } diff --git a/includes/search/SearchHighlighter.php b/includes/search/SearchHighlighter.php index 0bd6ca83d5..c3c3a8f86f 100644 --- a/includes/search/SearchHighlighter.php +++ b/includes/search/SearchHighlighter.php @@ -560,15 +560,15 @@ class SearchHighlighter { * Returns the first few lines of the text * * @param string $text - * @param int $contextlines max number of returned lines - * @param int $contextchars average number of characters per line + * @param int $contextlines Max number of returned lines + * @param int $contextchars Average number of characters per line * @return string */ - public function highlightNone( $text, $contextlines, $contextchars) { + public function highlightNone( $text, $contextlines, $contextchars ) { $match = array(); $text = ltrim( $text ) . "\n"; // make sure the preg_match may find the last line - $text = str_replace( "\n\n", "\n", $text); // remove empty lines - preg_match( "/^(.*\n){0,$contextlines}/", $text , $match); + $text = str_replace( "\n\n", "\n", $text ); // remove empty lines + preg_match( "/^(.*\n){0,$contextlines}/", $text, $match ); $text = htmlspecialchars( substr( trim( $match[0] ), 0, $contextlines * $contextchars ) ); // trim and limit to max number of chars return str_replace( "\n", '
', $text ); } diff --git a/includes/skins/SkinFactory.php b/includes/skins/SkinFactory.php index 64480884b7..fb40857740 100644 --- a/includes/skins/SkinFactory.php +++ b/includes/skins/SkinFactory.php @@ -70,7 +70,7 @@ class SkinFactory { * to be, but doing so would change the case of i18n message keys). * @param string $displayName For backwards-compatibility with old skin loading system. This is * the text used as skin's human-readable name when the 'skinname-' message is not - * available. It should be the same as the skin name provided in $wgExtensionCredits. + * available. It should be the same as the skin name provided in $wgExtensionCredits. * @param callable $callback Callback that takes the skin name as an argument * @throws InvalidArgumentException If an invalid callback is provided */ diff --git a/includes/skins/SkinTemplate.php b/includes/skins/SkinTemplate.php index b6077b3395..93845aa24f 100644 --- a/includes/skins/SkinTemplate.php +++ b/includes/skins/SkinTemplate.php @@ -271,7 +271,7 @@ class SkinTemplate extends Skin { wfProfileIn( __METHOD__ . '-init' ); $this->initPage( $out ); wfProfileOut( __METHOD__ . '-init' ); - $tpl = $this->prepareQuickTemplate(); + $tpl = $this->prepareQuickTemplate( $out ); // execute template wfProfileIn( __METHOD__ . '-execute' ); $res = $tpl->execute(); diff --git a/includes/specials/SpecialImport.php b/includes/specials/SpecialImport.php index 1b45315fc4..eab4784cef 100644 --- a/includes/specials/SpecialImport.php +++ b/includes/specials/SpecialImport.php @@ -327,7 +327,7 @@ class SpecialImport extends SpecialPage { foreach ( $importSources as $key => $value ) { if ( is_int( $key ) ) { $key = $value; - } else if ( $value !== $key ) { + } elseif ( $value !== $key ) { $needSubprojectField = true; } diff --git a/includes/specials/SpecialMergeHistory.php b/includes/specials/SpecialMergeHistory.php index 6efc12b391..492eb3b5b1 100644 --- a/includes/specials/SpecialMergeHistory.php +++ b/includes/specials/SpecialMergeHistory.php @@ -496,7 +496,7 @@ class MergeHistoryPager extends ReverseChronologicalPager { /** @var array */ public $mConds; - function __construct( $form, $conds = array(), $source, $dest ) { + function __construct( $form, $conds, $source, $dest ) { $this->mForm = $form; $this->mConds = $conds; $this->title = $source; @@ -550,7 +550,7 @@ class MergeHistoryPager extends ReverseChronologicalPager { function getQueryInfo() { $conds = $this->mConds; $conds['rev_page'] = $this->articleID; - $conds[] = "rev_timestamp < {$this->maxTimestamp}"; + $conds[] = "rev_timestamp < " . $this->mDb->addQuotes( $this->maxTimestamp ); return array( 'tables' => array( 'revision', 'page', 'user' ), diff --git a/includes/specials/SpecialRunJobs.php b/includes/specials/SpecialRunJobs.php index 54f224acec..d4a06eb5ca 100644 --- a/includes/specials/SpecialRunJobs.php +++ b/includes/specials/SpecialRunJobs.php @@ -61,7 +61,7 @@ class SpecialRunJobs extends UnlistedSpecialPage { $squery = $params; unset( $squery['signature'] ); - $cSig = self::getQuerySignature( $squery ); // correct signature + $cSig = self::getQuerySignature( $squery, $this->getConfig()->get( 'SecretKey' ) ); // correct signature $rSig = $params['signature']; // provided signature $verified = is_string( $rSig ) && hash_equals( $cSig, $rSig ); @@ -102,12 +102,11 @@ class SpecialRunJobs extends UnlistedSpecialPage { /** * @param array $query + * @param string $secretKey * @return string */ - public static function getQuerySignature( array $query ) { - global $wgSecretKey; - + public static function getQuerySignature( array $query, $secretKey ) { ksort( $query ); // stable order - return hash_hmac( 'sha1', wfArrayToCgi( $query ), $wgSecretKey ); + return hash_hmac( 'sha1', wfArrayToCgi( $query ), $secretKey ); } } diff --git a/includes/specials/SpecialSearch.php b/includes/specials/SpecialSearch.php index 59d65bc73b..3407476494 100644 --- a/includes/specials/SpecialSearch.php +++ b/includes/specials/SpecialSearch.php @@ -367,10 +367,8 @@ class SpecialSearch extends SpecialPage { $this->limit + $this->offset >= $totalRes ); } - wfRunHooks( 'SpecialSearchResults', array( $term, &$titleMatches, &$textMatches ) ); - } else { - wfRunHooks( 'SpecialSearchNoResults', array( $term ) ); } + wfRunHooks( 'SpecialSearchResults', array( $term, &$titleMatches, &$textMatches ) ); $out->parserOptions()->setEditSection( false ); if ( $titleMatches ) { diff --git a/includes/specials/SpecialVersion.php b/includes/specials/SpecialVersion.php index 4b1abacd85..97c770483f 100644 --- a/includes/specials/SpecialVersion.php +++ b/includes/specials/SpecialVersion.php @@ -212,9 +212,11 @@ class SpecialVersion extends SpecialPage { // wikimarkup can be used. $software = array(); $software['[https://www.mediawiki.org/ MediaWiki]'] = self::getVersionLinked(); - $phpKey = wfIsHHVM() ? '[http://hhvm.com/ HHVM]' : - '[https://php.net/ PHP]'; - $software[$phpKey] = PHP_VERSION . " (" . PHP_SAPI . ")"; + if ( wfIsHHVM() ) { + $software['[http://hhvm.com/ HHVM]'] = HHVM_VERSION . " (" . PHP_SAPI . ")"; + } else { + $software['[https://php.net/ PHP]'] = PHP_VERSION . " (" . PHP_SAPI . ")"; + } $software[$dbr->getSoftwareLink()] = $dbr->getServerInfo(); // Allow a hook to add/remove items. diff --git a/includes/utils/UIDGenerator.php b/includes/utils/UIDGenerator.php index dffe2423b3..5346afa6a9 100644 --- a/includes/utils/UIDGenerator.php +++ b/includes/utils/UIDGenerator.php @@ -117,7 +117,7 @@ class UIDGenerator { } /** - * @param array $info (UIDGenerator::millitime(), clock sequence) + * @param array $info (UIDGenerator::millitime(), counter, clock sequence) * @return string 88 bits */ protected function getTimestampedID88( array $info ) { diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php index abca495e4f..eae77fb494 100644 --- a/languages/LanguageConverter.php +++ b/languages/LanguageConverter.php @@ -1102,6 +1102,7 @@ class LanguageConverter { /** * Get the cached separator pattern for ConverterRule::parseRules() + * @return string */ function getVarSeparatorPattern() { if ( is_null( $this->mVarSeparatorPattern ) ) { diff --git a/languages/i18n/ar.json b/languages/i18n/ar.json index 845377290d..f8946b355c 100644 --- a/languages/i18n/ar.json +++ b/languages/i18n/ar.json @@ -255,6 +255,7 @@ "jumptonavigation": "تصفح", "jumptosearch": "ابحث", "view-pool-error": "عذرا، الخواديم منهكة حاليا.\nيحاول مستخدمون كثر الوصول إلى هذه الصفحة.\nمن فضلك تمهّل قليلا قبل محاولة الوصول إلى هذه الصفحة مجددا.\n\n$1", + "generic-pool-error": "عذرا، الخوادم مشغولة حاليا لوجود مستخدمون كثر يطلبون عرض هذا المورد. انتظر قليلا وأعد المحاولة.", "pool-timeout": "انتهت مهلة القفل", "pool-queuefull": "الطابور ملآن", "pool-errorunknown": "خطأ غير معروف", @@ -299,6 +300,9 @@ "hidetoc": "أخف", "collapsible-collapse": "أخف", "collapsible-expand": "أظهر", + "confirmable-confirm": "أأنت متأكد{{GENDER:$1||ة}}؟", + "confirmable-yes": "نعم", + "confirmable-no": "لا", "thisisdeleted": "عرض أو استرجاع $1؟", "viewdeleted": "عرض $1؟", "restorelink": "{{PLURAL:$1|$1 تعديل محذوف|تعديلا واحدا محذوفا|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلا محذوفا|$1 تعديل محذوف}}", @@ -385,7 +389,7 @@ "invalidtitle-knownnamespace": "عنوان غير صالح في النطاق «$2» مع نص «$3»", "invalidtitle-unknownnamespace": "عنوان غير صالح ذو نطاق غير معروف رقم $1 ونص «$2»", "exception-nologin": "غير مسجل الدخول", - "exception-nologin-text": "الرجاء [[Special:Userlogin|تسجيل الدخول]] لتتمكن من الوصول لهذه الصفحة أو أداء هذا الإجراء.", + "exception-nologin-text": "سجل الدخول للتمكن من عرض هذه الصفحة أو إجراء هذا الفعل.", "exception-nologin-text-manual": "الرجاء $1 لتتمكن من الوصول لهذه الصفحة أو أداء هذا الإجراء.", "virus-badscanner": "ضبط سيء: ماسح فيروسات غير معروف: ''$1''", "virus-scanfailed": "فشل المسح (كود $1)", @@ -696,9 +700,10 @@ "parser-template-recursion-depth-warning": "تم تجاوز حد عمق فرد القوالب ($1)", "language-converter-depth-warning": "تم تخطي حد عمق محول اللغة ($1)", "node-count-exceeded-category": "تجاوزات تعداد العقد", - "node-count-exceeded-warning": "تجاوزت هذه الصفحة تعداد العقد", + "node-count-exceeded-category-desc": "الصفحة تتجاوز الحد الأقصى للعقد البرمجية.", + "node-count-exceeded-warning": "الصفحة تجاوزت الحد الأقصى للعقد البرمجية.", "expansion-depth-exceeded-category": "تجاوزات عمق التوسيع", - "expansion-depth-exceeded-category-desc": "هذا تصنيف للصفحات التي تتجاوز عمق التوسيع.", + "expansion-depth-exceeded-category-desc": "الصفحة تجاوزت الحد الأقصى لعمق التوسيع.", "expansion-depth-exceeded-warning": "الصفحة تجاوزت عمق التوسيع", "parser-unstrip-loop-warning": "حلقة معراة تم الكشف عنها", "parser-unstrip-recursion-limit": "تعدى حد العودية Unstrip ($1)", @@ -717,7 +722,7 @@ "currentrev": "المراجعة الحالية", "currentrev-asof": "المراجعة الحالية بتاريخ $1", "revisionasof": "مراجعة $1", - "revision-info": "مراجعة $1 بواسطة $2", + "revision-info": "نسخة $1 للمستخدم {{GENDER:$6|$2}}$7", "previousrevision": "→ مراجعة أقدم", "nextrevision": "مراجعة أحدث ←", "currentrevisionlink": "المراجعة الحالية", @@ -742,6 +747,7 @@ "rev-deleted-event": "(فعل السجل تمت إزالته)", "rev-deleted-user-contribs": "[اسم المستخدم أو عنوان الأيبي تمت إزالته - التعديل مخفي من المساهمات]", "rev-deleted-text-permission": "'''حُذِفت''' مراجعة هذه الصفحة.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].", + "rev-suppressed-text-permission": "هذه النسخة قد أخفيت ([{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} تفاصيل].)", "rev-deleted-text-unhide": "'''حُذِفت''' مراجعة الصفحة هذه.\nيمكن العثور على تفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].\nمازال بإمكانك [$1 رؤية هذه المراجعة] إذا أردت المتابعة.", "rev-suppressed-text-unhide": "'''أُخفيت''' مراجعة الصفحة هذه.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].\nبإمكانك [$1 رؤية هذه المراجعة] إذا أردت المتابعة.", "rev-deleted-text-view": "'''حُذِفت''' مراجعة هذه الصفحة.\nيمكنك رؤيتها؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].", @@ -760,6 +766,7 @@ "revdelete-no-file": "الملف المحدد غير موجود.", "revdelete-show-file-confirm": "هل أنت متأكد أنك تريد رؤية مراجعة محذوفة للملف \"$1\" بتاريخ $2 الساعة $3؟", "revdelete-show-file-submit": "نعم", + "revdelete-selected-text": "{{PLURAL:$1|نسخة مختارة|نسخ مختارة}} ل[[:$2]]:", "logdelete-selected": "{{PLURAL:$1|حدث السجل المختار|أحداث السجل المختارة}}:", "revdelete-text-others": "سيتمكن الإداريون الآخرون على {{SITENAME}} من الوصول إلى المحتوى المخفي وإلغاء حذفه مجددا من خلال ذات الواجهة ما لم تطبق قيود إضافية.", "revdelete-confirm": "الإداريون الآخرون في {{SITENAME}} سيظل بإمكانهم رؤية المحتوى المخفي ويمكنهم استرجاعه مجددا من خلال هذه الواجهة نفسها، مالم يتم وضع قيود إضافية.\nمن فضلك أكد أنك تنوي فعل هذا، وأنك تفهم العواقب، وأنك تفعل هذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].", @@ -870,7 +877,7 @@ "searchrelated": "مرتبطة", "searchall": "الكل", "showingresults": "معروض بالأسفل {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} بدءا من رقم '''$2'''.", - "showingresultsinrange": "معروض بالأسفل حتى {{PLURAL:$1|1 نتيجة|$1 نتائج}} في النطاق #$2 إلى #$3.", + "showingresultsinrange": "بالأسفل {{PLURAL:$1|نتيجة واحدة|$1 نتائج|$1 نتيجة}} في النطاق من $2 إلى $3.", "showingresultsheader": "{{PLURAL:$5|النتيجة '''$1''' من'''$3'''|النتائج '''$1 - $2''' من'''$3'''}} ل'''$4'''", "search-nonefound": "لا توجد نتائج تطابق الاستعلام.", "powersearch-legend": "بحث متقدم", @@ -942,7 +949,7 @@ "prefs-files": "ملفات", "prefs-custom-css": "CSS مخصص", "prefs-custom-js": "جافاسكربت مخصص", - "prefs-common-css-js": "CSS أو جافاسكربت مشتركة لجميع المظاهر:", + "prefs-common-css-js": "سي إس إس وجافاسكربت مشترك لجميع المظاهر:", "prefs-reset-intro": "يمكنك استخدام هذه الصفحة لإعادة تفضيلاتك للحالة الافتراضية للموقع.\nلن تستطيع استرجاع الحالة السابقة.", "prefs-emailconfirm-label": "تأكيد البريد الإلكتروني:", "youremail": "البريد:", @@ -2051,7 +2058,7 @@ "movepagetalktext": "صفحة النقاش المرفقة سيتم نقلها كذلك، '''إلا في حالة''':\n* توجد صفحة نقاش غير فارغة تحت العنوان الجديد، أو\n* قمت بإزالة اختيار الصندوق بالأسفل.\n\nوفي هذه الحالات، يجب عليك نقل أو دمج محتويات الصفحة يدويا، إذا رغب في ذلك.", "movearticle": "انقل الصفحة:", "moveuserpage-warning": "'''تحذير: أنت على وشك نقل صفحة مستخدم. من فضلك لاحظ أن الصفحة وحدها سوف تنقل وأن المستخدم لن يعاد تسميته.'''", - "movecategorypage-warning": "أنت على وشك نقل صفحة التصنيف إلى عنوان جديد؛ لن تنقل الصفحات المندرجة تحت التصنيف إلى العنوان الجديد.", + "movecategorypage-warning": "تحذير: أنت على وشك نقل صفحة التصنيف إلى عنوان جديد؛ لن تنقل الصفحات المندرجة تحت التصنيف إلى العنوان الجديد.", "movenologintext": "يجب أن تكون مستخدماً مسجلاً وأن [[Special:UserLogin|تسجل دخولك]] لكي تنقل صفحة.", "movenotallowed": "أنت لا تمتلك الصلاحية لنقل الصفحات.", "movenotallowedfile": "أنت لا تمتلك الصلاحية لنقل الملفات.", @@ -3184,20 +3191,20 @@ "duration-centuries": "{{PLURAL:$1||قرن واحد|قرنان|$1 قرون|$1 قرنًا|$1 قرن}}", "duration-millennia": "{{PLURAL:$1||ألفية واحدة|ألفيتان|$1 ألفيات|$1 ألفية}}", "rotate-comment": "تدوير الصورة {{PLURAL:$1||درجة واحدة|درجتان|$1 درجات|$1 درجة}} باتجاه عقارب الساعة", - "limitreport-title": "محلل سمات البيانات:", + "limitreport-title": "بيانات تحليلية", "limitreport-cputime": "زمن المعالجة المستغرق", "limitreport-cputime-value": "{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوان|$1 ثانية}}", "limitreport-walltime": "الزمن الحقيقي المستغرق", "limitreport-walltime-value": "{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوان|$1 ثانية}}", - "limitreport-ppvisitednodes": "زار المعالج عقدة إحصاء", - "limitreport-ppgeneratednodes": "أحدث المعالج عقدة إحصاء", - "limitreport-postexpandincludesize": "بعد توسيع المساحة الشاملة", + "limitreport-ppvisitednodes": "عدد العقد المعالجة", + "limitreport-ppgeneratednodes": "عقد زارها المعالج المسبق", + "limitreport-postexpandincludesize": "حجم تضمين التوسيعات", "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|بايت}}", - "limitreport-templateargumentsize": "حجم نقاش القالب", + "limitreport-templateargumentsize": "حجم معطيات القوالب", "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|بايت}}", - "limitreport-expansiondepth": "أكثر عمق توسعي", - "limitreport-expensivefunctioncount": "تحليل إحصاء وظيفة مكلف", - "expandtemplates": "فرد القوالب", + "limitreport-expansiondepth": "أعمق التوسيعات", + "limitreport-expensivefunctioncount": "دوال محللة مكلفة", + "expandtemplates": "توسعة قالب", "expand_templates_intro": "تتعامل هذه الصفحة الخاصة مع نصوص الويكي وتقوم بفرد كل القوالب الموجودة به.\nوتقوم أيضا بفرد دوال القوالب مثل\n{{#language:…}} and variables like {{CURRENTDAY}}. حقيقةً، تقوم التعامل مع كل ما بين الأقواس المزدوجة.", "expand_templates_title": "عنوان صفحة هذا النص، لأجل معالجة {{FULLPAGENAME}} إلخ.:", "expand_templates_input": "النص المدخل:", diff --git a/languages/i18n/as.json b/languages/i18n/as.json index 4c63928183..2bd1869791 100644 --- a/languages/i18n/as.json +++ b/languages/i18n/as.json @@ -268,6 +268,8 @@ "hidetoc": "দেখুৱাব নালাগে", "collapsible-collapse": "সংকোচন", "collapsible-expand": "বহলাওক", + "confirmable-yes": "হয়", + "confirmable-no": "নহয়", "thisisdeleted": "$1 চাওক বা সলনি কৰক?", "viewdeleted": "$1 চাওক?", "restorelink": "{{PLURAL:$1| এটা বিলুপ্ত সম্পাদনা|$1 টা বিলুপ্ত সম্পাদনা}}", @@ -352,7 +354,7 @@ "invalidtitle-knownnamespace": "নামস্থান \"$2\" আৰু পাঠ্য \"$3\" থকা অবৈধ শিৰোনাম", "invalidtitle-unknownnamespace": "অজ্ঞাত নামস্থান সংখ্যা $1 আৰু পাঠ্য \"$2\" থকা অবৈধ শিৰোনাম", "exception-nologin": "প্ৰৱেশ কৰা নাই", - "exception-nologin-text": "এই কামৰ বাবে আপুনি [[Special:Userlogin|লগ্‌ ইন]] কৰাটো বাধ্যতামূলক।", + "exception-nologin-text": "এই কামৰ বাবে আপুনি লগ্‌ ইন কৰাটো বাধ্যতামূলক।", "exception-nologin-text-manual": "এই কামৰ বাবে অনুগ্ৰহ কৰি $1 কৰক।", "virus-badscanner": "ভুল কনফিগাৰেচন: অজ্ঞাত ভাইৰাছ স্কেনাৰ: ''$1''", "virus-scanfailed": "স্কেন অসফল (কোড $1)", @@ -439,7 +441,7 @@ "noemail": "\"$1\" সদস্যজনৰ কোনো ই-মেইল ঠিকনা সঞ্চিত কৰা নাই।", "noemailcreate": "আপুনি এটা সঠিক ই-মেইল ঠিকনা দিব লাগিব", "passwordsent": "\"$1\" ৰ ই-মেইল ঠিকনাত নতুন গুপ্তশব্দ এটা পঠোৱা হৈছে। অনুগ্ৰহ কৰি সেয়া পোৱাৰ পাছত পুনৰ প্ৰৱেশ কৰক।", - "blocked-mailpassword": "আপোনাৰ আইপি ঠিকনাৰ পৰা সম্পাদনা কৰা বাৰণ কৰা হৈছে, এনে অৱস্থাত দুৰ্ব্যৱহাৰ ৰোধ কৰিবলৈ গুপ্তশব্দ পুনঃউদ্ধাৰ কৰা সুবিধাতো বাতিল কৰা হৈছে।", + "blocked-mailpassword": "আপোনাৰ আইপি ঠিকনাৰ পৰা সম্পাদনা কৰা বাৰণ কৰা হৈছে, এনে অৱস্থাত দুৰ্ব্যৱহাৰ ৰোধ কৰিবলৈ গুপ্তশব্দ পুনঃউদ্ধাৰ কৰা সুবিধাও বাতিল কৰা হৈছে।", "eauthentsent": "সঞ্চিত ই-মেইল ঠিকনালৈ নিশ্চিতকৰণ ই-মেইল এখন পঠিওৱা হৈছে।\nএকাউণ্টটোলৈ আন ই-মেইল পঠিওৱাৰ আগতে আপোনাৰ সদস্যতা নিশ্চিত কৰিবলৈ সেই ই-মেইলত দিয়া নিৰ্দেশনা আপুনি অনু্সৰণ কৰিব লাগিব।", "throttled-mailpassword": "যোৱা {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হৈছে।\nঅবৈধ ব্যৱহাৰ ৰোধ কৰিবলৈ প্ৰতি {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এবাৰহে গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হ'ব।", "mailerror": "ই-মেইল পঠিওৱাত সমস্যা হৈছে: $1", @@ -458,7 +460,7 @@ "login-throttled": "আপুনি স‍ম্প্ৰতি অজস্ৰবাৰ লগ্‌-ইনৰ প্ৰয়াস কৰিছে ।\nঅনুগ্ৰহ কৰি $1 সময়ৰ পিছত আকৌ চেষ্টা কৰক ।", "login-abort-generic": "আপোনাৰ প্ৰৱেশ অসফল হৈছে- বাতিল কৰা হ’ল", "loginlanguagelabel": "ভাষা: $1", - "suspicious-userlogout": "আপোনাৰ প্ৰস্থানৰ অনুৰোধ বাতিল কৰা হৈছে কাৰণ হয়তো আপোনাৰ ব্ৰাউজাৰ অসম্পূৰ্ণ নতুবা পূৰ্বৱতী তথ্য পঠাইছে ।", + "suspicious-userlogout": "আপোনাৰ প্ৰস্থানৰ অনুৰোধ বাতিল কৰা হৈছে কাৰণ হয়তো আপোনাৰ ব্ৰাউজাৰ অসম্পূৰ্ণ নতুবা পূৰ্বৱতী তথ্য পঠিয়াইছে ।", "createacct-another-realname-tip": "প্ৰকৃত নাম দিয়াটো বৈকল্পিক।\nআপুনি নামটো দিলে সেইটো আপোনাৰ বৰঙণিসমূহৰ বাবে স্বীকৃতি প্ৰদানত ব্যৱহাৰ কৰা হ'ব।", "pt-login": "প্ৰৱেশ", "pt-login-button": "প্ৰৱেশ", @@ -550,6 +552,7 @@ "preview": "খচৰা", "showpreview": "খচৰা চাওক", "showdiff": "সালসলনিবোৰ দেখুৱাওক", + "blankarticle": "Warning:আপুনি সৃষ্টি কৰি থকা পৃষ্ঠাটো খালি।\nযদি আপুনি \"{{int:savearticle}}\" বুটামটোত আকৌ ক্লিক কৰে তেন্তে বিষয়বস্তু অবিহনেই পৃষ্ঠাটো সৃষ্টি হ'ব।", "anoneditwarning": "'''সাৱধান:''' আপুনি প্ৰৱেশ কৰা নাই । \nএই পৃষ্ঠাৰ ইতিহাসত আপোনাৰ আই পি ঠিকনা সংৰক্ষিত কৰা হ'ব।", "anonpreviewwarning": "''আপুনি প্ৰৱেশ কৰা নাই। আপোনাৰ সম্পাদনা সাঁচিলে আপোনাৰ আই-পি ঠিকনা এই পৃষ্ঠাৰ ইতিহাসত সংৰক্ষিত হ'ব।\"", "missingsummary": "'''স্মাৰক:''' আপুনি সম্পাদনা সাৰাংশ দিয়া নাই।\nআপুনি আৰু এবাৰ সংৰক্ষণৰ বাবে ক্লিক কৰিলে সাৰাংশৰ অবিহনে সংৰক্ষিত হব।", @@ -558,7 +561,7 @@ "summary-preview": "সাৰাংশৰ খচৰা:", "subject-preview": "বিষয়/শিৰোনামাৰ খচৰা:", "blockedtitle": "সদস্যজনক অৱৰোধ কৰা হৈছে", - "blockedtext": "'''আপোনাৰ সদস্যনাম অথবা আই-পি ঠিকনা অৱৰোধ কৰা হৈছে ।'''\n\n$1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।\nইয়াৰ বাবে দিয়া কাৰণ হৈছে ''$2'' ।\n\n* অৱৰোধ আৰম্ভণি: $8\n* অৱৰোধ সমাপ্তি: $6\n* অৱৰোধ কৰা হৈছে: $7\n\nআপুনি এই অৱৰোধৰ বিষয়ে আলোচনা কৰিবলৈ $1 বা [[{{MediaWiki:Grouppage-sysop}}|প্ৰবন্ধকৰ]] লগত সম্পৰ্ক স্থাপন কৰিব পাৰে ।\nআপুনি যেতিয়ালৈ [[Special:Preferences|সদস্য পছন্দ]] পৃষ্ঠাত আপোনাৰ ই-মেইল ঠিকনা নিদিয়ে তেতিয়ালৈ ’সদস্যক ই-মেইল পঠাওক’ সুবিধাতো ব্যৱহাৰ কৰিব নোৱাৰিব, আৰু আপোনাক এয়া কৰিবলৈ ৰোধ কৰা হোৱা নাই ।\nআপোনাৰ এতিয়াৰ আই-পি ঠিকনা হল $3, আৰু আপোনাৰ অবৰোধ ক্ৰমিক হৈছে #$5 ।\nএই বিষয়ে হোৱা আলোচনাত ইয়াৰ সবিশেষ সদৰী কৰে যেন।", + "blockedtext": "'''আপোনাৰ সদস্যনাম অথবা আই-পি ঠিকনা অৱৰোধ কৰা হৈছে।'''\n\n$1ৰ দ্বাৰা এই অৱৰোধ কৰা হৈছে ।\nইয়াৰ বাবে দিয়া কাৰণ হৈছে ''$2'' ।\n\n* অৱৰোধ আৰম্ভণি: $8\n* অৱৰোধ সমাপ্তি: $6\n* অৱৰোধ কৰা হৈছে: $7\n\nআপুনি এই অৱৰোধৰ বিষয়ে আলোচনা কৰিবলৈ $1 বা [[{{MediaWiki:Grouppage-sysop}}|প্ৰশাসকৰ]] লগত সম্পৰ্ক স্থাপন কৰিব পাৰে ।\nআপুনি যেতিয়ালৈ [[Special:Preferences|সদস্য পছন্দ]] পৃষ্ঠাত আপোনাৰ ই-মেইল ঠিকনা নিদিয়ে তেতিয়ালৈ ’সদস্যক ই-মেইল পঠিয়াওক’ সুবিধাতো ব্যৱহাৰ কৰিব নোৱাৰিব, আৰু আপোনাক এয়া কৰিবলৈ ৰোধ কৰা হোৱা নাই ।\nআপোনাৰ এতিয়াৰ আই-পি ঠিকনা হল $3, আৰু আপোনাৰ অৱৰোধ ক্ৰমিক হৈছে #$5 ।\nএই বিষয়ে হোৱা আলোচনাত ইয়াৰ সবিশেষ সদৰী কৰে যেন।", "autoblockedtext": "আপোনাৰ আই-পি ঠিকনা নিজে নিজে অৱৰোধিত হৈছে, কাৰণ ইয়াক কোনোবাই ব্যৱহাৰ কৰি থাকোতে $1ৰ দ্বাৰা অৱৰোধ কৰা হৈছে।\nইয়াৰ বাবে দিয়া কাৰণ হৈছে:\n\n:''$2''\n\n* অৱৰোধ আৰম্ভণি: $8\n* অৱৰোধ সমাপ্তি: $6\n* অৱৰোধ কৰা হৈছে: $7\n\nআপুনি এই অবৰোধৰ বিষয়ে আলোচনা কৰিবলৈ $1 বা [[{{MediaWiki:Grouppage-sysop}}|প্ৰশাসক]]ৰ লগত সম্পৰ্ক স্থাপন কৰিব পাৰে ।\n\nআপুনি যেতিয়ালৈ [[Special:Preferences|সদস্য পছন্দ]] পৃষ্ঠাত আপোনাৰ ই-মেইল ঠিকনা নিদিয়ে তেতিয়ালৈ ’সদস্যক ই-মেইল পঠাওক’ সুবিধাতো ব্যৱহাৰ কৰিব নোৱাৰে। আপোনাক এয়া কৰিবলৈ ৰোধ কৰা হোৱা নাই ।\nআপোনাৰ এতিয়াৰ আই পি ঠিকনা হৈছে $3, আৰু আপোনাৰ অৱৰোধ ক্ৰমিক হৈছে $5 ।\nএই বিষয়ে হোৱা আলোচনাত ইয়াক ব্যৱহাৰ কৰিবলৈ অনুৰোধ কৰা হ’ল।", "blockednoreason": "কাৰণ দিয়া নাই", "whitelistedittext": "সম্পাদনা কৰিবলৈ $1 কৰক ।", @@ -578,7 +581,7 @@ "missing-revision": "\"{{FULLPAGENAME}}\" নামৰ পৃষ্ঠাৰ #$1 সংশোধনৰ অস্তিত্ব নাই।\n\nসাধাৰণতে বিলোপ কৰা এখন পৃষ্ঠাৰ পুৰণা ইতিহাস লিংক অনুসৰণ কৰিলে এনে হয়।\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} বিলোপন ল'গ]ত অধিক তথ্য পাব।", "userpage-userdoesnotexist": "\"$1\" নামৰ সদস্য একাউন্ট নিবন্ধিত নহয় ।\nঅনুগ্ৰহ কৰি চাওক আপুনি এই পৃষ্ঠা সৃষ্টি/সম্পাদনা কৰিব বিচাৰিছে নেকি ।", "userpage-userdoesnotexist-view": "সদস্য একাউন্ট ''$1'' পঞ্জীভূত নহয়", - "blocked-notice-logextract": "বৰ্তমানে এই সদস্যক বাৰণ কৰা হৈছে ।\nপ্ৰসংগক্ৰমে সাম্প্ৰতিক বাৰণ সূচী তলত দিয়া হ'ল ।", + "blocked-notice-logextract": "বৰ্তমানে এই সদস্যক বাৰণ কৰা হৈছে।\nআপোনাৰ সুবিধাৰ্থে সাম্প্ৰতিক বাৰণ সূচী তলত দিয়া হ'ল ।", "clearyourcache": "'''টোকা:''' সাঁচি ৰখাৰ পিছত পৰিৱৰ্তনখিনি চাবৰ বাবে আপুনি আপোনাৰ ব্ৰাউজাৰৰ কেচ্‌ (cache) অগ্ৰাহ্য কৰিব লগা হ’ব পাৰে।\n* '''Firefox / Safari: ''' ''Shift'' ধৰি ৰাখি ''Reload'' ক্লিক কৰক, নাইবা ''Ctrl-F5'' বা ''Ctrl-R'' টিপক (এপল মেকৰ বাবে ''⌘-R'')\n* '''Google Chrome:''' ''Ctrl-Shift-R'' টিপক (এপল মেকৰ বাবে ''⌘-Shift-R'' )\n* '''Internet Explorer:''' ''Ctrl'' ধৰি ৰাখি ''Refresh'' ক্লিক কৰক, অথবা ''Ctrl-F5'' টিপক\n* '''Opera:''' ''Tools→Preferences'' ত গৈ কেচ্‌ মচি পেলাওক", "usercssyoucanpreview": "'''পৰামৰ্শ:''' \"{{int:showpreview}}\" বুটাম ব্যৱহাৰ কৰি সাঁচি ৰখাৰ আগতে আপোনাৰ নতুন CSS পৰীক্ষা কৰক ।", "userjsyoucanpreview": "'''পৰামৰ্শ:''' \"{{int:showpreview}}\" বুটাম ব্যৱহাৰ কৰি সাঁচি ৰখাৰ আগতে আপোনাৰ নতুন জাভালিপি পৰীক্ষা কৰক ।", @@ -629,10 +632,10 @@ "permissionserrorstext": "আপোনাৰ এই কামটো কৰিবলৈ অনুমতি নাই, যাৰ {{PLURAL:$1|কাৰণ|কাৰণসমূহ}} হ'ল:", "permissionserrorstext-withaction": "আপোনাৰ $2 কৰিবলৈ অনুমতি নাই, যাৰ {{PLURAL:$1|কাৰণ|কাৰণসমূহ}} হ'ল:", "recreate-moveddeleted-warn": "'''সাৱধান: আগতে বিলোপ কৰা পৃষ্ঠা এটা আপুনি পুনঃনিৰ্মাণ কৰি আছে। '''\n\nএই পৃষ্ঠাটো সম্পাদনা কৰা উচিত হব নে নহয় আপুনি বিবেচনা কৰি চাওক।\nএই পৃষ্ঠাটো বিলোপ আৰু স্থানান্তৰ কৰাৰ অভিলেখ আপোনাৰ সুবিধাৰ্থে ইয়াত দিয়া হৈছে।", - "moveddeleted-notice": "এই পৃষ্ঠা বাতিল কৰা হৈছে ।\nপৃষ্ঠাটিৰ বাতিল আৰু স্থানান্তৰ কৰা অভিলেখ তলত দিয়া হ'ল ।", + "moveddeleted-notice": "এই পৃষ্ঠা বিলোপ কৰা হৈছে।\nপৃষ্ঠাৰ বিলোপ আৰু স্থানান্তৰণ অভিলেখ তলত দিয়া হ'ল।", "log-fulllog": "সম্পূৰ্ণ অভিলেখ চাওক", "edit-hook-aborted": "হুকৰ দ্বাৰা সম্পাদনা প্ৰত্যাখ্যান কৰা হৈছে।\nইয়াৰ কোনো ব্যাখ্যা নাই।", - "edit-gone-missing": "পৃষ্ঠাটো নবীকৰণ কৰিব পৰা নগ’ল।\nসম্ভৱতঃ পৃষ্ঠাখন বিলোপ কৰা হৈছে।", + "edit-gone-missing": "পৃষ্ঠাটো নবীকৰণ কৰিব পৰা নগ’ল।\nসম্ভৱতঃ পৃষ্ঠাটো বিলোপ কৰা হৈছে।", "edit-conflict": "সম্পাদনা দ্বন্দ্ব।", "edit-no-change": "আপোনাৰ সম্পাদনা আওকাণ কৰা হৈছে, কাৰণ লেখাত কোনো তফাৎ নাই।", "postedit-confirmation-created": "পৃষ্ঠাটো সৃষ্টি কৰা হৈছে।", @@ -660,7 +663,8 @@ "parser-template-recursion-depth-warning": "সাঁচৰ পুনৰাবৃত্তি গভীৰতা সীমা ($1) তকৈ অধিক হৈছে", "language-converter-depth-warning": "ভাষা পৰিৱৰ্তকৰ গভীৰতা সীমাই ($1) অতিক্ৰম কৰিছে", "node-count-exceeded-category": "ন'ড-গণনা বেছি হোৱা পৃষ্ঠাসমূহ", - "node-count-exceeded-warning": "পৃষ্ঠাৰ ন'ড-গণনা বেছি হৈছে", + "node-count-exceeded-category-desc": "এই পৃষ্ঠাই সৰ্বোচ্চ ন'ড কাউণ্ট সীমা অতিক্ৰম কৰিছে।", + "node-count-exceeded-warning": "পৃষ্ঠাৰ ন'ড গণনা বেছি হৈছে", "expansion-depth-exceeded-category": "বিস্তৃতি গভীৰতা বেছি হোৱা পৃষ্ঠা", "expansion-depth-exceeded-warning": "পৃষ্ঠাটোৰ বিস্তৃতি গভীৰতা বেছি হৈছে", "parser-unstrip-loop-warning": "আন্‌ষ্ট্ৰীপ লুপ চিনাক্ত কৰা হৈছে", @@ -668,7 +672,7 @@ "converter-manual-rule-error": "মেনুৱেল ভাষা পৰিৱৰ্তন নিয়মত ত্ৰুটি পোৱা গৈছে", "undo-success": "এই সম্পাদনা পূৰ্ববৎ কৰিব পাৰি ।\nঅনুগ্ৰহ কৰি তলৰ তুলনাটি পৰীক্ষা কৰি ঠাৱৰ কৰক যে আপুনি এনে কৰিব বিচাৰিছে, আৰু তলত সালসলনিসমূহ সাঁচি এই কাৰ্য্য সম্পন্ন কৰক ।", "undo-failure": "এই সম্পাদনা মধ্যৱৰ্তী সম্পাদনাসমূহৰ দ্বন্দৰ কাৰণে পূৰ্ববৎ কৰা নহ'ব ।", - "undo-norev": "এই সম্পাদনাটি ৰদ কৰিব নোৱাৰি, কাৰণ ই আৰু নাই বা ইয়াক বাতিল কৰা হ'ল ।", + "undo-norev": "এই সম্পাদনাটো ৰদ কৰিব নোৱাৰি, কাৰণ এইটো আৰু নাই বা ইয়াক বিলোপ কৰা হ'ল।", "undo-nochange": "সম্পাদনাটো ইতিমধ্যেই বাতিল কৰা হৈছে।", "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|আলোচনা]]) সম্পাদিত $1 সংশোধনটি বাতিল কৰক", "undo-summary-username-hidden": "এজন গোপন ব্যৱহাৰকাৰীয়ে কৰা $1 সংশোধন বাতিল কৰক", @@ -706,7 +710,7 @@ "rev-deleted-user-contribs": "[সদস্যনাম বা আই-পি ঠিকনা আঁতৰোৱা হ'ল - সম্পাদনা বৰঙনিসমূহৰ পৰা আঁৰ কৰা হৈছে]", "rev-deleted-text-permission": "পৃষ্ঠাৰ এই সংশোধনটি '''বিলোপ''' কৰা হ'ল ।\nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অবলুপ্তি অভিলেখত]", "rev-deleted-text-unhide": "পৃষ্ঠাখনৰ এই সংশোধনটো '''বিলোপ''' কৰা হৈছে | \nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অৱলুপ্তি অভিলেখত]।\nআপুনি মন কৰিলে [$1 এই সংশোধনটো চাব পাৰে]।", - "rev-suppressed-text-unhide": "পৃষ্ঠাখনৰ এই সংশোধনটো '''নিবাৰণ''' কৰা হৈছে ।\nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ অভিলেখত]।\nআপুনি মন কৰিলে [$1 এই সংশোধনটো চাব পাৰে]।", + "rev-suppressed-text-unhide": "পৃষ্ঠাটোৰ এই সংশোধনটো '''নিবাৰণ''' কৰা হৈছে ।\nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ অভিলেখত]।\nআপুনি মন কৰিলে [$1 এই সংশোধনটো চাব পাৰে]।", "rev-deleted-text-view": "পৃষ্ঠাৰ এই সংশোধনটো '''বিলোপ''' কৰা হ'ল ।\nআপুনি এইটো চাব পাৰে; সবিশেষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অবলুপ্তি অভিলেখত]।", "rev-suppressed-text-view": "পৃষ্ঠাৰ এই সংশোধনটো '''নিবাৰণ''' কৰা হ’ল।\nআপুনি এইটো চাব পাৰে; সবিশেষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ অভিলেখত]।", "rev-deleted-no-diff": "আপুনি এই পাৰ্থক্য চাব নোৱাৰে কাৰণ এটা সংস্কৰণ '''বিলোপ''' কৰা হৈছে ।\nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অৱলুপ্তি অভিলেখত]।", @@ -1327,6 +1331,7 @@ "license": "অনুজ্ঞাপত্ৰ:", "license-header": "অনুজ্ঞাপত্ৰ", "nolicense": "একো বাছনি কৰা নাই", + "licenses-edit": "অনুজ্ঞাপত্ৰ বিকল্পসমূহ সম্পাদনা কৰক", "license-nopreview": "(প্ৰাকদৰ্শন উপলব্ধ নহয়)", "upload_source_url": "(এটা বৈধ, ৰাজহুৱাকৈ উন্মুক্ত URL)", "upload_source_file": "(আপোনাৰ কম্পিউটাৰৰ এটা ফাইল)", @@ -1416,8 +1421,6 @@ "randomincategory": "শ্ৰেণীৰ যিকোনো পৃষ্ঠা", "randomincategory-invalidcategory": "\"$1\" বৈধ শ্ৰেণী নাম নহয়।", "randomincategory-nopages": "[[:Category:$1|$1]] শ্ৰেণীত কোনো পৃষ্ঠা নাই।", - "randomincategory-selectcategory": "এই শ্ৰেণীৰ পৰা যিকোনো পৃষ্ঠা চাওক: $1 $2।", - "randomincategory-selectcategory-submit": "যাওক", "randomredirect": "অনিৰ্ধাৰিত পুননিৰ্দেশ", "randomredirect-nopages": "\"$1\" নামস্থানত কোনো পুননিৰ্দেশ নাই ।", "statistics": "পৰিসংখ্যা", @@ -1695,16 +1698,16 @@ "actioncomplete": "কাৰ্য সম্পূৰ্ণ", "actionfailed": "কাৰ্য বিফল হ'ল", "deletedtext": "\"$1\" ক বিলোপন কৰা হৈছে।\nসাম্প্ৰতিক বিলোপনসমূহৰ তালিকা চাবলৈ $2 চাওক।", - "dellogpage": "বাতিল কৰা সূচী", + "dellogpage": "বিলোপ কৰা সূচী", "dellogpagetext": "তলত সাম্প্ৰতিক বিলোপনৰ তালিকা দিয়া হ'ল ।", - "deletionlog": "বাতিল কৰা সূচী", + "deletionlog": "বিলোপ কৰা সূচী", "reverted": "পূৰ্ববৰ্তী সংস্কৰণলৈ উভতি যোৱা হ'ল", "deletecomment": "কাৰণ:", "deleteotherreason": "আন/অতিৰিক্ত কাৰণ:", "deletereasonotherlist": "আন কাৰণ:", "deletereason-dropdown": "* বিলোপনৰ সাধাৰণ কাৰণসমূহ\n** স্পাম\n** অসভ্যালি\n** কপিৰাইট উলঙ্ঘন\n** লেখকৰ অনুৰোধ\n** ভঙা পুনঃনিৰ্দেশনা", "delete-edit-reasonlist": "অপসাৰণ কৰা কাৰণ সম্পাদনা কৰক", - "delete-toobig": "এই পৃষ্ঠাখনৰ সম্পাদনা ইতিহাস অতি দীঘল, $1 {{PLURAL:$1|টা সংশোধনৰো|টা সংশোধনৰো}} বেছি ।\n{{SITENAME}}ৰ আকস্মিক ক্ষতি ৰোধ কৰিবলৈ এনে পৃষ্ঠাৰ ইতিহাস বিলোপ কৰাত সীমাবদ্ধতা আৰোপ কৰা হৈছে ।", + "delete-toobig": "এই পৃষ্ঠাটোৰ সম্পাদনা ইতিহাস অতি দীঘল, $1 {{PLURAL:$1|টা সংশোধনৰো|টা সংশোধনৰো}} বেছি ।\n{{SITENAME}}ৰ আকস্মিক ক্ষতি ৰোধ কৰিবলৈ এনে পৃষ্ঠাৰ ইতিহাস বিলোপ কৰাত সীমাবদ্ধতা আৰোপ কৰা হৈছে ।", "delete-warning-toobig": "এই পৃষ্ঠাখনৰ সম্পাদনা ইতিহাস অতি দীঘল, $1 {{PLURAL:$1|টা সংশোধনৰো|টা সংশোধনৰো}} বেছি ।\nইয়াক বিলোপ কৰিলে {{SITENAME}} ৰ তথ্যভঁৰালৰ কাৰ্য্যকাৰীতাত সমস্যা হ’ব পাৰে;\nসাৱধানেৰে আগ বাঢ়ক ।", "rollback": "সম্পাদনা পূৰ্ববৎ কৰক", "rollback_short": "পূৰ্ববৎ কৰক", @@ -2002,7 +2005,7 @@ "movetalk": "সংলগ্ন বাৰ্তা পৃষ্ঠা স্থানান্তৰ কৰক", "move-subpages": "উপ-পৃষ্ঠাসমূহ স্থানান্তৰ কৰক ($1লৈ)", "move-talk-subpages": "আলোচনা পৃষ্ঠাৰ উপ-পৃষ্ঠাসমূহ স্থানান্তৰ কৰক ($1-লৈ)", - "movepage-page-exists": "$1 পৃষ্ঠাখন ইতিমধ্যেই আছে আৰু তাৰ ওপৰত স্বয়ংক্ৰিয়ভাৱে লিখিব নোৱাৰি ।", + "movepage-page-exists": "$1 পৃষ্ঠাটো ইতিমধ্যে আছেই আৰু তাৰ ওপৰত স্বয়ংক্ৰিয়ভাৱে লিখিব নোৱাৰি।", "movepage-page-moved": "$1 পৃষ্ঠাটো $2লৈ স্থানান্তৰ কৰা হ'ল।", "movepage-page-unmoved": "$1 পৃষ্ঠাটো $2লৈ স্থানান্তৰ কৰা সম্ভৱ নহয়", "movepage-max-pages": "সৰ্বোচ্চ $1 {{PLURAL:$1|পৃষ্ঠা|পৃষ্ঠা}} স্থানান্তৰ কৰা হৈছে আৰু ইয়াতকৈ অধিক স্বয়ংক্ৰিয়ভাৱে স্থানান্তৰ নহ’ব ।", @@ -2079,7 +2082,8 @@ "import": "পৃষ্ঠা আমদানি কৰক", "importinterwiki": "আন্তঃৱিকি আমদানি", "import-interwiki-text": "আমদানি কৰিবলৈ এটা ৱিকি বা পৃষ্ঠাৰ শিৰোনামা নিৰ্বাচন কৰক ।\nসংশোধনৰ তাৰিখ আৰু সম্পাদকৰ নাম সংৰক্ষণ কৰা হ'ব ।\nসকলো আন্তঃৱিকি আমদানি [[Special:Log/import|আমদানি অভিলেখ]]ত লিপিবদ্ধ আছে ।", - "import-interwiki-source": "উৎস ৱিকি/পৃষ্ঠা:", + "import-interwiki-sourcewiki": "উৎস ৱিকি:", + "import-interwiki-sourcepage": "উৎস পৃষ্ঠা:", "import-interwiki-history": "এই পৃষ্ঠাৰ সকলো সংশোধনৰ ইতিহাস প্ৰতিলিপি কৰক", "import-interwiki-templates": "সকলো সাঁচ অন্তৰ্ভুক্ত কৰক", "import-interwiki-submit": "আমদানি", @@ -2098,7 +2102,7 @@ "importbadinterwiki": "আন্ত:ৱিকি সংযোগ বেয়া", "importsuccess": "আমদানি সমাপ্ত !", "importnosources": "কোনো আন্তঃৱিকি আমদানি উৎসৰ সংজ্ঞা দিয়া হোৱা নাই আৰু প্ৰত্যক্ষ ইতিহাস আপল'ড নিষ্ক্ৰিয় কৰা হৈছে ।", - "importnofile": "কোনো আমদানি নথি আপল'ড কৰা হোৱা নাই ।", + "importnofile": "কোনো আমদানি নথি আপল'ড কৰা হোৱা নাই।", "importuploaderrorsize": "আমদানি নথিৰ আপল'ড অসফল হৈছে ।\nঅনুমোদিত আপল'ড নথিতকৈ এই নথিৰ আকাৰ ডাঙৰ ।", "importuploaderrorpartial": "আমদানি নথিৰ আপল'ড অসফল হৈছে ।\nনথিখন কেৱল আংশিকভাৱে আপল'ড কৰা হৈছে ।", "importuploaderrortemp": "আমদানি নথিৰ আপল'ড বিফল হৈছে ।\nএটা অস্থায়ী ফ'ল্ডাৰ হেৰাইছে ।", @@ -2113,7 +2117,7 @@ "import-error-create": "\"$1\" পৃষ্ঠাটো আমদানি কৰা নহ'ল কাৰণ ইয়াক সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই।", "import-error-interwiki": "\"$1\" পৃষ্ঠাটো আমদানি কৰা নহ'ল কাৰণ ইয়াৰ নামটো বাহিৰা সংযোগৰ (আন্তঃৱিকি) বাবে সংৰক্ষিত।", "import-error-special": "\"$1\" পৃষ্ঠাটো আমদানি কৰা নহ'ল কাৰণ ই পৃষ্ঠা অনুমোদন নকৰা এটা বিশেষ নামস্থানৰ অন্তৰ্গত।", - "import-error-invalid": "\"$1\" পৃষ্ঠাখন আমদানি কৰা নহ'ল কাৰণ ইয়াৰ নামটো অবৈধ।", + "import-error-invalid": "\"$1\" পৃষ্ঠাটো আমদানি কৰা নহ'ল কাৰণ যিটো নামলৈ ইয়াক আমদানি কৰিব বিচৰা হৈছিল সেইটো এই ৱিকিত অবৈধ।", "import-error-unserialize": " \"$1\" পৃষ্ঠাৰ $2 সংশোধনৰ ক্ৰম আঁতৰ কৰিব পৰা নগ'ল। এই সংশোধনে $4 ক্ৰমৰ সমল মডেল $3 ব্যৱহাৰ কৰা বুলি জনোৱা হৈছিল।", "import-options-wrong": "ভুল {{PLURAL:$2|বিকল্প|বিকল্পসমূহ}}: $1", "import-rootpage-invalid": "মূল পৃষ্ঠাৰ শিৰোনামা অবৈধ।", @@ -2698,7 +2702,7 @@ "confirmemail_body": "কোনোবাই (সম্ভৱতঃ আপুনি) আই.পি. ঠিকনা $1ৰ পৰা এইটো ই-মেইল ঠিকনা ব্যৱহাৰ কৰি {{SITENAME}}ত\nএটা একাউণ্ট \"$2\" পঞ্জীয়ন কৰিছে ।\n\nএই একাউণ্ট আপোনাৰ হয়নে নহয় নিশ্চিত কৰাৰ বাবে আৰু {{SITENAME}}ত ই-মেইল বৈশিষ্টসমূহ সক্ৰিয় কৰাৰ বাবে\nআপোনাৰ ব্ৰাউজাৰত এই সংযোগটো খোলক:\n\n$3\n\nযদি আপুনি একাউণ্টটো পঞ্জীয়ন কৰা *নাই*, তেন্তে ই-মেইল ঠিকনা নিশ্চিতকৰণ বাতিলৰ বাবে\nএই সংযোগটো চাওক:\n\n$5\n\nএই নিশ্চিতকৰণ সংকেতৰ ম্যাদ $4ত উকলিব ।", "confirmemail_body_changed": "কোনোবাই (সম্ভৱতঃ আপুনি) আই.পি. ঠিকনা $1ৰ পৰা {{SITENAME}}ত\nএকাউণ্ট \"$2\"ৰ ই-মেইল ঠিকনা সলনি কৰিছে ।\n\nএই একাউণ্ট আপোনাৰ হয়নে নহয় নিশ্চিত কৰাৰ বাবে আৰু {{SITENAME}}ত ই-মেইল বৈশিষ্টসমূহ পুনৰ সক্ৰিয় কৰাৰ বাবে\nআপোনাৰ ব্ৰাউজাৰত এই সংযোগটো খুলক:\n\n$3\n\nযদি একাউণ্টটো আপোনাৰ *নহয়*, তেন্তে ই-মেইল ঠিকনা নিশ্চিতকৰণ বাতিলৰ বাবে\nএই সংযোগটো চাওক:\n\n$5\n\nএই নিশ্চিতকৰণ সংকেতৰ ম্যাদ $4ত উকলিব ।", "confirmemail_body_set": "কোনোবাই (সম্ভৱতঃ আপুনি) আই.পি. ঠিকনা $1ৰ পৰা {{SITENAME}}ত\nএকাউণ্ট \"$2\"ৰ ইমেইল ঠিকনা এইটো প্ৰদান কৰিছে ।\n\nএই একাউণ্ট আপোনাৰ হয়নে নহয় নিশ্চিত কৰাৰ বাবে আৰু {{SITENAME}}ত ই-মেইল বৈশিষ্টসমূহ সক্ৰিয় কৰাৰ বাবে\nআপোনাৰ ব্ৰাউজাৰত এই সংযোগটো খোলক:\n\n$3\n\nযদি একাউণ্টটো আপোনাৰ *নহয়*, তেন্তে ইমেইল ঠিকনা নিশ্চিতকৰণ বাতিলৰ বাবে\nএই সংযোগটো চাওক:\n\n$5\n\nএই নিশ্চিতকৰণ সংকেতৰ ম্যাদ $4ত উকলিব ।", - "confirmemail_invalidated": "ই-মেইল ঠিকনা নিশ্চিতকৰণ বাতিল কৰা হৈছে", + "confirmemail_invalidated": "ইমেইল ঠিকনা নিশ্চিতকৰণ বাতিল কৰা হৈছে", "invalidateemail": "ই-মেইল নিশ্চিতকৰণ বাতিল কৰক", "scarytranscludedisabled": "[আন্তঃৱিকি আন্তঃভুক্তি নিষ্ক্ৰিয় কৰা আছে]", "scarytranscludefailed": "[$1ৰ বাবে সাঁচ অনা অসফল হৈছে]", @@ -2706,7 +2710,7 @@ "scarytranscludetoolong": "[URL অত্যাধিক দীঘল]", "deletedwhileediting": "'''সতৰ্কবাণী''': আপুনি সম্পাদনা আৰম্ভ কৰাৰ পাছত পৃষ্ঠাটো বিলোপ কৰা হৈছে !", "confirmrecreate": "আপুনি সম্পাদনা আৰম্ভ কৰাৰ পিছত সদস্য [[User:$1|$1]] ([[User talk:$1|আলোচনা]])য়ে পৃষ্ঠাটো বিলোপ কৰিছে, তাৰ কাৰণ:\n: ''$2''\nআপুনি এই পৃষ্ঠাটো আকৌ সৃষ্টি কৰিব খোজাটো নিশ্চিত কৰক ।", - "confirmrecreate-noreason": "আপুনি সম্পাদনা আৰম্ভ কৰাৰ পিছত সদস্য [[User:$1|$1]] ([[User talk:$1|আলোচনা]])য়ে পৃষ্ঠাখন বিলোপ কৰিছে । আপুনি এই পৃষ্ঠাখন আকৌ সৃষ্টি কৰিব খোজাটো অনুগ্ৰহ কৰি নিশ্চিত কৰক ।", + "confirmrecreate-noreason": "আপুনি সম্পাদনা আৰম্ভ কৰাৰ পিছত সদস্য [[User:$1|$1]] ([[User talk:$1|আলোচনা]])য়ে পৃষ্ঠাটো বিলোপ কৰিছে। আপুনি এই পৃষ্ঠাখন আকৌ সৃষ্টি কৰিব খোজাটো অনুগ্ৰহ কৰি নিশ্চিত কৰক।", "recreate": "পুনৰ সৃষ্টি কৰক", "confirm_purge_button": "শুদ্ধ", "confirm-purge-top": "এই পৃষ্ঠাৰ কেচ্‌ খালী কৰা হওক ?", @@ -2715,6 +2719,7 @@ "confirm-watch-top": "এই পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাত যোগ কৰিব?", "confirm-unwatch-button": "শুদ্ধ", "confirm-unwatch-top": "এই পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাৰ পৰা আঁতৰাব?", + "quotation-marks": "\"$1\"", "imgmultipageprev": "← পূৰ্বৱৰ্তী পৃষ্ঠা", "imgmultipagenext": "পৰৱৰ্তী পৃষ্ঠা →", "imgmultigo": "যাওক", @@ -2756,6 +2761,7 @@ "watchlistedit-clear-titles": "শিৰোনামাসমূহ:", "watchlistedit-clear-submit": "লক্ষ্য-তালিকা পৰিষ্কাৰ কৰক (এইটো স্থায়ী!)", "watchlistedit-clear-done": "আপোনাৰ লক্ষ্য-তালিকা পৰিষ্কাৰ কৰা হ'ল।", + "watchlisttools-clear": "লক্ষ্য-তালিকা পৰিষ্কাৰ কৰক", "watchlisttools-view": "সংগতি থকা সাল-সলনিবোৰ চাওক", "watchlisttools-edit": "লক্ষ্য-তালিকা চাওক আৰু সম্পাদনা কৰক", "watchlisttools-raw": "অশোধিত লক্ষ্য-তালিকা সম্পাদনা কৰক", @@ -2780,10 +2786,12 @@ "version-license": "অনুজ্ঞাপত্ৰ", "version-ext-license": "অনুজ্ঞাপত্ৰ", "version-ext-colheader-name": "এক্সটেন্‌চন", + "version-skin-colheader-name": "আৱৰণ", "version-ext-colheader-version": "সংস্কৰণ", "version-ext-colheader-license": "অনুজ্ঞাপত্ৰ", "version-ext-colheader-description": "বিৱৰণ", "version-ext-colheader-credits": "লেখকসকল", + "version-license-title": "$1ৰ বাবে অনুজ্ঞাপত্ৰ", "version-poweredby-credits": "এই ৱিকি '''[https://www.mediawiki.org/ মিডিয়াৱিকিৰ]''' দ্বাৰা প্ৰচলিত , কপিৰাইট © ২০০১-$1 $2.", "version-poweredby-others": "অন্য", "version-poweredby-translators": "translatewiki.net অনুবাদকসকল", @@ -2856,7 +2864,7 @@ "compare-submit": "তুলনা কৰক", "compare-invalid-title": "আপুনি নিৰ্ধাৰণ কৰা শিৰোনামাটো অবৈধ ।", "compare-title-not-exists": "আপুনি নিৰ্ধাৰণ কৰা ফাইলটোৰ অস্বিত্ব নাই ।", - "compare-revision-not-exists": "আপুনি নিৰ্ধাৰণ কৰা সংশোধনীটোৰ অস্বিত্ব নাই ।", + "compare-revision-not-exists": "আপুনি নিৰ্ধাৰণ কৰা সংশোধনটোৰ অস্তিত্ব নাই ।", "dberr-problems": "দুঃখিত! চাইটটোত কিছু কাৰিকৰী সমস্যা হৈছে ।", "dberr-again": "অলপ সময় অপেক্ষা কৰি পুনৰ আপল'ডৰ চেষ্টা কৰক ।", "dberr-info": "(তথ্যকোষৰ চাৰ্ভাৰৰ লগত যোগাযোগ কৰিব নোৱাৰি: $1)", @@ -2882,7 +2890,7 @@ "sqlite-has-fts": "$1 সম্পূৰ্ণ-পাঠ অনুসন্ধান সমৰ্থন সহ", "sqlite-no-fts": "$1 সম্পূৰ্ণ-পাঠ অনুসন্ধান সমৰ্থন অবিহনে", "logentry-delete-delete": "$3 পৃষ্ঠাটো $1ৰদ্বাৰা {{GENDER:$2|বিলোপ কৰা হ'ল}}", - "logentry-delete-restore": "$3 পৃষ্ঠাখন $1 ৰদ্বাৰা {{GENDER:$2|পুনৰ্সংৰক্ষণ কৰা হ'ল}}", + "logentry-delete-restore": "$1-এ $3 পৃষ্ঠাটো {{GENDER:$2|পুনৰ্সংৰক্ষণ কৰিলে}}", "logentry-delete-event": "$3: $4 -ত {{PLURAL:$5|এটা লগ ঘটনা|$5 লগ ঘটনাসমূহ}} -ৰ $1 পৰিৱৰ্তন কৰা দৃশ্যমানতা", "logentry-delete-revision": "পৃষ্ঠা $3ত {{PLURAL:$5|এটা সংশোধন|$5 সংশোধনসমূহ}}ৰ দৃশ্যমানতা $1 {{GENDER:$2|য়ে সলালে}}: $4", "logentry-delete-event-legacy": "$3ত ল'গ ঘটনাসমূহৰ দৃশ্যমানতা $1 {{GENDER:$2|ৰদ্বাৰা সলোৱা হ'ল}}", @@ -2985,5 +2993,13 @@ "expand_templates_output": "ফলাফল", "expand_templates_ok": "ওকে", "expand_templates_remove_comments": "মন্তব্য গু়চাওক", - "expand_templates_preview": "খচৰা" + "expand_templates_preview": "খচৰা", + "pagelanguage": "পৃষ্ঠাৰ ভাষা নিৰ্বাচক", + "pagelang-name": "পৃষ্ঠা", + "pagelang-language": "ভাষা", + "pagelang-use-default": "ডিফল্ট ভাষা ব্যৱহাৰ কৰক", + "pagelang-select-lang": "ভাষা নিৰ্বাচন কৰক", + "right-pagelang": "পৃষ্ঠাৰ ভাষা পৰিৱৰ্তন কৰক", + "action-pagelang": "পৃষ্ঠাৰ ভাষা পৰিৱৰ্তন কৰক", + "log-name-pagelang": "ভাষা পৰিৱৰ্তন ল'গ" } diff --git a/languages/i18n/ast.json b/languages/i18n/ast.json index dfb04a9d07..0d7f8a3c94 100644 --- a/languages/i18n/ast.json +++ b/languages/i18n/ast.json @@ -1442,8 +1442,8 @@ "randomincategory": "Páxina al debalu de la categoría", "randomincategory-invalidcategory": "\"$1\" nun ye un nome de categoría válidu.", "randomincategory-nopages": "Nun hai páxines en [[:Category:$1]].", - "randomincategory-selectcategory": "Ver una páxina al debalu de la categoría: $1. $2", - "randomincategory-selectcategory-submit": "Dir", + "randomincategory-category": "Categoría:", + "randomincategory-legend": "Páxina al debalu de la categoría", "randomredirect": "Redireición al debalu", "randomredirect-nopages": "Nun hai redireiciones nel espaciu de nomes \"$1\".", "statistics": "Estadístiques", @@ -1735,7 +1735,7 @@ "exbeforeblank": "el conteníu enantes de dexar en blanco yera: '$1'", "delete-confirm": "Desaniciar «$1»", "delete-legend": "Desaniciar", - "historywarning": "'''Avisu:'''' La páxina que vas desaniciar tien un historial con aproximadamente $1 {{PLURAL:$1|revisión|revisiones}}:", + "historywarning": "Avisu: La páxina que vas desaniciar tien un historial con $1 {{PLURAL:$1|revisión|revisiones}}:", "confirmdeletetext": "Tas a piques d'esborrar una páxina xunto con tol so historial.\nPor favor confirma que ye lo que quies facer, qu'entiendes les consecuencies, y que lo tas faciendo acordies coles [[{{MediaWiki:Policy-url}}|polítiques]].", "actioncomplete": "Aición completada", "actionfailed": "Falló l'aición", @@ -1751,7 +1751,7 @@ "delete-edit-reasonlist": "Editar los motivos d'esborráu", "delete-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nRestrinxóse l'esborráu d'estes páxines pa evitar perturbaciones accidentales de {{SITENAME}}.", "delete-warning-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nEsborralu pue perturbar les operaciones de la base de datos de {{SITENAME}};\nobra con precaución.", - "delete-cantedit": "Nun pues desaniciar esta páxina porque nun tienes permisu pa editala.", + "deleteprotected": "Nun pues desaniciar esta páxina porque ta protexida.", "deleting-backlinks-warning": "'''Avisu:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otres páxines]] enllacen a, o trescluyen de, la páxina que ta a piques de desaniciar.", "rollback": "Revertir ediciones", "rollback_short": "Revertir", @@ -2134,7 +2134,8 @@ "import": "Importar páxines", "importinterwiki": "Importación treswiki", "import-interwiki-text": "Seleiciona una wiki y un títulu de páxina pa importar.\nLes feches de revisión y los nomes de los editores caltendránse.\nToles aiciones d'importación treswiki queden rexistraes nel [[Special:Log/import|rexistru d'importaciones]].", - "import-interwiki-source": "Códigu wiki/páxina:", + "import-interwiki-sourcewiki": "Wiki d'orixe:", + "import-interwiki-sourcepage": "Páxina d'orixe:", "import-interwiki-history": "Copiar toles versiones d'historial d'esta páxina", "import-interwiki-templates": "Incluyir toles plantíes", "import-interwiki-submit": "Importar", diff --git a/languages/i18n/be-tarask.json b/languages/i18n/be-tarask.json index 81b2db5f70..13f55ada62 100644 --- a/languages/i18n/be-tarask.json +++ b/languages/i18n/be-tarask.json @@ -2136,6 +2136,8 @@ "import": "Імпартаваць старонкі", "importinterwiki": "Імпартаваньне зь іншых вікі", "import-interwiki-text": "Абярыце вікі і назву старонкі для імпартаваньня.\nДаты зьменаў і імёны аўтараў будуць захаваныя.\nУсе дзеяньні імпартаваньня паміж вікі запісваюцца ў [[Special:Log/import|журнал імпартаваньняў]].", + "import-interwiki-sourcewiki": "Крынічная вікі:", + "import-interwiki-sourcepage": "Крынічная старонка:", "import-interwiki-history": "Капіяваць гісторыю старонкі цалкам", "import-interwiki-templates": "Уключыць усе шаблёны", "import-interwiki-submit": "Імпартаваць", diff --git a/languages/i18n/bg.json b/languages/i18n/bg.json index a2afa90915..9a21f2ba2a 100644 --- a/languages/i18n/bg.json +++ b/languages/i18n/bg.json @@ -188,6 +188,7 @@ "permalink": "Постоянна препратка", "print": "Печат", "view": "Преглед", + "view-foreign": "Преглед на $1", "edit": "Редактиране", "edit-local": "Редактиране на локалното описание", "create": "Създаване", @@ -231,6 +232,7 @@ "jumptonavigation": "навигация", "jumptosearch": "търсене", "view-pool-error": "Съжаляваме, но сървърите в момента са претоварени.\nТвърде много потребители се опитват да отворят тази страница.\nМоля, изчакайте малко преди отново да пробвате да отворите страницата.\n\n$1", + "generic-pool-error": "Съжаляваме, но сървърите в момента са претоварени.\nТвърде много потребители се опитват да отворят тази страница.\nМоля, изчакайте малко преди отново да пробвате да отворите страницата.", "pool-timeout": "Изтичане на времето за заключване на страницата", "pool-queuefull": "Опашката за заявки е пълна", "pool-errorunknown": "Непозната грешка", @@ -332,6 +334,7 @@ "badarticleerror": "Действието не може да се изпълни върху страницата.", "cannotdelete": "Указаната страница или файл \"$1\" не можа да бъде изтрит(а). Възможно е вече да е бил(а) изтрит(а) от някой друг.", "cannotdelete-title": "Страницата „$1“ не може да бъде изтрита", + "delete-hook-aborted": "Изтриването беше прекъснато от кука.\nНе беше посочена причина за това.", "no-null-revision": "Не може да бъде създадена празна версия на страницата „$1“", "badtitle": "Невалидно заглавие", "badtitletext": "Желаното заглавие на страница е невалидно, празно или неправилна препратка към друго уики. Възможно е да съдържа знаци, които не са позволени в заглавия.", @@ -359,8 +362,9 @@ "titleprotected": "Тази страница е била защитена срещу създаване от [[User:$1|$1]].\nПосочената причина е ''$2''.", "filereadonlyerror": "Файлът „$1“ не може да бъде променен, тъй като файловото хранилище „$2“ е в режим само за четене.\n\nАдминистраторът, който го е заключил, е посочил следната причина: „$3“.", "invalidtitle-knownnamespace": "Невалидно заглавие с именно пространство $2\" и текст \"$3\"", + "invalidtitle-unknownnamespace": "Невалидно заглавие с неразпознато именно пространство номер $1 и текст „$2“", "exception-nologin": "Не сте влезли", - "exception-nologin-text": "За досъп до желаната страница или действие уикито изисква [[Special:Userlogin|влизане в системата]].", + "exception-nologin-text": "За достъп до избраното действие или страница е необходимо влизане в системата.", "exception-nologin-text-manual": "За достъп до избраното действие или страница е необходимо $1 в системата.", "virus-badscanner": "Лоша конфигурация: непознат скенер за вируси: ''$1''", "virus-scanfailed": "сканирането не сполучи (код $1)", @@ -638,7 +642,7 @@ "recreate-moveddeleted-warn": "'''Внимание: Създавате страница, която по-рано вече е била изтрита.'''\n\nОбмислете добре дали е уместно повторното създаване на страницата.\nЗа ваша информация по-долу е посочена причината за предишното изтриване на страницата:", "moveddeleted-notice": "Тази страница е била изтрита.\nЗа справка, по-долу са включени извадки от дневниците на изтриванията и преместванията.", "log-fulllog": "Преглеждане на пълния дневник", - "edit-hook-aborted": "Редакцията беше прекъсната от кука. Не беше посочена причина за това.", + "edit-hook-aborted": "Редакцията беше прекъсната от кука.\nНе беше посочена причина за това.", "edit-gone-missing": "Страницата не можа да се обнови.\nВероятно междувременно е била изтрита.", "edit-conflict": "Редакционен конфликт.", "edit-no-change": "Редакцията ви беше пренебрегната, защото не съдържа промени по текста.", @@ -841,7 +845,7 @@ "preferences": "Настройки", "mypreferences": "Настройки", "prefs-edits": "Брой редакции:", - "prefsnologintext2": "Моля, влезте за да промените настройките си.", + "prefsnologintext2": "За да промените настройките си е необходимо да влезете в систеата.", "prefs-skin": "Облик", "skin-preview": "предварителен преглед", "datedefault": "Без предпочитание", @@ -1088,7 +1092,7 @@ "action-sendemail": "изпращане на е-писма", "action-editmywatchlist": "редактиране на списъка ви за наблюдение", "action-viewmywatchlist": "преглед на списъка ви за наблюдение", - "action-viewmyprivateinfo": "преглед на личната си информация", + "action-viewmyprivateinfo": "преглеждане на личните данни", "action-editmyprivateinfo": "редактиране на личната си информация", "nchanges": "$1 {{PLURAL:$1|промяна|промени}}", "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|от последното посещение}}", @@ -1096,7 +1100,7 @@ "recentchanges": "Последни промени", "recentchanges-legend": "Настройки на списъка с последни промени", "recentchanges-summary": "Проследяване на последните промени в {{SITENAME}}.\n\nЛегенда: '''тек''' = разлика на текущата версия,\n'''ист''' = история на версиите", - "recentchanges-noresult": "Не са намерени промени за дадения период, отговарящи на критерия.", + "recentchanges-noresult": "Не бяха намерени промени за дадения период, които отговарят на критериите.", "recentchanges-feed-description": "Проследяване на последните промени в {{SITENAME}}.", "recentchanges-label-newpage": "Нова страница", "recentchanges-label-minor": "Това е малка промяна", @@ -1365,6 +1369,7 @@ "download": "сваляне", "unwatchedpages": "Ненаблюдавани страници", "listredirects": "Списък на пренасочванията", + "listduplicatedfiles": "Списък на повтарящи се файлове", "unusedtemplates": "Неизползвани шаблони", "unusedtemplatestext": "Тази страница съдържа списък на страниците в именно пространство {{ns:template}}, които не са включени в друга страница. Проверявайте за препратки към отделните шаблони преди да ги изтриете или предложите за изтриване.", "unusedtemplateswlh": "други препратки", @@ -1459,7 +1464,7 @@ "protectedpages-page": "Страница", "protectedpages-expiry": "Срок на изтичане", "protectedpages-performer": "Защитаващ потребител", - "protectedpages-params": "Параметри на защитата", + "protectedpages-params": "Параметри на защита", "protectedpages-reason": "Причина", "protectedpages-unknown-timestamp": "Неизвестни", "protectedpages-unknown-performer": "Неизвестен потребител", @@ -1554,10 +1559,11 @@ "listgrouprights-removegroup-self-all": "Може да премахва всички групи от собствената сметка", "listgrouprights-namespaceprotection-namespace": "Именно пространство", "trackingcategories": "Категории за проследяване", - "trackingcategories-summary": "Страницата представлява списък на категории за проследяване, които се попълват автоматично от МедияУики софтуер. Имената им могат да се променят посредством промяна на съответните системни съобщения в именното пространство {{ns:8}}.", + "trackingcategories-summary": "Тази страница съдържа списък на категории за проследяване, които се попълват автоматично от софтуера на МедияУики. Имената им могат да се променят чрез съответните системни съобщения в именното пространство {{ns:8}}.", "trackingcategories-msg": "Категория за проследяване", "trackingcategories-name": "Име на съобщението", "trackingcategories-desc": "Критерий за включване на категория", + "trackingcategories-nodesc": "Няма налично описание.", "trackingcategories-disabled": "Категорията е деактивирана", "mailnologin": "Няма електронна поща", "mailnologintext": "Необходимо е да [[Special:UserLogin|влезете]] и да посочите валидна електронна поща в [[Special:Preferences|настройките]] си, за да може да пращате писма на други потребители.", @@ -1597,10 +1603,10 @@ "watchnologin": "Не сте влезли", "addwatch": "Добавяне към списъка за наблюдение", "addedwatchtext": "Страницата „'''[[:$1]]'''“ беше добавена към [[Special:Watchlist|списъка ви за наблюдение]].\nНейните бъдещи промени, както и на съответната й дискусионна страница, ще се описват там.", - "addedwatchtext-short": "Страница \"$1\" беше добавена към списъка ви за наблюдение.", + "addedwatchtext-short": "Страницата „$1“ беше добавена към списъка Ви за наблюдение.", "removewatch": "Премахване от списъка за наблюдение", "removedwatchtext": "Страницата „[[:$1]]“ беше премахната от [[Special:Watchlist|списъка ви за наблюдение]].", - "removedwatchtext-short": "Страница \"$1\" беше премахната от списъка ви за наблюдение.", + "removedwatchtext-short": "Страницата „$1“ беше премахната от списъка Ви за наблюдение.", "watch": "Наблюдение", "watchthispage": "Наблюдаване на страницата", "unwatch": "Спиране на наблюдение", @@ -1770,7 +1776,7 @@ "contributions-title": "Потребителски приноси за $1", "mycontris": "Приноси", "contribsub2": "За {{GENDER:$3|$1}} ($2)", - "contributions-userdoesnotexist": "Няма регистрирана потребителска сметка за \"$1\".", + "contributions-userdoesnotexist": "Няма регистрирана потребителска сметка за „$1“.", "nocontribs": "Не са намерени промени, отговарящи на критерия.", "uctop": "(текуща)", "month": "Месец:", @@ -2888,8 +2894,8 @@ "pagelang-language": "Език", "pagelang-use-default": "Използване на езика по подразбиране", "pagelang-select-lang": "Избиране на език", - "right-pagelang": "Променяне на езика на страница", - "action-pagelang": "Променяне на езика на страницата", + "right-pagelang": "Промяна езика на страница", + "action-pagelang": "промяна езика на страницата", "log-name-pagelang": "Дневник на езиковите промени", "default-skin-not-found-row-enabled": "* $1 / $2 (включено)", "default-skin-not-found-row-disabled": "* $1 / $2 ('''изключено''')" diff --git a/languages/i18n/bn.json b/languages/i18n/bn.json index 6a7531280b..0b94f49778 100644 --- a/languages/i18n/bn.json +++ b/languages/i18n/bn.json @@ -38,6 +38,7 @@ "tog-watchdefault": "আমার সম্পাদিত পাতা এবং ফাইলগুলো আমার নজরতালিকায় যোগ করা হোক", "tog-watchmoves": "আমার স্থানান্তরিত পাতা এবং ফাইলগুলো আমার নজরতালিকায় যোগ করা হোক", "tog-watchdeletion": "আমার অপসারিত পাতা এবং ফাইলগুলো আমার নজর তালিকায় যোগ করা হোক", + "tog-watchrollback": "আমার দ্বারা রোলব্যাক করা পাতা আমার নজরতালিকায় যোগ করা হোক", "tog-minordefault": "শুরুতেই সব সম্পাদনাকে অনুল্লেখ্য বলে চিহ্নিত করা হোক", "tog-previewontop": "সম্পাদনা বাক্সের আগে প্রাকদর্শন দেখানো হোক", "tog-previewonfirst": "প্রথম সম্পাদনার ক্ষেত্রে প্রাকদর্শন দেখানো হোক", @@ -1041,6 +1042,7 @@ "right-browsearchive": "অপসারিত পাতা অনুসন্ধান করো", "right-undelete": "পাতাটি পুনরুদ্ধার করুন", "right-suppressrevision": "প্রশাসকদের থেকে লুকানো সংস্করণগুলো রিভিউ এবং রিস্টোর করুন", + "right-viewsuppressed": "সকল ব্যবহারকারীর জন্য লুকিয়াত সংশোধন প্রদর্শন কর", "right-suppressionlog": "ব্যক্তিগত লগ দেখাও", "right-block": "সম্পাদনা করতে কোনো ব্যবহারকারীকে বাঁধা দাও", "right-blockemail": "ই-মেইল পাঠাতে কোনো ব্যবহারকারীকে বাঁধা দাও", @@ -1352,7 +1354,7 @@ "licenses-edit": "লাইসেন্স অপশন সম্পাদনা করুন", "license-nopreview": "(প্রাকদর্শন লভ্য নয়)", "upload_source_url": " (একটি বৈধ, উন্মুক্ত URL)", - "upload_source_file": " (আপনার কম্পিউটারের একটি ফাইল)", + "upload_source_file": "(আপনার কম্পিউটারের একটি ফাইল)", "listfiles-delete": "অপসারণ", "listfiles-summary": "এই বিশেষ পাতাটি আপলোড করা সকল ফাইল প্রদর্শন করে।", "listfiles_search_for": "ছবির নাম অনুসন্ধান:", @@ -1741,6 +1743,7 @@ "delete-edit-reasonlist": "অপসারণের কারণ সম্পাদনা", "delete-toobig": "এই পাতার সম্পাদনার ইতিহাস অনেক বড়, যা $1টি {{PLURAL:$1|সংস্করণের|সংস্করণের}} বেশি।\n{{SITENAME}}-এর দূর্ঘটনাজনিত সমস্যা এড়াতে এই ধরনের পাতা মুছার ব্যপারে সীমাবদ্ধতা আরোপিত হয়েছে।", "delete-warning-toobig": "এই পাতাটির একটি বৃহৎ সম্পাদনা ইতিহাস রয়েছে, যা $1 {{PLURAL:$1|সংস্করণেরও|সংস্করণেরও}} বেশি।\nএই পাতাটি মুছে ফেললে তা {{SITENAME}} সাইটের ডেটাবেজ সমস্যার কারণ হতে পারে;\nসাবধানতার সাথে এগিয়ে যান।", + "deleteprotected": "আপনি এই পাতাটি মুছে ফেলতে পারবেন না কারণ এটি সুরক্ষিত করা হয়েছে।", "deleting-backlinks-warning": "'''সতর্কীকরণ:''' আপনি যেটি মুছে ফেলতে যাচ্ছেন তা [[Special:WhatLinksHere/{{FULLPAGENAME}}|অন্যান্য পাতাসমূহে]] সংযুক্ত অথবা অন্তর্ভুক্ত রয়েছে।", "rollback": "সম্পাদনা ফিরিয়ে নিন", "rollback_short": "ফিরিয়ে নিন", @@ -2121,6 +2124,7 @@ "import": "পাতা আমদানি", "importinterwiki": "আন্তঃউইকি আমদানি", "import-interwiki-text": "আমদানির জন্য একটি উইকি ও পাতার শিরোনাম নির্বাচন করুন।\nসংশোধনের তারিখগুলি এবং সম্পাদকদের নামগুলি সংরক্ষণ করা হবে।\nসমস্ত আন্তঃউইকি আমদানিগুলি [[Special:Log/import|আমদানি লগে]] লিপিবদ্ধ আছে।", + "import-interwiki-sourcewiki": "উত্স উইকি:", "import-interwiki-sourcepage": "উৎস পাতা:", "import-interwiki-history": "এই পাতার সমস্ত ইতিহাসের সংস্করণের অনুলিপি করা হোক", "import-interwiki-templates": "সকল টেম্পলেট অন্তর্ভুক্ত", @@ -2151,7 +2155,7 @@ "import-upload": "XML ডাটা আপলোড", "import-token-mismatch": "সেশন ডাটা হারিয়ে গিয়েছে।\nঅনুগ্রহ করে পুনরায় চেষ্টা করুন।", "import-invalid-interwiki": "নির্ধারিত উইকি থেকে আমদানী করা যাবে না।", - "import-error-edit": "Page \"$1\" was not imported because you are not allowed to edit it.", + "import-error-edit": "\"$1\" পাতাটি আমদানি করা যায়নি কারণ আপনার এটি সম্পাদনা করার অনুমতি নেই।", "import-error-create": "\"$1\" পাতাটি ইম্পোর্ট করা যায়নি কারণ আপনার এটি তৈরী করার অনুমতি নেই।", "import-error-interwiki": "\"$1\" পাতাটি ইম্পোর্ট করা যায়নি কারণ এই নামটি বহিঃসংযোগর জন্য নির্ধারিত (ইন্টারউইকি)।", "import-error-special": "\"$1\" পাতাটি ইম্পোর্ট করা যায়নি কারণ এটি একটি বিশেষ নামস্থানকে নির্দেশ করে যেটি সম্পাদনার জন্য অনুমোদিত নয়।", diff --git a/languages/i18n/br.json b/languages/i18n/br.json index fd5b641f38..cb2786f7a7 100644 --- a/languages/i18n/br.json +++ b/languages/i18n/br.json @@ -353,7 +353,7 @@ "invalidtitle-knownnamespace": "Titl direizh gant an esaouenn anv \"$2\" hag an destenn \"$3\"", "invalidtitle-unknownnamespace": "Titl direizh gant an niverenn esaouenn anv $1 hag an destenn \"$2\" dianav", "exception-nologin": "N'oc'h ket kevreet", - "exception-nologin-text": "Ar bajenn-mañ pe an ober-mañ a c'houlenn e vefec'h kevreet er wiki-mañ.", + "exception-nologin-text": "Ar bajenn-mañ pe an ober-mañ a c'houlenn e vefec'h kevreet.", "exception-nologin-text-manual": "$1, mar plij, evit gallout mont d'ar bajenn-mañ pe ober an dra-mañ", "virus-badscanner": "Kefluniadur fall : skanner viruzoù dianav : ''$1''", "virus-scanfailed": "Skannadenn c'hwitet (kod $1)", @@ -659,7 +659,7 @@ "parser-template-recursion-depth-warning": "Tizhet bevenn donder galvoù ar patromoù ($1)", "language-converter-depth-warning": "Aet eur en tu all d'ar vevenn amdreiñ yezhoù ($1)", "node-count-exceeded-category": "Pajennoù m'eur aet en tu all d'an niver a skoulmoù", - "node-count-exceeded-warning": "Pajenn a ya en tu all d'an niver a skoulmoù", + "node-count-exceeded-warning": "Pajenn hag a ya en tu all d'an niver a skoulmoù", "expansion-depth-exceeded-category": "Pajennoù m'eur aet dreist d'an donder astenn", "expansion-depth-exceeded-warning": "Pajenn a ya dreist d'an donder astenn", "parser-unstrip-loop-warning": "Detektet ez eus bet ul lagadenn n'haller ket divontañ", @@ -678,7 +678,7 @@ "currentrev": "Stumm a-vremañ pe stumm red", "currentrev-asof": "Stumm red eus an $1", "revisionasof": "Stumm eus an $1", - "revision-info": "Stumm eus an $1 gant $2", + "revision-info": "Stumm eus an $1 gant $2$7", "previousrevision": "← Stumm kent", "nextrevision": "Stumm war-lerc'h →", "currentrevisionlink": "Gwelet ar stumm red", @@ -844,7 +844,7 @@ "preferences": "Penndibaboù", "mypreferences": "Penndibaboù", "prefs-edits": "Niver a zegasadennoù :", - "prefsnologintext2": "$1, mar plij, evit cheñch ho penndibaboù.", + "prefsnologintext2": "Kevreit evit cheñch ho penndibaboù, mar plij.", "prefs-skin": "Gwiskadur", "skin-preview": "Rakwelet", "datedefault": "Dre ziouer", @@ -1320,6 +1320,7 @@ "license": "Aotre-implijout :", "license-header": "Aotre implijout", "nolicense": "Hini ebet diuzet", + "licenses-edit": "Aozañ dibarzhioù an aotre-implijout", "license-nopreview": "(Dibosupl rakwelet)", "upload_source_url": " (Un URL reizh a c'hall bezañ tizhet gant an holl)", "upload_source_file": " (ur restr war hoc'h urzhiataer)", @@ -1412,6 +1413,7 @@ "randomincategory-invalidcategory": "\"$1\" n'eo ket un anv rummad reizh.", "randomincategory-nopages": "N'eus pajenn ebet e [[:Category:$1]].", "randomincategory-category": "Rummad :", + "randomincategory-legend": "Ur bajenn dre zegouezh er rummad", "randomredirect": "Ur bajenn adkas dre zegouezh", "randomredirect-nopages": "N'eus pajenn adkas ebet en esaouenn anv \"$1\".", "statistics": "Stadegoù", @@ -1441,7 +1443,7 @@ "doubleredirects": "Adkasoù doubl", "doubleredirectstext": "Rollañ a ra ar bajenn-mañ ar pajennoù a adkas da bajennoù adkas all.\nWar bep linenn ez eus liammoù war-du pajennoù an adkas kentañ hag en eil adkas, hag ivez war-du pajenn-dal an eil adkas zo sañset bezañ ar pal \"gwirion\" a zlefe an adkas kentañ kas di.\nDiskoulmet eo bet an enmontoù barrennet.", "double-redirect-fixed-move": "Adanvet eo bet [[$1]], adkaset eo war-du [[$2]] bremañ", - "double-redirect-fixed-maintenance": "O reizhañ an adkas doubl adalek [[$1]] war-zu [[$2]].", + "double-redirect-fixed-maintenance": "O reizhañ ent emgefre an adkas doubl adalek [[$1]] war-zu [[$2]] en un trevell trezalc'h.", "double-redirect-fixer": "Reizher adkasoù", "brokenredirects": "Adkasoù torret", "brokenredirectstext": "Kas a ra an adkasoù-mañ da bajennoù n'eus ket anezho.", @@ -1477,12 +1479,13 @@ "wantedpages-badtitle": "Titl direizh er strollad disoc'hoù : $1", "wantedfiles": "Restroù a vank", "wantedfiletext-cat": "Ober a reer gant ar restroù da-heul koulskoude n'eus ket anezho. Gallout a reer rollañ kavlec'hioù diavaez ha pa vefe anezho. Barrennet e vo an holl falspozitivoù-se. Ouzhpenn-se emañ renablet an holl bajennoù zo enno restroù n'eus ket anezho e [[:$1]].", + "wantedfiletext-cat-noforeign": "Implijet eo ar restroù-mañ, met n'eus ket anezho. Ouzhpenn-se, emañ ar pajennoù a enframm ar restroù er roll [[:$1]].", "wantedfiletext-nocat": "Ober a reer gant ar restroù da-heul koulskoude n'eus ket anezho. Gallout a reer rollañ kavlec'hioù diavaez ha pa vefe anezho. Barrennet e vo an holl falspozitivoù-se.", "wantedfiletext-nocat-noforeign": "Implijet e vez ar restroù-mañ met n'eus ket anezho.", "wantedtemplates": "Patromoù a vank", "mostlinked": "Pajennoù dezho al liammoù niverusañ", "mostlinkedcategories": "Rummadoù dezho al liammoù niverusañ", - "mostlinkedtemplates": "Patromoù implijet ar muiañ", + "mostlinkedtemplates": "Pajennoù enframmet ar muiañ", "mostcategories": "Pennadoù rummatet ar muiañ", "mostimages": "Skeudennoù implijet ar muiañ", "mostinterwikis": "Pajennoù gant an niver brasañ a etrewikioù", @@ -1602,6 +1605,7 @@ "listgrouprights-removegroup-self-all": "Gallout a ra tennañ kuit an holl strolladoù eus kont an-unan.", "listgrouprights-namespaceprotection-namespace": "Esaouenn anv", "trackingcategories-name": "Anv ar gemennadenn", + "broken-file-category-desc": "Er bajenn-mañ ez eus ul liamm restr torr (ul liamm da enframmañ ur restr pa n'eus ket eus ar restr-se).", "trackingcategories-nodesc": "N'eus deskrivadur ebet.", "trackingcategories-disabled": "Diweredekaet eo ar rummad", "mailnologin": "Chomlec'h ebet", @@ -1638,7 +1642,7 @@ "mywatchlist": "Ma roll evezhiañ", "watchlistfor2": "Evit $1 $2", "nowatchlist": "N'eus pennad ebet en ho roll evezhiañ.", - "watchlistanontext": "Ret eo deoc'h $1 evit gwelet pe kemmañ an elfennoù zo en ho roll evezhiañ.", + "watchlistanontext": "Ret eo deoc'h kevreañ evit gwelet pe aozañ an elfennoù a zo en ho roll evezhiañ.", "watchnologin": "Digevreet", "addwatch": "Ouzhpennañ d'ar roll evezhiañ", "addedwatchtext": "Ouzh ho [[Special:Watchlist|rollad evezhiañ]] eo bet ouzhpennet ar bajenn \"[[:$1]]\".\nAmañ e vo rollet ar c'hemmoù da zont evit ar bajenn-mañ hag ar bajenn gaozeal stag outi.", @@ -1861,7 +1865,7 @@ "autoblockid": "Emstankañ #$1", "block": "Stankañ an implijer", "unblock": "Distankañ an implijer", - "blockip": "Stankañ ur chomlec'h IP", + "blockip": "Stankañ an {{GENDER:$1|implijer|implijerez}}", "blockip-legend": "Stankañ an implijer", "blockiptext": "Grit gant ar furmskrid a-is evit stankañ ar moned skrivañ ouzh ur chomlec'h IP pe un implijer bennak.\nSeurt diarbennoù n'hallont bezañ kemeret nemet evit mirout ouzh ar vandalerezh hag a-du gant an [[{{MediaWiki:Policy-url}}|erbedadennoù ha reolennoù da heuliañ]].\nRoit a-is an abeg resis (o verkañ, da skouer, roll ar pajennoù bet graet gaou outo).", "ipaddressorusername": "Chomlec'h IP pe anv implijer", @@ -1885,6 +1889,7 @@ "blockipsuccesstext": "Stanket eo bet [[Special:Contributions/$1|$1]].
\nSellit ouzh [[Special:BlockList|roll ar chomlec'hioù IP ha kontoù stanket]] evit gwiriañ ar stankadennoù.", "ipb-blockingself": "Emaoc'h war-nes stankañ ac'hanoc'h hoc'h-unan ! Ha sur oc'h eo se a fell deoc'h ober ?", "ipb-confirmhideuser": "Emaoc'h war-nes stankañ un implijer ha gweredekaet hoc'h eus \"kuzhat an implijer\". Diverkañ a ra an dra-se anv an implijer en holl rolloù ha monedoù ar marilh.", + "ipb-confirmaction": "A'z oc'h sur e fell deoc'h ober an dra-se evit gwir, askit ar vaezienn \"{{int:ipb-confirm}}\" en traoñ.", "ipb-edit-dropdown": "Kemmañ an abegoù stankañ", "ipb-unblock-addr": "Distankañ $1", "ipb-unblock": "Distankañ un implijer pe ur chomlec'h IP", @@ -2077,6 +2082,8 @@ "import": "Enporzhiañ pajennoù", "importinterwiki": "enporzhiadenn etrewiki", "import-interwiki-text": "Diuzit ur wiki hag ur bajenn da enporzhiañ.\nMiret e vo deiziadoù ar stummmoù hag anvioù an aozerien.\nMiret eo an holl enporzhiadennoù etrewiki e-barzh [[Special:Log/import|log an enporzhiadennoù]].", + "import-interwiki-sourcewiki": "Wiki mammenn :", + "import-interwiki-sourcepage": "Pajenn orin :", "import-interwiki-history": "Eilañ holl stummoù istor ar bajenn-mañ", "import-interwiki-templates": "Lakaat e-barzh an holl batromoù", "import-interwiki-submit": "Enporzhiañ", @@ -2311,6 +2318,7 @@ "newimages-summary": "Diskouez a ra ar bajenn dibar-mañ roll ar restroù diwezhañ bet enporzhiet.", "newimages-legend": "Sil", "newimages-label": "Anv ar restr (pe darn anezhi) :", + "newimages-showbots": "Diskouez an ezporzhiadennoù graet gant robotoù", "noimages": "Netra da welet.", "ilsubmit": "Klask", "bydate": "dre an deiziad anezho", @@ -2757,8 +2765,11 @@ "watchlistedit-raw-done": "Nevesaet eo bet ho roll evezhiañ.", "watchlistedit-raw-added": "Ouzhpennet ez eus bet {{PLURAL:$1|1 pajenn|$1 pajenn}} :", "watchlistedit-raw-removed": "Tennet ez eus bet {{PLURAL:$1|1 pajenn|$1 pajenn}} :", + "watchlistedit-clear-title": "Roll evezhiañ goulloet", "watchlistedit-clear-legend": "Diverkañ ar roll-evezhiañ", + "watchlistedit-clear-explain": "Lamet e vo an holl ditloù eus ho roll evezhiañ", "watchlistedit-clear-titles": "Titloù :", + "watchlistedit-clear-done": "Goulloet eo bet ho roll evezhiañ.", "watchlistedit-clear-removed": "Dilamet ez eus bet {{PLURAL:$1|1 titl|$1 a ditloù}} :", "watchlistedit-too-many": "Re a bajennoù zo da ziskwel amañ.", "watchlisttools-clear": "Diverkañ ar roll-evezhiañ", diff --git a/languages/i18n/bs.json b/languages/i18n/bs.json index bf0f1e2c1b..c9ff9c8f18 100644 --- a/languages/i18n/bs.json +++ b/languages/i18n/bs.json @@ -183,8 +183,11 @@ "permalink": "Trajni link", "print": "Štampa", "view": "Pogled", + "view-foreign": "Vidi na $1", "edit": "Uredi", + "edit-local": "Uredi lokalni opis", "create": "Napravi", + "create-local": "Dodaj lokalni opis", "editthispage": "Uredite ovu stranicu", "create-this-page": "Napravi ovu stranicu", "delete": "Obriši", @@ -224,6 +227,7 @@ "jumptonavigation": "navigacija", "jumptosearch": "traži", "view-pool-error": "Žao nam je, serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da pregleda ovu stranicu.\nMolimo pričekajte trenutak prije nego što ponovno pokušate pristupiti ovoj stranici.\n\n$1", + "generic-pool-error": "Nažalost, serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da vidi ovaj resurs.\nMolimo pričekajte trenutak prije nego što ponovo pokušate da mu pristupite.", "pool-timeout": "Zaustavi čekanje na zaključavanje", "pool-queuefull": "Red na pool je prenapunjen", "pool-errorunknown": "Nepoznata greška", @@ -267,6 +271,9 @@ "hidetoc": "sakrij", "collapsible-collapse": "sklopi", "collapsible-expand": "Proširi", + "confirmable-confirm": "Da li {{GENDER:$1|ste}} sigurni?", + "confirmable-yes": "Da", + "confirmable-no": "Ne", "thisisdeleted": "Pogledaj ili vrati $1?", "viewdeleted": "Pogledaj $1?", "restorelink": "{{PLURAL:$1|$1 izbrisana izmjena|$1 izbrisanih izmjena}}", @@ -296,6 +303,9 @@ "nospecialpagetext": "Tražili ste nevaljanu posebnu stranicu.\n\nSpisak valjanih posebnih stranica se može naći na [[Special:SpecialPages|{{int:specialpages}}]].", "error": "Greška", "databaseerror": "Greška u bazi", + "databaseerror-text": "Došlo je do greške u upitu baze podataka. \nMožda je u pitanju softverska greška.", + "databaseerror-textcl": "Došlo je do greške u upitu baze podataka.", + "databaseerror-query": "Upit: $1", "databaseerror-function": "Funkcija: $1", "databaseerror-error": "Greška: $1", "laggedslavemode": "'''Upozorenje''': Stranica, možda, nije ažurirana.", @@ -346,7 +356,8 @@ "invalidtitle-knownnamespace": "Neispravan naslov s imenskim prostorom \"$2\" i tekstom \"$3\"", "invalidtitle-unknownnamespace": "Neispravan naslov s imenskim prostorom br. $1 i tekstom \"$2\"", "exception-nologin": "Niste prijavljeni", - "exception-nologin-text": "[[Special:Userlogin|Prijavite se]] da biste pristupili ovoj stranici ili radnji.", + "exception-nologin-text": "Prijavite se da biste pristupili ovoj stranici ili radnji.", + "exception-nologin-text-manual": "Molimo $1 da biste pristupili ovoj stranici ili radnji.", "virus-badscanner": "Loša konfiguracija: nepoznati anti-virus program: ''$1''", "virus-scanfailed": "skeniranje nije uspjelo (code $1)", "virus-unknownscanner": "nepoznati anti-virus program:", @@ -468,13 +479,17 @@ "retypenew": "Unesite ponovo novu šifru:", "resetpass_submit": "Odredi šifru i prijavi se", "changepassword-success": "Vaša šifra/lozinka je uspiješno promjenjena!", + "changepassword-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.", "resetpass_forbidden": "Šifre ne mogu biti promjenjene", "resetpass-no-info": "Morate biti prijavljeni da bi ste pristupili ovoj stranici direktno.", "resetpass-submit-loggedin": "Promijeni šifru", "resetpass-submit-cancel": "Odustani", "resetpass-wrong-oldpass": "Privremena ili trenutna šifra nije validna.\nMožda ste već uspješno promijenili Vašu šifru ili ste tražili novu privremenu šifru.", + "resetpass-recycled": "Molimo resetirajte vašu lozinku u nešto drugo od vaše trenutne lozinke.", + "resetpass-temp-emailed": "Prijavili ste se sa privremenim kodom iz e-pošte.\nDa biste završili prijavljivanje morate postaviti novu lozinku ovdje:", "resetpass-temp-password": "Privremena šifra:", "resetpass-abort-generic": "Promjenu šifre/lozinke je prekinula ekstenzija.", + "resetpass-expired": "Vaša lozinka je istekla. Postavite novu lozinku da biste se prijavili.", "passwordreset": "Poništavanje šifre", "passwordreset-text-one": "Ispunite ovaj obrazac da biste resetovali Vašu šifru/lozinku.", "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako biste dobili privremenu lozinku putem e-pošte.}}", @@ -503,6 +518,7 @@ "changeemail-password": "Tvoja šifra/lozinka za {{SITENAME}}:", "changeemail-submit": "Promijeni e-mail", "changeemail-cancel": "Otkaži", + "resettokens-token-label": "$1 (trenutna vrijednost: $2)", "bold_sample": "Podebljan tekst", "bold_tip": "Podebljan tekst", "italic_sample": "Kurzivan tekst", @@ -615,12 +631,14 @@ "edit-gone-missing": "Stranica se nije mogla osvježiti.\nIzgleda da je obrisana.", "edit-conflict": "Sukob izmjena.", "edit-no-change": "Vaša izmjena je ignorirana, jer nije bilo promjena teksta stranice.", + "postedit-confirmation-created": "Stranica je napravljena.", "postedit-confirmation-saved": "Vaša izmjena je sačuvana.", "edit-already-exists": "Stranica nije mogla biti kreirana.\nIzgleda da već postoji.", "defaultmessagetext": "Uobičajeni tekst poruke", "invalid-content-data": "Nevaljani podaci sadržaja", "content-not-allowed-here": "Sadržaj napisan u obliku \"$1\" nije dozvoljen na stranici [[$2]]", - "editwarning-warning": "Napuštanje ove stranice može dovesti do gubitka svih promjena koje ste načinili.\nAko ste prijavljeni, možete isključiti ovo upozorenje u Sekciji za \"Uređivanje\" vaših opcija.", + "editwarning-warning": "Napuštanje ove stranice može dovesti do gubitka svih promjena koje ste načinili.\nAko ste prijavljeni, možete isključiti ovo upozorenje u Sekciji za \"{{int:prefs-editing}}\" vaših opcija.", + "editpage-notsupportedcontentformat-title": "Format sadržaja nije podržan", "content-model-wikitext": "wikitekst", "content-model-text": "obični tekst", "content-model-javascript": "JavaScript", @@ -910,6 +928,7 @@ "prefs-displayrc": "Postavke izgleda", "prefs-displaywatchlist": "Postavke izgleda", "prefs-diffs": "Razlike", + "prefs-help-prefershttps": "Ova podešavanja će stupiti na snagu pri sljedećoj prijavi.", "email-address-validity-valid": "Izgleda valjano", "email-address-validity-invalid": "Neophodna valjana adresa!", "userrights": "Postavke korisničkih prava", @@ -929,7 +948,7 @@ "userrights-notallowed": "Vaš račun nema privilegije da dodaje ili oduzima prava korisnika.", "userrights-changeable-col": "Grupe koje možete mijenjati", "userrights-unchangeable-col": "Grupe koje ne možete mijenjati", - "userrights-conflict": "Sukob u korisničkim pravima! Molimo pošaljite Vaše promjene ponovno.", + "userrights-conflict": "Sukob u izmjeni korisničkih prava! Molimo da razmotrite i potvrdite Vaše promjene.", "userrights-removed-self": "Uspješno ste uklonili vlastite prava. Zbog toga više niste u stanju pristupiti ovoj stranici.", "group": "Grupa:", "group-user": "Korisnici", @@ -1281,6 +1300,7 @@ "license-nopreview": "(Pregled nije dostupan)", "upload_source_url": " (validni, javno dostupni URL)", "upload_source_file": " (datoteka na Vašem računaru)", + "listfiles-delete": "obriši", "listfiles-summary": "Ova posebna stranica prikazuje sve postavljene datoteke.", "listfiles_search_for": "Traži medije po imenu:", "imgfile": "datoteka", @@ -1364,7 +1384,9 @@ "randompage": "Slučajna stranica", "randompage-nopages": "Nema stranica u {{PLURAL:$2|slijedećem imenskom prostoru|slijedećim imenskim prostorima}}: \"$1\".", "randomincategory": "Slučajna stranica u kategoriji", - "randomincategory-selectcategory-submit": "Idi", + "randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].", + "randomincategory-category": "Kategorija:", + "randomincategory-legend": "Slučajna stranica u kategoriji", "randomredirect": "Slučajno preusmjerenje", "randomredirect-nopages": "Ne postoje preusmjerenja u imenskom prostoru \"$1\".", "statistics": "Statistike", @@ -1449,6 +1471,7 @@ "protectedpages-expiry": "Istječe", "protectedpages-reason": "Razlog", "protectedpages-unknown-timestamp": "Nepoznato", + "protectedpages-unknown-performer": "Nepoznati korisnik", "protectedtitles": "Zaštićeni naslovi", "protectedtitlesempty": "Nijedan naslov članka trenutno nije zaštićen ovim parametrima.", "listusers": "Spisak korisnika", @@ -1540,6 +1563,8 @@ "listgrouprights-removegroup-self": "Može ukloniti {{PLURAL:$2|grupu|grupe|grupa}} sa svog računa: $1", "listgrouprights-addgroup-self-all": "Može dodati sve grupe na svoj račun", "listgrouprights-removegroup-self-all": "Može ukloniti sve grupe sa svog računa", + "listgrouprights-namespaceprotection-namespace": "Imenski prostor", + "trackingcategories-nodesc": "Opis nije dostupan.", "mailnologin": "Nema adrese za slanje", "mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]]\ni imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]]\nda biste slali e-poštu drugim korisnicima.", "emailuser": "Pošalji e-poštu ovom korisniku", @@ -1792,7 +1817,7 @@ "autoblockid": "Automatska blokada #$1", "block": "Blokiraj korisnika", "unblock": "Odblokiraj korisnika", - "blockip": "Blokiraj korisnika", + "blockip": "Blokiraj {{GENDER:$1|korisnika|korisnicu}}", "blockip-legend": "Blokiranje korisnika", "blockiptext": "Upotrebite donji upitnik da biste uklonili prava pisanja sa određene IP adrese ili korisničkog imena. Ovo bi trebalo da bude urađeno samo da bi se spriječio vandalizam, i u skladu sa [[{{MediaWiki:Policy-url}}|smjernicama]]. Unesite konkretan razlog ispod (na primjer, navodeći koje stranice su vandalizovane).", "ipaddressorusername": "IP adresa ili korisničko ime:", @@ -2007,7 +2032,6 @@ "import": "Uvoz stranica", "importinterwiki": "Međuwiki uvoz", "import-interwiki-text": "Izaberi wiki i naslov stranice za uvoz.\nDatumi revizija i imena autora će biti sačuvani.\nSve akcije pri međuwiki uvozu će biti zapisane u [[Special:Log/import|zapisu uvoza]].", - "import-interwiki-source": "Izvorna wiki/stranica:", "import-interwiki-history": "Kopiraj sve verzije historije za ovu stranicu", "import-interwiki-templates": "Uključi sve šablone", "import-interwiki-submit": "Uvoz", @@ -2766,6 +2790,7 @@ "version-ext-colheader-license": "Licenca", "version-ext-colheader-description": "Opis", "version-ext-colheader-credits": "Autori", + "version-license-title": "Licenca za $1", "version-poweredby-credits": "Ova wiki je zasnovana na '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.", "version-poweredby-others": "ostali", "version-credits-summary": "Željeli bismo se zahvaliti sljedećim ljudima na njihovom doprinosu [[Special:Version|MediaWikiju]].", @@ -2966,5 +2991,8 @@ "expand_templates_remove_comments": "Ukloni komentare", "expand_templates_remove_nowiki": "Onemogući oznake u rezultatima", "expand_templates_generate_xml": "Prikaži XML stablo parsera", - "expand_templates_preview": "Pregled" + "expand_templates_preview": "Pregled", + "pagelang-name": "Stranica", + "pagelang-language": "Jezik", + "pagelang-select-lang": "Izaberi jezik" } diff --git a/languages/i18n/ca.json b/languages/i18n/ca.json index 33eeb6e818..e9b571fcdd 100644 --- a/languages/i18n/ca.json +++ b/languages/i18n/ca.json @@ -1473,6 +1473,7 @@ "randomincategory-invalidcategory": "«$1» no és un nom de categoria vàlid.", "randomincategory-nopages": "No hi ha pàgines a la categoria [[:Category:$1|$1]].", "randomincategory-category": "Categoria:", + "randomincategory-legend": "Pàgina a l’atzar en la categoria", "randomredirect": "Redirecció a l'atzar", "randomredirect-nopages": "No hi ha cap redirecció a l'espai de noms «$1».", "statistics": "Estadístiques", @@ -1766,7 +1767,7 @@ "delete-legend": "Elimina", "historywarning": "'''Atenció:''' La pàgina que esteu a punt d'eliminar té un historial amb $1 {{PLURAL:$1|versió|versions}}, aproximadament:", "confirmdeletetext": "Esteu a punt d'esborrar de forma permanent una pàgina o imatge i tot el seu historial de la base de dades.\nConfirmeu que realment ho voleu fer, que enteneu les\nconseqüències, i que el que esteu fent està d'acord amb la [[{{MediaWiki:Policy-url}}|política]] del projecte.", - "actioncomplete": "S'ha realitzat l'acció de manera satisfactòria.", + "actioncomplete": "Acció realitzada", "actionfailed": "L'acció ha fallat", "deletedtext": "S'ha suprimit «$1».\nVegeu $2 per a un registre dels esborrats més recents.", "dellogpage": "Registre d'eliminació", diff --git a/languages/i18n/cdo.json b/languages/i18n/cdo.json index 23a3b46e05..9398d454d4 100644 --- a/languages/i18n/cdo.json +++ b/languages/i18n/cdo.json @@ -167,7 +167,7 @@ "history_short": "歷史", "updatedmarker": "趁我最後蜀回訪問開始更新", "printableversion": "會拍印其版本", - "permalink": "固定链接", + "permalink": "永久鏈接", "print": "拍印", "view": "覷蜀覷", "edit": "修改", @@ -233,8 +233,8 @@ "badaccess": "權限錯誤", "badaccess-group0": "汝𣍐使做汝要求其茲蜀萆動作。", "badaccess-groups": "汝要求其動作著$2底裏用戶才會做其:$1{{PLURAL:$1}}", - "versionrequired": "需要版本$1其媒體維基", - "versionrequiredtext": "需要媒體維基其版本$1來使茲蜀頁。\n覷[[Special:Version|版本頁面]]。", + "versionrequired": "需要版本$1其MediaWiki", + "versionrequiredtext": "需要MediaWiki其版本$1來使茲蜀頁。\n覷[[Special:Version|版本頁面]]。", "ok": "好", "retrievedfrom": "趁「$1」退過來", "youhavenewmessages": "汝有$1($2)。", @@ -252,8 +252,8 @@ "toc": "目錄", "showtoc": "顯示", "hidetoc": "藏起", - "collapsible-collapse": "崩潰", - "collapsible-expand": "擴展", + "collapsible-collapse": "隱", + "collapsible-expand": "現", "thisisdeleted": "卜看或者恢復$1?", "viewdeleted": "看$1?", "restorelink": "$1萆乞刪掉其修改{{PLURAL:$1}}", @@ -282,7 +282,7 @@ "nosuchspecialpage": "無總款其特殊頁", "nospecialpagetext": "汝請求蜀萆𣍐合法其特殊頁面。\n\n合法其特殊頁面清單會使敆[[Special:SpecialPages|{{int:特殊頁面}}]]頁面討著", "error": "鄭咯", - "databaseerror": "數據庫有鄭", + "databaseerror": "數據庫有綻", "laggedslavemode": "'''警告:'''頁面可能無最近其更新。", "readonly": "數據庫乞鎖起咯", "readonlytext": "Só-gé̤ṳ-kó cī-buàng ké̤ṳk nè̤ng sō̤ kī lāu, mâ̤-sāi siā sĭng dèu-mĕ̤k hĕ̤k có̤ siŭ-gāi, ô kō̤-nèng sê ôi-lāu nĭk-siòng mì-hô, cĭ-hâiu cêu â̤ ciáng-siòng.\n\nSō̤ kī só-gé̤ṳ-kó gì guāng-lī-uòng cūng-kuāng gāi-sék: $1", @@ -302,14 +302,14 @@ "badtitle": "獃其標題", "perfcached": "下底其數據乞緩存固加可能伓是最新其。{{PLURAL:$1|$1條結果}}會敆緩存臺中討著。", "perfcachedts": "下底其數據已經緩存過了,最後更新遘$1。{{PLURAL:$4|$4條結果}}會敆緩存臺中討著。", - "querypage-no-updates": "茲蜀頁其更新乞禁止了。\n數據嚽塊現刻時𣍐更新了。", + "querypage-no-updates": "茲蜀頁其更新乞禁止了。\n數據租塊現刻時𣍐更新了。", "viewsource": "看源代碼", "viewsource-title": "覷蜀覷$1其源代碼", "actionthrottled": "行動乞取消咯", "protectedpagetext": "茲頁已經乞保護起咯,𣍐使修改或者其它行動。", "viewsourcetext": "汝會使看共複製茲蜀頁其源代碼:", "viewyourtext": "汝會使覷蜀覷或者複製茲頁'''汝其修改'''其源代碼:", - "editinginterface": "'''警告:'''汝敆𡅏修改其頁面廮𡅏提供茲蜀萆軟件其界面文本。\n茲蜀頁其改變會影響遘其它用戶其用戶界面其顯示。\n如果卜想修改維基其翻譯,起動遘媒體維基本地化計劃[//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]。", + "editinginterface": "'''警告:'''汝敆𡅏修改其頁面廮𡅏提供茲蜀萆軟件其界面文本。\n茲蜀頁其改變會影響遘其它用戶其用戶界面其顯示。\n如果卜想修改維基其翻譯,起動遘MediaWiki本地化計劃[//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]。", "namespaceprotected": "汝𣍐使修改敆'''$1'''命名空間其頁面。", "customcssprotected": "汝𣍐使修改茲蜀萆CSS頁面,因為伊有別蜀隻用戶其設定。", "customjsprotected": "汝𣍐使修改茲蜀萆JavaScript頁面,因為伊有別蜀隻用戶其設定。", @@ -340,7 +340,7 @@ "userlogin-signwithsecure": "使安全其連接", "yourdomainname": "汝其域名:", "password-change-forbidden": "汝𣍐使敆茲蜀萆維基百科𡅏修改密碼。", - "externaldberror": "可能是驗證數據庫鄭咯,或者是汝𣍐使升級汝其外部賬戶。", + "externaldberror": "可能是驗證數據庫綻咯,或者是汝𣍐使升級汝其外部賬戶。", "login": "躒底", "nav-login-createaccount": "躒底/開賬戶", "userlogin": "躒底/開賬戶", @@ -357,6 +357,7 @@ "gotaccountlink": "躒底", "userlogin-resetlink": "躒底其資料𣍐記咯?", "userlogin-resetpassword-link": "密码𣍐記?", + "userlogin-helplink2": "對手汝躒底", "createacct-emailrequired": "電子郵件地址", "createacct-emailoptional": "電子郵件地址(愛寫就寫)", "createacct-email-ph": "輸底汝其電子郵件地址", @@ -389,7 +390,7 @@ "passwordtooshort": "密碼著設最少{{PLURAL:$1|$1萆字符}}。", "password-name-match": "汝其密碼硬著共汝其用戶名𣍐蜀様才會使其。", "password-login-forbidden": "茲蜀萆用戶名共密碼應經乞禁止去了。", - "mailmypassword": "共新密碼發遘電子郵件", + "mailmypassword": "重新設置密碼", "passwordremindertitle": "{{SITENAME}}其新其臨時密碼", "passwordsent": "新密碼已經寄遘「$1」註冊其電子郵件地址了。\n收遘後,請再躒底蜀頭部。", "mailerror": "發電子郵件有賺:$1", @@ -415,6 +416,7 @@ "resetpass-submit-cancel": "取消", "resetpass-temp-password": "臨時密碼:", "passwordreset": "重置密碼", + "passwordreset-text-one": "完成者隻表單,通過電子郵件發送臨時密碼來重新設定汝其密碼。", "passwordreset-legend": "重置密碼", "passwordreset-username": "用戶名:", "passwordreset-domain": "域名:", @@ -817,7 +819,7 @@ "sp-contributions-search": "尋討貢獻", "sp-contributions-username": "IP地址或者用戶名:", "sp-contributions-submit": "尋討", - "whatlinkshere": "什乇鏈遘嚽塊", + "whatlinkshere": "甚乇鏈遘租塊", "whatlinkshere-title": "鏈接遘$1其頁面", "whatlinkshere-page": "頁面:", "linkshere": "下底其頁面鏈接遘'''[[:$1]]''':", @@ -869,7 +871,7 @@ "block-log-flags-nocreate": "防止開賬戶", "ipb_expiry_invalid": "過期時間無效。", "ipb_already_blocked": "「$1」已經乞封鎖了", - "lockconfirm": "正式,我卜想鎖定數據庫。", + "lockconfirm": "正是,我卜想鎖定數據庫。", "lockbtn": "鎖定數據庫", "unlockbtn": "開數據庫", "lockdbsuccesssub": "數據庫鎖定好了", @@ -893,12 +895,13 @@ "allmessagesname": "名", "allmessagesdefault": "默認其消息文字", "allmessagescurrent": "現時其文字", - "allmessagestext": "茲是敆媒體維基命名空間底裏系統消息其蜀萆單單。\n如果汝卜想貢獻通用其媒體維基本地化服務,請訪問[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation 媒體維基本地化]共[//translatewiki.net translatewiki.net]。", + "allmessagestext": "茲是敆MediaWiki命名空間裏勢系統消息其蜀萆單單。\n如果汝卜想貢獻通用其MediaWiki基本地化服務,起動汝訪問[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki本地化]共[//translatewiki.net translatewiki.net]。", "allmessagesnotsupportedDB": "茲蜀頁𣍐使其,因為'''$wgUseDatabaseMessages'''已經乞禁止去了。", "thumbnail-more": "放大", "tooltip-pt-userpage": "汝其用戶頁", "tooltip-pt-mytalk": "汝其討論頁", "tooltip-pt-preferences": "汝其設定", + "tooltip-pt-watchlist": "汝監視其頁面有改過其單單", "tooltip-pt-mycontris": "汝其貢獻其單單", "tooltip-pt-login": "希望汝躒底其;當然,無逼汝總款做。", "tooltip-pt-logout": "躒出", @@ -919,12 +922,14 @@ "tooltip-n-mainpage-description": "覷蜀覷頭頁", "tooltip-n-recentchanges": "維基百科最近其改變其單單", "tooltip-n-randompage": "隨便罔看", - "tooltip-t-whatlinkshere": "鏈遘嚽塊其所有維基頁面其單單", + "tooltip-t-whatlinkshere": "鏈遘租塊其所有維基頁面其單單", + "tooltip-t-recentchangeslinked": "鏈遘茲頁其頁面其最近修改", "tooltip-t-contributions": "茲蜀用戶其貢獻單單", "tooltip-t-emailuser": "共茲蜀隻用戶發電子郵件", "tooltip-t-upload": "上傳文件", "tooltip-t-specialpages": "特殊頁其單單", "tooltip-t-print": "茲蜀頁其會拍印其版本", + "tooltip-t-permalink": "茲頁茲版本其永久鏈接", "tooltip-ca-nstab-main": "看蜀看內容頁", "tooltip-ca-nstab-user": "覷蜀覷用戶頁", "tooltip-ca-nstab-special": "茲是蜀萆特殊頁,汝𣍐使修改茲蜀頁。", diff --git a/languages/i18n/ce.json b/languages/i18n/ce.json index b7127fb414..cad5a9b108 100644 --- a/languages/i18n/ce.json +++ b/languages/i18n/ce.json @@ -227,8 +227,8 @@ "aboutpage": "Project:Цуьнах лаьцна", "copyright": "Чулацам лело мега $1 лицензица (кхениг билгалйина яцахь).", "copyrightpage": "{{ns:project}}:Авторан бакъонаш", - "currentevents": "ХӀинцлера хилларш", - "currentevents-url": "Project:ХӀинцлера хилларш", + "currentevents": "ХӀинцалера хилларш", + "currentevents-url": "Project:ХӀинцалера хилларш", "disclaimers": "Бехк тӀецалацар", "disclaimerpage": "Project:Бехк тӀецалацар", "edithelp": "ГӀо оцу тадарна", @@ -676,7 +676,7 @@ "last": "хьалх.", "page_first": "хьалхара", "page_last": "тlаьххьара", - "histlegend": "Кхетор: (хlинцлера.) — йолучу башхон къастам; (хьалх.) — хьалхлерачу башхон къастам; '''ж''' — жимо бозалца болу хийцам.", + "histlegend": "Кхетор: (хӀинцалера.) — йолучу башхон къастам; (хьалх.) — хьалхлерачу башхон къастам; '''ж''' — жимо бозалца болу хийцам.", "history-fieldset-title": "АгӀона хийцамаш", "history-show-deleted": "ДӀаяхинарш", "histfirst": "ширниш", @@ -705,7 +705,7 @@ "revdelete-nooldid-text": "Ахьа хӀара функци кхочушъян билгалйина яц Ӏалашонан верси (я версеш).", "revdelete-no-file": "Иштта файл яц.", "revdelete-show-file-confirm": "Бакъалла лаьий хьуна дӀаяьккхина файлан версега хьажа «$1» $2 тӀера, $3?", - "revdelete-show-file-submit": "Хlаъ", + "revdelete-show-file-submit": "ХӀаъ", "revdelete-selected-text": "{{PLURAL:$1|Файлан хаьржина верси|Файлан хаьржина версеш}} [[:$2]]:", "revdelete-selected-file": "{{PLURAL:$1|Файлан хаьржина верси|Файлан хаьржина версеш}} [[:$2]]:", "logdelete-selected": "Тептар чура {{PLURAL:$1|хаьржина дӀаяздар|хаьржина дӀаяздарш}}:", @@ -929,7 +929,7 @@ "userrights-nologin": "Куьйгалхочунна бакъо йолу [[Special:UserLogin|дӀаяздарца]] ло декъашхочун бакъо.", "userrights-notallowed": "Хьан дӀаяздарца магийна дац декъашхошна бакъо яла а дӀаяккха а.", "userrights-changeable-col": "Хьона хийца луш йолу бакъонаш", - "userrights-unchangeable-col": "Хьона хийца луш йоцу бакъонаш", + "userrights-unchangeable-col": "Хьуна хийца луш йоцу бакъонаш", "group": "Тоба:", "group-user": "Декъашхой", "group-autoconfirmed": "Ша тӀелаьцболу декъашхой", @@ -1334,7 +1334,7 @@ "statistics-pages-desc": "Массо вики агlонаш, дийцаре агlонашцани, дlасахьаждарш а кхин дерш.", "statistics-files": "Чуяьхна файлаш", "statistics-edits": "Нисдаран дукхалла {{grammar:genitive|{{SITENAME}}}} дlа йолайаларца", - "statistics-edits-average": "Юккъера агӀонан нисдаран терахь", + "statistics-edits-average": "АгӀонан нисдарийн юкъара дукхалла", "statistics-views-total": "Массо хьажарш", "statistics-views-total-desc": "Ма лара дӀаяьхна а белхан а агӀонашка хьажар", "statistics-views-peredit": "Нисдаре хьажарш", @@ -1422,7 +1422,7 @@ "usercreated": "{{GENDER:$3|дӀавазвелла|дӀаязелла}} $1 $2", "newpages": "Керла агӀонаш", "newpages-username": "Декъашхо:", - "ancientpages": "Яззамаш оцу терахьца тӀаьххьара тадар дина долу", + "ancientpages": "ТӀехьара терахьца тадар дина яззамаш", "move": "ЦӀе хийца", "movethispage": "ХӀокху агӀон цӀе хийца", "unusedimagestext": "Дехар до, тидаме эца, кхин йолу дуьнана машан-меттигаш а лелош хила мега нийсса йогӀу хьажораг (URL) хӀокху хӀуман, хӀокху могӀаме йогӀуш ялахь яцахь а иза хила мега жигара лелош.", @@ -1683,7 +1683,7 @@ "undelete-error": "АгӀо меттахӀоттаяран гӀалат", "undelete-error-short": "Файл меттахӀоттаяран гӀалат: $1", "undelete-error-long": "Файл меттахӀоттош гӀалат даьлла:\n\n$1", - "undelete-show-file-submit": "Хlаъ", + "undelete-show-file-submit": "ХӀаъ", "namespace": "Цlерийн ана:", "invert": "Хаьржинарг къайлаяккха", "tooltip-invert": "ХӀоттае хӀара билгало, хаьржинчу цӀерийн меттиган агӀонашан хийцамаш къайлабаха (кхин дихкина цӀерийн меттигаш, гайтина елахь)", @@ -1694,7 +1694,7 @@ "contributions-title": "{{GENDER:$1|Декъашхочун}} къинхьегам $1", "mycontris": "Сан къинхьегам", "contribsub2": "Къинхьегам $1 ($2)", - "contributions-userdoesnotexist": "«$1» декъашхочун дӀаяздар дӀаяздина яц.", + "contributions-userdoesnotexist": "«$1» ишта декъашхочун дӀаяздар дац.", "nocontribs": "Дехарца хийцамаш цакарий.", "uctop": "(карара)", "month": "Баттачохь (я хьалхе):", @@ -1791,7 +1791,7 @@ "noautoblockblock": "ша блоктухарг дӏаяйина", "createaccountblock": "цамагдо керла дӀаяздарш кхоллар", "emailblock": "цамаго кехаташ кхехӀита", - "blocklist-nousertalk": "шин дийцаре агӀо тая лууш дац", + "blocklist-nousertalk": "шин дийцаре агӀо таян луш дац", "ipblocklist-empty": "Блоктохаран могӀам баьсса бу.", "ipblocklist-no-results": "И адрес блоктоьхна дац.", "blocklink": "блоктоха", @@ -1809,7 +1809,7 @@ "block-log-flags-nocreate": "цамагдо керла дӏаяздарш кхоллар", "block-log-flags-noautoblock": "ша блоктухарг дӏаяйина", "block-log-flags-noemail": "цамаго кехаташ кхехӀита", - "block-log-flags-nousertalk": "шин дийцаре агӀо тая лууш дац", + "block-log-flags-nousertalk": "шин дийцаре агӀо таян луш дац", "block-log-flags-angry-autoblock": "латина шуьйра автоблоктохар", "block-log-flags-hiddenname": "декъашхочун цӀе къайлаяьккхина", "range_block_disabled": "Куьйгалхошна диапазонашна блоктоха цамага до.", @@ -1863,7 +1863,7 @@ "revertmove": "юхаяккха", "delete_and_move": "Цle а хуьйцуш дӀаяккха", "delete_and_move_text": "== ДӀаяккха хьокъ ю ==\nИ цӀе йолу аг1о «[[:$1]]» йолуш ю. \nЛаьий хьуна и дӀаяккха, цӀе хийца таро хилийта?", - "delete_and_move_confirm": "Хlаъ, дӀаяккха хlара агlо", + "delete_and_move_confirm": "ХӀаъ, дӀаяккха хӀара агӀо", "delete_and_move_reason": "ДӀаяьккхина цӀе хийца я таро хилийта «[[$1]]»", "selfmove": "АгӀона цӏе хийца йиш яц: и цӏе хӏокху агӏона йолуш ю.", "immobile-source-page": "ХӀокху агӏона цӏе хийца йиш яц.", diff --git a/languages/i18n/ckb.json b/languages/i18n/ckb.json index 75eb8fb0df..0c468b5ea2 100644 --- a/languages/i18n/ckb.json +++ b/languages/i18n/ckb.json @@ -783,6 +783,7 @@ "powersearch-togglelabel": "تاوتوێ بکە:", "powersearch-toggleall": "ھەموو", "powersearch-togglenone": "ھیچیان", + "powersearch-remember": "ھەڵبژاردەکانت بۆ گەڕانەکانی تر لە بیر بێت", "search-external": "گەڕانی دەرەکی", "searchdisabled": "گەڕانی {{SITENAME}} ئێستە کار ناکات.\nدەتوانی بۆ ئێستا لە گەڕانی گووگڵ کەڵک وەرگری.\nلەیادت بێت لەوانەیە پێرستەکانیان بۆ گەڕانی ناو {{SITENAME}}، کات‌بەسەرچوو بێت.", "preferences": "ھەڵبژاردەکان", @@ -842,7 +843,7 @@ "default": "بنچینەیی", "prefs-files": "پەڕگەکان", "prefs-custom-css": "CSSی دڵخواز", - "prefs-custom-js": "JSی دڵخواز", + "prefs-custom-js": "جاڤاسکریپتی دڵخواز", "prefs-common-css-js": "سی‌ئێس‌ئێس/جاڤاسکریپتی ھاوبەش بۆ گشت پێستەکان:", "prefs-reset-intro": "دەتوانی لەم لاپەڕە بۆ گەڕانەوەی هەڵبژاردەکانت بۆ بنچینەیی ماڵپەر کەڵک وەرگریت.\nگەر ئەوە بکەی ئیتر گۆڕانەکەت ناگەڕێتەوە.", "prefs-emailconfirm-label": "پشتڕاستکردنەوەی ئیمەیل:", @@ -1793,6 +1794,7 @@ "movepagetext-noredirectfixer": "بەکارھێنانی ئەم فۆرمەی خوارەوە ناوی پەڕەیەک دەگۆڕێت، بە گواستنەوەی ھەموو مێژووەکەی بۆ ناوی نوێ.\nناوە کۆنەکە دەبێتە پەڕەیەکی ڕەوانەکردنەوە بۆ ناوە نوێکە.\nدڵنیا بە کە [[Special:DoubleRedirects|دووجار ڕەوانەکراوەکان]] یان [[Special:BrokenRedirects|ڕەوانەکراوە شکاوەکان]] تاقی بکەیتەوە.\nتۆ بەرپرسیاری لەوەی کە دڵنیا ببیتەوە بەستەرەکان ھەر پێوەندییان ھەیە بەو شوێنە کە چاوەڕوان دەکرێت.\n\nدەبێت بزانی کە پەڕەکە '''ناگوازرێتەوە''' ئەگەر پێشتر پەڕەیەک بە ناوە نوێکەوە ھەبێت، مەگەر ئەوەی کە پەڕەکە واڵا یان ڕەوانەکراوەیەک بێت و ھیچ مێژووی گۆڕاندنی پێشووی نەبێت.\nئەمە بەو واتایە کە ئەگەر ھەڵەیەک بکەی دەتوانی ناوی پەڕەکە دیسانەوە بگۆڕی بۆ ناوی پێشووی، و ناتوانی بیخەیتە جێگەی پەڕەیەک کە ھەنووکە ھەیە.\n\n'''ھۆشیار بە!'''\nئەمە دەتوانێت گۆڕانێکی زۆر نابەجێ و چاوەڕێنەکراو بێت بۆ پەڕەیەکی بەناوبانگ؛\nتکایە پێش گۆڕینی ناو باش بیر لە ئاکامەکەی بکەوە.", "movepagetalktext": "پەڕەی وتووێژی پەیوەندیداری بە شێوەی خۆکار لەگەڵیدا دەگوازرێتەوە، '''مەگەر:'''\n* پەڕەیەکی وتووێژی ناواڵا پێشتر ھەبێت لە ژێر ناوە نوێکەدا، یان\n* ئەو چوارچێوەی خوارەوە لێنەدراو بکەی.\n\nلەو حاڵەتەدا، ئەگەر بتەوێت بیگوازیتەوە ناچار دەبیت بە شێوەی دەستی بیگوازیتەوە یان تێکەڵیان بکەی.", "movearticle": "ئەم پەڕەیە بگوازەوە:", + "movecategorypage-warning": "ھۆشدار: تۆ خەریکی گواستنەوەی پەڕەی پۆلی. تکایە ئەمە لەبەرچاو بگرە تەنیا پەڕەکە دەگوازرێتەوە و پەڕەکانی ناو پۆلە کۆنەکە ناچێتە ناو پۆلە نوێکەوە.", "movenologintext": "بۆ گواستنەوەی پەڕەیەک، ئەشێ ببی بە ئەندام و [[Special:UserLogin|لە ژوورەوە]] بیت.", "movenotallowed": "ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەکان.", "movenotallowedfile": "ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی پەڕگەکان.", diff --git a/languages/i18n/da.json b/languages/i18n/da.json index cc426f3be2..f5ef28b916 100644 --- a/languages/i18n/da.json +++ b/languages/i18n/da.json @@ -1461,8 +1461,7 @@ "randomincategory": "Tilfældig side i kategori", "randomincategory-invalidcategory": "\"$1\" er ikke et gyldigt kategorinavn.", "randomincategory-nopages": "Der er ingen sider i [[:Category:$1]].", - "randomincategory-selectcategory": "Få tilfældig side fra kategori: $1 $2.", - "randomincategory-selectcategory-submit": "Gå til", + "randomincategory-category": "Kategori:", "randomredirect": "Tilfældige henvisninger", "randomredirect-nopages": "Der er ingen omdirigeringer i navnerummet $1.", "statistics": "Statistik", @@ -1656,6 +1655,9 @@ "listgrouprights-namespaceprotection-header": "Navnerumsbegrænsninger", "listgrouprights-namespaceprotection-namespace": "Navnerum", "listgrouprights-namespaceprotection-restrictedto": "Rettighed(er) der giver brugeren mulighed for at redigere", + "trackingcategories-desc": "Kategori optagelse kriterier", + "noindex-category-desc": "Siden ikke indekseres af robotter, fordi det er det magiske ord __NOINDEX__ på det og er i et navneområde, hvor dette flag er tilladt.", + "index-category-desc": "Siden har en __INDEX__ på det (og er i et navneområde, hvor dette flag er tilladt), og dermed er indekseret af robotter, hvor det normalt ikke ville være.", "mailnologin": "Du er ikke logget på", "mailnologintext": "Du skal være [[Special:UserLogin|logget på]] og have en gyldig e-mailadresse sat i dine [[Special:Preferences|indstillinger]] for at sende e-mail til andre brugere.", "emailuser": "E-mail til denne bruger", @@ -1707,7 +1709,7 @@ "watchlist-details": "Du har $1 {{PLURAL:$1|side|sider}} på din overvågningsliste (ekskl. diskussionssider).", "wlheader-enotif": "E-mail-underretning er slået til.", "wlheader-showupdated": "Sider, der er ændret siden dit sidste besøg, er vist med '''fed skrift'''.", - "wlnote": "Nedenfor ses {{PLURAL:$1|den seneste ændring|de seneste '''$1''' ændringer}} i {{PLURAL:$2|den sidste time|de sidste '''$2''' timer}} op til den $3 kl. $4.", + "wlnote": "Nedenfor ses {{PLURAL:$1|den seneste ændring|de seneste $1 ændringer}} i {{PLURAL:$2|den sidste time|de sidste $2 timer}} op til den $3 kl. $4.", "wlshowlast": "Vis de seneste $1 timer $2 dage $3", "watchlist-options": "Indstillinger for overvågningslisten", "watching": "Tilføjer overvågning …", @@ -1738,7 +1740,7 @@ "exbeforeblank": "indholdet før siden blev tømt var: '$1'", "delete-confirm": "Slet \"$1\"", "delete-legend": "Slet", - "historywarning": "Advarsel: Siden du er ved at slette har en historie med $1 {{PLURAL:$1|revision|revisioner}}:", + "historywarning": "Advarsel: Siden du er ved at slette har en historie med $1 {{PLURAL:$1|version|versioner}}:", "confirmdeletetext": "Du er ved at slette en side sammen med hele dens tilhørende historik.\nBekræft venligst at du virkelig vil gøre dette, at du forstår konsekvenserne, og at du gør det i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].", "actioncomplete": "Gennemført", "actionfailed": "Handlingen mislykkedes", @@ -1754,6 +1756,7 @@ "delete-edit-reasonlist": "Rediger sletningsårsager", "delete-toobig": "Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}}. Sletning af sådanne sider er begrænset, for at forhindre utilsigtet forstyrrelse af {{SITENAME}}.", "delete-warning-toobig": "Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}} versioner, slettes den kan det forstyrre driften af {{SITENAME}}, gå forsigtigt frem.", + "deleteprotected": "Du kan ikke slette denne side, fordi den er beskyttet.", "deleting-backlinks-warning": "'''Advarsel:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] linker til eller inkluderer den side, du er ved at slette.", "rollback": "Fjern redigeringer", "rollback_short": "Fjern redigering", @@ -1872,6 +1875,7 @@ "contributions-title": "Brugerbidrag for $1", "mycontris": "Bidrag", "contribsub2": "For {{GENDER:$3|$1}} ($2)", + "contributions-userdoesnotexist": "Brugerkontoen \"$1\" er ikke registreret.", "nocontribs": "Ingen ændringer er fundet som opfylder disse kriterier.", "uctop": "(seneste)", "month": "Måned:", @@ -1913,7 +1917,7 @@ "autoblockid": "Autoblock #$1", "block": "Bloker bruger", "unblock": "Ophæv blokering af bruger", - "blockip": "Bloker bruger", + "blockip": "Bloker {{GENDER:$1|bruger}}", "blockip-legend": "Bloker bruger", "blockiptext": "Brug formularen herunder til at blokere for skriveadgang fra en bestemt IP-adresse eller et brugernavn.\nDette bør kun gøres for at forhindre vandalisme og skal være i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].\nAngiv en konkret begrundelse herunder (for eksempel med angivelse af sider der har været udsat for vandalisme).", "ipaddressorusername": "IP-adresse eller brugernavn", @@ -1942,7 +1946,7 @@ "ipb-unblock-addr": "Ophæv blokeringen af \"$1\"", "ipb-unblock": "Frigive IP-adresse/bruger", "ipb-blocklist": "Vis alle blokeringer som er i kraft", - "ipb-blocklist-contribs": "Bidrag fra $1", + "ipb-blocklist-contribs": "Bidrag fra {{GENDER:$1|$1}}", "unblockip": "Ophæv blokering af bruger", "unblockiptext": "Brug formularen herunder for at gendanne skriveadgangen for en tidligere blokeret IP-adresse eller bruger.", "ipusubmit": "Ophæv blokeringen", @@ -2131,7 +2135,6 @@ "import": "Importer sider", "importinterwiki": "Importer sider fra en anden wiki", "import-interwiki-text": "Vælg en Wiki og en side til importen.\nDatoen i den pågældende version og forfatterne ændres ikke.\nAlle Transwiki import-aktioner protokolleres i [[Special:Log/import|import-loggen]].", - "import-interwiki-source": "Kildewiki/-side:", "import-interwiki-history": "Importer alle versioner af denne side", "import-interwiki-templates": "Inkluder alle skabeloner", "import-interwiki-submit": "Importer", @@ -2161,11 +2164,11 @@ "import-upload": "Upload XML-data", "import-token-mismatch": "Sessionsdata er mistet. Prøv venligst igen.", "import-invalid-interwiki": "Kan ikke importere fra den angivne wiki.", - "import-error-edit": "Siden \"$1\" importeres ikke, da du ikke har rettigheden til at redigere den.", - "import-error-create": "Siden \"$1\" importeres ikke, da du ikke har rettigheden til at oprette den.", - "import-error-interwiki": "Siden \"$1\" importeres ikke, da dens navn er reserveret for eksterne henvisninger (interwiki).", - "import-error-special": "Siden \"$1\" importeres ikke, da den tilhører et særligt navnerum, der ikke tillader sider.", - "import-error-invalid": "Siden \"$1\" importeres ikke, da dens navn er ugyldigt.", + "import-error-edit": "Siden \"$1\" blev ikke importeret, da du ikke har rettighed til at redigere den.", + "import-error-create": "Siden \"$1\" blev ikke importeret, da du ikke har rettighed til at oprette den.", + "import-error-interwiki": "Siden \"$1\" blev ikke importeret, da dens navn er reserveret for eksterne henvisninger (interwiki).", + "import-error-special": "Siden \"$1\" blev ikke importeret, da den tilhører et særligt navnerum, der ikke tillader sider.", + "import-error-invalid": "Siden \"$1\" blev ikke importeret, fordi det navn, som den ville være importeret til er ugyldigt på denne wiki.", "import-error-unserialize": "Ændring $2 af siden \"$1\" kunne ikke afserialiseres. Ændringen brugte indholdsmodel $3 serialiseret som $4.", "import-error-bad-location": "Version $2 der bruger indholdsmodellen $3 kan ikke gemmes på \"$1\" på denne wiki, da denne model ikke understøttes på denne side.", "import-options-wrong": "{{PLURAL:$2|Ugyldig indstilling|Ugyldige indstillinger}}: $1", @@ -2174,9 +2177,9 @@ "importlogpage": "Importlog", "importlogpagetext": "Administrativ import af sider med versionshistorik fra andre Wikis.", "import-logentry-upload": "[[$1]] blev importeret", - "import-logentry-upload-detail": "{{PLURAL:$1|1 version|$1 versioner}}", + "import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versioner}} importeret", "import-logentry-interwiki": "$1 blev importeret (Transwiki)", - "import-logentry-interwiki-detail": "{{PLURAL:$1|1 version|$1 versioner}} af $2 importeret", + "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versioner}} importeret fra $2", "javascripttest": "Test af JavaScript", "javascripttest-title": "Kører $1 test", "javascripttest-pagetext-noframework": "Denne side er reserveret til at teste JavaScript.", @@ -2366,6 +2369,7 @@ "newimages-summary": "Denne specialside viser de senest oplagte filer.", "newimages-legend": "Filter", "newimages-label": "Filnavn (eller en del af det):", + "newimages-showbots": "Vis oplægninger af robotter", "noimages": "Ingen filer fundet.", "ilsubmit": "Søg", "bydate": "efter dato", @@ -2772,6 +2776,7 @@ "confirm-watch-top": "Tilføj denne side til din overvågningsliste?", "confirm-unwatch-button": "OK", "confirm-unwatch-top": "Fjern denne side fra din overvågningsliste?", + "quotation-marks": "\"$1\"", "imgmultipageprev": "← forrige side", "imgmultipagenext": "næste side →", "imgmultigo": "OK", @@ -2793,6 +2798,7 @@ "autosumm-replace": "Erstatter sidens indhold med \"$1\"", "autoredircomment": "Omdirigering til [[$1]] oprettet", "autosumm-new": "Oprettede siden med \"$1\"", + "autosumm-newblank": "Oprettede tom side", "lag-warn-normal": "Ændringer som er nyere end {{PLURAL:$1|et sekund|$1 sekunder}}, vises muligvis ikke i denne liste.", "lag-warn-high": "Grundet stor belastning af databaseserveren vil ændringer der er nyere end {{PLURAL:$1|et sekund|$1 sekunder}} måske ikke blive vist i denne liste.", "watchlistedit-normal-title": "Rediger overvågningsliste", @@ -2808,6 +2814,12 @@ "watchlistedit-raw-done": "Din overvågningsliste blev opdateret.", "watchlistedit-raw-added": "{{PLURAL:$1|1 side|$1 sider}} er tilføjet:", "watchlistedit-raw-removed": "{{PLURAL:$1|1 side|$1 sider}} er fjernet:", + "watchlistedit-clear-title": "Ryddet overvågningsliste", + "watchlistedit-clear-legend": "Ryd overvågningsliste", + "watchlistedit-clear-explain": "Alle siderne vil blive fjernet fra din overvågningsliste", + "watchlistedit-clear-titles": "Sider:", + "watchlistedit-clear-submit": "Ryd overvågningslisten (dette er permanent!)", + "watchlistedit-clear-done": "Din overvågningsliste er blevet ryddet.", "watchlisttools-clear": "Ryd overvågningsliste", "watchlisttools-view": "Se ændrede sider i overvågningslisten", "watchlisttools-edit": "Rediger overvågningsliste", diff --git a/languages/i18n/de.json b/languages/i18n/de.json index 7e89946081..ea0b643ff6 100644 --- a/languages/i18n/de.json +++ b/languages/i18n/de.json @@ -1074,7 +1074,7 @@ "grouppage-suppress": "{{ns:project}}:Oversighter", "right-read": "Seiten lesen", "right-edit": "Seiten bearbeiten", - "right-createpage": "Seiten erstellen (außer Diskussionsseiten)", + "right-createpage": "Seiten erstellen (die keine Diskussionsseiten sind)", "right-createtalk": "Diskussionsseiten erstellen", "right-createaccount": "Benutzerkonto erstellen", "right-minoredit": "Bearbeitungen als klein markieren", diff --git a/languages/i18n/egl.json b/languages/i18n/egl.json index 8945156cae..8e54abff55 100644 --- a/languages/i18n/egl.json +++ b/languages/i18n/egl.json @@ -951,6 +951,17 @@ "prefs-tokenwatchlist": "Token", "prefs-diffs": "Diferèinsi", "prefs-help-prefershttps": "Cla diferèinsa ché la gh'à efèt dal st'êter ingrès.", + "prefs-tabs-navigation-hint": "Sugerimèint: è pusébil druvêr i tâst frècia a mansèina e a dréta per spustêres tr'al schēdi int l'elèinch dal schēdi.", + "email-address-validity-valid": "L'indirès ed pôste eletrônica a sèmbra vâlid", + "email-address-validity-invalid": "Mèt un indirés ed pôsta eletrônica vâlid", + "userrights": "Gestiòun di permès relatîv a j utèint", + "userrights-lookup-user": "Gestiòun di gróp utèint", + "userrights-user-editname": "Mèt dèinter al nòm utèint:", + "editusergroup": "Mudéfica gróp utèint", + "editinguser": "Mudéfica i dirét utèint ed l' utèint [[User:$1|$1]] $2", + "userrights-editusergroup": "Mudéfica gróp utèint", + "saveusergroups": "Sêlva gróp utèint", + "userrights-groupsmember": "Al fà pêrt {{PLURAL:$1|al gróp|ai gróp}}:", "group": "Gróp:", "group-user": "Utèint", "group-autoconfirmed": "Utèint cunvalidê da per ló", diff --git a/languages/i18n/es.json b/languages/i18n/es.json index 8b1587a4e3..0a7625d01f 100644 --- a/languages/i18n/es.json +++ b/languages/i18n/es.json @@ -890,7 +890,7 @@ "mergehistory-go": "Mostrar ediciones fusionables", "mergehistory-submit": "Fusionar revisiones", "mergehistory-empty": "No hay revisiones fusionables.", - "mergehistory-success": "$3 {{PLURAL:$3|revisión|revisiones}} de [[:$1]] fusionadas de forma exitosa en [[:$2]].", + "mergehistory-success": "Se {{PLURAL:$3|fusionó $3 revisión|fusionaron $3 revisiones}} de «[[:$1]]» en «[[:$2]]» correctamente.", "mergehistory-fail": "No se puede realizar la fusión de historiales, por favor revisa la página y los parámetros de tiempo.", "mergehistory-fail-toobig": "No se puede fusionar el historial ya que más del límite de $1 {{PLURAL:$1|revisión|revisiones}} se moverían.", "mergehistory-no-source": "La página origen $1 no existe.", @@ -3219,6 +3219,7 @@ "log-description-pagelang": "Este es un registro de los cambios en los idiomas de las páginas.", "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambió}} el idioma de la página «$3» del $4 al $5.", "default-skin-not-found": "¡Oops! La apariencia por defecto de la wiki ($wgDefaultSkin), $1, no está disponible.\n\nLa instalación parece poseer las siguientes opciones de apariencia. Por favor revise [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] para mayor información sobre cómo configurarla y seleccionar la apariencia por defecto.\n\n$2\n\n; Si acaba de instalar MediaWiki:\n: Probablemente la haya instalado desde git, o directamente desde el código fuente usando algún otro método. Esto es lo esperado. Intente instalar algunos sets de apariencia desde [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory]:\n:* Descargando [https://www.mediawiki.org/wiki/Download el instalador tarball], el cual contiene varios sets de apariencia y extensiones. Puede copiar y pegar el directorio skins/ desde ahi.\n:* Clonando uno de los repositorios en mediawiki/skins/* via git dentro del directorio skins/ de su instaación de MediaWiki.\n: Haciendo esto no debería interferir con su repositorio git si usted es un desarrollador de MediaWiki.\n\n; Si acaba de actualizar MediaWiki:\n: MediaWiki 1.24 y versiones posteriores ya no tiene habilitada la actualización de apariencia (revise [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Puede pegar las siguientes lineas LocalSettings.php para habilitar todos los sets de apariencia que haya configurado:\n\n
$3
\n\n; Si acaba de modificar LocalSettings.php:\n: Compruebe detenidamente posibles errores tipográficos en los nombres de los sets de apariencias.", + "default-skin-not-found-no-skins": "¡Vaya! El skin por defecto de tu wiki ($wgDefaultSkin), $1, no está disponible.\n\nNo tienes skins instaladas.\n\n; Si has instalado o actualizado MediaWiki recientemente:\n: Probablemente la has instalado desde git, o directamente desde el código fuente usando algún otro métoido. Esto es lo esperado. MediaWiki 1.24 y versiones posteriores no incluyen ningun skin en el repositorio. Trata de instalar algunos skins desde [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], siguiendo el siguiente procedimiento:\n:* Descarga el [https://www.mediawiki.org/wiki/Download instalador tarball], que viene con varios skins y extensiones. Puedes copiar y pegar el directorio skins/ desde ahí.\n:* Clonando algunos de los repositorios en mediawiki/skins/* via git en el directorio skins/ de tu instación de MediaWiki.\n: Hacer esto no debería interferir con tu repositorio de MediaWiki si eres un desarrollador de MediaWiki. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] para información sobre como habilitar los skins y seleccionar el por defecto.", "default-skin-not-found-row-enabled": "* $1 / $2 (activado)", "default-skin-not-found-row-disabled": "* $1 / $2 ('''desactivado''')" } diff --git a/languages/i18n/et.json b/languages/i18n/et.json index 686cd52ed2..121e77e03a 100644 --- a/languages/i18n/et.json +++ b/languages/i18n/et.json @@ -929,9 +929,9 @@ "prefs-namespaces": "Nimeruumid", "default": "vaikeväärtus", "prefs-files": "Failid", - "prefs-custom-css": "kohandatud CSS", - "prefs-custom-js": "kohandatud JS", - "prefs-common-css-js": "Kõigi kujunduste ühine CSS/JS:", + "prefs-custom-css": "Kohandatud CSS", + "prefs-custom-js": "Kohandatud JavaScript", + "prefs-common-css-js": "Kõigi kujunduste ühine CSS/JavaScript:", "prefs-reset-intro": "Sellel leheküljel saad oma eelistused lähtestada võrgukoha vaike-eelistusteks.\nToimingut ei saa hiljem tühistada.", "prefs-emailconfirm-label": "E-posti kinnitus:", "youremail": "E-posti aadress:", diff --git a/languages/i18n/eu.json b/languages/i18n/eu.json index af06a8caf2..b09c7d85a4 100644 --- a/languages/i18n/eu.json +++ b/languages/i18n/eu.json @@ -269,6 +269,8 @@ "hidetoc": "ezkutatu", "collapsible-collapse": "Itxi", "collapsible-expand": "Zabaldu", + "confirmable-yes": "Bai", + "confirmable-no": "Ez", "thisisdeleted": "$1 ikusi edo leheneratu?", "viewdeleted": "$1 ikusi?", "restorelink": "{{PLURAL:$1|ezabatutako aldaketa bat|ezabatutako $1 aldaketa}}", @@ -1275,6 +1277,7 @@ "license-nopreview": "(Aurreikuspenik ez)", "upload_source_url": " (baliozko URL publikoa)", "upload_source_file": " (zure ordenagailuko fitxategi bat)", + "listfiles-delete": "ezabatu", "listfiles-summary": "Orri berezi honek igotako fitxategi guztiak erakusten ditu.\nBerez, azken igotako fitxategiak zerrendaren goiko aldean azaltzen dira.", "listfiles_search_for": "Irudiaren izenagatik bilatu:", "imgfile": "fitxategia", @@ -2632,7 +2635,7 @@ "confirm-purge-bottom": "Orrialdea purgatzean katxea ezabatzen du eta orrialdearen bertsiorik eguneratuena erakustera behartzen du.", "confirm-watch-button": "Ados", "confirm-unwatch-button": "Ados", - "quotation-marks": "\"$1\"", + "quotation-marks": "«$1»", "imgmultipageprev": "← aurreko orrialdea", "imgmultipagenext": "hurrengo orrialdea →", "imgmultigo": "Joan!", diff --git a/languages/i18n/fa.json b/languages/i18n/fa.json index 36465b287b..03027ad50f 100644 --- a/languages/i18n/fa.json +++ b/languages/i18n/fa.json @@ -37,7 +37,9 @@ "Mostafadaneshvar", "Pouyana", "Oldstoneage", - "Omid.koli" + "Omid.koli", + "Alirezaaa", + "Mogoeilor" ] }, "tog-underline": "خط کشیدن زیر پیوندها:", @@ -293,6 +295,7 @@ "hidetoc": "نهفتن", "collapsible-collapse": "نهفتن", "collapsible-expand": "گسترش", + "confirmable-confirm": "{{GENDER:$1|شما}} مطمئن هستید؟", "confirmable-yes": "بله", "confirmable-no": "خیر", "thisisdeleted": "نمایش یا احیای $1؟", @@ -694,10 +697,10 @@ "parser-template-recursion-depth-warning": "محدودیت عمق بازگشت الگو رد شد ($1)", "language-converter-depth-warning": "محدودیت عمق مبدل زبانی رد شد ($1)", "node-count-exceeded-category": "صفحه‌هایی که از حداکثر تعداد گره تجاوز کرده‌اند", - "node-count-exceeded-category-desc": "رده برای صفحاتی که در آنها شمارنده فراتر رفته است.", - "node-count-exceeded-warning": "صفحه از حداکثر تعداد گره، فراتر است", + "node-count-exceeded-category-desc": "این صفحه از تعداد حداکثر اشکال فراتر رفته است.", + "node-count-exceeded-warning": "صفحه از حداکثر تعداد گره فراتر رفته‌است", "expansion-depth-exceeded-category": "صفحه‌هایی که از حداکثر عمق بسط دادن تجاوز کرده‌اند", - "expansion-depth-exceeded-category-desc": "رده برای صفحاتی که در آنها عمق گسترش فراتر رفته است.", + "expansion-depth-exceeded-category-desc": "رده برای صفحاتی که در آنها از عمق گسترش فراتر رفته است.", "expansion-depth-exceeded-warning": "صفحه حداکثر عمق بسط دادن تجاوز کرد", "parser-unstrip-loop-warning": "حلقه در دستور unstrip پیدا شد", "parser-unstrip-recursion-limit": "از حداکثر ارجاع در دستور unstrip تجاوز شد ($1)", @@ -705,7 +708,7 @@ "undo-success": "این ویرایش را می‌توان خنثی کرد.\nلطفاً تفاوت زیر را بررسی کنید تا تأیید کنید که این چیزی است که می‌خواهید انجام دهید، سپس تغییرات زیر را ذخیره کنید تا خنثی‌سازی ویرایش را به پایان ببرید.", "undo-failure": "به علت تعارض با ویرایش‌های میانی، این ویرایش را نمی‌توان خنثی کرد.", "undo-norev": "این ویرایش را نمی‌توان خنثی کرد چون وجود ندارد یا حذف شده‌است.", - "undo-nochange": "به نظر می‌رسد ویرایش در حال حاضر باطل بوده است.", + "undo-nochange": "به نظر می‌رسد ویرایش از پیش واگردانی شده است.", "undo-summary": "خنثی‌سازی ویرایش $1 توسط [[Special:Contributions/$2|$2]] ([[User talk:$2|بحث]])", "undo-summary-username-hidden": "خنثی‌سازی نسخهٔ $1 به دست یک کاربر پنهان‌شده", "cantcreateaccounttitle": "نمی‌توان حساب باز کرد", @@ -780,7 +783,7 @@ "revdelete-radio-set": "پنهان", "revdelete-radio-unset": "نمایان", "revdelete-suppress": "از دسترسی مدیران به داده نیز مانند سایر کاربران جلوگیری به عمل آید.", - "revdelete-unsuppress": "خاتمهٔ محدودیت‌ها در مورد نسخه‌های انتخاب‌شده", + "revdelete-unsuppress": "حذف محدودیت‌ها در بازبینی‌های ترمیم‌شده", "revdelete-log": "دلیل:", "revdelete-submit": "اعمال بر {{PLURAL:$1|نسخهٔ|نسخه‌های}} انتخاب شده", "revdelete-success": "'''پیدایی نسخه با موفقیت به روز شد.'''", @@ -835,7 +838,7 @@ "difference-multipage": "(تفاوت بین صفحه‌ها)", "lineno": "سطر $1:", "compareselectedversions": "مقایسهٔ نسخه‌های انتخاب‌شده", - "showhideselectedversions": "نمایش/نهفتن نسخه‌های انتخاب‌شده", + "showhideselectedversions": "تغییر پدیداری بازبینی‌های انتخاب‌شده", "editundo": "خنثی‌سازی", "diff-empty": "(بدون تفاوت)", "diff-multi-sameuser": "({{PLURAL:$1|یک نسخهٔ میانی|$1 نسخهٔ میانی}} توسط کاربر مشابهی که نشان داده نشده)", @@ -891,7 +894,7 @@ "preferences": "ترجیحات", "mypreferences": "ترجیحات", "prefs-edits": "تعداد ویرایش‌ها:", - "prefsnologintext2": "لطفاً $1 برای تنظیم ترجیحات کاربر.", + "prefsnologintext2": "خواهشمند است برای تغییر تنظیمات‌تان وارد شوید.", "prefs-skin": "پوسته", "skin-preview": "پیش‌نمایش", "datedefault": "بدون ترجیح", @@ -1073,7 +1076,7 @@ "right-proxyunbannable": "تاثیر نپذیرفتن از قطع دسترسی خودکار پروکسی‌ها", "right-unblockself": "بازکردن دسترسی خود", "right-protect": "تغییر میزان محافظت صفحه‌ها و ویرایش صفحه‌های محافظت‌شده آبشاری", - "right-editprotected": "ویرایش صفحه‌های محافظت شده به عنوان \"{{int:protect-level-sysop}}\"", + "right-editprotected": "ویرایش صفحه‌های محافظت‌شده به‌عنوان «{{int:protect-level-sysop}}»", "right-editsemiprotected": "ویرایش صفحه حفاظت‌شده به عنوان \"{{int:protect-level-autoconfirmed}}\"", "right-editinterface": "ویرایش واسط کاربری", "right-editusercssjs": "ویرایش صفحه‌های CSS و JS دیگر کاربرها", @@ -1162,7 +1165,7 @@ "recentchanges-label-plusminus": "حجم صفحه به اندازه این بایت‌ها تغییر یافته‌است", "recentchanges-legend-heading": "'''اختصارها:'''", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همچنین به [[Special:NewPages|فهرست صفحات جدید]] نگاه کنید)", - "recentchanges-legend-plusminus": "('' ±۱۲۳'')", + "recentchanges-legend-plusminus": "(±۱۲۳)", "rcnotefrom": "در زیر تغییرات از $3, $4 (تا $1 {{PLURAL:$5|نشان داده شده‌است|نشان داده شده‌اند}}).", "rclistfrom": "نمایش تغییرات جدید با شروع از $3 $2", "rcshowhideminor": "$1 ویرایش‌های جزئی", @@ -1470,6 +1473,8 @@ "randomincategory": "صفحهٔ تصادفی در رده", "randomincategory-invalidcategory": "«$1» نامی معتبر برای یک ردهٔ نیست.", "randomincategory-nopages": "هیج صفحه‌ای در رده [[:Category:$1|$1]] وجود ندارد.", + "randomincategory-category": "رده:", + "randomincategory-legend": "صفحهٔ تصادفی در رده", "randomredirect": "تغییرمسیر تصادفی", "randomredirect-nopages": "هیج صفحهٔ تغییرمسیری در فضای نام «$1» موجود نیست.", "statistics": "آمار", @@ -1543,7 +1548,7 @@ "wantedtemplates": "الگوهای مورد نیاز", "mostlinked": "صفحه‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است", "mostlinkedcategories": "رده‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است", - "mostlinkedtemplates": "ببشترین صفحه‌های تراگنجانده‌شده", + "mostlinkedtemplates": "ببشترین صفحات تراگنجانده‌شده", "mostcategories": "صفحه‌های دارای بیشترین رده", "mostimages": "پرونده‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است", "mostinterwikis": "صفحه‌های دارای بیشترین میان‌ویکی", @@ -1606,7 +1611,7 @@ "alllogstext": "نمایش یک‌جای تمام سیاهه‌های موجود در {{SITENAME}}.\nمی‌توانید با انتخاب نوع سیاهه، نام کاربری (حساس به کوچکی و بزرگی حروف) و صفحه‌های تغییریافته (حساس به بزرگی و کوچکی حروف)، نمایش را محدودتر سازید.", "logempty": "مورد منطبق با منظور شما در سیاهه یافت نشد.", "log-title-wildcard": "صفحه‌هایی را جستجو کن که عنوانشان با این عبارت آغاز می‌شود", - "showhideselectedlogentries": "تغییر پدیداری موارد انتخاب‌شده در سیاهه", + "showhideselectedlogentries": "تغییر پدیداری موارد انتخاب‌شده سیاهه", "allpages": "همهٔ صفحه‌ها", "nextpage": "صفحهٔ بعد ($1)", "prevpage": "صفحهٔ قبلی ($1)", @@ -1676,8 +1681,8 @@ "post-expand-template-inclusion-category-desc": "پس از گسترش همهٔ الگوها، حجم صفحه بزرگتر از $wgMaxArticleSize است بنابراین بعضی از الگو گسترش نیافته‌اند.", "post-expand-template-argument-category-desc": "پس از گسترش یک آرگومان الگو (چیزی بین آکولادهای سه‌تایی، مانند {{{Foo}}}) صفحه بزرگ‌تر از $wgMaxArticleSize می‌شود.", "expensive-parserfunction-category-desc": "توابع هزینه‌بر گران (مانند #ifexist) زیادی در صفجه استفاده شده‌ است. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] را ببینید.", - "broken-file-category-desc": "رده افزود می‌شود اگر صفحه شامل یک پیوند شکسته باشد (یا یک پبوند به پروندهٔ توکاری است که وجود ندارد)", - "hidden-category-category-desc": "این یک ردهٔ __HIDDENCAT__ درونش است که از نمایشش در جعبهٔ پیوندهای رده به‌صورت پیش‌فرض جلوگیری می‌کند.", + "broken-file-category-desc": "صفحه شامل یک پیوند پرونده خراب است (پیوندی برای جاسازی‌کردن یک پرونده هنگامی که آن پرونده وجود ندارد).", + "hidden-category-category-desc": "رده در محتوای صفحه‌اش شامل __HIDDENCAT__ است، که از به طور پیش‌فرض نشان‌دادن جعبه پیوندهای رده در صفحات جلوگیری می‌کند.", "trackingcategories-nodesc": "توضیحی وجود ندارد.", "trackingcategories-disabled": "رده غیرفعال‌شده است", "mailnologin": "نشانی‌ای از فرستنده موجود نیست", @@ -1762,7 +1767,7 @@ "exbeforeblank": "محتوای صفحه قبل از خالی‌کردن این بود: «$1»", "delete-confirm": "حذف «$1»", "delete-legend": "حذف", - "historywarning": "'''هشدار!''' صفحه‌ای که قصد دارید حذف کنید تاریخچه‌ای با حدود $1 {{PLURAL:$1|نسخه|نسخه}} دارد:", + "historywarning": "هشدار: صفحه‌ای که در حال پاک‌کردن آن هستید دارای یک تاریخچه همراه $1 {{PLURAL:$1|بازبینی|بازبینی‌ها}} است:", "confirmdeletetext": "شما در حال حذف کردن یک صفحه یا تصویر از پایگاه داده‌ها همراه با تمام تاریخچهٔ آن هستید.\nلطفاً این عمل را تأیید کنید و اطمینان حاصل کنید که عواقب این کار را می‌دانید و این عمل را مطابق با [[{{MediaWiki:Policy-url}}|سیاست‌ها]] انجام می‌دهید.", "actioncomplete": "عمل انجام شد", "actionfailed": "عمل ناموفق بود", @@ -1778,6 +1783,7 @@ "delete-edit-reasonlist": "ویرایش دلایل حذف", "delete-toobig": "این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.\nبه منظور جلوگیری از اختلال ناخواسته در {{SITENAME}} حذف این گونه صفحه‌ها محدود شده‌است.", "delete-warning-toobig": "این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.\nحذف آن ممکن است که عملکرد پایگاه دادهٔ {{SITENAME}} را مختل کند;\nبا احتیاط ادامه دهید.", + "deleteprotected": "شما نمی‌توانید این صفحه را پاک کنید چون که از آن محافظت شده‌است.", "deleting-backlinks-warning": "''' هشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|صفحه‌های دیگری]] هستند که به صفحه‌ای که شما در حال حذف آن هستید پیوند دارند یا آن را تراگنجانیده‌اند.", "rollback": "واگردانی ویرایش‌ها", "rollback_short": "واگردانی", @@ -1938,7 +1944,7 @@ "autoblockid": "شناسه قطع دسترسی خودکار #$1", "block": "بستن کاربر", "unblock": "بازکردن کاربر", - "blockip": "بستن کاربر", + "blockip": "مسدودکردن {{GENDER:$1|کاربر}}", "blockip-legend": "بستن کاربر", "blockiptext": "از فرم زیر برای بستن دسترسی ویرایش یک نشانی آی‌پی یا نام کاربری مشخص استفاده کنید.\nاین کار فقط فقط باید برای جلوگیری از خرابکاری و بر اساس [[{{MediaWiki:Policy-url}}|سیاست قطع دسترسی]] انجام شود.\nدلیل مشخص این کار را در زیر ذکر کنید (مثلاً با ذکر صفحه‌های به‌خصوصی که مورد خرابکاری واقع شده‌اند).", "ipaddressorusername": "نشانی آی‌پی یا نام کاربری:", @@ -2161,6 +2167,7 @@ "importinterwiki": "درون‌ریزی تراویکی", "import-interwiki-text": "یک ویکی و یک نام صفحه را انتخاب کنید تا اطلاعات از آن درون‌ریزی شود.\nتاریخ نسخه‌ها و نام ویرایش‌کنندگان ثابت خواهد ماند.\nاطلاعات مربوط به درون‌ریزی صفحه‌ها در [[Special:Log/import|سیاههٔ درون‌ریزی‌ها]] درج خواهد شد.", "import-interwiki-sourcewiki": "ویکی منبع:", + "import-interwiki-sourcepage": "صفحهٔ مبدأ:", "import-interwiki-history": "تمام نسخه‌های تاریخچهٔ این صفحه انتقال داده شود", "import-interwiki-templates": "تمام الگوها را شامل شود", "import-interwiki-submit": "درون‌ریزی شود", @@ -3190,6 +3197,8 @@ "log-name-pagelang": "تغییر سیاههٔ زبان", "log-description-pagelang": "این سیاههٔ تغییرات صفحهٔ زبان‌ها است.", "logentry-pagelang-pagelang": "$1 {{GENDER:$2| تغییریافت}} زبان صفحه برای $3 از $4 به $5 .", + "default-skin-not-found": "اوه! پوسته پیش‌فرض برای ویکی شما ($wgDefaultSkin)، $1، در دسترس نیست.\n\nبه نظر می‌آید نصب شما شامل پوسته‌های زیر می‌شود. [https://www.mediawiki.org/wiki/Manual:Skin_configuration راهنما: تنظیمات پوسته] را برای کسب اطلاعات در باره چگونگی فعال‌ساختن آن‌ها و انتخاب پیش‌فرض ببینید.\n\n$2\n\n; اگر اخیراً مدیاویکی را نصب کرده‌اید:\n: احتمالاً از گیت، یا به طور مستقیم از کد مبدأ که از چند متد دیگر استفاده می‌کند نصب کردید. انتظار می‌رود. چند پوسته از [https://www.mediawiki.org/wiki/Category:All_skins فهرست پوسته mediawiki.org] نصب کنید، که همراه چندین پوسته و افزونه هستند. شما می‌توانید شاخه skins/ را از آن نسخه‌برداری کرده و بچسبانید.\n\n:* همسانه‌سازی یکی از مخازن mediawiki/skins/* از طریق گیت به داخل شاخه skins/ از نصب مدیاویکی‌تان.\n: انجام این کار با مخزن گیت‌تان تداخل نمی‌کند اگر توسعه‌دهنده مدیاویکی هستید.\n\n; اگر اخیراً مدیاویکی را ارتقاء دادید:\n: مدیاویکی Û±Ù«Û²Û´ و تازه‌تر دیگر به طور خودکار پوسته‌های نصب‌شده را فعال نمی‌کند ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery راهنما: کشف خودکار پوسته] را ببینید). شما می‌توانید خطوط زیر را به داخل LocalSettings.php بچسبانید تا همه پوسته‌های نصب‌شده جاری را فعال کنید:\n\n
$3
\n\n; اگر اخیراً LocalSettings.php را تغییر دادید:\n: نام پوسته‌ها را برای غلط املایی دوباره بررسی کنید.", + "default-skin-not-found-no-skins": "پوستهٔ پیش‌فرض برای ویکی شما ($wgDefaultSkin)، $1 هست موجود نیست.\n\nشما پوسته‌ها را نصب نکرده‌اید.\n\n:اگر مدیاویکی را به‌روز یا نصب کرده‌اید:\n:ممکن است از گیت یا از کند منبع با روش های دیگر نصب کرده‌اید. انتظار می‌رود MediaWiki 1.24 یا جدیدتر در پوشهٔ اصلی هیچ پوسته‌ای نداشته باشند.\nسعی کنید تعدادی پوسته از [https://www.mediawiki.org/wiki/Category:All_skins پوشهٔ پوسته‌های مدیاویکی]، با:\n:*دانلود کردن [https://www.mediawiki.org/wiki/Download نصب‌کننده تاربال]، که با چندین پوسته و افزونه هست. شما می توانید پوستهٔ skins/ را از آن کپی و پیست کنید.\n:*کلون کردن یکی از mediawiki/skins/* از ریپوزیتوری در پوشهٔ skins/ مدیاویکی‌تان.\n:اگر توسعه‌دهندهٔ مدیاویکی هستید، انجام این کار نباید تعارضی با ریپوزیتوری گیت شما داشته باشد. برای اطلاعات بیشتر و فعال کردن پوسته‌ها و انتخاب آنها به عنوان پیش‌فرض [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: تنظیمات پوسته] را مشاهده کنید.", "default-skin-not-found-row-enabled": "* $1 / $2 (فعال)", "default-skin-not-found-row-disabled": "* $1 / $2 ('''غیر فعال''')" } diff --git a/languages/i18n/fi.json b/languages/i18n/fi.json index 107af201eb..0d165ff720 100644 --- a/languages/i18n/fi.json +++ b/languages/i18n/fi.json @@ -828,7 +828,7 @@ "mergehistory-same-destination": "Lähde- ja kohdesivut eivät voi olla samat", "mergehistory-reason": "Syy:", "mergelog": "Yhdistämisloki", - "pagemerge-logentry": "yhdisti kohteen [[$1]] kohteeseen [[$2]] (muokkaukseen $3 saakka)", + "pagemerge-logentry": "yhdisti kohteen [[$1]] kohteeseen [[$2]] (versiot $3 saakka)", "revertmerge": "Peru yhdistäminen", "mergelogpagetext": "Alla on loki viimeisimmistä muutoshistorioiden yhdistämisistä.", "history-title": "Sivun ”$1” muutoshistoria", @@ -1206,7 +1206,7 @@ "recentchangeslinked-toolbox": "Linkitettyjen sivujen muutokset", "recentchangeslinked-title": "Sivulta $1 linkitettyjen sivujen muutokset", "recentchangeslinked-summary": "Tämä on luettelo muutoksista, jotka on viimeksi tehty niihin sivuihin, joihin johtaa linkki tietystä sivusta (tai jonkun määrätyn luokan sisältämistä sivuista). Omalla [[Special:Watchlist|tarkkailulistallasi]] olevat sivut on lihavoitu.", - "recentchangeslinked-page": "Sivu", + "recentchangeslinked-page": "Sivun nimi:", "recentchangeslinked-to": "Näytä sen sijaan muutokset sivuihin, joista on linkki tähän sivuun", "upload": "Tallenna tiedosto", "uploadbtn": "Tallenna tiedosto", @@ -1590,7 +1590,7 @@ "unusedimagestext": "Seuraavat tiedostot ovat olemassa, mutta niitä ei käytetä millään sivulla.\nHuomaa, että muut verkkosivut saattavat viitata tiedostoon suoran URL:n avulla, jolloin tiedosto saattaa olla tässä listassa, vaikka sitä käytetäänkin.", "unusedcategoriestext": "Nämä luokat ovat olemassa, mutta niitä ei käytetä.", "notargettitle": "Ei kohdetta", - "notargettext": "Et ole määritellyt kohdesivua tai -käyttäjää johon toiminto kohdistuu.", + "notargettext": "Et ole määritellyt kohteeksi sivua tai käyttäjää, johon toiminto suoritetaan.", "nopagetitle": "Kohdesivua ei ole olemassa.", "nopagetext": "Määritettyä kohdesivua ei ole olemassa.", "pager-newer-n": "← {{PLURAL:$1|1 uudempi|$1 uudempaa}}", @@ -1775,7 +1775,7 @@ "dellogpagetext": "Alla on loki viimeisimmistä poistoista.", "deletionlog": "poistoloki", "reverted": "Palautettu aikaisempaan versioon", - "deletecomment": "Syy", + "deletecomment": "Syy:", "deleteotherreason": "Muu syy tai tarkennus", "deletereasonotherlist": "Muu syy", "deletereason-dropdown": "* Yleiset poistosyyt\n** Spam tai mainossivu\n** Vandalismi\n** Tekijänoikeusrikkomus\n** Sivun tekijän pyyntö\n** Virheellinen ohjaus", @@ -1925,7 +1925,7 @@ "sp-contributions-submit": "Hae", "whatlinkshere": "Tänne viittaavat sivut", "whatlinkshere-title": "Sivut, jotka viittaavat sivulle $1", - "whatlinkshere-page": "Sivu", + "whatlinkshere-page": "Sivu:", "linkshere": "Seuraavilta sivuilta on linkki sivulle [[:$1]]:", "nolinkshere": "Sivulle [[:$1]] ei ole linkkejä.", "nolinkshere-ns": "Sivulle [[:$1]] ei ole linkkejä valitussa nimiavaruudessa.", diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json index 363c4dea94..36ec047987 100644 --- a/languages/i18n/fr.json +++ b/languages/i18n/fr.json @@ -281,7 +281,7 @@ "edit": "Modifier", "edit-local": "Modifier la description locale", "create": "Créer", - "create-local": "ajouter une description locale", + "create-local": "Ajouter une description locale", "editthispage": "Modifier cette page", "create-this-page": "Créer cette page", "delete": "Supprimer", @@ -3306,8 +3306,8 @@ "log-name-pagelang": "Tracer les changements de langue", "log-description-pagelang": "Ceci est un journal des changements dans les langues des pages.", "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a changé}} la langue de la page $3 de $4 à $5.", - "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki ($wgDefaultSkin), $1, n’est pas disponible.\n\nVotre installation semble inclure les habillages suivants. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment les activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MédiaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire skins/ depuis là.\n:* Clonant un des dépôts mediawiki/skins/* via git dans le répertoire skins/ de votre installation de MédiaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MédiaWiki.\n\n; Si vous venez juste de mettre à jour MédiaWiki :\n: MédiaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller les lignes suivantes dans LocalSettings.php pour activer tous les habillages actuellement installés :\n\n
$3
\n\n; Si vous venez de modifier LocalSettings.php :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.", - "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki ($wgDefaultSkin), $1, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MédiaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MédiaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire skins/ depuis là.\n:*Clonant un des dépôts mediawiki/skins/* via git dans le répertoire skins/ de votre installation de MédiaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MédiaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.", + "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki ($wgDefaultSkin), $1, n’est pas disponible.\n\nVotre installation semble inclure les habillages suivants. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment les activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MediaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire skins/ depuis là.\n:* Clonant un des dépôts mediawiki/skins/* via git dans le répertoire skins/ de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MediaWiki.\n\n; Si vous venez juste de mettre à jour MediaWiki :\n: MediaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller les lignes suivantes dans LocalSettings.php pour activer tous les habillages actuellement installés :\n\n
$3
\n\n; Si vous venez de modifier LocalSettings.php :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.", + "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki ($wgDefaultSkin), $1, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MediaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MediaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire skins/ depuis là.\n:*Clonant un des dépôts mediawiki/skins/* via git dans le répertoire skins/ de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MediaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.", "default-skin-not-found-row-enabled": "* $1 / $2 (activé)", "default-skin-not-found-row-disabled": "* $1 / $2 ('''désactivé''')" } diff --git a/languages/i18n/he.json b/languages/i18n/he.json index 67fbb95067..3cd4cf8e7b 100644 --- a/languages/i18n/he.json +++ b/languages/i18n/he.json @@ -259,7 +259,7 @@ "privacypage": "Project:מדיניות הפרטיות", "badaccess": "שגיאה בהרשאות", "badaccess-group0": "אינכם מורשים לבצע את הפעולה שביקשתם.", - "badaccess-groups": "הפעולה שביקשתם לבצע מוגבלת למשתמשים ב{{PLURAL:$2|קבוצה הבאה|אחת הקבוצות הבאות}}: $1.", + "badaccess-groups": "הפעולה שביקשת לבצע מוגבלת למשתמשים ב{{PLURAL:$2|קבוצה הבאה|אחת הקבוצות הבאות}}: $1.", "versionrequired": "נדרשת גרסה $1 של מדיה־ויקי", "versionrequiredtext": "גרסה $1 של מדיה־ויקי נדרשת לשימוש בדף זה. למידע נוסף, ראו את [[Special:Version|דף הגרסה]].", "ok": "אישור", @@ -358,8 +358,8 @@ "editinginterface": "'''אזהרה:''' הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.\nשינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים באתר ויקי זה.\nכדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.", "cascadeprotected": "דף זה מוגן מעריכה כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:\n$2", "namespaceprotected": "אינכם מורשים לערוך דפים במרחב השם '''$1'''.", - "customcssprotected": "אינכם מורשים לערוך דף CSS זה, כיוון שהוא כולל את ההגדרות האישיות של משתמש אחר.", - "customjsprotected": "אינכם מורשים לערוך דף JavaScript זה, כיוון שהוא כולל את ההגדרות האישיות של משתמש אחר.", + "customcssprotected": "אינך מורשה לערוך דף CSS זה כיוון שהוא כולל הגדרות אישיות של משתמש אחר.", + "customjsprotected": "אינך מורשה לערוך דף JavaScript זה כיוון שהוא כולל הגדרות אישיות של משתמש אחר.", "mycustomcssprotected": "אינכם מורשים לערוך דף CSS זה.", "mycustomjsprotected": "אינכם מורשים לערוך דף JavaScript זה.", "myprivateinfoprotected": "אין לך הרשאה לערוך את המידע הפרטי שלך", @@ -457,7 +457,7 @@ "noemail": "לא רשומה כתובת דואר אלקטרוני עבור ה{{GENDER:$1|משתמש|משתמשת}} \"$1\".", "noemailcreate": "יש לספק כתובת דואר אלקטרוני תקינה.", "passwordsent": "סיסמה חדשה נשלחה לכתובת הדואר האלקטרוני הרשומה עבור \"$1\".\nאנא היכנסו חזרה לאתר אחרי שתקבלו אותה.", - "blocked-mailpassword": "כתובת ה־IP שלכם חסומה מעריכה, ולפיכך אינכם מורשים להשתמש באפשרות שחזור הסיסמה כדי למנוע ניצול לרעה של התכונה.", + "blocked-mailpassword": "כתובת ה־IP שלך נחסמה מעריכה, ולפיכך אינך מורשה להשתמש באפשרות שחזור הסיסמה כדי למנוע ניצול לרעה של התכונה.", "eauthentsent": "דוא\"ל אימות נשלח לכתובת הדוא\"ל שצוינה.\nלפני שדברי דוא\"ל אחרים יישלחו לחשבון הזה, יהיה עליכם לפעול לפי ההוראות בדוא\"ל, כדי לאשר שהחשבון אכן שייך לכם.", "throttled-mailpassword": "כבר נשלח דוא\"ל לאיפוס הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|־$1 השעות האחרונות}}.\nכדי למנוע ניצול לרעה, יכול להישלח רק דוא\"ל אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.", "mailerror": "שגיאה בשליחת דואר: $1", diff --git a/languages/i18n/hi.json b/languages/i18n/hi.json index c1d4738812..1aa0dbc1ef 100644 --- a/languages/i18n/hi.json +++ b/languages/i18n/hi.json @@ -711,7 +711,7 @@ "node-count-exceeded-category-desc": "यह उन पृष्ठों की श्रेणी है जिनमें नोड-संख्या सीमा पार की गयी है।", "node-count-exceeded-warning": "पृष्ठ ने नोड-संख्या पार की है", "expansion-depth-exceeded-category": "पृष्ठ जिनमें विस्तार गहराई पार की गई है", - "expansion-depth-exceeded-category-desc": "यह उन पृष्ठों की श्रेणी है जिनमें विस्तार गहराई पार की गयी है।", + "expansion-depth-exceeded-category-desc": "यह पृष्ठ विस्तार गहराई पार करता है।", "expansion-depth-exceeded-warning": "पृष्ठ में विस्तार गहराई पार की गई है", "parser-unstrip-loop-warning": "Unstrip लूप पाया गया", "parser-unstrip-recursion-limit": "Unstrip पुनरावर्तन सीमा पार की गई ($1)", diff --git a/languages/i18n/hr.json b/languages/i18n/hr.json index 0967733ee1..6b07b21eaa 100644 --- a/languages/i18n/hr.json +++ b/languages/i18n/hr.json @@ -194,6 +194,7 @@ "view": "Vidi", "view-foreign": "vidi na projektu $1", "edit": "uredi", + "edit-local": "Uredi lokalni opis", "create": "Započni", "create-local": "dodaj lokalni opis", "editthispage": "Uredi ovu stranicu", diff --git a/languages/i18n/it.json b/languages/i18n/it.json index 2bd15e6879..c6c57a36e4 100644 --- a/languages/i18n/it.json +++ b/languages/i18n/it.json @@ -2198,6 +2198,8 @@ "import": "Importa pagine", "importinterwiki": "Importazione transwiki", "import-interwiki-text": "Selezionare un progetto wiki e il titolo della pagina da importare.\nLe date di pubblicazione e i nomi degli autori delle varie versioni saranno conservati.\nTutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log/import|log di importazione]].", + "import-interwiki-sourcewiki": "Wiki di origine:", + "import-interwiki-sourcepage": "Pagina di origine:", "import-interwiki-history": "Copia l'intera cronologia di questa pagina", "import-interwiki-templates": "Includi tutti i template", "import-interwiki-submit": "Importa", @@ -3186,6 +3188,8 @@ "log-name-pagelang": "Modifiche lingua", "log-description-pagelang": "Questo è un registro delle modifiche alla lingua delle pagine.", "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha modificato}} la lingua della pagina $3 da $4 a $5.", + "default-skin-not-found": "Oops! La skin predefinita per il tuo wiki ($wgDefaultSkin), $1, non è disponibile.\n\nLa tua installazione sembra includere le seguenti skin. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.\n\n$2\n\n; Se hai appena installato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory skins/ da lì.\n:* Clonando uno dei repository mediawiki/skins/* tramite git nella directory skins/ della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki.\n\n; Se hai appena aggiornato MediaWiki:\n: MediaWiki 1.24 e versioni successive non abilità più automaticamente le skin installate (vedi [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automatico skin]). Puoi copiare le seguenti linee nel LocalSettings.php per abilitare tutte le skin attualmente installate:\n\n
$3
\n\n; Se hai appena modificato LocalSettings.php:\n: Ricontrolla i nomi delle skin per errori di battitura.", + "default-skin-not-found-no-skins": "Oops! La skin predefinita per il tuo wiki ($wgDefaultSkin), $1, non è disponibile.\n\nNon hai skin installate.\n\n; Se hai appena installato o aggiornato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. MediaWiki 1.24 e versioni successive non include alcuna skin nel repository principale. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory skins/ da lì.\n:* Clonando uno dei repository mediawiki/skins/* tramite git nella directory skins/ della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.", "default-skin-not-found-row-enabled": "* $1 / $2 (abilitata)", "default-skin-not-found-row-disabled": "* $1 / $2 ('''disabilitata''')" } diff --git a/languages/i18n/ko.json b/languages/i18n/ko.json index e2e7489da4..d055485b8b 100644 --- a/languages/i18n/ko.json +++ b/languages/i18n/ko.json @@ -38,7 +38,8 @@ "관인생략", "아라", "Keysuck", - "Infinity" + "Infinity", + "Bluemersen" ] }, "tog-underline": "링크에 밑줄:", @@ -55,6 +56,7 @@ "tog-watchdefault": "내가 편집하는 문서와 파일을 주시문서 목록에 추가", "tog-watchmoves": "내가 이동하는 문서와 파일을 주시문서 목록에 추가", "tog-watchdeletion": "내가 삭제하는 문서와 파일을 주시문서 목록에 추가", + "tog-watchrollback": "내가 되돌리기 기능을 사용한 문서를 주시문서 목록에 추가", "tog-minordefault": "모든 편집에 기본적으로 사소한 편집을 표시", "tog-previewontop": "편집 상자 앞에 미리 보기 보이기", "tog-previewonfirst": "처음 편집할 때 미리 보기 보이기", diff --git a/languages/i18n/lb.json b/languages/i18n/lb.json index 779c0eb96b..56a22d245b 100644 --- a/languages/i18n/lb.json +++ b/languages/i18n/lb.json @@ -732,6 +732,7 @@ "revdelete-selected-file": "{{PLURAL:$1|Erausgesicht Versioun|Erausgesicht Versioune}} vum Fichier vu(n) [[:$2]]:", "logdelete-selected": "Ausgewielten {{PLURAL:$1|Evenement|Evenementer}} aus dem Logbuch:", "revdelete-text-text": "Geläscht Versioune bleiwen am Historique vun der Säit, awer Deeler vun hirem Inhalt sinn net ëffentlech zougänglech.", + "revdelete-text-file": "Geläscht Versioune vu Fichiere bleiwen am Historique vum Fichier awer Deeler vun hirem Inhalt sinn net ëffentlech zougänglech.", "revdelete-text-others": "Aner Administrateure kënnen nach ëmmer de verstoppten Inhalt gesinn an en nees restauréieren, ausser wann zousätzlech Limitatiounen agestallt sinn.", "revdelete-confirm": "Confirméiert w.e.g. datt Dir dat maache wëllt, datt Dir d'Konsequenze verstitt an datt Dir dëst an Aklang mat de [[{{MediaWiki:Policy-url}}|Richtlinne]] maacht.", "revdelete-suppress-text": "Ënnerdréckung sollt '''nëmmen''' an dëse Fäll benotzt ginn:\n* Informatiounen déi beleidege kéinten\n* Net ubruechte perséinlechen Informatiounen\n*: ''Adressen, Telefonsnummeren, Sozialversécherungsnummeren asw.''", diff --git a/languages/i18n/li.json b/languages/i18n/li.json index e09c11411d..bf80d69868 100644 --- a/languages/i18n/li.json +++ b/languages/i18n/li.json @@ -1858,7 +1858,6 @@ "import": "Pazjena's importere", "importinterwiki": "Transwiki-import", "import-interwiki-text": "Selecteer 'ne wiki en pazjenanaam om te importere.\nVersie- en auteursgegaeves blieve hiej bie bewaard.\nAlle transwiki-importhanjelinge waere opgeslage in 't [[Special:Log/import|importlogbook]].", - "import-interwiki-source": "Bronwiki/pagina:", "import-interwiki-history": "Volledige gesjiedenis van deze pazjena ouch kopiëre", "import-interwiki-templates": "Alle sjablone opnaeme", "import-interwiki-submit": "Importere", @@ -2556,7 +2555,7 @@ "htmlform-selectorother-other": "Anges", "sqlite-has-fts": "Zeuk versie $1 mit óngersteuning veur \"full-text\"", "sqlite-no-fts": "Zeuk versie $1 zónger óngersteuning veur \"fulltext\"", - "logentry-delete-delete": "$1 haef de pagina $3 gewösj", + "logentry-delete-delete": "$1 {{GENDER:$1|haet}} de pagina $3 gewösj", "logentry-delete-restore": "$1 haet de pagina $3 trögkgezat", "logentry-delete-event": "$1 haet de zichbaarheid van {{PLURAL:$5|'ne logbookregel|$5 logbookregels}} van $3 gewiezig: $4", "logentry-delete-revision": "$1 haet de zichbaarheid van {{PLURAL:$5|'n versie|$5 versies}} van $3 gewiezig: $4", diff --git a/languages/i18n/lrc.json b/languages/i18n/lrc.json index f665292df9..0a3b52813b 100644 --- a/languages/i18n/lrc.json +++ b/languages/i18n/lrc.json @@ -922,11 +922,14 @@ "yournick": "امضا تازه:", "prefs-help-signature": "ویر و باوریا نیسسه بیه د بلگه چک چنه باید وا«~~~~» امضا بان؛ ای نشون وه شکل خودانجومی وه امضا شما و مؤر ویرگار تبدیل بوئه.", "badsig": "امضا خؤم بی اعتوار.\nسردیسیا اچ تی ام ال نه وارسی بکیت.", + "badsiglength": "امضا شما فره گپه.\nطیل امضا باید کمتر د $1 {{PLURAL:$1|نیسه}} بوئه.", "yourgender": "شما بیشتر میهایت که چه جوری گوته بوئه؟", "gender-unknown": "مه میهام چی یی نموئم", "gender-male": "وه(پیا) بلگه یا ویکی نه ویرایشت می که", "gender-female": "وه(زئنه)بلگه یا ویکی نه ویرایشت می که", + "prefs-help-gender": "انجوم دئن ای میزونکاری دل به هاییه.\nنرم افزار سی هشاره درست وه جنسیت و گوتن شما سی کسونا تر د شکل درست وه کار بسن یه گل دستور زون یه نه وه کار می بنه.\nای دونسمنیا سی کل خلک دیارن.", "email": "پیومک برقی", + "prefs-help-realname": "نوم راستکی دل به حائه.\nار شما ونه وارد بکیت د گات واگردونی وه آرنگیاتو و نسوت دئن ونو وه خوتو د نوم راستکی استفاده بوئه.", "prefs-help-email": "نشونی ایمیل اختیاری هئ.اما سی بازجست پاسورد دش نیاز بوئه.شما باید پاسوردتونه د ویر بوریت", "prefs-help-email-others": "شما می تونید سی پیوند گرتن تو وا نهایین ایمیل مئن یه هوم پیوند د بلگه کاروری یا بلگه چک چنه تو انتخاو بکید.\nنشونی ایمیلتو وختی که کاروریا هنی وا تو پیوند می گرن دیار نی.", "prefs-help-email-required": "نشونی ایمیل لازم هئ.", @@ -946,21 +949,28 @@ "prefs-displaywatchlist": "گزینه یا نه نشو بیه", "prefs-tokenwatchlist": "نشو", "prefs-diffs": "فرخیا", + "prefs-help-prefershttps": "کارگرایی ای ترجیح نها وامین اومائن نهایی شما وه کار گرته بوئه.", + "prefs-tabs-navigation-hint": "نکته: شما می تونید د کلیتیا لادیار کن چپ و راست نه سی رئتن مین تبیا که هان د نوم گه تبیا وه کار بونیت.", "email-address-validity-valid": "نشونی ایمیل دیار بیه خوئه", "email-address-validity-invalid": "یه گل نشونی ایمیل خو وارد بکید", "userrights": "حقوق دیوونداری کاریار", "userrights-lookup-user": "دسه یا کاروری نه دیوون داری بکیت", "userrights-user-editname": "نوم كاروری ته وارد كو", "editusergroup": "ویرایشت گرویا کاروری", + "editinguser": "آلشت دئن حقوق کاریاری کاریار'''[[کاریار:$1|$1]]''' $2", "userrights-editusergroup": "ویرایشت گرویا کاروری", "saveusergroups": "اماییه کردن گرویا کاریاری", "userrights-groupsmember": "اندوم:", + "userrights-groupsmember-auto": "اندوم ضمنی:", + "userrights-groups-help": "شما می تونیت دسه یای که ای کاریار ها دشو آلشت بئیتو:\n* جعوه نشودار وه ای مئنیه که کاریار ها د او دسه.\n* جعوه بی نشون وه ای مئنیه که کاریار د او دسه نئ.\n* نشون* د ای مئنیه که ار شما او دسه نه اضاف بکیتو د نهاتر نموئه ؤردارینش یا برعسگش.", "userrights-reason": "دليل:", "userrights-no-interwiki": "شما سی ویرایشت حقوق کارور د ویکی یا هنی دسرسی ناریت.", "userrights-nodatabase": "پاگا دونسمنی $1 یا نیئش یا د ولاتنشین نئ.", + "userrights-nologin": "شما باید وا یه گل حساو کاریاری دیووندار [[Special:UserLogin|روئیت وامین ]] تا تونستوییت حقوق کاریاری کاریار نه گماشته کاری بکیت.", "userrights-notallowed": "شما سی اضاف کردن حقوق کارور یا ورداشتنش دسرسی ناریت.", "userrights-changeable-col": "گرویایی که شما تونیت ویرایشت بکید", "userrights-unchangeable-col": "گرویایی که شما نتونیت ویرایشت بکید", + "userrights-conflict": "تعارض دسرسیا کاریاری! لطف بکیت یه گل وارسی انجوم بئیت و آلشتانه پشت راس بکیت.", "userrights-removed-self": "شما د خوئی حقوق خوتونه ؤرداشتیته، چی یه که مثلا شما تر نمی تونیت وه ای بلگه دسرسی داشتویت.", "group": "گرو", "group-user": "کاروریا", @@ -995,18 +1005,36 @@ "right-movefile": "فایلیا نه جا وه جا کو", "right-suppressredirect": "اوسه که بلگه یا د بین رئتنه هیچ واگردونی سی بلگه یا سرچشمه دروس نبیه", "right-upload": "سوار کردن فايلا", + "right-reupload": "سوارکرد هنی جانیایی که دماتر بئیشه", + "right-reupload-own": "سوارکرد هنی جانیایی که د دماتر وه دس همو کاریار سوارکرد بیه.", + "right-reupload-shared": "باطل‌کردن ولات نشینی جانیایا هومبئر بیه", "right-upload_by_url": "سوار کرد فایلیا د یو آر ال", + "right-purge": "پاک کردن مینجاگر بلگه بی یه که بلگه پشت راس کردن دیاری بکه", + "right-autoconfirmed": "د محدودیتیا سرعت آی پی-پایه کارگرایی ناره", + "right-bot": "باور بیه چی یه گل پردازشت خودانجوم", + "right-nominornewtalk": "حیرده ویرایشت بلگه یا چک چنه وه شکلی که باعث گوتن پیغوم تازه نبوئه.", + "right-apihighlimits": "سخم بالاتر د وه کار بسن API", "right-writeapi": "د نیسنن ای پی آی استفاده بکید", "right-delete": "بلگیا نه پاکسا کو", "right-bigdelete": "بلگه یایی که ویرگار گپی دارن پاکسا بکیت", + "right-deletelogentry": "پاکسا کردن و ناپاکسا کردن داده واریایی ویجه ای د پهرستنومه", + "right-deleterevision": "پاکساکردن و ناپاکساکردن وانئریا ویجه ای د بلگه یا", + "right-deletedhistory": "دیئن چیا پاکسا بیه د ویرگار، بی یه که نیسسه ونونه بؤنیت.", + "right-deletedtext": "دیئن نیسسه پاکسا بیه و آلشتیایی که هان مینجا وانئریا پاکسا بیه", "right-browsearchive": "بلگه یا پاک بیه نه پی جوری کو", "right-undelete": "ای بلگه نه حذف نكيد", + "right-suppressrevision": "دیئن و زنه کردن وانئریایی بلگه یایی که د دس کاریاریا نهو بینه", "right-viewsuppressed": "دیئن وانئریایی که د تیه هر کاریاری قام بیه", "right-suppressionlog": "دیئن پهرستنومه یا خصوصی", "right-block": "کاریاریا هنی د ویرایشت منع بوئن", "right-blockemail": "کاریار نه د کل کردن انجومانامه منع کو", "right-hideuser": "قلف کردن یه گل نوم کاریاری،قام کردن وه د ور تیه کل خلک", + "right-ipblock-exempt": "کارگرایی نگرتن د قطع دسرسیا آی پی، خودانجوم یا فاصله دار", + "right-proxyunbannable": "کارگرایی نگرتن د قطع دسرسی خودکار پروکسیا", "right-unblockself": "خوشه قلف نکید", + "right-protect": "آلشت دئن انازه پر و پیم کردن بلگه یا و ویرایشت بلگه یا پر و پیم بیه تافی", + "right-editprotected": "ویرایشت بلگه یا پر و پیم بیه چی «{{int:protect-level-sysop}}»", + "right-editsemiprotected": "ویرایشت بلگه یا پر و پیم بیه چی «{{int:protect-level-autoconfirmed}}»", "right-editinterface": "راوط کارور نه ویرایشت کو", "right-editusercssjs": "فایلیا جاوا اسکریپت و سی اس اس کاروریا هنی نه ویرایشت کو", "right-editusercss": "فایلیا سی اس اس کاروریا هنی نه ویرایشت کو", @@ -1014,15 +1042,24 @@ "right-editmyusercss": "فایلیا سی اس اس کارور خوتو نه ویرایشت کو", "right-editmyuserjs": "فایلیا جاوا اسکریپت کارور خوتو نه ویرایشت کو", "right-viewmywatchlist": "سیل برگ خوتونه بوینیت", + "right-editmywatchlist": "سیل برگ خوتونه ویرایشت بکیت. د ویرتو با که پاره ای د انجومکاریا بی دسرسی ئم می تونن ای بلگه یا نه اضافه بکن.", "right-viewmyprivateinfo": "دونسمنیا شصقی خوتونه بوینیت(چی نشونی ایمیل،نوم راستکی)", "right-editmyprivateinfo": "دونسمنیا شصقی خوتونه ویرایشت بکید(چی نشونی ایمیل،نوم راستکی)", "right-editmyoptions": "اولویتیا تونه ویرایشت بکیت", + "right-rollback": "چواشه کردن سریع ویرایشتیا آخری کاریاری که یه بلگه ویجه نه ویرایشت دئه", + "right-markbotedits": "نشودار کردن ویرایشتیا چواشه بیه چی ویرایشتیا یه گل بات", + "right-noratelimit": "کارگرا نبیئن د محدودیت سرعت", "right-import": "بلگه یا نه د ویکی هنی وارد بکید", "right-importupload": "دئن بلگه یا د یه گل جانیا سوار بیه", + "right-patrol": "سردیاری کردن د ویرایشتیا کسونا تر", + "right-autopatrol": "سردیاری کردن خودانجوم د ویرایشتیا خوش", + "right-patrolmarks": "دیئن سردیس سردیاری کردن د آلشتیا ایسنی", "right-unwatchedpages": "دیئن نوم گه بلگه یا دیئه نبیه", + "right-mergehistory": "وه یک شیوسن ویرگار ای بلگه", "right-userrights": "حقوق همه کاروریانه ویرایشت بکید", "right-userrights-interwiki": "حقوق همه کاروریانه د ویکی یا هنی ویرایشت بکید", "right-siteadmin": "پاگا دونسمنی نه قلف بکید یا نکید", + "right-override-export-depth": "وه در دئن بلگه یایی که بلگه یا هوم پیوند بیه تا پی یا 5 ها دشو", "right-sendemail": "سی کاروریا هنی ایمیل کل بکید", "right-passwordreset": "پاسورد ایمیلیا د نو دئه بیه نه بوینیت", "newuserlogpage": "راس بیه وا کارور", @@ -1042,6 +1079,8 @@ "action-move-categorypages": "جا وه جا کردن دسه بلگه یا", "action-movefile": "ای فایل جا وه جا بکید", "action-upload": "ای فایل سوار بکید", + "action-reupload": "نیسئین ری جانیا ایسنی", + "action-reupload-shared": "باطل کردن ای جانیا ری یه گل گنجینه هومبئر", "action-upload_by_url": "ای فایله نه د یو آر ال سوار بکید", "action-writeapi": "د نیسنن ای پی آی استفاده بکید", "action-delete": "ای بلگه نه پاکسا کو", @@ -1049,11 +1088,15 @@ "action-deletedhistory": "ویرگار پاکسا بیه ای بلگه نه بوینیت", "action-browsearchive": "بلگه یا پاک بیه نه پی جوری بکید", "action-undelete": "ای بلگه نه پاک نکو", + "action-suppressrevision": "وانئری و زنه کردن وانئریا پاک بیه", "action-suppressionlog": "ای پهرستنومه خصوصی نه بوینیت", "action-block": "ای کارور نه د ویرایشت کردن منع کو", "action-protect": "ریترازیا حفاظت د ای بلگه نه آلشت بکید", + "action-rollback": "چواشه کردن سریع ویرایشتیا آخری کاریاری که یه بلگه ویجه نه ویرایشت دئه", "action-import": "بلگه یا نه د ویکی هنی وارد بکید", "action-importupload": "بلگه یا نه د فایل سوار بیه وارد بکید", + "action-patrol": "سردیاری کردن د ویرایشتیا کسونا تر", + "action-autopatrol": "سردیاری کردن د ویرایشتیا خوتو", "action-unwatchedpages": "دیئن نوم گه بلگه یا دیئه نبیه", "action-mergehistory": "وه یک شیوسن ویرگار ای بلگه", "action-userrights": "حقوق همه کاروریانه ویرایشت بکید", @@ -1069,6 +1112,8 @@ "enhancedrc-history": "ويرگار", "recentchanges": "تغيريا تازه", "recentchanges-legend": "گزينه يا آلشتيا تازه", + "recentchanges-summary": "دو بیشتر آلشتیا تازباو نه د ویکی نه د ای بلگه پیگری کو.", + "recentchanges-noresult": "هیژ آلشتی د طیل دوره دیار بیه وا ای معیاریا یکی نبی.", "recentchanges-feed-description": "دو بیشتر آلشتیا تازباو نه د ویکی که ها د هوال حون پیگری کو.", "recentchanges-label-newpage": "ای ويرايشت يه بلگه تازه راس كرده", "recentchanges-label-minor": "يه ويرايشت كؤچكيه", @@ -1123,22 +1168,33 @@ "upload": "بلم گير كردن فايلا", "uploadbtn": "سوار کردن فایل", "reuploaddesc": "سوار کردن نه انجوم شیو بکیت و د ورئردیت جابلگ سوارکرد", + "upload-tryagain": "کل کردن توضیحیا آلشت دئیه بیه جانیا", "uploadnologin": "وارد نبیه", "uploadnologintext": "لطفن $1 سی سوارکرد جانیایا.", + "upload_directory_missing": "نشونگه سوارکرد ($1) وجود ناره و نبوئه دروسش بکی.", + "upload_directory_read_only": "نشونگه سوارکرد($1) د لا سرور قاول نیسنن نئ.", "uploaderror": "خطا د سوار کردن", + "upload-recreate-warning": "'''زئنار: جانیایی که وه ای نومه یا پاکسا بیه یا جا وه جا بیه.'''\n\nسی رائتی، نومگه پاکساگری و جا وه جا کردن ای بلگه ها د هار:", + "uploadtext": "دسی دئین جانیایی که د دماتر سوار بینه روئیت وه [[Special:FileList|نوم گه جانیایا]] . د نو سوارکردن د [[Special:Log/upload|نوم گه سوارکردیا]] و پاکساگری جانیایا د [[Special:Log/delete|deletion log]] جاگئر موئه.\n\nنها یه که یه گل جانیانه سوار کردیت می تونیت د سه شکل هاری وه نه د بلگه یا وه کار بونیت:\n*'''[[{{ns:file}}:File.jpg]]''' سی به کار بسن نسقه کامل جانیا\n*'''[[{{ns:file}}:File.png|200px|thumb|left|alt text]]''' سی به کار بسن یه گل نسقه 200 پیکسلی د جانیایی که ها د مینه یه گل جعوه که ها د لا چپ نیسسه که د وه عبارت alt text چی توضیح وه کار بسه بیه\n*'''[[{{ns:media}}:File.ogg]]''' سی دروس کردن یه گل هوم پیوند سرراست وه جانیا بی یه که جانیا دیاری بکه نوم بلگه هاری سی سوارکرد جانیایا تازه استفاده بکیت.", "upload-permitted": "جورا جانیا مجاز:$1.", "upload-preferred": "جورا جانیا مجاز:$1.", "upload-prohibited": "جورا جانیا مجاز:$1.", "uploadlogpage": "سوارکرد", + "uploadlogpagetext": "نومگه هاری یه گل نومگه د آخری سوارکرد جانیایا هئ.\nسی د نو سیل کردن[[Special:NewFiles|عسگدونی جانیایا تازه نه]] به ونیت.", "filename": "نوم فایل", "filedesc": "چكسته", "fileuploadsummary": "چکسه", "filereuploadsummary": "آلشتیا فایل:", "filestatus": "حال و بال کپی رایت", "filesource": "سرچشمه:", + "ignorewarning": "تیه پوشی د زئنار و اماییه کردن جانیا", "ignorewarnings": "د هر زنهار تیه پوشی کو", + "minlength1": "نوم جانیا باید حداقل یه حرف داشتوئه.", + "illegalfilename": "نوم جانیا «$1» د وه گیرنه نیسه یایی که د نوم بلگه یا صاحاو اجاره نیئن.\nلطفن نوم جانیا نه آلشت بئیت و ونه د نو نوم بنیت.", "filename-toolong": "نوم جانیا شایت گپتر د 240 بایت نبا.", "badfilename": "نوم جانیا د \"$1\" آلشت بیه.", + "filetype-mime-mismatch": "دماون جانیا «$1.‎» وا نوع MIME وه($2) یکی نئ.", + "filetype-badmime": "جانیایی که نوع MIME ونو $1 بوئه سی سوارکرد اجازه دار نیئن.", "empty-file": "فایلی که دئی ته حالی بیه.", "file-too-large": "فایلی که دئی ته فره گپ بی.", "filename-tooshort": "نوم فایل فره کؤچکه.", @@ -1159,6 +1215,8 @@ "sourceurl": "سرچشمه يو آر ال:", "destfilename": "نوم فایل مقصد:", "upload-maxfilesize": "بیشترونه انازه جانیا:$1", + "upload-description": "شرح جانیا", + "upload-options": "گزینه یا سوارکرد", "watchthisupload": "ای جانیا نه بوینیت", "upload-success-subj": "سوار کرد خوش سرانجوم", "upload-success-msg": "سوارکرد شما سی [$2] خوو بی.وه د ایچه هئش:[[:{{ns:file}}:$1]]", @@ -1171,6 +1229,8 @@ "upload-too-many-redirects": "ای یو آر ال د ورگیرنه واگردونیا فرئی هئ", "upload-http-error": "یه گل خطا اچ تی تی پی پیش اومائه:$1", "upload-copy-upload-invalid-domain": "ورداشتن سوارکردیا د ای پوشگئر د دسرس نئ.", + "backend-fail-stream": "نبوئه جانیا\"$1\" کل بوئه.", + "backend-fail-backup": "نبوئه سی \"$1\" پشتجا گرت.", "backend-fail-notexists": "فایل $1 وجود ناره.", "backend-fail-invalidpath": "\"$1\" ره خوئی سی امائیه کردن نئ.", "backend-fail-delete": "نبوئه جانیا $1 پاکسا بوئه", @@ -1185,22 +1245,33 @@ "backend-fail-read": "نبوئه جانیا\"$1\" حنه بوئه.", "backend-fail-create": "نبوئه د جانیا\"$1\" نوشته با.", "lockmanager-fail-closelock": "نبوئه قلف جانیا سی \"$1\" بسه بوئه.", + "lockmanager-fail-acquirelock": "نبوئه سی «$1» قلف وه دس اورد.", "lockmanager-fail-openlock": "نبوئه قلف جانیا سی \"$1\" وا بوئه.", + "lockmanager-fail-releaselock": "نبوئه قلف «$1» نه وا کرد .", + "lockmanager-fail-svr-acquire": "نبوئه سی «$1» قلف وه دس اورد.", + "zip-wrong-format": "جانیا تیار بیه جانیا زیپ نئ.", "uploadstash": "اماییه جا سوارکرد", "uploadstash-clear": "پاک کردن جانیایا اماییه بیه", "uploadstash-nofiles": "شما هیژ جانیا اماییه بیه ای ناریت.", + "uploadstash-errclear": "پاک کردن جانیایا د خوئی شکل نگرت.", "uploadstash-refresh": "نومه گه جانیایا نه د نو تازه کو", "invalid-chunk-offset": "جا وه جایی نامعتور برشت", "img-auth-accessdenied": "دسرسی منع بی", "img-auth-nofile": "فایل $1 وجود ناره.", + "img-auth-streaming": "د حال کل کردن \"$1\".", "http-invalid-url": "یو آر ال نامعتور:$1", "http-read-error": "خطا د حنن اچ تی تی پی.", + "http-timed-out": "گات حاستن اچ تی تی پی وه سر اوما.", + "http-curl-error": "خطا د اوردن تیرنشون اینترنتی: $1", + "http-bad-status": "د گات حاستن اچ تی تی پی خطایی پیش اوما: $1 $2", "upload-curl-error6": "نبوئه د یو آر ال برسیت", "upload-curl-error28": "تموم بیئن مئلت سی سوار کرد", "license": "ليانس دار بيئن", "license-header": "د شكل ليسانس دار بيئن", "nolicense": "هیچی انتخاو نبیه", + "licenses-edit": "گزینه یا مجوز ویرایشت", "license-nopreview": "(پیش سیل د دسرس نئ)", + "upload_source_url": "(شما یه گل جانیا د یه گل یو آر ال د دسرس خلک و معتور ورچئ کردیته)", "upload_source_file": "(یه گل جانیا د انجومیار تو انتخاو بکیت)", "listfiles-delete": "پاکسا کردن", "listfiles-summary": "ای بلگه یا ویجه همه جانیایا سوار بیه نه نشو می ئین.", @@ -1212,6 +1283,7 @@ "listfiles_name": "نوم", "listfiles_user": "کاریار", "listfiles_size": "انازه", + "listfiles_description": "شرح", "listfiles_count": "نسقیا", "listfiles-show-all": "شومل نسقه یا نهاتری عسگیا", "listfiles-latestversion": "نسقه تازه", @@ -1242,6 +1314,8 @@ "filepage-nofile": "چنو فایلی وا ای نوم نئ.", "uploadnewversion-linktext": "یه گل نسقه تازه د ای جانیا سوار بکید", "shared-repo-from": "د $1", + "shared-repo": "یه گنجینه هومبئر", + "upload-disallowed-here": "شما نمی تونیت ای جانیانه د نو سوار بکیت", "filerevert": "د سرگرتن سی $1", "filerevert-legend": "د سرگرتن جانیا", "filerevert-comment": "دليل:", @@ -1267,6 +1341,8 @@ "randomincategory": "بلگه بختی د ای دسه", "randomincategory-invalidcategory": "\"$1\" نوم دسه معتوری نئ.", "randomincategory-nopages": "هیچ بلگه ای د ای [[:دسه نئ:$1|$1]] دسه.", + "randomincategory-category": "دسه:", + "randomincategory-legend": "بلگه بختی د ای دسه", "randomredirect": "واگردونی بختکی", "statistics": "آماريا", "statistics-header-pages": "بلگه آماریا", @@ -1284,6 +1360,9 @@ "statistics-users": "ثوت نام بیه [[ویجه:نوم گه کاریاریا|کاریاریا]]", "statistics-users-active": "کاروریا کارکو", "statistics-mostpopular": "بلگه یایی که بیشتر دیئه بینه", + "pageswithprop": "بلگه یایی که خاصیت صفحه ها دشو", + "pageswithprop-legend": "بلگه یایی که خاصیت صفحه ها دشو", + "pageswithprop-prop": "نوم خاصیت:", "pageswithprop-submit": "رو", "doubleredirects": "واگردونیا دوتایی", "double-redirect-fixed-move": "[[$1]]جا وه جا بیه .\nوه خودکارونه وه روز بیه و ایسه وه د[[$2]] واگردونی بیه.", @@ -1293,6 +1372,7 @@ "brokenredirects-edit": "ویرایشت", "brokenredirects-delete": "پاكسا كردن", "withoutinterwiki": "بلگه یایی که هوم پیوند زون نارن", + "withoutinterwiki-summary": "بلگه یا هاری وه زون نسقه یا زونا تر هوم پیوند نبیه.", "withoutinterwiki-legend": "پیشون", "withoutinterwiki-submit": "نشون دائن", "fewestrevisions": "بلگه یایی که کمتری وانئری نه دارن", @@ -1373,6 +1453,7 @@ "allpages-hide-redirects": "واگردونیا قام بیه", "cachedspecial-refresh-now": "دیئن آخری.", "categories": "دسه يا", + "categoriesfrom": "دسه یایی که د شرو بینه نشو بیه:", "special-categories-sort-count": "سرجاخودگری د اساس شمارشت", "special-categories-sort-abc": "سرجاخودگری د اساس الفبا", "deletedcontributions": "هومیاریا پاکسا بیه کارور", @@ -1472,7 +1553,11 @@ "deletereasonotherlist": "دلیل هنی", "deletereason-dropdown": "* دلیلیا پاکسا کردن رسم بیه\n** اسپم\n** خراوکاری\n** رعایت نبین کپی رایت\n** درحاست نیسنه\n** نهاورگشت شکست حرده", "delete-edit-reasonlist": "دلیلیا پاکسا کردنه نه ویرایشت بکید", + "rollback": "چواشه کردن ویرایشتیا", + "rollback_short": "چواشه کردن", "rollbacklink": "ورگشتن", + "rollbackfailed": "چواشه کردن د خوئی انجوم نبی", + "editcomment": "ویرایشت چکشه وه: \"''$1''\" بی.", "sessionfailure-title": "شکست حردن نشینگه", "protectlogpage": "حفاظت کردن", "protectedarticle": "حفاظت بيه [[$1]]", @@ -1493,12 +1578,19 @@ "restriction-move": "جاوه جا بوئيت", "restriction-create": "راس كردن", "restriction-upload": "سوار کرد", + "restriction-level-sysop": "کلا پر و پیم بیه", + "restriction-level-autoconfirmed": "نصم و نیمه پر و پیم بیه", "restriction-level-all": "هر ریترازی", + "undelete": "دیئن بلگه یا پاکسا بیه", + "undeletepage": "دیئن و ؤرگشتن بلگه یا پاکسا بیه", + "viewdeletedpage": "دیئن بلگه یا پاکسا بیه", "undeletelink": "بوين/دوواره آماده با", "undeleteviewlink": "ديئن", "undeletecomment": "دليل:", "cannotundelete": "زنه کردن انجوم نبی:$1", "undelete-search-title": "بلگه یا پاکسا بیه نه پی جوری کو", + "undelete-search-box": "پی جوری بلگه یا پاکسا بیه", + "undelete-search-prefix": "بلگه یایی که وا شرو بیه نشو بیه:", "undelete-search-submit": "پی جوری", "undelete-error-short": "خطا پاک نبیئن جانیا:$1", "undelete-show-file-submit": "هری", @@ -1513,10 +1605,15 @@ "month": "د ما(یا زیتر)", "year": "د سال", "sp-contributions-newbies": "فقط هومیاری یایی که د حساو تازه بیه نشون بئه", + "sp-contributions-newbies-sub": "سی حساویا تازه", + "sp-contributions-newbies-title": "هومیاریا کاریار سی حساویا تازه", "sp-contributions-blocklog": "قلف", + "sp-contributions-suppresslog": "پاکساگری کردن هومیاریا کاریار", + "sp-contributions-deleted": "هومیاریا پاکسا بیه کاریار", "sp-contributions-uploads": "سواركرديا", "sp-contributions-logs": "نیسنن رخ ونیا", "sp-contributions-talk": "چك چنه", + "sp-contributions-userrights": "دیوونداری حقوق کاریار", "sp-contributions-search": "سی هومیاریا پی جور با", "sp-contributions-username": "نوم نشون آی پی يا نوم كاروری:", "sp-contributions-toponly": "فقط ویرایشتیایی که جزئه آخرین دوواره دیئن هئین نشو بیه", @@ -1546,7 +1643,11 @@ "ipboptions": "2 ساعتیا:2 ساعت,1 رو:1 رو,3 روزا:3 رو,1 هفته:1 هفته,2 هفته یا:2 هفته,1 ما:1 ما,3 ما:3 میا,6 ما:6 مایا,1 سال:1سال,بی حساو:بی حساو", "ipbhidename": "نوم کاروری نه سی ویرایشت یا و نوم گه یا قام کو", "ipb-disableusertalk": "نها ای کاریار نه اوسه که میها د بلگه چک چنه ش ویرایشت بکه و وه قلف بیه بئر", + "ipb-confirm": "پشت راس کردن قلف", + "badipaddress": "تیرنشون نامعتور آی پی", + "blockipsuccesssub": "قلف کردن د خوئی انجوم بی", "unblockip": "کارور منع نبیه", + "ipusubmit": "ای قلف نه ؤردار", "blocklist": "كاروريا منع بيه", "ipblocklist": "كاروريا منع بيه", "ipblocklist-legend": "یه گل کارور منع بیه بجوریت", @@ -1563,14 +1664,18 @@ "blocklogentry": " [[$1]] وا یه گل وخت تموم بیئن $2 و $3 قلف بیه", "block-log-flags-nocreate": "حساو راس کردن عاجز بیه.", "block-log-flags-nousertalk": "نبوئه بلگه چک چنه خوتونه ویرایشت بکید", + "ip_range_invalid": "پوشگر نامعتور آی پی", "proxyblocker": "قلف کننه پروکسی", "lockdb": "قلف کردن رسینه گا", + "unlockdb": "رسینه گا قلف نبیه", "unlockconfirm": "هره، مه واقعند میهام که رسینه گا وا بوئه.", "lockbtn": "قلف کردن رسینه گا", "unlockbtn": "رسینه گا قلف نبیه", "lockdbsuccesssub": "رسینه گا د خوئی قلف بیه", + "unlockdbsuccesssub": "قلف رسینه گا ؤرداشته بیه", "move-page": "$1 جا وه جا کو", "move-page-legend": "بلگه نه جا وه جا کو", + "movearticle": "جا وه جا کردن بلگه:", "movenotallowed": "شما وه جا وه جا کردن بلگه دسرسی ناریت", "movenotallowedfile": "شما وه جا وه جا کردن جانیایا دسرسی ناریت", "movepagebtn": "بلگه جا وه جا کو", @@ -1636,6 +1741,7 @@ "tooltip-n-help": "جاگه سی فهمسن", "tooltip-t-whatlinkshere": "سيائه تمؤم بلگيایی كه ايچه چسب ون دارن", "tooltip-t-recentchangeslinked": "تغيريا تازه باو مئن بلگيايي كه د ای بلگه چسب وند بيئنه", + "tooltip-feed-rss": "هوال حون آر اس اس سی ای بلگه", "tooltip-feed-atom": "تغذيه كؤچك سی ای بلگه", "tooltip-t-contributions": "یه نوم گه د هومیاریا ای کارور", "tooltip-t-emailuser": "سی ای كارور ايميل كل كو", @@ -1691,6 +1797,7 @@ "metadata": "داديا فره گپ", "metadata-help": "ای فایل شومل دونسمنیا هنی یه.شایت د دیربین رقم ون یا اسکنری که سی راس کردنشو استفاده بیه،وه ایچه اضاف بیه", "metadata-fields": "رشته یا گپ دونسمنیا که د ای پیغوم نوم ون بینه شومل بلگه عسگ ن که وختی که جدول گپ دونسمنیا وا بوئه نشون دئیه بوئن.\nچی یا هنی سی یه که پیش فرضن قام بوئن.\n*راست کو\n*مدل\n*دم وخت اصل\n*وخت آشگار\n*اف ان شماره\n*ایزو نرخ من سرعت\n*فوکالنس\n*هنرمن\n*کپی رایت\n*حالت جی پی اس \n*جی پی اس گپ حالت\n*جی پی اس همه حالت", + "exif-planarconfiguration": "سرجایک کردن رسینه", "exif-datetime": "آلشت دئن وخت و دمون جانیا", "exif-make": "سازنه دیربین", "exif-usercomment": "ویر و باوریا کارور", @@ -1699,7 +1806,9 @@ "exif-filesource": "سرچشمه جانیا", "exif-gpstimestamp": "وخت جی پی اس (ساعت اتمی)", "exif-jpegfilecomment": "ویر و باور فایل پی ان جی", + "exif-countrycodecreated": "رازینه سی ولاتی که عسگ د وه گرته بیه", "exif-citycreated": "شهری که عسگ دش گرته بیه", + "exif-countrycodedest": "رازینه سی ولات نمائشت دئه بیه", "exif-citydest": "شهر دیار بیه", "exif-fixtureidentifier": "نوم ثاوت", "exif-languagecode": "زون", @@ -1717,6 +1826,7 @@ "watchlistall2": "همه شو", "namespacesall": "همه شو", "monthsall": "همه", + "confirmemail_send": "کل کردن رازینه پشت راس کاری", "imgmultigo": "رؤ!", "img-lang-default": "(زون پیش زمینه)", "img-lang-go": "رو", @@ -1741,6 +1851,7 @@ "specialpages-group-media": "گزارشتیا رسانه و سوارکردیا", "specialpages-group-users": "کاروریا و حقوق", "specialpages-group-pages": "نوم گه بلگه یا", + "specialpages-group-wiki": "رسینه و اوزاریا", "specialpages-group-redirects": "بلگه ویجه واگردونی بیه", "external_image_whitelist": "یه خط نه ول بکید چی وه
",
 	"tag-filter": "فيلتر [[Special:Tags|Tag]]:",
@@ -1751,6 +1862,7 @@
 	"revdelete-uname-hid": "نوم کاروری قام بیه",
 	"revdelete-content-unhid": "مینونه قام نبیه",
 	"revdelete-uname-unhid": "نوم کاروری قام نبیه",
+	"feedback-submit": "کل کردن نهاهوال حون",
 	"feedback-close": "انجوم بی",
 	"searchsuggest-search": "پی جوری",
 	"api-error-badaccess-groups": "شما سی سوار کرد جانیایا د ای ویکی اجازه ناریت.",
@@ -1760,5 +1872,12 @@
 	"api-error-mustbeloggedin": "شما سی سوارکردن فایلیا با بیایت وامین",
 	"duration-days": "$1{{جمی:$1|روز|روزیا}}",
 	"duration-years": "$1{{جمی:$1| سال|سالیا}}",
-	"expand_templates_remove_comments": "جا وه جا بیئن ویر و باوریا"
+	"expand_templates_remove_comments": "جا وه جا بیئن ویر و باوریا",
+	"pagelanguage": "بلگه انتخاو زون",
+	"pagelang-language": "زون",
+	"pagelang-use-default": "وه کار بسن زون پیش دیه",
+	"right-pagelang": "آلشت دئن زون بلگه",
+	"log-name-pagelang": "آلشت دئن زون پهرستنومه",
+	"log-description-pagelang": "ای پهرستنومه در بلگه زونا آلشت گرته.",
+	"default-skin-not-found-row-disabled": "* <رازینه>$1 / $2 ('''ناکنشتگر بیه''')"
 }
diff --git a/languages/i18n/lv.json b/languages/i18n/lv.json
index 540d275c58..defaec71d1 100644
--- a/languages/i18n/lv.json
+++ b/languages/i18n/lv.json
@@ -266,6 +266,8 @@
 	"hidetoc": "paslēpt",
 	"collapsible-collapse": "paslēpt",
 	"collapsible-expand": "rādīt",
+	"confirmable-yes": "Jā",
+	"confirmable-no": "Nē",
 	"thisisdeleted": "Apskatīt vai atjaunot $1?",
 	"viewdeleted": "Skatīt $1?",
 	"restorelink": "$1 {{PLURAL:$1|dzēsto versiju|dzēstās versijas}}",
@@ -377,6 +379,7 @@
 	"gotaccount": "Tev jau ir lietotājvārds? '''$1'''!",
 	"gotaccountlink": "Pieslēgties",
 	"userlogin-resetlink": "Esat aizmirsis savu pieslēgšanās informāciju?",
+	"userlogin-resetpassword-link": "Aizmirsi savu paroli?",
 	"userlogin-helplink2": "Palīdzība ar pieslēgšanos",
 	"userlogin-loggedin": "Tu esi pieslēdzies ar lietotājvārdu {{GENDER:$1|$1}}.\nLai pieslēgtos ar citu lietotājvārdu, aizpildi šo formu.",
 	"userlogin-createanother": "Izveidot citu kontu",
@@ -1003,7 +1006,7 @@
 	"rcshowhidebots": "$1 botus",
 	"rcshowhideliu": "$1 reģistrētos lietotājus",
 	"rcshowhideanons": "$1 anonīmos",
-	"rcshowhidepatr": "$1 pārbaudītie labojumi",
+	"rcshowhidepatr": "$1 pārbaudītos labojumus",
 	"rcshowhidemine": "$1 manus",
 	"rclinks": "Parādīt pēdējās $1 izmaiņas pēdējās $2 dienās.
$3", "diff": "izmaiņas", diff --git a/languages/i18n/lzh.json b/languages/i18n/lzh.json index 03355b660a..384b0268f6 100644 --- a/languages/i18n/lzh.json +++ b/languages/i18n/lzh.json @@ -44,7 +44,7 @@ "tog-forceeditsummary": "漏概醒之", "tog-watchlisthideown": "不哨己文", "tog-watchlisthidebots": "不哨僕文", - "tog-watchlisthideminor": "不哨小纂", + "tog-watchlisthideminor": "不哨細纂", "tog-watchlisthideliu": "不哨有簿", "tog-watchlisthideanons": "不哨無簿", "tog-watchlisthidepatrolled": "不哨已巡", @@ -247,8 +247,8 @@ "youhavenewmessages": "有$1書至子書房也。($2)", "youhavenewmessagesfromusers": "子有 $1 自 {{PLURAL:$3|一簿戶也|$3 簿戶也}} ($2)。", "youhavenewmessagesmanyusers": "子有 $1 自多簿戶 ( $2 )", - "newmessageslinkplural": "{{PLURAL:$1|一新訊息|新訊息}}", - "newmessagesdifflinkplural": "新{{PLURAL:$1|易|易}}", + "newmessageslinkplural": "{{PLURAL:$1|一新訊|999=新訊}}", + "newmessagesdifflinkplural": "新易", "youhavenewmessagesmulti": "新訊於$1", "editsection": "纂", "editold": "纂", @@ -261,6 +261,8 @@ "hidetoc": "藏", "collapsible-collapse": "摺", "collapsible-expand": "展", + "confirmable-yes": "是", + "confirmable-no": "否", "thisisdeleted": "還$1或閱之?", "viewdeleted": "閱$1之?", "restorelink": "$1已刪", @@ -289,6 +291,8 @@ "nospecialpagetext": "無此特查。\n\n見[[Special:SpecialPages|{{int:specialpages}}]]。", "error": "有誤", "databaseerror": "庫藏誤然", + "databaseerror-query": "尋:$1", + "databaseerror-error": "錯:$1", "laggedslavemode": "警示,此頁不新", "readonly": "鎖庫藏", "enterlockreason": "何以鎖之?何日啟之?", @@ -748,6 +752,7 @@ "preferences": "簿註", "mypreferences": "簿註", "prefs-edits": "數計:", + "prefsnologintext2": "登簿以改簿註", "prefs-skin": "面版", "skin-preview": "草覽", "datedefault": "原註", @@ -1243,7 +1248,7 @@ "double-redirect-fixer": "修渡", "brokenredirects": "斷渡", "brokenredirectstext": "頁下斷渡。", - "brokenredirects-edit": "替", + "brokenredirects-edit": "纂", "brokenredirects-delete": "刪", "withoutinterwiki": "孤語", "withoutinterwiki-summary": "頁下無鏈他語。", @@ -1435,7 +1440,7 @@ "exbeforeblank": "清文前乃為:「$1」", "delete-confirm": "刪\"$1\"", "delete-legend": "刪", - "historywarning": "警示,此頁約有誌$1:", + "historywarning": "警示,此頁有誌$1:", "confirmdeletetext": "欲刪此物與誌,知後果、合[[{{MediaWiki:Policy-url}}]]後再為之。", "actioncomplete": "成矣", "actionfailed": "未竟", @@ -1769,6 +1774,7 @@ "import": "圖入匯", "importinterwiki": "維基互匯", "import-interwiki-text": "欲入匯,擇維基、揀題文,審時、纂者隨記也。互匯錄於[[Special:Log/import|誌入]]。", + "import-interwiki-sourcepage": "源頁:", "import-interwiki-history": "審、誌同匯", "import-interwiki-submit": "入匯", "import-interwiki-namespace": "入名集:", diff --git a/languages/i18n/mai.json b/languages/i18n/mai.json index e6169e6cd2..c81e334aa4 100644 --- a/languages/i18n/mai.json +++ b/languages/i18n/mai.json @@ -363,6 +363,7 @@ "invalidtitle-knownnamespace": "\"$2\" नामस्थान आर \"$3\" नाम बला गलत शीर्षक", "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 आर नाम \"$2\" वाला गलत शीर्षक", "exception-nologin": "सम्प्रवेशित नै", + "exception-nologin-text": "इ पन्ना वा काजके सक्षम करवाक लेल कृपया प्रवेश करु।", "exception-nologin-text-manual": "इ पन्ना वा काजके सक्षम करवाक लेल कृपया $1 करु।", "virus-badscanner": "खराप विन्यास: अज्ञात विषविधि बिम्बक: ''$1''", "virus-scanfailed": "बिम्ब विफल (विध्यादेश $1)", @@ -2012,7 +2013,6 @@ "import": "पन्ना सभकेँ आनू", "importinterwiki": "ट्रान्सविकी आनू", "import-interwiki-text": "एकटा विकी आ पन्ना शीर्षक अनबाले चुनू।\nसंशोधन तिथि आ सम्पादकक नाम सुरक्षित रहत।\nसभटा ट्रान्सविकी आयात क्रिया सम्प्रवेशित अछि [[Special:Log/import|import log]] पर।", - "import-interwiki-source": "मूल विकी/ पन्ना:", "import-interwiki-history": "अए पन्नाक सभटा इतिहास संशोधनक द्वितीयक बनाउ", "import-interwiki-templates": "सभटा नमूना शामिल करू", "import-interwiki-submit": "आनू", diff --git a/languages/i18n/ml.json b/languages/i18n/ml.json index 7b938c188e..bab2aaac31 100644 --- a/languages/i18n/ml.json +++ b/languages/i18n/ml.json @@ -1458,6 +1458,8 @@ "randomincategory": "വർഗ്ഗത്തിൽ നിന്ന് ക്രമരഹിതമായി എടുക്കുന്ന താൾ", "randomincategory-invalidcategory": "\"$1\" സാധുതയുള്ള വർഗ്ഗത്തിന്റെ പേരല്ല.", "randomincategory-nopages": "[[:Category:$1|വർഗ്ഗം:$1]] എന്നതിൽ താളുകളൊന്നുമില്ല.", + "randomincategory-category": "വർഗ്ഗം:", + "randomincategory-legend": "വർഗ്ഗത്തിൽ നിന്ന് ക്രമരഹിതമായി എടുക്കുന്ന താൾ", "randomredirect": "ക്രമരഹിതമായ തിരിച്ചുവിടൽ", "randomredirect-nopages": "\"$1\" എന്ന നാമമേഖലയിൽ തിരിച്ചുവിടൽ താളുകളൊന്നുമില്ല.", "statistics": "സ്ഥിതിവിവരക്കണക്കുകൾ", @@ -1747,7 +1749,7 @@ "exbeforeblank": "ശൂന്യമാക്കപ്പെടുന്നതിനു മുമ്പുള്ള ഉള്ളടക്കം: '$1'", "delete-confirm": "\"$1\" മായ്ക്കുക", "delete-legend": "മായ്ക്കുക", - "historywarning": "'''മുന്നറിയിപ്പ്''': താങ്കൾ മായ്ക്കുവാൻ പോകുന്ന താളിനു ഏകദേശം {{PLURAL:$1|ഒരു നാൾപ്പതിപ്പ്|$1 നാൾപ്പതിപ്പുകൾ}} ഉള്ള നാൾവഴി ഉണ്ട്:", + "historywarning": "മുന്നറിയിപ്പ്: താങ്കൾ മായ്ക്കുവാൻ പോകുന്ന താളിനു {{PLURAL:$1|ഒരു നാൾപ്പതിപ്പ്|$1 നാൾപ്പതിപ്പുകൾ}} ഉള്ള നാൾവഴി ഉണ്ട്:", "confirmdeletetext": "താങ്കൾ ഒരു താൾ അതിന്റെ നാൾവഴിയടക്കം മായ്ക്കുവാൻ പോവുകയാണ്. ഈ ചെയ്തിയുടെ പരിണതഫലം താങ്കൾക്കറിയാമെന്നും, ഈ നടപടി [[{{MediaWiki:Policy-url}}|വിക്കിയുടെ നയം]] അനുസരിച്ചാണു ചെയ്യുന്നതെന്നും ഉറപ്പാക്കുക.", "actioncomplete": "പ്രവൃത്തി പൂർത്തിയായിരിക്കുന്നു", "actionfailed": "പ്രവൃത്തി പരാജയപ്പെട്ടിരിക്കുന്നു", @@ -1763,6 +1765,7 @@ "delete-edit-reasonlist": "മായ്ക്കലിന്റെ കാരണം തിരുത്തുക", "delete-toobig": "ഈ താളിനു വളരെ വിപുലമായ തിരുത്തൽ ചരിത്രമുണ്ട്. $1 മേൽ {{PLURAL:$1|പതിപ്പുണ്ട്|പതിപ്പുകളുണ്ട്}}. ഇത്തരം താളുകൾ മായ്ക്കുന്നതു {{SITENAME}} സം‌രംഭത്തിന്റെ നിലനില്പ്പിനെ തന്നെ ബാധിക്കുമെന്നതിനാൽ ഈ താൾ മായ്ക്കുന്നതിനുള്ള അവകാശം പരിമിതപ്പെടുത്തിയിരിക്കുന്നു.", "delete-warning-toobig": "ഈ താളിനു വളരെ വിപുലമായ തിരുത്തൽ ചരിത്രമുണ്ട്. അതായത്, ഇതിനു് $1 മേൽ {{PLURAL:$1|പതിപ്പുണ്ട്|പതിപ്പുകളുണ്ട്}}. ഇത്തരം താളുകൾ മായ്ക്കുന്നതു {{SITENAME}} സം‌രംഭത്തിന്റെ ഡാറ്റാബേസ് ഓപ്പറേഷനെ ബാധിച്ചേക്കാം. അതിനാൽ വളരെ ശ്രദ്ധാപൂർവ്വം തുടർനടപടികളിലേക്കു നീങ്ങുക.", + "deleteprotected": "ഈ താൾ സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്നതിനാൽ താങ്കൾക്കിത് മായ്ക്കാനാവില്ല.", "deleting-backlinks-warning": "'''മുന്നറിയിപ്പ്:''' മറ്റു താളുകളിൽ നിന്നും [[Special:WhatLinksHere/{{FULLPAGENAME}}|താളിലേയ്ക്കുള്ള കണ്ണികൾ]] അല്ലെങ്കിൽ ഉൾപ്പെടുത്തിയിട്ടുള്ള താളുകൾ താങ്കൾ മായ്ക്കാൻ പോവുകയാണ്.", "rollback": "തിരുത്തുകൾ റോൾബാക്ക് ചെയ്യുക", "rollback_short": "റോൾബാക്ക്", @@ -2145,6 +2148,8 @@ "import": "താളുകൾ ഇറക്കുമതി ചെയ്യുക", "importinterwiki": "അന്തർവിക്കി ഇറക്കുമതി", "import-interwiki-text": "വിക്കിയും ഇറക്കുമതി ചെയ്യാനുള്ള താളും തിരഞ്ഞെടുക്കുക.\nപുതുക്കൽ തീയതികളും തിരുത്തിയ ആളുകളുടെ പേരും സൂക്ഷിക്കപ്പെടും.\nഅന്തർവിക്കി ഇറക്കുമതിയുടെ എല്ലാ വിവരങ്ങളും [[Special:Log/import|ഇറക്കുമതി പ്രവർത്തനരേഖ]] എന്ന താളിൽ ശേഖരിക്കപ്പെടും.", + "import-interwiki-sourcewiki": "സ്രോതസ്സ് വിക്കി:", + "import-interwiki-sourcepage": "സ്രോതസ്സ് താൾ:", "import-interwiki-history": "ഈ താളിന്റെ എല്ലാ പൂർവ്വചരിത്രവും പകർത്തുക", "import-interwiki-templates": "എല്ലാ ഫലകങ്ങളും ഉൾപ്പെടുത്തുക", "import-interwiki-submit": "ഇറക്കുമതി", diff --git a/languages/i18n/mn.json b/languages/i18n/mn.json index 195552a934..71512717ad 100644 --- a/languages/i18n/mn.json +++ b/languages/i18n/mn.json @@ -261,6 +261,9 @@ "hidetoc": "хумих", "collapsible-collapse": "хумих", "collapsible-expand": "дэлгэх", + "confirmable-confirm": "{{GENDER:$1|Та}} итгэлтэй байна уу?", + "confirmable-yes": "Тийм", + "confirmable-no": "Үгүй", "thisisdeleted": "$1-г харах эсвэл сэргээх үү?", "viewdeleted": "$1-г харах уу?", "restorelink": "{{PLURAL:$1|арилгасан засвар|арилгасан $1 засварууд}}", @@ -787,6 +790,7 @@ "preferences": "Хэрэглэгчийн тохиргоо", "mypreferences": "Миний тохиргоо", "prefs-edits": "Засваруудын тоо:", + "prefsnologintext2": "Өөрийн тохиргоогоо өөрчлөхийн тулд логин хийнэ үү.", "prefs-skin": "Арьс", "skin-preview": "Урьдчилж харах", "datedefault": "Анхны байдал", @@ -1308,6 +1312,8 @@ "unusedtemplateswlh": "бусад холбоосууд", "randompage": "Санамсаргүй хуудас", "randompage-nopages": "Дараах {{PLURAL:$2|нэрний зайнд|нэрний зайнд}} хуудас байхгүй байна : $1. \\", + "randomincategory-category": "Ангилал:", + "randomincategory-legend": "Ангилалд багтсан дурын хуудас", "randomredirect": "Санамсаргүй чиглүүлэгч", "randomredirect-nopages": "\"$1\" нэрний зайд чиглүүлэгч байхгүй байна.", "statistics": "Статистик мэдээлэл", @@ -1551,6 +1557,7 @@ "delete-edit-reasonlist": "Устгах шалтгаануудыг засварлах", "delete-toobig": "Уг хуудасны засварын түүх маш их, $1 {{PLURAL:$1|засвар|гаруй засвартай}} байна.\n{{SITENAME}}-н аюулгүй байдлын үүднээс дээрх хуудсыг устгахыг хорьсон байна.", "delete-warning-toobig": "Энэ хуудасны засварын түүх маш том байгаа бөгөөд {{PLURAL:$1| гаруй засвар| гаруй засварууд}} байна.\nУстгавал {{SITENAME}}-н мэдээллийн сангийн үйл ажиллагаанд нөлөөлж магадгүй тул та анхаарна уу.", + "deleteprotected": "Энэ хуудас хамгаалалттай тул устгаж болохгүй.", "rollback": "Засваруудыг буцаах", "rollback_short": "Буцаах", "rollbacklink": "буцаах", @@ -1699,7 +1706,7 @@ "whatlinkshere-filters": "Шүүлтүүрүүд", "block": "Хэрэглэгчийг блок хийх", "unblock": "Хэрэглэгчийг блокоос гаргах", - "blockip": "Хэрэглэгчийг түгжих", + "blockip": "{{GENDER:$1|хэрэглэгчийн}} түгжих", "blockip-legend": "Хэрэглэгчийг түгжих", "blockiptext": "Доорх маягтыг ашиглан тодорхой IP хаяг эсвэл хэрэглэгчийн нэрийг засвар хийхээс түгжинэ үү.\nЭнэ нь зөвхөн вандализм үйлдэх явдлаас сэргийлэхийн тулд, [[{{MediaWiki:Policy-url}}|бодлого, баримтлалын]] дагуу хийгдэх ёстой.\nДоор тодорхой шалтгаанаа бичнэ үү.", "ipaddressorusername": "IP хаяг буюу хэрэглэгчийн нэр", @@ -1726,7 +1733,7 @@ "ipb-unblock-addr": "$1-н түгжээг тайлах", "ipb-unblock": "Хэрэглэгчийн нэр эсвэл IP хаягийн түгжээг тайлах", "ipb-blocklist": "Байгаа түгжээнүүдийг харах", - "ipb-blocklist-contribs": "$1-н хувь нэмэр", + "ipb-blocklist-contribs": "{{GENDER:$1|$1}}-н хувь нэмэр", "unblockip": "Хэрэглэгчийг идэвхижүүлэх", "unblockiptext": "Өмнө нь хориг тавьсан интернет хаяг юм уу хэрэглэгчийн бичих эрхийг сэргээхийн тулд дорх маягтыг ашигла.", "ipusubmit": "Энэ түгжээг цуцлах", @@ -1909,7 +1916,8 @@ "import": "Хуудаснуудыг импортлох", "importinterwiki": "Транс-викигийн импорт", "import-interwiki-text": "Импортлох вики болон хуудасны нэрийг сонгоно уу.\nЗасварын огноонууд болон засварлагчдын нэрс хэвээр үлдэнэ.\n[[Special:Log/import|Импортын логоос]] бүх транс-викигийн үйлдлүүд жагсаагдсан байгаа.", - "import-interwiki-source": "Эх үүсвэр вики/хуудас:", + "import-interwiki-sourcewiki": "wiki -ын эх сурвалж:", + "import-interwiki-sourcepage": "Эх хуудас:", "import-interwiki-history": "Энэ хуудсын бүх хувилбаруудын түүхийг хуулах", "import-interwiki-templates": "Бүх загварыг оруулах", "import-interwiki-submit": "Импортлох", diff --git a/languages/i18n/ms.json b/languages/i18n/ms.json index 3a21c39e29..7aa480e5e6 100644 --- a/languages/i18n/ms.json +++ b/languages/i18n/ms.json @@ -58,7 +58,7 @@ "tog-diffonly": "Jangan tunjukkan kandungan laman di bawah perbezaan", "tog-showhiddencats": "Tunjukkan kategori tersembunyi", "tog-norollbackdiff": "Abaikan perbezaan selepas melakukan pengunduran suntingan.", - "tog-useeditwarning": "Beri saya amaran apabila saya meninggalkan sesebuah laman penyuntingan tanpa menyimpan perubahan.", + "tog-useeditwarning": "Berikan saya amaran apabila saya meninggalkan sesebuah laman penyuntingan tanpa menyimpan perubahan", "tog-prefershttps": "Sentiasa gunakan sambungan terlindung apabila log masuk", "underline-always": "Sentiasa", "underline-never": "Jangan", diff --git a/languages/i18n/myv.json b/languages/i18n/myv.json index d1f4637717..917536aaf7 100644 --- a/languages/i18n/myv.json +++ b/languages/i18n/myv.json @@ -161,8 +161,8 @@ "returnto": "Велявтомс $1 лопантень.", "tagline": "{{SITENAME}} -нь пельде", "help": "Лезкс", - "search": "Вешнэмс", - "searchbutton": "Вешнэк", + "search": "Вешнемс", + "searchbutton": "Вешнек", "go": "Адя", "searcharticle": "Адя", "history": "Лопань полавтнемат - витнемат", @@ -281,7 +281,7 @@ "laggedslavemode": "Ванок: Кизды, лопасонть материалось таштомсь.", "readonly": "Датабазась панжома экшсэ", "enterlockreason": "Сёрмадт мейс сёлгамс эряви, ды ёвтак, зярдо таго арьсят панжови", - "missing-article": "Дата йуртсто а муеви эрявикс текстэсь, сонзэ лемезэ \"$1\" $2.\n\nСеде сеедьстэ истя лиси, зярдо таштомозь diff эли историянь сюлмавома песь вети нардань лопас.\n\nЛисиндерясь аволь истя, можок муить программа керьксстэнть (тапавкс тарка) сийне.\nПачтта сёрмине теде [[Special:ListUsers/sysop|системань ветийнень]] URL адресэнть тештязь.", + "missing-article": "Дата юртсто а муеви эрявикс текстэсь, сонзэ лемезэ \"$1\" $2.\n\nСеде сеедьстэ истя лиси, зярдо таштомозь diff эли историянь сюлмавома песь вети нардань лопас.\n\nЛисиндерясь аволь истя, можок муить программа керьксстэнть (тапавкс тарка) сийне.\nПачтта сёрмине теде [[Special:ListUsers/sysop|системань ветийнень]] URL адресэнть тештязь.", "missingarticle-rev": "(лиякстомтома#: $1)", "missingarticle-diff": "(Мейсэ явовить: $1, $2)", "internalerror": "Потмоильведькс", @@ -347,7 +347,7 @@ "createacct-submit": "Шкик совамотаркат", "createacct-another-submit": "Шкак од совамотарка", "createacct-benefit-heading": "«{{SITENAME}}» сайтэнть теизь тонь кондямо ломанть.", - "createacct-benefit-body2": "{{PLURAL:$1|1=лопа|лопат}}", + "createacct-benefit-body2": "{{PLURAL:$1|лопа|лопат}}", "badretype": "Сёрмадыть салава валот кавксть: сынь аволь вейкеть.", "userexists": "Те лемесь уш саезь.\nАрсека эстеть лия, инеськеть.", "loginerror": "Совамсто ильведькс", @@ -379,6 +379,8 @@ "accountcreated": "Совамо таркась теезь", "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|кортнема]]) совицянь таркась теевсь-шкавсь.", "loginlanguagelabel": "Кель: $1", + "pt-login": "Совамс", + "pt-userlogout": "Лисемс", "user-mail-no-addy": "Терявтыть кучомс е-сёрма е-сёрмапарговтомо.", "changepassword": "Салавань валонь полавтома", "resetpass_announce": "Совамот топавтомга эряви путомс од салававал.", @@ -392,6 +394,7 @@ "resetpass-submit-loggedin": "Полавтомс совамо валот", "resetpass-submit-cancel": "Саемс мекев", "resetpass-temp-password": "А куватень совамо валось:", + "resetpass-expired": "Салававалот таштомсь. Аравтт од салававал, мейле совават.", "passwordreset": "Совамо валонь лиялгавтома", "passwordreset-legend": "Полавтык совамо валонть", "passwordreset-username": "Теиця леметь:", @@ -471,7 +474,7 @@ "nocreatetext": "Те {{SITENAME}} лопасонть пирязь од лопань теемась. Тонь ули мелеть велявтомс удалов ды питнемензе-витнемензе улиця лопанть, али [[Special:UserLogin|совамс али теемс од совама]].", "nocreate-loggedin": "Тонеть а мерить теемс-шкамс од лопат.", "permissionserrorstext": "Тонеть а мереви теемс тень, вана {{PLURAL:$1|тувталонть|тувталтнэнь}} кисэ:", - "permissionserrorstext-withaction": "Тонеть а мерить теемс $2, {{PLURAL:$1|1=тувталось|тувталтнэ}} вана:", + "permissionserrorstext-withaction": "Тонеть а мерить $2, {{PLURAL:$1|тувталось|тувталтнэ}} вана:", "recreate-moveddeleted-warn": "'''Ванок: Вельмевтят лопа, кона нардазель.'''\n\nВасня арьсек, эряви - а эряви полалемс ды витнемс-петнемс те лопанть.\nТе лопанть нардамодо ды печтевтемадо путовкстнэ одов максозь тесэ, улезт шожда ванстнемс:", "moveddeleted-notice": "Те лопась нардазь.\nЛопанть нардамодо сёрмадовксось максозь вана ало.", "log-fulllog": "Ванномс журналонть весемензэ", @@ -521,10 +524,10 @@ "revdelete-hide-image": "Кекшемс мезе файлатнесэ", "revdelete-hide-name": "Кекшемс тев тееманть ды норовамо тарканзо", "revdelete-hide-comment": "Витнемс-петнемс сёрмадовксонть зэмензэ.", - "revdelete-hide-user": "Кекшемс витницянть-петницянть теиця лемензэ/IP-нзэ", + "revdelete-hide-user": "Витницянть-петницянть совамолемезэ/IP сёрмапаргозо", "revdelete-radio-same": "(иляк лиякстомто)", "revdelete-log": "Тувталось:", - "revdelete-submit": "Аравтомс кочказь {{PLURAL:$1|1=лиякстомтомантень|лиякстомтоматненень}}", + "revdelete-submit": "Аравтомс кочказь {{PLURAL:$1|лиякстомтомантень|лиякстомтоматненень}}", "revdel-restore": "Полавтомс неявомачынзэ", "pagehist": "Лопанть икелькс умазо", "deletedhist": "Нардань икелькс умазо", @@ -535,7 +538,7 @@ "mergehistory-box": "Совавтомс кавто лопатнень лиякстомтомадо сёрмадовкстнэнь ве лувс:", "mergehistory-from": "Лисьмапря лопа:", "mergehistory-into": "Совавтома лопа:", - "mergehistory-list": "Вейтьсэндявиця юронзо-путовксонзо", + "mergehistory-list": "Вейсэндявиця юронзо-путовксонзо", "mergehistory-go": "Невтемс вейтьс совавтомкс витнемат-петнемат", "mergehistory-submit": "Совавтомс лиякстомтоматнень вейтьс", "mergehistory-empty": "Вейкеяк лиякстомтома а совавтови вейтьс лия марто.", @@ -545,9 +548,9 @@ "mergehistory-invalid-destination": "Совавтомкс лопанть улезэ маштовикс лем.", "mergehistory-autocomment": "Совавтомс [[:$1]] [[:$2]]-с", "mergehistory-reason": "Тувталось:", - "mergelog": "Вейтьсэндямс логонть", - "revertmerge": "Явомс логонть мекев, кода ульнесь вейтьсэндямодо икеле", - "history-title": "\"$1\"-нь полавтнемань историязо", + "mergelog": "Вейсэндямс логонть", + "revertmerge": "Явомс логонть мекев, кода ульнесь вейсэндямодо икеле", + "history-title": "\"$1\" лопанть полавтнемань историязо", "difference-multipage": "(Мейсэ лопатне явовить)", "lineno": "Киксэсь $1:", "compareselectedversions": "Кочказь версиятнень аравтомс карадо-каршо", @@ -574,12 +577,12 @@ "searchprofile-everything-tooltip": "Вешнемс весе лопатнева (кортнема лопатневаяк)", "searchprofile-advanced-tooltip": "Вешнемс башка теезь лемпотмотнестэ", "search-result-size": "$1 ({{PLURAL:$2|1 вал|$2 валт}})", - "search-result-category-size": "{{PLURAL:$1|1=1 совицязо|$1 совицянзо}} ({{PLURAL:$2|1=1 явкскатегориязо|$2 явкскатегориянзо}}, {{PLURAL:$3|1=1 файла|$3 файлат}})", + "search-result-category-size": "{{PLURAL:$1|1 совицязо|$1 совицянзо}} ({{PLURAL:$2|1 явкскатегориязо|$2 явкскатегориянзо}}, {{PLURAL:$3|1 файла|$3 файлат}})", "search-redirect": "(йутавтт $1-с)", "search-section": "(пелькс $1)", "search-suggest": "Истя мерикскелить: $1", "search-interwiki-caption": "Дугакс проектт", - "search-interwiki-default": "$1 савкс:", + "search-interwiki-default": "«$1» викинть эйстэ савкст:", "search-interwiki-more": "(седе ламо)", "search-relatedarticle": "Малавикс", "searchrelated": "малавикс", @@ -602,7 +605,7 @@ "prefs-personal": "Теицядо", "prefs-rc": "Чиень полавтнемат-лиякстомтомат", "prefs-watchlist": "Ванома лемрисьме", - "prefs-watchlist-days-max": "Весемеде куватьс $1 {{PLURAL:$1|1=чис|чис}}", + "prefs-watchlist-days-max": "Весемеде куватьс $1 {{PLURAL:$1|чис|чис}}", "prefs-watchlist-edits-max": "Весемеде покш цётось: 1000", "prefs-misc": "Минеть-сюнот", "prefs-resetpass": "Салавань валонь полавтома", @@ -611,13 +614,13 @@ "prefs-email": "Е-сёрмат-мезть", "prefs-rendering": "Тюсозо-лангозо", "saveprefs": "Ванстомс", - "restoreprefs": "Велявтомс мекев весе ушодкс ладсематнень", + "restoreprefs": "Велявтомс мекев весе ушодкс ладсематнень (весе явкстнэва)", "prefs-editing": "Витнема-петнема", "rows": "Валчилькстнэ (строкатне):", "columns": "Палманть:", "searchresultshead": "Вешнема", "recentchangesdays": "Зяро чить невтемс чиень полавтнематнесэ-лиякстомтоматнесэ:", - "recentchangesdays-max": "Весемеде куватьс $1 {{PLURAL:$1|1=чис|чис}}", + "recentchangesdays-max": "Весемеде куватьс $1 {{PLURAL:$1|чис|чис}}", "recentchangescount": "Васень аравтоматнень коряс зяро витнемат-петнемат невтемс:", "prefs-help-recentchangescount": "Тезэнь совавтозь чиень полавтнемат-лиякстомтомат, лопань лувт-путовкст, журналт.", "timezonelegend": "Шкань зонась:", @@ -637,15 +640,15 @@ "timezoneregion-pacific": "Сэтьме иневедь", "prefs-searchoptions": "Вешнем", "prefs-namespaces": "Лем потмот", - "default": "зярдо лиякс апак йовта", + "default": "зярдо лиякс апак ёвта", "prefs-files": "Файлат", "youremail": "Е-сёрма:", "username": "Теицянь леметь:", "yourrealname": "Алкуксонь леметь:", "yourlanguage": "Келесь:", "yournick": "Кедень путома:", - "badsiglength": "Кедень путомат пек кувака.\nЭйсэнзэ иляст уле $1 -до ламо {{PLURAL:$1|1=тешкст|тешкст}}.", - "yourgender": "Сыметь (цёрань-тейтерень):", + "badsiglength": "Кедень путомат пек кувака.\nЭйсэнзэ иляст уле $1 -до ламо {{PLURAL:$1|тешкст|тешкст}}.", + "yourgender": "Тонсь кода меревлить эсь прядот?", "gender-unknown": "А меревлинь", "gender-male": "Сон витни-петни викилопатнесэ", "gender-female": "Сон витни-петни викилопатнесэ", @@ -699,13 +702,13 @@ "right-undelete": "Вельмевтемс нардань лопа", "right-block": "Кардамс лия совийтнень-лисийтнень витнемадо-петнемадо", "right-blockemail": "Кардамс лия лисийтнень-совийтнень е-сёрмань кучомадо", - "right-editinterface": "Витнемс-петнемс теицянь интерчаманть (васодема йожонть)", + "right-editinterface": "Витнемс-петнемс теицянь интерчаманть (васодема ёжонть)", "right-editusercssjs": "Витнемс-петнемс лия теицятнень CSS ды JS файласт", "right-editusercss": "Витнемс-петнемс лия теицятнень CSS файласт", "right-edituserjs": "Витнемс-петнемс лия теицятнень JS файласт", "right-import": "Ёвкстамс лия Викистэ лопат", "right-patrol": "Тешкстамс лиянь витнематнень-петнематнень лувонь кирдиеньсекс", - "right-mergehistory": "Вейтьсэндямс лопатнень юрост-путовксост", + "right-mergehistory": "Вейсэндямс лопатнень юрост-путовксост", "right-userrights": "Витнемс-петнемс совицянь весе видечитнень", "right-siteadmin": "Датабазань сёлгомо ды панжомо", "right-passwordreset": "Ваномс теицянь салава валонь полавтома е-сёрмат", @@ -722,7 +725,7 @@ "action-move-subpages": "печтевтемс те лопанть, ды алонзо весе лопатнень", "action-move-rootuserpages": "печтевтемс теицянь юрт лопатнень", "action-movefile": "печтевтемс те файланть", - "action-upload": "йовкстамс те файланть", + "action-upload": "ёвкстамс те файланть", "action-reupload": "уликс файланть полавтомс одонть марто", "action-upload_by_url": "ёвкстамс те файланть URL адресстэ", "action-writeapi": "нолдамс тевс сёрмадома API-нть", @@ -734,7 +737,7 @@ "action-block": "кардамс те совицянть витнемадо-петнемадо", "action-import": "совавтомс тезэнь лопат лия Викистэ", "action-importupload": "совавтомс тезэнь лопат файлань путома юртсто", - "action-mergehistory": "вейтьсэндямс те лопанть юронзо-путовксонзо", + "action-mergehistory": "вейсэндямс те лопанть юронзо-путовксонзо", "action-userrights": "витнемс-петнемс совицянь весе видечитнень", "action-userrights-interwiki": "витнемс-петнемс лия викитнесэ теицянь видечитнень", "action-sendemail": "кучомс е-сёрмат", @@ -748,7 +751,7 @@ "recentchanges-label-bot": "Те витнеманть-петнеманть теизе кона-кона бот", "recentchanges-label-unpatrolled": "", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (вантаять [[Special:NewPages|од лопань лемрисьме]])", - "rcnotefrom": "Ало невтезь '''$2''' лиякстомтомасто саезь ('''$1''' видс).", + "rcnotefrom": "Ало максозь {{PLURAL:$5|лиякстомтомась, конась|лиякстомтоматне, конатне}} теезь $3, $4 шкасто саезь (весемеде ламо невтезь $1).", "rclistfrom": "Невтемс од витьнематнень $3 $2-нть эйстэ саезь.", "rcshowhideminor": "$1 апокшкэ витнемат-петнемат", "rcshowhidebots": "$1 ботт", @@ -777,13 +780,13 @@ "recentchangeslinked-page": "Лопанть лемезэ:", "recentchangeslinked-to": "Тень таркас невтить те лопанть марто сюлмазь лопатнесэ полавтнематнень", "upload": "Ёкстамс файла", - "uploadbtn": "Йовксамс файланть", + "uploadbtn": "Ёвкстамс файла", "uploadnologin": "Эзить сова", - "uploaderror": "Йовкстамсто манявома", + "uploaderror": "Ёвкстамсто манявома", "upload-permitted": "Файлань форматт, конат меревить: $1.", "upload-preferred": "Файлань типт, конатне паро мельсэ учовить: $1.", "upload-prohibited": "Файлань типт, конатне кардазь: $1.", - "uploadlogpage": "Файлань йовкстамодо журнал", + "uploadlogpage": "Файлань ёвкстамодо журнал", "filename": "Файлань лем", "filedesc": "Нурькинестэ", "fileuploadsummary": "Нурькинестэ:", @@ -798,7 +801,7 @@ "filename-tooshort": "Файлань лементь а саты кувалмозо.", "unknown-error": "А содавикс манявкс лиссь.", "file-thumbnail-no": "Файланть лемезэ ушодови $1.\nСонсь маряви вишкалгавтозь фотокуво, покшолмазо ''(кенжешка)''.\nУлиндеряй файланть покш верзиязо, йовкстыка сонзэ - арась, полавтыка тетень лемензэ.", - "file-exists-duplicate": "Те кавонзавкс файла вана {{PLURAL:$1|1=те файланть|неть файлатнень}} эйстэ:", + "file-exists-duplicate": "Те кавонзавкс файла вана {{PLURAL:$1|те файланть|неть файлатнень}} эйстэ:", "uploadwarning": "Совавтомадо кардамонь пачтямо", "savefile": "Ванстомс файланть", "uploaddisabled": "Совавтомась лоткавтозь", @@ -833,7 +836,7 @@ "license-header": "Лицензиянь теема:", "nolicense": "Лицензия арась", "license-nopreview": "(Васнянь невтевкс арась)", - "upload_source_file": " (арси машинасот файла)", + "upload_source_file": " (арсимашинастот файла, конань тонсь кочкик)", "listfiles_search_for": "Вешнемс медиа лементь:", "imgfile": "файл", "listfiles": "Файлат-мезть", @@ -867,7 +870,7 @@ "filepage-nofile": "Истямо лем марто файла арась.", "uploadnewversion-linktext": "Йовкстак од версия те файластонть", "shared-repo-from": "вана теньстэ $1", - "shared-repo": "вейтьсэнь ванстома тарка", + "shared-repo": "вейсэнь ванстома тарка", "filerevert": "Велявтомс $1 мекев", "filerevert-legend": "Велявтомс файланть", "filerevert-comment": "Тувталось:", @@ -990,7 +993,7 @@ "linksearch": "Ушо ёндонь сюлмавомапенень вешнема", "linksearch-pat": "Вешнемкс парцун:", "linksearch-ns": "Лем потмозо:", - "linksearch-ok": "Вешнэмс", + "linksearch-ok": "Вешнемс", "linksearch-line": "$1-в сюлмавома песь моли вана тестэ $2", "listusers-submit": "Невтемс", "listusers-noresult": "Совицязо а муеви", @@ -1083,7 +1086,7 @@ "protect-default": "Весе теицятненень маштови", "protect-fallback": "Вешеви ве мельс прамось «$1»-нть", "protect-level-autoconfirmed": "Саймас аравтомс од ды апак сёрмадстово теицятнень", - "protect-level-sysop": "Ансяк администраторт", + "protect-level-sysop": "Ансяк администратортнэнень мереви", "protect-summary-cascade": "каскадонь ладсо", "protect-expiring": "прядови $1 (UTC)", "protect-expiry-indefinite": "певтема", @@ -1113,12 +1116,12 @@ "undeleteviewlink": "ваномс", "undeleteinvert": "Кочказень таркас апаконь кочкамо", "undeletecomment": "Тувталось:", - "undeletedrevisions": "{{PLURAL:$1|1=1 лиякстомтома|$1 лиякстомтомат}} вельмевтезь", + "undeletedrevisions": "{{PLURAL:$1|1 лиякстомтома|$1 лиякстомтомат}} вельмевтезь", "undeletedrevisions-files": "{{PLURAL:$1|1=1 лиякстомтома|$1 лиякстомтомат}} ды {{PLURAL:$2|1=1 файла|$2 файлат}} вельмевтезь", "undeletedfiles": "{{PLURAL:$1|1=1 файла|$1 файлат}} вельмевтезь", - "undelete-search-box": "Вешнемс нардань лопатнень йутксто", + "undelete-search-box": "Вешнемс нардазь лопатнень ютксто", "undelete-search-prefix": "Невтемс лопат тестэ саезь:", - "undelete-search-submit": "Вешнэмс", + "undelete-search-submit": "Вешнемс", "undelete-error-short": "\"$1\" файлань вельмевтемстэ лиссь ильведевкс", "undelete-show-file-submit": "Истя", "namespace": "Лем потмозо:", @@ -1141,7 +1144,7 @@ "sp-contributions-search": "Путовксонь вешнеме", "sp-contributions-username": "IP адрес эли теицянь лем:", "sp-contributions-toponly": "Невтемс ансяк не витнематнень-петнематнень, конат совавтовить меельце верзиятнень юткс", - "sp-contributions-submit": "Вешнэмс", + "sp-contributions-submit": "Вешнемс", "whatlinkshere": "Мезе тезэнь сюлмави", "whatlinkshere-title": "$1 марто сюлмазь лопатне", "whatlinkshere-page": "Лопась:", @@ -1153,7 +1156,7 @@ "whatlinkshere-prev": "{{PLURAL:$1|1=икеле|седе икелень $1}}", "whatlinkshere-next": "{{PLURAL:$1|1=сыця|сы $1}}", "whatlinkshere-links": "← сюлмавомапеть", - "whatlinkshere-hideredirs": "$1 {{PLURAL:$1|1=тарка йутавты|таркат йутавтыть}} тей", + "whatlinkshere-hideredirs": "$1 ютавты козонь-козонь", "whatlinkshere-hidetrans": "$1 сюлмавозь пелькстнэнь", "whatlinkshere-hidelinks": "$1 сюлмавома петь", "whatlinkshere-hideimages": "$1 файланть сюлмавомапензэ", @@ -1183,7 +1186,7 @@ "blocklist-target": "Норовамо тарка", "blocklist-expiry": "Прядови", "blocklist-reason": "Тувтал", - "ipblocklist-submit": "Вешнэме", + "ipblocklist-submit": "Вешнеме", "infiniteblock": "певтеме", "expiringblock": "саймас саемась прядови $1 $2 цяссто", "anononlyblock": "ансяк лемтеме", @@ -1285,7 +1288,7 @@ "tooltip-ca-edit": "Те лопаськак витневи-петневи. Ансяк, ванстомадо икеле яла васнянь невтевкс повнэнть лепштика.", "tooltip-ca-addsection": "Ушодомс од явкс.", "tooltip-ca-viewsource": "Те лопась ванстозь. Ули меленк ваномонзо сонзе лисмапрянть.", - "tooltip-ca-history": "Те лопанть йутазь версиянзо.", + "tooltip-ca-history": "Те лопанть ютазь версиянзо.", "tooltip-ca-protect": "Аравтомс те лопанть прянь ванстомас", "tooltip-ca-delete": "Нардамс те лопанть, илязо улеяк", "tooltip-ca-move": "Ютавтык те лопанть лияв", @@ -1372,7 +1375,7 @@ "newimages-legend": "Сувтеме", "newimages-label": "Файлалем (эли пельксэзэ):", "noimages": "Арась мезе ваномс.", - "ilsubmit": "Вешнэмс", + "ilsubmit": "Вешнемс", "bydate": "чинь коряс", "ago": "$1-до икеле", "bad_image_list": "Лувось-форматось вана истямо:\n\nТесэ ансяк потмонть пакшкетне (рисьметне, конат ушодовить * тешкстсэ) лововить. Рисьмень васень сюлмавома пентень эряви невтемс амаштовикс файла лангс. Секе рисьминентень понгиндеряйть лия сюлмавома петь, сынь лововить башка, лиякс меремс сынь лопат, косо файлат маштовить невтемс.", @@ -1567,10 +1570,10 @@ "version-software": "Нолдань программат", "version-software-product": "Шкавкс-нолдавкс", "version-software-version": "Верзия", - "fileduplicatesearch": "Вешнэмс кавтаське файлат", - "fileduplicatesearch-legend": "Вешнэмс кавтаське", + "fileduplicatesearch": "Вешнемс кавтаське файлат", + "fileduplicatesearch-legend": "Вешнемс кавтаське", "fileduplicatesearch-filename": "Файла лем:", - "fileduplicatesearch-submit": "Вешнэмс", + "fileduplicatesearch-submit": "Вешнемс", "specialpages": "Башка тевень лопат", "specialpages-group-other": "Лия башка тевень лопат", "specialpages-group-login": "Совамс / шкамс совамотарка", diff --git a/languages/i18n/nan.json b/languages/i18n/nan.json index 7a2d8f4452..01faf1adb0 100644 --- a/languages/i18n/nan.json +++ b/languages/i18n/nan.json @@ -139,7 +139,7 @@ "moredotdotdot": "Iáu-ū", "morenotlisted": "這毋是完整的表", "mypage": "Ia̍h", - "mytalk": "Góa ê thó-lūn", + "mytalk": "Thó-lūn", "anontalk": "Chit ê IP ê thó-lūn-ia̍h", "navigation": "Se̍h chām", "and": " kap", @@ -188,7 +188,7 @@ "unprotectthispage": "kái chit ia̍h ê pó-hō͘", "newpage": "Sin ia̍h", "talkpage": "Thó-lūn chit ia̍h", - "talkpagelinktext": "thó-lūn", + "talkpagelinktext": "Thó-lūn", "specialpage": "Te̍k-sû-ia̍h", "personaltools": "Kò-jîn kang-khū", "articlepage": "Khoàⁿ loē-iông ia̍h", @@ -748,7 +748,7 @@ "unwatch": "Mài kàm-sī", "unwatchthispage": "Mài koh kàm-sī", "watchlist-details": "Kàm-sī-toaⁿ ū {{PLURAL:$1|$1 ia̍h|$1 ia̍h}}, thó-lūn-ia̍h bô sǹg chāi-lāi.", - "wlnote": "Ē-kha sī '''$2''' tiám-cheng í-lāi siōng sin ê $1 ê kái-piàn.", + "wlnote": "$3 $4: Ē-kha sī $2 tiám-cheng í-lāi siōng sin ê $1 ê kái-piàn.", "wlshowlast": "Hián-sī chêng $1 tiám-cheng $2 ji̍t $3", "deletepage": "Thâi ia̍h", "confirm": "Khak-tēng", @@ -940,7 +940,7 @@ "watchlistedit-normal-submit": "Mài kàm-sī", "watchlistedit-normal-done": "Í-keng ū $1 ia̍h ùi lí ê kám-sī-toaⁿ soá cháu:", "watchlisttools-edit": "Khoàⁿ koh kái kàm-sī-toaⁿ", - "watchlisttools-raw": "Kái tshing-chheng ê kàm-sī-toaⁿ", + "watchlisttools-raw": "Kái chhiⁿ ê kàm-sī-toaⁿ", "duplicate-defaultsort": "'''Thê-chhíⁿ lí:'''Siat-piān ê pâi-lia̍t hong-sek \"$2\" thè-oāⁿ chìn-chêng ê siat-piān ê pâi-lia̍t hong-sek \"$1\".", "version": "Pán-pún", "specialpages": "Te̍k-sû-ia̍h", diff --git a/languages/i18n/nap.json b/languages/i18n/nap.json index 9a815554b2..2cefbf53f9 100644 --- a/languages/i18n/nap.json +++ b/languages/i18n/nap.json @@ -559,21 +559,106 @@ "summary-preview": "Anteprimma'e l'oggetto:", "subject-preview": "Anteprima 'e l'oggetto/intestazione:", "blockedtitle": "Utente bloccato.", + "blockedtext": "'O nomme utente o ll'IP tuojo è stato bloccato.\n\n'O blocco è stato imposlocco è stato mpustato 'a $1. 'O mutivo d' 'o blocco è chesto: ''$2''\n\n* Abbiàta d' 'o blocco: $8\n* Ammaturità d' 'o blocco: $6\n* Tiempo 'e blocco: $7\n\nPuò cuntattà $1 o n'atu [[{{MediaWiki:Grouppage-sysop}}|ammenistratore]] pe' discutere 'o blocco.\n\nVide c' 'a funzione 'Scrive a ll'utente' nun è attiva si nun s'è riggistrato 'o ndirizzo e-mail buono dint' 'e [[Special:Preferences|preferenze]] o pùre si ll'uso 'e tale funzione è stato bloccato.\n\n'O ndirizzo IP attuale è $3, 'o nummero ID d' 'o blocco è #$5.\nPe' piacere avite 'e specificà tutte sti dettaglie ccà ncoppa quanno facite cocche dumanna.", + "autoblockedtext": "Ll'IP tuojo è stato bloccato pecché 'o steva piglianno n'atu utente, ch'è stato bloccato pe' $1.\n\n'O mutivo d' 'o blocco è chesto:\n\n:''$2''\n\n* Abbiàta d' 'o blocco: $8\n* Ammaturità d' 'o blocco: $6\n* Tiempo 'e blocco: $7\n\nPuò cuntattà $1 o n'atu [[{{MediaWiki:Grouppage-sysop}}|ammenistratore]] pe' discutere 'o blocco.\n\nVide c' 'a funzione 'Scrive a ll'utente' nun è attiva si nun s'è riggistrato 'o ndirizzo e-mail buono dint' 'e [[Special:Preferences|preferenze]] o pùre si ll'uso 'e tale funzione è stato bloccato.\n\n'O ndirizzo IP attuale è $3, 'o nummero ID d' 'o blocco è #$5.\nPe' piacere avite 'e specificà tutte sti dettaglie ccà ncoppa quanno facite cocche dumanna.", + "blockednoreason": "nisciuna ragione è stata indicata", + "whitelistedittext": "Pe' cagnà 'e ppaggene è necessario $1.", + "confirmedittext": "Pe puté cagnà paggene hè 'a cunfermà l'indirizzo e-mail.\nPe' piacere abbìa e ffà 'a validazione d' 'o ndirizzo e-mail pe' bbìa d' 'e [[Special:Preferences|preferenze d'utente]].", + "nosuchsectiontitle": "Nun se può truvà 'a sezziona", + "nosuchsectiontext": "Hè pruvat' 'a cagnà na sezziona ca nun ce sta.\nPuò darse ch'è stata spustata o scancellata pe' tramente ca stive vedenno sta paggena.", "loginreqtitle": "Pe' cagnà chesta paggena abbesognate aseguì ll'acciesso ô sito.", "loginreqlink": "aseguì ll'acciesso", "loginreqpagetext": "Pe' veré ate ppaggene abbesognate $1.", "accmailtitle": "'O password è stato mannato.", "accmailtext": "'Na password gennerata casualmente ppe [[User talk:$1|$1]] è stata mannata a $2. Chista password può essere càgnata dint'â paggena ppe ''[[Special:ChangePassword|càgna 'a password]]'' subbeto doppo l'acciesso.", "newarticle": "(Novo)", + "newarticletext": "Sì ghiuto addò nu link 'e na paggena ca nun esiste ancora.\nP' 'a crià sta paggena, accummencia a scirvere dint'a cascia cà abbascio (vide 'a [$1 paggena d'aiuto] pe liegge cchiù nfurmazziune).\nSi sì venuto ccà pe' sbaglio, vide 'e sprémmere 'o buttòne '''Arreto''' d' 'o navigatóre.", + "anontalkpagetext": "----\n''Chest'è 'a paggena 'e discussione 'e n'utente anonimo, ca nun ave criàt' 'ancora n'utenza o ca nun sta ausanno. Pe' l'identificà avite 'e truvà 'o nummero d' 'o ndirizzo IP d' 'o sujo. L'indirizze IP se ponno spartì però a cchiù 'e n'utente. Si sì n'utente anonimo e pienze ca 'e commente ccà dint'a sta paggena nun parlano 'e tte, allora [[Special:UserLogin/signup|crìa n'utenza nnova]] o [[Special:UserLogin|tràse cu chella ca tiene già]] pe' nun sta' mmescato mmiez'a l'ati utente anonime n futuro.''", "noarticletext": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate] o pure [{{fullurl:{{FULLPAGENAME}}|action=edit}} cagnà 'a paggena mo'].", "noarticletext-nopermission": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate], però nun tiene 'o permesso 'a crià sta paggena.", + "missing-revision": "'A verziona #$1 d' 'a paggena \"{{FULLPAGENAME}}\" nun esiste.\n\nChest'è causato quanno se và dint'a nu link a na paggena ch'è stata scancellata.\n'E dettaglie se ponno truvà dint'a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 'o riggistro 'e scancellaziune].", + "userpage-userdoesnotexist": "'O cunto utente \"$1\" nun è riggistrato. Cuntrolla ca si buò overo crià o cagnà sta paggena.", + "userpage-userdoesnotexist-view": "'O cunto utente \"$1\" nun è riggistrato.", + "blocked-notice-logextract": "St'utente è bloccato mò.\nL'urdemo elemento d' 'o riggistro 'e blocche è ripurtato ccà abbascio p'avé nu riferimento:", + "clearyourcache": "'''Nota:''' aropo sarvate putisse necessità 'e pulezzà 'a caché d' 'o navigatóre pe' vedé 'e cagnamiente. \n*'''Firefox / Safari''': sprémme 'o buttóne maiuscole e ffà clic ncopp'a ''Recarreca'', o pure spremme ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' ncopp'a Mac)\n*'''Google Chrome''': spremme ''Ctrl-Shift-R'' (''⌘-Shift-R'' ncopp'a nu Mac)\n*'''Internet Explorer''': spremme 'o buttóne ''Ctrl'' pe' tramente ca faie click ncopp'a ''Refresh'', o pure spremmere ''Ctrl-F5''\n*'''Opera''': abbacanta tutt' 'a cache addò menu ''Strumiente → Preferenze''", + "usercssyoucanpreview": "'''Cunziglio:''' spremme 'o buttone 'Vide anteprimma' pe' pruvà 'o CSS nuovo apprimma d' 'o sarvà.", + "userjsyoucanpreview": "'''Cunziglio:''' spremme 'o buttone 'Vide anteprimma' pe' pruvà 'o JavaScript nuovo apprimma d' 'o sarvà.", + "usercsspreview": "'''Arricuordate ca chest'è sulamente n'anteprimma p' 'o CSS perzunale. 'E cagnamiente nun so' state ancora sarvate!'''", + "userjspreview": "'''Arricuordate ca chest'è sulamente n'anteprimma p' 'o JavaScript perzunale. 'E cagnamiente nun so' state ancora sarvate!'''", + "sitecsspreview": "'''Arricuordate ca chest'è sulamente n'anteprimma p' 'o CSS. 'E cagnamiente nun so' state ancora sarvate!'''", + "sitejspreview": "'''Arricuordate ca chest'è sulamente n'anteprimma p' 'o codece JavaScript. 'E cagnamiente nun so' state ancora sarvate!'''", + "userinvalidcssjstitle": "'''Attenziò:''' Nun esiste nisciuna skin c' 'o nomme \"$1\". Vide ch' 'e paggene .css e .js personalezzate teneno nu titolo n minucola, p'esempio {{ns:user}}:Esempio/vector.css e nun {{ns:user}}:Esempio/Vector.css.", + "updated": "(Agghiurnato)", + "note": "'''Nota:'''", "previewnote": "'''Chesta è sola n'anteprimma; 'e cagnamiénte â paggena nun songo ancora sarvate!'''", + "continue-editing": "Tràse int'a l'area 'e modifica", + "previewconflict": "L'anteprimma currisponne a 'o testo presente dint'a cascia 'e modifica ccà ncoppa e rappresentasse 'a paggena comme cumpare si scigliete 'e Sarvà ind'a stu mumento.", + "session_fail_preview": "'''Nun è possibbile prucessà 'o cagnamiento pecché se so' sperdut' 'e date d' 'a sessione.\nProva n'ata vota.\nSi nun funziona ancora, può pruvà 'a te [[Special:UserLogout|n'ascì]] e a trasì n'ata vota.'''", + "session_fail_preview_html": "'''Nun è possibbile prucessà 'o cagnamiento pecché se so' sperdut' 'e date d' 'a sessione.\nProva n'ata vota.'''\n''Siccome dint' 'o {{SITENAME}} è abilitato l'uso 'e l'HTML cruro, 'o buttone d'anteprimma nun è abbiàto comme misura 'e sicurezza annanza cocch'attacco JavaScript''\n'''Si chest'era nu tentativo legittimo 'e cagnamiento, prova n'ata vota. Si nun funziona ancora, può pruvà 'a te [[Special:UserLogout|n'ascì]] e a trasì n'ata vota.'''", + "token_suffix_mismatch": "'''Stu cagnamiento nun è stato sarvato pecché 'o client ave mmustato nu sbaglio dint'o scrivere d' 'e carattere d' 'a punteggiatura token. Pe luvà na possibbile corruzione d' 'o testo dint'a paggena, s'è rifiutat' 'a modifeca.\n\nSta situazione se può truvà, quanno staje ausanno nu servizio 'e proxy anonime via web cu d' 'e bug.'''", + "edit_form_incomplete": "'''Cocche parte d' 'o modulo 'e cagnamiento nun ha arrivato a 'o server; cuntrolla ch' 'e cagnamiente songo intatte e prova n'ata vota.'''", "editing": "Cagnamiento 'e $1", + "creating": "Staje crianno $1", "editingsection": "Cagnamiénto 'e $1 (sezzione)", + "editingcomment": "Cagnamiénto 'e $1 (nova sezzione)", + "editconflict": "Conflitto d'edizzione: $1", + "explainconflict": "N'at'utente ave sarvato na nova verziona d' 'a paggena pe' tramente ca stive a fà 'e cagnamiente.\n'A cascia 'e mudifeca ncoppa cuntene 'o testo d' 'a paggena ca mò sta online, accussì comme è stato agghiurnato a l'at'utente.\n'A verziona ch' 'e cagnamiente tuoje è stata mmece riportata dint'a cascia 'e mudifeca abbascio.\nSi 'e bbuò cunfermà hè 'a ripurtà 'e cagnamiente d' 'e tuoje dint'o testo ca esiste (dint'a cascia ncoppa).\nSpremmendo 'o buttón '{{int:savearticle}}', sarrà sarvato '''sulamente''' 'o testo cuntenuto dint'a cascia 'e cagnamiento ncoppa.", + "yourtext": "'O testo tuojo", + "storedversion": "A verziona 'n memoria", + "nonunicodebrowser": "'''Attenziò: staje ausanno nu navigatóre ca nun è compatibbele ch' 'e carattere Unicode. Pe' te permettere 'o cagnamiento d' 'e paggene senza crià ncunveniente, 'e carattere nun ASCII veneno viste dint' 'a cascia 'e cagnamiento sotto forma 'e codece esadecimale.'''", + "editingold": "'''Attenziò: staje cagnanno na verziona nun agghiurnata d' 'a paggena. Si 'a sarve accussì, tutte 'e cagnamiente fatte aropp'a sta verziona sarranno sperdute.'''", + "yourdiff": "Differenze", + "copyrightwarning": "Pe' piacere tiena a mmente ca tutte 'e contribbute a {{SITENAME}} songo cunziderate pubbrecate dint'e térmene d'uso d' 'a licienza $2 (vide $1 pe n'avé cchiù dettaglie).\nSi nun buò ca 'e testi tuoje fossero cagnate e distribuite 'a uno qualunque senza lémmeto, nun 'e mannà ccà.
\nMannanno stu testo dichiare pùre, sott'a responsabilità tua, ch'è stato scritto 'a te perzunalmente o pure ca è stato copiato 'a na fonte n pubblico dominio o similarmente libbera.\n'''Nun mannà materiale prutetto 'a copyright senz'avé autorizzaziona!'''", + "copyrightwarning2": "Pe' piacere tiena a mmente ca tutte 'e contribbute a {{SITENAME}} se ponno cagnà, alterà, o distribbuì pe l'ati cuntribbuttòre.\n\nSi nun buò ca 'e teste tuoje fossero cagnàte spenzieratamente, nun 'e mannà ccà.
\nMannanno stu testo dichiare pùre, sott'a responsabilità tua, ch'è stato scritto 'a te perzunalmente o pure ca è stato copiato 'a na fonte n pubblico dominio o similarmente libbera (vide $1 pe' n'avé dettaglie).\n'''Nun mannà materiale prutetto 'a copyright senz'avé autorizzaziona!'''", + "longpageerror": "'''Errore: 'o testo mannato è luongo {{PLURAL:$1|1|$1}} kilobyte, ch'è cchiù grosso d' 'a diminziona massima cunzentita ({{PLURAL:$2|1|$2}} kilobyte).'''\n'O testo nun se pò sarvà.", + "readonlywarning": "Attenziò: 'o database è bloccato pe se ffà 'a manutenzione. P' 'o mumento nun se ponno sarvà 'e cagnamiente fatte.\nPe' nun 'e sperdere, copia sti cuntenute dint'a nu file 'e testo e sarvatillo pe' tramente c'aspiette 'o sblocco d' 'o database.\n\nL'ammenistratore ca mpustaje 'o blocco ave scritto sta spiegazione: $1.", + "protectedpagewarning": "'''Attenziò: sta paggena è stata bloccata 'n modo tale ca sulamente l'utente ch' 'e privilegge d'ammenistratore 'a ponno cagnà.'''\nL'urdemo elemento d' 'o riggistro è scritto ccà abbascio pe' n'avé riferimento:", + "semiprotectedpagewarning": "'''Nota:''' Sta paggena è stata bloccata 'n modo ca sulamente l'utente riggistrate 'a ponno cagnà.\nL'urdemo elemento d' 'o riggistro è scritto ccà abbascio pe n'avé nfurmazione:", + "cascadeprotectedwarning": "'''Attenziò:''' Sta paggena è stata bloccata 'n modo ca sulamente l'utente ch' 'e privilegge d'ammenistratore 'a ponno cagnà. Chesto succiere pecché 'a paggena è dint'a {{PLURAL:$1|la paggena innecata ccà abbascio, ch'è stata prutetta|'e paggene innecate ccà abbascio, che so' state prutette}} sciglienno 'a prutezione \"ricurziva\":", + "titleprotectedwarning": "'''Attenziò: sta paggena è stata bloccata 'n modo ca fossero necessarie [[Special:ListGroupRights|deritte specifici]] p' 'a crià.'''\nL'urdemo elemento d' 'o riggistro è riportato ccà abbascio pe nfurmazione:", "templatesused": "{{PLURAL:$1|Template|Templates}} ausate 'a chesta paggena:", + "templatesusedpreview": "{{PLURAL:$1|Template|Templates}} ausate dint'a st'anteprimma:", + "templatesusedsection": "{{PLURAL:$1|Template|Templates}} ausate dint'a sta sezziona:", "template-protected": "(prutetto)", "template-semiprotected": "(semi-prutetto)", + "hiddencategories": "Sta paggena attócca a {{PLURAL:$1|na categurìa annascunnuta|$1 categurìe annascunnute}}:", + "nocreatetext": "{{SITENAME}} ha limitato 'a possibilità 'e crià paggene nnove. Può turnà e cagnà na paggena ch'esiste già, o pure [[Special:UserLogin|trasì o te riggistrà]].", + "nocreate-loggedin": "Nun t'è permesso 'e crià paggene nnove.", + "sectioneditnotsupported-title": "Cagnamiento 'e sezziune nun suppurtato", + "sectioneditnotsupported-text": "'O cagnamiento d' 'e sezziune nun è suppurtato dint'a sta paggena.", + "permissionserrors": "Nun haje 'e premmesse abbastante.", + "permissionserrorstext": "Nun haje premmesse pe lle ffà st'azziune, {{PLURAL:$1|'o mutivo è chesto|'e mutive so' chiste}}:", + "permissionserrorstext-withaction": "Nun haje premmesse abbastante pe' $2, {{PLURAL:$1|'o mutivo è chesto|'e mutive so' chiste}}:", + "recreate-moveddeleted-warn": "'''Attenziò: staje a crià na paggena scancellata già.'''\n\nVire si è bbuono 'e cuntinuà a cagnà sta paggena. L'alenco ch' 'e relative scancellamiente e spustamente s'è scritto ccà abbascio pe' ffà comodo:", + "moveddeleted-notice": "Sta paggena è stata scancellata.\nL'alenco d' 'e relative scancellamiente e spustamente s'è scritto ccà abbascio pe' n'avé nfurmazione.", + "log-fulllog": "Vide log sano", + "edit-hook-aborted": "'O cagnamiento è stato annullato 'a 'o «hook».\nNun dette spiegazione nisciuna.", + "edit-gone-missing": "Nun se può agghiurnà 'a paggena.\nPare ch' 'è stata scancellata.", + "edit-conflict": "Conflitto d'edizziona.", + "edit-no-change": "'O cagnamiento è stato ignorato pecché nun s'è cagnato niente dint' 'o testo.", + "postedit-confirmation-created": "'A paggena è stata criata.", + "postedit-confirmation-restored": "'A paggena è stata arripigliata.", + "postedit-confirmation-saved": "'O cagnamiento è stato sarvato.", + "edit-already-exists": "Nun se può crià na paggena nova.\nEsiste già.", + "defaultmessagetext": "Mmasciata 'e testo predefinita", + "content-failed-to-parse": "Nun se può analizzare $2 p' 'o mudello $1: $3", + "invalid-content-data": "Date cuntenute nun buone", + "content-not-allowed-here": "'O cuntenuto \"$1\" nun è permesso dint'a paggena [[$2]]", + "editwarning-warning": "Ascenno 'e sta paggena putisse ffà sperdere 'e cagnamiente fatte.\nSi sì trasuto, allora può stutà st'avviso dint'a sezziona \"{{int:prefs-editing}}\" d' 'e preferenze.", + "editpage-notsupportedcontentformat-title": "Furmatto d' 'o cuntenuto nun suppurtato", + "editpage-notsupportedcontentformat-text": "'O furmatto d' 'o cuntenuto $1 nun è suppurtato d' 'o mudello 'e cuntenuto $2.", + "content-model-wikitext": "wikitesto", + "content-model-text": "testo nurmale", + "content-model-javascript": "JavaScript", "content-model-css": "CSS", + "expensive-parserfunction-warning": "'''Attenziò:''' Sta paggena cuntene troppe chiammate a 'e funzione parser.\n\nN'avesse 'a tené meno 'e $2, p' 'o mumento ce ne {{PLURAL:$1|stà $1|stanno $1}}.", + "expensive-parserfunction-category": "Paggene cu troppe chiammate a 'e funzione parser", + "post-expand-template-inclusion-warning": "'''Attenziò:''' 'a diminsiona d' 'e template ionte ccà è troppo grossa.\nCocche template se lassarrà fore.", + "post-expand-template-inclusion-category": "Paggene addò 'a diminsiona d' 'o template è fore 'o lémmeto", + "post-expand-template-argument-warning": "'''Attenziò:''' sta paggena cuntene uno o cchiù argumente 'e template troppo gruosse pe' 'a spannere. Sti argumente se lassarranno fore.", + "post-expand-template-argument-category": "Paggene ca cunteneno argumente nun cunziderate", + "parser-template-loop-warning": "È stato scummigliato n'aniello d' 'o template: [[$1]]", + "parser-template-recursion-depth-warning": "È arrivato 'o lemmeto 'e ricurzione d' 'o template ($1)", "undo-summary": "Canciella 'o cagnamiento $1 'e [[Special:Contributions/$2|$2]] ([[User talk:$2|Chiàcchiera]])", "currentrev": "Verzione 'e mmo", "currentrev-asof": "Vversione attuale dde $1", diff --git a/languages/i18n/nb.json b/languages/i18n/nb.json index a8f076997c..90854810e3 100644 --- a/languages/i18n/nb.json +++ b/languages/i18n/nb.json @@ -382,7 +382,7 @@ "invalidtitle-knownnamespace": "Ugyldig tittel med navnerommet «$2» og teksten «$3»", "invalidtitle-unknownnamespace": "Ugyldig tittel med ukjent navneromsnummer $1 og teksten «$2»", "exception-nologin": "Ikke innlogget", - "exception-nologin-text": "[[Special:Userlogin|Logg inn]] for Ã¥ kunne se siden eller utføre denne handlingen.", + "exception-nologin-text": "Logg inn for Ã¥ kunne se siden eller utføre denne handlingen.", "exception-nologin-text-manual": "Du mÃ¥ $1 for Ã¥ fÃ¥ tilgang til denne siden eller handlingen.", "virus-badscanner": "Feilkonfigurasjon: Ukjent virusskanner: ''$1''", "virus-scanfailed": "skanning mislyktes (kode $1)", @@ -695,10 +695,10 @@ "parser-template-recursion-depth-warning": "Mal er brukt for mange ganger ($1)", "language-converter-depth-warning": "Dybdegrense for sprÃ¥kkonvertering overskredet ($1)", "node-count-exceeded-category": "Sider hvor antallet noder er overskredet", - "node-count-exceeded-category-desc": "En kategori for sider der antallet noder er overskredet.", - "node-count-exceeded-warning": "Siden har overskredet antallet noder", + "node-count-exceeded-category-desc": "Siden overskriver maksimalt nodeantall.", + "node-count-exceeded-warning": "Siden overskred nodeantallet", "expansion-depth-exceeded-category": "Sider hvor ekspansjonsdybden er overskredet", - "expansion-depth-exceeded-category-desc": "Dette er en kategori for sider hvor ekspansjonsdybden er overskredet.", + "expansion-depth-exceeded-category-desc": "Siden overskrider maksimal utvidingsdybde.", "expansion-depth-exceeded-warning": "Sida har overskredet ekspansjonsdybden", "parser-unstrip-loop-warning": "«Unstrip»-loop pÃ¥vist", "parser-unstrip-recursion-limit": "Rekursjonsgrense for taggfjerning overskredet ($1)", @@ -892,7 +892,7 @@ "preferences": "Innstillinger", "mypreferences": "Innstillinger", "prefs-edits": "Antall redigeringer:", - "prefsnologintext2": "Vennligst $1 Ã¥ endre dine preferanser.", + "prefsnologintext2": "Logg inn for Ã¥ endre innstillingene dine.", "prefs-skin": "Utseende", "skin-preview": "ForhÃ¥ndsvisning", "datedefault": "Ingen foretrukket", @@ -1472,6 +1472,8 @@ "randomincategory": "Tilfeldig side innenfor kategorien", "randomincategory-invalidcategory": "«$1» er ikke et gyldig kategorinavn.", "randomincategory-nopages": "Det finnes ingen sider i [[:Category:$1|$1]]-kategorien.", + "randomincategory-category": "Kategori:", + "randomincategory-legend": "Tilfeldig side i kategori", "randomredirect": "Tilfeldig omdirigering", "randomredirect-nopages": "Det er ingen omdirigeringer i navnerommet $1.", "statistics": "Statistikk", @@ -1674,11 +1676,11 @@ "trackingcategories-desc": "Kategori-inklusjonskriterium", "noindex-category-desc": "Denne siden indekseres ikke av roboter fordi den er merket med det magiske ordet __NOINDEX__ og er i navnerom der dette flagget tillates.", "index-category-desc": "Denne siden er pÃ¥ført det magiske ordet __INDEX__ (og er i et navnerom hvor flagget er tillatt), og vil derfor bli indeksert av roboter selv nÃ¥r det normalt ikke ville skjedd.", - "post-expand-template-inclusion-category-desc": "Etter ekspandering av alle malene ble siden større enn $wgMaxArticleSize, sÃ¥ noen maler kunne ikke ekspanderes.", - "post-expand-template-argument-category-desc": "Etter ekspandering av et malargument (noe i trippel krøllparentes, slik som {{{Foo}}}), sÃ¥ er siden større en $wgMaxArticleSize.", - "expensive-parserfunction-category-desc": "For mange kostbare parserfunksjoner (som #ifexist) er inkludert pÃ¥ en side. Se [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].", - "broken-file-category-desc": "Kategorien blir lagt til hvis siden inneholder en brutt fil-lenke (en lenke for Ã¥ bygge inn en fil nÃ¥r filen selv ikke eksisterer).", - "hidden-category-category-desc": "Dette er en kategori merket med __HIDDENCAT__, som hindrer den fra Ã¥ vises i siders kategorioversikt som standard.", + "post-expand-template-inclusion-category-desc": "Sidestørrelsen er større enn $wgMaxArticleSize etter at alle maler er utvidet, sÃ¥ noen maler ble ikke utvidet.", + "post-expand-template-argument-category-desc": "Siden er større enn $wgMaxArticleSize etter utvidelse av et malargument (noe i tre krøllparenteser, som {{{foo}}}).", + "expensive-parserfunction-category-desc": "Siden bruker for mange dyre parserfunksjoner (som #ifexist). Se [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].", + "broken-file-category-desc": "Siden inneholder en ødelagt lenkefil (en lenke for Ã¥ bygge inn en fil nÃ¥r filen ikke eksisterer).", + "hidden-category-category-desc": "Kategorien inneholder __HIDDENCAT__ i sideinnholdet, hvilket gjør at den som standard ikke vises i kategorilisten pÃ¥ sider.", "trackingcategories-nodesc": "Ingen beskrivelse er tilgjengelig", "trackingcategories-disabled": "Kategorien er deaktivert", "mailnologin": "Ingen avsenderadresse", @@ -1715,7 +1717,7 @@ "mywatchlist": "OvervÃ¥kningsliste", "watchlistfor2": "For $1 $2", "nowatchlist": "Du har ingenting i overvÃ¥kningslisten.", - "watchlistanontext": "Vennligst $1 for Ã¥ vise eller redigere sider pÃ¥ overvÃ¥kningslisten din.", + "watchlistanontext": "Logg inn for Ã¥ vise eller redigere elementer pÃ¥ overvÃ¥kningslisten din.", "watchnologin": "Ikke logget inn", "addwatch": "Legg til i overvÃ¥kningslisten", "addedwatchtext": "Siden «[[:$1]]» er lagt til [[Special:Watchlist|overvÃ¥kningslisten]] din.\nFremtidige endringer til denne siden og den tilhørende diskusjonssiden blir listet opp der.", @@ -1763,7 +1765,7 @@ "exbeforeblank": "innholdet før siden ble tømt var: «$1»", "delete-confirm": "Slett «$1»", "delete-legend": "Slett", - "historywarning": "Advarsel: Siden du er i ferd med Ã¥ slette har en historikk med omtrent {{PLURAL:$1|én revisjon|$1 revisjoner}}:", + "historywarning": "Advarsel: Siden du er i ferd med Ã¥ slete har en historikk med $1 {{PLURAL:$1|revisjon|revisjoner}}:", "confirmdeletetext": "Du holder pÃ¥ Ã¥ slette en side sammen med historikken.\nBekreft at du virkelig vil slette denne siden, at du forstÃ¥r konsekvensene og at du gjør det i samsvar med [[{{MediaWiki:Policy-url}}|retningslinjene]].", "actioncomplete": "Gjennomført", "actionfailed": "Handling mislyktes", @@ -1779,6 +1781,7 @@ "delete-edit-reasonlist": "Rediger begrunnelser for sletting", "delete-toobig": "Denne siden har en stor redigeringshistorikk, med over {{PLURAL:$1|$1 revisjon|$1 revisjoner}}. Muligheten til Ã¥ slette slike sider er begrenset for Ã¥ unngÃ¥ utilsiktet forstyrring av {{SITENAME}}.", "delete-warning-toobig": "Denne siden har en stor redigeringshistorikk, med over {{PLURAL:$1|$1 revisjon|$1 revisjoner}}. Sletting av denne siden kan forstyrre databasen til {{SITENAME}}; vær varsom.", + "deleteprotected": "Du kan ikke slette denne siden fordi den er beskyttet.", "deleting-backlinks-warning": "'''Advarsel:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] lenker til eller inkluderer siden du er i ferd med Ã¥ slette.", "rollback": "Fjern redigeringer", "rollback_short": "Tilbakestill", @@ -1939,7 +1942,7 @@ "autoblockid": "Autoblokker #$1", "block": "Blokker bruker", "unblock": "Fjern blokkering av bruker", - "blockip": "Blokker bruker", + "blockip": "Blokker {{GENDER:$1|bruker}}", "blockip-legend": "Blokker bruker", "blockiptext": "Bruk skjemaet under for Ã¥ blokkere en IP-adresses tilgang til Ã¥ redigere artikler. Dette mÃ¥ kun gjøres for Ã¥ forhindre hærverk, og i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjene]]. Fyll ut en spesiell begrunnelse under.", "ipaddressorusername": "IP-adresse eller brukernavn", @@ -1968,7 +1971,7 @@ "ipb-unblock-addr": "Avblokker $1", "ipb-unblock": "Avblokker et brukernavn eller en IP-adresse", "ipb-blocklist": "Vis gjeldende blokkeringer", - "ipb-blocklist-contribs": "Bidrag fra $1", + "ipb-blocklist-contribs": "Bidrag fra {{GENDER:$1|$1}}", "unblockip": "Opphev blokkering", "unblockiptext": "Bruk skjemaet under for Ã¥ gjenopprette skriveadgangen for en tidligere blokkert adresse eller bruker.", "ipusubmit": "Opphev blokkering", @@ -2161,6 +2164,8 @@ "import": "Importer sider", "importinterwiki": "Transwiki-importering", "import-interwiki-text": "Velg en wiki og en side Ã¥ importere. Revisjonsdatoer og bidragsyteres navn blir bevart. Alle transwiki-importeringer listes i [[Special:Log/import|importloggen]].", + "import-interwiki-sourcewiki": "Kildewiki:", + "import-interwiki-sourcepage": "Kildeside:", "import-interwiki-history": "Kopier all historikk for denne siden", "import-interwiki-templates": "Inkluder alle maler", "import-interwiki-submit": "Importer", @@ -3149,7 +3154,7 @@ "log-name-pagelang": "Endre sprÃ¥klogg", "log-description-pagelang": "Dette er en logg som viser endringer i sidesprÃ¥k", "logentry-pagelang-pagelang": "$1 {{GENDER:$2|endret}} sidesprÃ¥k for $3 fra $4 til $5.", - "default-skin-not-found": "Ops! Standarddrakten for wikien din ($wgDefaultSkin), $1, er ikke tilgjengelig.\n\nInstallasjonen din inkluderer følgende drakter. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for informasjon om hvordan du an slÃ¥ det pÃ¥ og velge en standarddrakt.\n\n$2\n\n; Om du nettopp har installert MediaWiki:\n: Du har trolig installert fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet.\n:* Prøv Ã¥ installere flere drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.orgs draktbase]\n:* Last ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med flere drakter og utvidelser. Du kan kopiere og lime inn skins/-mappen fra denne.\n: Å gjøre dette skal ikke forstyrre git-mappen din om du er en MediaWiki-utvikler.\n\n; Om du nettopp har oppgradert MediaWiki:\n: MediaWiki 1.24 og nyere slÃ¥r ikke lenger automatisk pÃ¥ installerte drakter (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). du kan lime inn følgende linjer i LocalSettings.php for Ã¥ slÃ¥ pÃ¥ alle installerte drakter:\n\n
$3
\n\n; Om du nettopp har endret LocalSettings.php:\n: Dobbeltsjekk draktnavnene for skrivefeil.", + "default-skin-not-found": "Ops! Standarddrakten for wikien din ($wgDefaultSkin), $1, er ikke tilgjengelig.\n\nInstallasjonen din ser ut til å inneholde følgende drakter. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for informasjon om hvordan du kan slå disse på eller heller velge en standarddrakt.\n\n$2\n\n; Om du nettopp har installert MediaWiki:\n: Du har trolig installert fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet. Prøv å installere noen drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org sin draktbase] ved å\n:* laste ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med flere drakter og utvidelser. Du kan kopiere og lime inn skins/-mappen fra denne.\n:* klone en av mediawiki/skins/*-lagrene via git inn i skins/ -mappen av din MediaWiki-installasjon.\n: Å gjøre dette skal ikke forstyrre git-mappen din om du er en MediaWiki-utvikler.\n\n; Om du nettopp har oppgradert MediaWiki:\n: MediaWiki 1.24 og nyere slår ikke lenger på automatisk installerte drakter (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Du kan lime inn følgende linjer i LocalSettings.php for å slå på alle installerte drakter:\n\n
$3
\n\n; Om du nettopp har endret LocalSettings.php:\n: Dobbelsjekk draktnavnene for skrivefeil.", "default-skin-not-found-row-enabled": "* $1 / $2 (slått på)", "default-skin-not-found-row-disabled": "* $1 / $2 ('''slått av''')" } diff --git a/languages/i18n/nl.json b/languages/i18n/nl.json index 5493a0a2c5..b2a960cd5f 100644 --- a/languages/i18n/nl.json +++ b/languages/i18n/nl.json @@ -1656,7 +1656,7 @@ "linksearch-pat": "Zoekpatroon:", "linksearch-ns": "Naamruimte:", "linksearch-ok": "Zoeken", - "linksearch-text": "Wildcards zoals \"*.wikipedia.org\" of \"*.org\" zijn toegestaan.\nHeeft tenminste een topleveldomein nodig, zoals bijvoorbeeld \"*.org\".
\n{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: $1 (wordt \"http://\"als er geen protocol wordt opgegeven).", + "linksearch-text": "Wildcards zoals \"*.wikipedia.org\" of \"*.org\" zijn toegestaan.\nHeeft tenminste een topleveldomein nodig, zoals bijvoorbeeld \"*.org\".
\n{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: $1 (wordt \"http://\" als er geen protocol wordt opgegeven).", "linksearch-line": "$1 heeft een koppeling in $2", "linksearch-error": "Wildcards zijn alleen toegestaan aan het begin van een hostnaam.", "listusersfrom": "Gebruikers bekijken vanaf:", diff --git a/languages/i18n/pt-br.json b/languages/i18n/pt-br.json index 257333bfa4..9af31771d0 100644 --- a/languages/i18n/pt-br.json +++ b/languages/i18n/pt-br.json @@ -88,6 +88,7 @@ "tog-watchdefault": "Adicionar as páginas e arquivos que eu editar à minha lista de páginas vigiadas", "tog-watchmoves": "Adicionar as páginas e arquivos que eu mover à minha lista de páginas vigiadas", "tog-watchdeletion": "Adicionar as páginas e arquivos que eu eliminar à minha lista de páginas vigiadas", + "tog-watchrollback": "Adicionar páginas onde fiz uma reversão às minhas páginas vigiadas", "tog-minordefault": "Marcar todas as edições como menores por padrão", "tog-previewontop": "Mostrar previsão antes da caixa de edição", "tog-previewonfirst": "Mostrar previsão na primeira edição", @@ -325,6 +326,7 @@ "hidetoc": "ocultar", "collapsible-collapse": "Ocultar", "collapsible-expand": "Expandir", + "confirmable-confirm": "{{GENDER:$1|Tem}} a certeza?", "confirmable-yes": "Sim", "confirmable-no": "Não", "thisisdeleted": "Ver ou restaurar $1?", @@ -612,6 +614,7 @@ "preview": "Pré-visualização", "showpreview": "Mostrar previsão", "showdiff": "Mostrar alterações", + "blankarticle": "Aviso: A página que está prestes a criar está em branco. \nSe clicar \"{{int:savearticle}}\" outra vez, a página será criada sem qualquer conteúdo.", "anoneditwarning": "'''Atenção''': Você não se encontra autenticado.\nO seu endereço de IP será registrado no histórico de edições desta página.", "anonpreviewwarning": "''Você não está logado. Gravar registará o seu endereço IP no histórico de edições desta página.''", "missingsummary": "'''Lembrete:''' Você não introduziu um sumário de edição. Se clicar novamente em Salvar, a sua edição será salva sem um sumário.", @@ -770,6 +773,7 @@ "rev-deleted-event": "(entrada removida)", "rev-deleted-user-contribs": "[nome de usuário ou endereço de IP eliminado - edição ocultada das contribuições]", "rev-deleted-text-permission": "Esta revisão desta página foi '''eliminada'''.\nPodem existir mais detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminações].", + "rev-suppressed-text-permission": "A revisão desta página foi '''eliminada'''.\nVocê pode visualizá-la; podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de eliminação].", "rev-deleted-text-unhide": "Esta revisão desta página foi '''removida'''.\nPoderá haver detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminação].\nVocê ainda pode [$1 ver esta revisão] se deseja prosseguir.", "rev-suppressed-text-unhide": "Esta revisão desta página foi '''removida'''.\nPoderá haver detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de eliminação].\nVocê ainda pode [$1 ver esta revisão] se deseja prosseguir.", "rev-deleted-text-view": "A revisão desta página foi '''eliminada'''.\nVocê pode visualizá-la; pode haver detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminação].", diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json index dae681081d..d75b8cd5ab 100644 --- a/languages/i18n/qqq.json +++ b/languages/i18n/qqq.json @@ -585,14 +585,14 @@ "createacct-submit": "Submit button on vertical-layout create account form.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]", "createacct-another-submit": "Submit button of [[Special:UserLogin/signup]] ([[Special:CreateAccount]]) when accessed by a registered user.\n\nThe original means \"create an account in addition to the one you already have\"; sometimes, but not always, it means you are going to \"Create the account on behalf of somebody else\" or \"Create account for another\".\n{{Identical|Create another account}}", "createacct-benefit-heading": "In vertical-layout create account form, the heading for the section describing the benefits of creating an account. See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nIf in your language you need to know the gender of the name for the wiki (which is the subject of the English sentence), please adapt the sentence as much as you need for your translation to fit.", - "createacct-benefit-icon1": "In vertical-layout create account form, the CSS style for the div next to the first benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]", - "createacct-benefit-head1": "In vertical-layout create account form, the text in the heading for the first benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body1}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]", + "createacct-benefit-icon1": "In vertical-layout create account form, the CSS style for the div next to the first benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]", + "createacct-benefit-head1": "In vertical-layout create account form, the text in the heading for the first benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body1}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]", "createacct-benefit-body1": "In vertical-layout create account form, the text for the first benefit.\n\nPreceded by the message {{msg-mw|Createacct-benefit-head1}} (number of edits).\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nParameters:\n* $1 - number of edits\n{{Identical|Edit}}", - "createacct-benefit-icon2": "In vertical-layout create account form, the CSS style for the div next to the second benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]", - "createacct-benefit-head2": "In vertical-layout create account form, the text in the heading for the second benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body2}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]", + "createacct-benefit-icon2": "In vertical-layout create account form, the CSS style for the div next to the second benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]", + "createacct-benefit-head2": "In vertical-layout create account form, the text in the heading for the second benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body2}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]", "createacct-benefit-body2": "In vertical-layout create account form, the text for the second benefit.\n\nPreceded by the message {{msg-mw|Createacct-benefit-head2}} (number of pages).\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nParameters:\n* $1 - number of pages\n{{Identical|Page}}", - "createacct-benefit-icon3": "In vertical-layout create account form, the CSS style for the div next to the third benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]", - "createacct-benefit-head3": "In vertical-layout create account form, the text in the heading for the third benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body3}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]", + "createacct-benefit-icon3": "In vertical-layout create account form, the CSS style for the div next to the third benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]", + "createacct-benefit-head3": "In vertical-layout create account form, the text in the heading for the third benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body3}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]", "createacct-benefit-body3": "In vertical-layout create account form, the text for the third benefit.\n\nPreceded by the message {{msg-mw|Createacct-benefit-head3}} (number of contributors).\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nParameters:\n* $1 - number of contributors (users)", "badretype": "Used as error message when the new password and its retype do not match.", "userexists": "Used as error message in creating a user account.", @@ -798,8 +798,8 @@ "session_fail_preview_html": "Used as error message in Preview page.", "token_suffix_mismatch": "Error message in Preview page.\n\nSee also:\n* {{msg-mw|Token suffix mismatch}}\n* {{msg-mw|Session fail preview}}\n* {{msg-mw|Edit form incomplete}}", "edit_form_incomplete": "Error message in Preview page.\n\nSee also:\n* {{msg-mw|Token suffix mismatch}}\n* {{msg-mw|Session fail preview}}\n* {{msg-mw|Edit form incomplete}}", - "editing": "Shown as page title when editing a page. Parameters:\n* $1 - the name of the page that is being edited. e.g. \"Editing Main Page\"\n{{Related|Editing}}", - "creating": "Shown as page title when creating a page. Parameters:\n* $1 - the name of the page that is being created. Example: \"Creating Main Page\".\n{{Related|Editing}}", + "editing": "Shown as page title when editing a page. Parameters:\n* $1 - the name of the page that is being edited. e.g. \"Editing Main Page\"\n{{Related|Editing}}\n{{Identical|Editing}}", + "creating": "Shown as page title when creating a page. Parameters:\n* $1 - the name of the page that is being created. Example: \"Creating Main Page\".\n{{Related|Editing}}\n{{Identical|Creating}}", "editingsection": "This message displays at the top of the page when a user is editing a page section. Parameters:\n* $1 - page name\n{{Related|Editing}}", "editingcomment": "This message displays at the top of the page when a user is creating a new section. Parameters:\n* $1 - page name\n{{Related|Editing}}", "editconflict": "Used as title of error message. Parameters:\n* $1 - page title", @@ -2235,7 +2235,7 @@ "ipb-confirmhideuser": "Used as confirmation message in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Ipb-blockingself}}", "ipb-confirmaction": "Confirmation message displayed to users asking them to think again before really blocking someone.", "ipb-edit-dropdown": "Shown beneath the user block form on the right side. It is a link to {{msg-mw|Ipbreason-dropdown|notext=1}}.\n\nSee also:\n* {{msg-mw|Delete-edit-reasonlist}}\n* {{msg-mw|Protect-edit-reasonlist}}", - "ipb-unblock-addr": "Used as page title in [[Special:Block]], if the target user is specified.\n\nParameters:\n* $1 - target username\n\nSee also:\n* {{msg-mw|Ipb-unblock}}", + "ipb-unblock-addr": "Used as page title in [[Special:Block]], if the target user is specified.\n\nParameters:\n* $1 - target username\n\nSee also:\n* {{msg-mw|Ipb-unblock}}\n{{Identical|Unblock}}", "ipb-unblock": "Used as page title in [[Special:Block]], if the target user is not specified.\n\nSee also:\n* {{msg-mw|Ipb-unblock-addr}}", "ipb-blocklist": "Used as link text in [[Special:Block]].\n\nThe link points to Specil:BlockList.", "ipb-blocklist-contribs": "Used in [[Special:Block]].\n* $1 - target username", @@ -2253,7 +2253,7 @@ "blocklist-addressblocks": "Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].\n{{Related|Blocklist-blocks}}", "blocklist-rangeblocks": "Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].\n\nFor an explanation of \"range blocks\", see [[mw:Help:Range_blocks]]\n{{Related|Blocklist-blocks}}", "blocklist-timestamp": "This is a column header for dates and times in the table on the page [[Special:BlockList]].\n{{Identical|Timestamp}}", - "blocklist-target": "The table header for the column containing the block targets, that is user names or IP-addresses linked to their respective user pages, in the table on the page [[Special:BlockList]].", + "blocklist-target": "The table header for the column containing the block targets, that is user names or IP-addresses linked to their respective user pages, in the table on the page [[Special:BlockList]].\n{{Identical|Target}}", "blocklist-expiry": "This is a column header in the table on the page [[Special:BlockList]].\n{{Identical|Expire}}", "blocklist-by": "This is a column header in the table on the page [[Special:BlockList]].", "blocklist-params": "This is a column header in the table on the page [[Special:BlockList]].", diff --git a/languages/i18n/rm.json b/languages/i18n/rm.json index 42deb697af..65c753c34f 100644 --- a/languages/i18n/rm.json +++ b/languages/i18n/rm.json @@ -112,7 +112,7 @@ "category-empty": "''Questa categoria cuntegna actualmain nagins artitgels e naginas datotecas.''", "hidden-categories": "{{PLURAL:$1|Categoria zuppentada|Categorias zuppentadas}}", "hidden-category-category": "Categorias zuppentadas", - "category-subcat-count": "{{PLURAL:$2|Questa categoria cuntegna be suandanta sutcategoria.|Questa categoria cuntegna {{PLURAL:$1|la suandanta sutcategoria|las $1 suandantas sutcategorias}} da totalmain $2 sutcategoria.}}", + "category-subcat-count": "{{PLURAL:$2|Questa categoria cuntegna be suandanta sutcategoria.|Questa categoria cuntegna {{PLURAL:$1|la suandanta sutcategoria|las $1 suandantas sutcategorias}} da totalmain $2 sutcategorias.}}", "category-subcat-count-limited": "Questa categoria cuntegna {{PLURAL:$1|suandanta subcategoria|suandantas $1 subcategorias}}:", "category-article-count": "{{PLURAL:$2|Questa categoria cuntegna be la suandanta pagina.|{{PLURAL:$1|La suandanta pagina è|Las $1 suandantas paginas èn}} en questa categoria che cuntegna totalmain $2 paginas.}}", "category-article-count-limited": "{{PLURAL:$1|La suandanta pagina è|Las suandantas $1 paginas èn}} actualmain en la categoria.", @@ -1935,7 +1935,6 @@ "import": "Impurtar paginas", "importinterwiki": "Import transwiki", "import-interwiki-text": "Tscherna in wiki ed in titel da pagina per importar.\nLas datas da las versiuns ed ils nums dals contribuents vegnan mantegnids.\nTut ils imports transwiki vegnan registrads en il [[Special:Log/import|protocol d'imports]].", - "import-interwiki-source": "Wiki/pagina da funtauna:", "import-interwiki-history": "Copiar l'entira cronologia da questa pagina", "import-interwiki-templates": "Includer tut ils models", "import-interwiki-submit": "Importar", diff --git a/languages/i18n/sah.json b/languages/i18n/sah.json index 415c1c638d..f643b26719 100644 --- a/languages/i18n/sah.json +++ b/languages/i18n/sah.json @@ -26,6 +26,7 @@ "tog-watchdefault": "Уларыппыт сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис", "tog-watchmoves": "Аатын уларыппыт сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис", "tog-watchdeletion": "Соппут сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис", + "tog-watchrollback": "Төннөрбүт сирэйдэрбин кэтэбилим тиһигэр киллэрэн ис", "tog-minordefault": "Уларытыылары атын этиллибэтэҕинэ кыра уларытыы курдук бэлиэтээ", "tog-previewontop": "Хайдах буоларын уларытар түннүк үрдүнэн (иннигэр) көрдөр", "tog-previewonfirst": "Хайдах буоларын тута көрдөр", @@ -263,6 +264,9 @@ "hidetoc": "көрдөрүмэ", "collapsible-collapse": "Сабыы", "collapsible-expand": "Тэнитии", + "confirmable-confirm": "{{GENDER:$1|Бигэргэтэҕин}} дуо?", + "confirmable-yes": "Сөп", + "confirmable-no": "Суох", "thisisdeleted": "$1 көрдөрөбүн эбэтэр хостуубун дуу?", "viewdeleted": "$1 көрдөрөбүн?", "restorelink": "{{PLURAL:$1|биир сотторуллубут көннөрүү|$1 сотторуллубут көннөрүүлэр}}", @@ -295,6 +299,7 @@ "databaseerror-text": "Билии олоҕор алҕас таҕыста.\nБырагыраамма алҕаһа буолуон сөп.", "databaseerror-textcl": "Билии олоҕор алҕас таҕыста.", "databaseerror-query": "Ыйытык: $1", + "databaseerror-function": "Функция: $1", "databaseerror-error": "Алҕас: $1", "laggedslavemode": "Болҕой: Бу сирэй бүтэһик уларытыылара суох буолуон сөп", "readonly": "Билии олоҕун уларытар бобуллубут", @@ -346,7 +351,7 @@ "invalidtitle-knownnamespace": "«$2» аат далыгар маннык тиэкистээх «$3» сатаммат аат", "invalidtitle-unknownnamespace": "Биллибэт аат дала $1 нүөмэрдээх, \"$2\" тиэкистээх сатаммат аат", "exception-nologin": "Ааккын билиһиннэрбэтэххин", - "exception-nologin-text": "Маны көрөргө эбэтэр оҥорорго [[Special:Userlogin|ааккын билиһиннэриэхтээххин]].", + "exception-nologin-text": "Маны көрөргө эбэтэр оҥорорго ааккын билиһиннэриэхтээххин.", "exception-nologin-text-manual": "Көрөргө эбэтэр оҥорорго маны гыныахтааххын: $1.", "virus-badscanner": "Сатаммата. Вирус сканера биллибэтэ: ''$1''", "virus-scanfailed": "скан сыыһата (куода $1)", @@ -547,6 +552,7 @@ "preview": "Холоон көрүү", "showpreview": "Уларытыах иннинэ көрүү", "showdiff": "Уларытыылар", + "blankarticle": "Сэрэтии: Оҥорор сирэйиҥ кураанах.\nБу тимэҕи «{{int:savearticle}}» хос баттаатаххына кураанах сирэй оҥоһуллуо.", "anoneditwarning": "'''Болҕой:''' Системаҕа киирбэтэххин. Онон аатыҥ оннугар IP аадаырыһыҥ бу сирэй историятыгар киириэ.", "anonpreviewwarning": "''Эн тиһиккэ ааккын эппэттэххин. Уларытыыгын бигэргэттэххинэ IP-аадырыһыҥ сирэй устуоруйатыгар суруллуо.''", "missingsummary": "'''Санатыы:''' Уларыппытыҥ кылгас быһаарыытын суруйбатаххын. Уларытыыны бигэргэттэххинэ улартытыыҥ хос быһаарыыта суох барыа.", @@ -658,8 +664,10 @@ "parser-template-recursion-depth-warning": "($1) халыып рекурсиятын муҥура бүппүт (Превышен предел глубины рекурсии)", "language-converter-depth-warning": "Тыл конвертерын дириҥин хааччаҕа куоһарыллыбыт ($1)", "node-count-exceeded-category": "Түмүктэрин ахсаана аһара барбыт сирэйдэр", + "node-count-exceeded-category-desc": "Сирэй түмүгүн ахсаана сиэри таһынан барбыт.", "node-count-exceeded-warning": "Сирэй түмүгүн ахсаана таһынан барбыт", "expansion-depth-exceeded-category": "Аһыллыытын дириҥэ куоһарыллыбыт сирэйдэр", + "expansion-depth-exceeded-category-desc": "Сирэй аһыллыытын дириҥэ куоһарыллыбыт.", "expansion-depth-exceeded-warning": "Сирэйгэ угуллубут билэлэр аһара элбээбиттэр", "parser-unstrip-loop-warning": "Сабыллыбатах pre көһүннэ", "parser-unstrip-recursion-limit": "Рекурсия ахсаана таһынан барбыт ($1)", @@ -678,7 +686,7 @@ "currentrev": "Билиҥҥи барыл", "currentrev-asof": "Билиҥҥи торум манна: $1", "revisionasof": "$1 барыл", - "revision-info": "Версия от $1; $2", + "revision-info": "Барыл $1; {{GENDER:$6|$2}}$7", "previousrevision": "←Инники барыл", "nextrevision": "Аныгыскы барыл→", "currentrevisionlink": "Билиҥҥи барыл", @@ -703,6 +711,7 @@ "rev-deleted-event": "(бэлиэтээһин дьайыыта сотулунна)", "rev-deleted-user-contribs": "[кыттааччы аата эбэтэр IP-аадырыһа сотуллубуттар — уларытыы көстүбэт оҥоһуллубут]", "rev-deleted-text-permission": "Сирэй бу барыла '''сотуллубут'''.\nБыһаарыыта [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} манна] баар буолуон сөп.", + "rev-suppressed-text-permission": "Сирэй бу барыла кистэммит.\nБыһаарыы [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} кистээһин сурунаалыгар] баар.", "rev-deleted-text-unhide": "Сирэй ити барыла '''сотуллубут'''.\nБаҕар ол туһунан [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} сотуу сурунаалыгар] баара буолуо.\nОл да буоллар эн дьаһабыл буоларыҥ быһыытынан [$1 барылы көрүөххүн сөп].", "rev-suppressed-text-unhide": "Сирэй бу барыла '''кистэммит'''.\nБыһаарыы баҕара [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} кистээһин сурунаалыгар] баара буолуо.\nЭн дьаһабыл буоларыҥ быһыытынан [ол барылы көрүөххүн $1] сөп.", "rev-deleted-text-view": "Ыстатыйа бу барыла '''сотуллубут'''.\nОл эрэн ону көрүөххүн сөп.\nТоҕо сотуллубутун быһаарыыта [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} манна] баар буолуон сөп.", @@ -727,7 +736,7 @@ "revdelete-text-text": "Сотуллубут барыллар уруккутун курдук сирэй устуоруйатыгар көстүөхтэрэ, ол эрэн иһинээҕитэ сорҕото киэҥ эйгэҕэ көрдөрүллүө суоҕа.", "revdelete-text-file": "Билэ сотуллубут барыллара уруккутун курдук сирэй устуоруйатыгар көстүөхтэрэ, ол эрэн иһинээҕитэ сорҕото киэҥ эйгэҕэ көрдөрүллүө суоҕа.", "logdelete-text": "Сурунаалтан сотуллубут уруккутун курдук сурунаал устуоруйатыгар көстүөҕэ, ол эрэн иһинээҕитин сорҕото киэҥ эйгэҕэ көрдөрүллүө суоҕа.", - "revdelete-text-others": "Өскөтүн эбии хааччах турбатах буоллаҕына, {{grammar:genitive|{{SITENAME}}}} атын дьаһабыллара урукку курдук кистэммити көрөр уонна чөлүгэр түһэрэр кыахтаахтар.", + "revdelete-text-others": "Өскөтүн эбии хааччах турбатах буоллаҕына, атын дьаһабыллар урукку курдук кистэммити көрөр уонна чөлүгэр түһэрэр кыахтаахтар.", "revdelete-confirm": "Бука диэн кырдьык бу дьайыыны онороргун, содула туох буоларын өйдүүргүн уонна [[{{MediaWiki:Policy-url}}|сиэри]] тутуһаргын бигэргэт.", "revdelete-suppress-text": "Кистээһин маннык түбэлтэлэргэ '''эрэ''' оҥоһуллар:\n* Баһааҕырдар буолуон сөптөөҕү суруйуу\n* Киһи бэйэтин туһунан тоҕооһо суохтук суруллубут буоллаҕына\n*: дьиэтин аадырыһа, төлөппүөннэрин нүөмэрэ, пааспарын нүөмэрэ уо.д.а.", "revdelete-legend": "Хааччахтары туруоруу:", @@ -1425,8 +1434,6 @@ "randomincategory": "Категория түбэспиччэ ыстатыйата", "randomincategory-invalidcategory": "\"$1\" диэн категория суох эбит.", "randomincategory-nopages": "Бу категорияҕа [[:Category:$1]] киирэр ыстатыйалар суохтар.", - "randomincategory-selectcategory": "Категория түбэспиччэ сирэйигэр көс: $1 $2.", - "randomincategory-selectcategory-submit": "Көс", "randomredirect": "Түбэспиччэ утаарыы", "randomredirect-nopages": "Бу аат далыгар($1) көһөрөр ыйынньыктар суохтар.", "statistics": "Статистика", @@ -2114,7 +2121,6 @@ "import": "Сирэйдэри импортааһын", "importinterwiki": "Биики ыккардынааҕы импорт", "import-interwiki-text": "Биикини уонна импортанар сирэй аатын киллэр.\nУларытыылар күннэрэ-ыйдара уонна аапптардар ааттара оннуларынан хаалыахтара.\nБиики ыккардынааҕы импорт дьайыылара [[Special:Log/import|аналлаах сурунаалга]] суруллаллар.", - "import-interwiki-source": "Ылыллыбыт биикитэ/сирэйэ:", "import-interwiki-history": "Сирэй туох баар историятын көһөрөргө", "import-interwiki-templates": "Бары халыыптары киллэр", "import-interwiki-submit": "Импортаа", diff --git a/languages/i18n/sc.json b/languages/i18n/sc.json index e3608ffcc4..61ae8f9d8d 100644 --- a/languages/i18n/sc.json +++ b/languages/i18n/sc.json @@ -14,7 +14,7 @@ }, "tog-underline": "Sutalìnia sos ligòngios", "tog-hideminor": "Cua is acontzos minores in sa pàgina de is ùrtimas mudàntzias", - "tog-hidepatrolled": "Cua sas mudas verificadas in sas ùrtimos càmbios", + "tog-hidepatrolled": "Cua is mudas verificadas in is ùrtimos càmbios", "tog-newpageshidepatrolled": "Cua sas pàginas verificadas dae sa lista de sas pàginas noas", "tog-extendwatchlist": "Ammània sa watchlist pro ammustrare totu sos càmbios, non sos prus reghentes ebbia", "tog-usenewrc": "Pone in pare sos càmbios de cada pàgina in sos ùrtimos càmbios e in sa watchlist", @@ -289,6 +289,7 @@ "nospecialpagetext": "As pedidu una pàgina ispetziale non vàlida.\n\nUna lista de pàginas ispetziales vàlidas dd'agatas in [[Special:SpecialPages|{{int:specialpages}}]].", "error": "Faddina", "databaseerror": "Faddina de su database", + "databaseerror-query": "Rechesta: $1", "databaseerror-function": "Funtzione: $1", "databaseerror-error": "Faddina: $1", "readonly": "Database bloccadu", @@ -318,6 +319,7 @@ "virus-scanfailed": "scansione faddida (còdixe $1)", "virus-unknownscanner": "antivirus disconnotu:", "logouttext": "As acabadu sa sessione.\n\nTene contu ca is pàginas ki sunt giai abertas in àteras bentanas podent sighire a pàrrer comente cando fias identificadu, fintzas a cando non ddas renfriscas dae su browser tuo.", + "welcomeuser": "Benénnidu, $1!", "welcomecreation-msg": "Su contu tuo est istadu creadu.\nSi boles podes cambiare is [[Special:Preferences|prefèntzias tuas]] pro {{SITENAME}}", "yourname": "Nùmene usuàriu", "userlogin-yourname": "Nùmene usuàriu", @@ -348,12 +350,19 @@ "gotaccountlink": "Identìfica·ti", "userlogin-createanother": "Crea un àteru contu", "createacct-emailrequired": "Indirutzu Email", + "createacct-emailoptional": "Indiritzu email (optzionale)", + "createacct-email-ph": "Inserta s'indiritzu email tuo", + "createacct-another-email-ph": "Inserta s'indiritzu email", "createaccountmail": "Imprea una password a sorte e ispedidda a su indiritzu email ispetzificadu", + "createacct-realname": "Nùmene beru (optzionale)", "createaccountreason": "Motivu:", "createacct-reason": "Motivu", "createacct-reason-ph": "Proite ses creande un àteru contu", + "createacct-captcha": "Còmpudu de siguresa", + "createacct-imgcaptcha-ph": "Inserta su testu chi bides aissusu", "createacct-submit": "Crea su contu tuo", "createacct-another-submit": "Crea un àteru contu", + "createacct-benefit-heading": "{{SITENAME}} est òpera de gente che tue.", "createacct-benefit-body1": "{{PLURAL:$1|acontzu|acontzos}}", "createacct-benefit-body2": "{{PLURAL:$1|pàgina|pàginas}}", "badretype": "Is passwords chi as insertadu non currispondent.", @@ -400,6 +409,7 @@ "passwordreset": "Reseta sa password", "passwordreset-legend": "Reseta sa password", "passwordreset-username": "Nùmene usuàriu", + "passwordreset-domain": "Domìniu:", "passwordreset-email": "Indiritzu email:", "passwordreset-emailtitle": "Particulares de s'usuàriu in {{SITENAME}}", "changeemail": "Càmbia indiritzu email", @@ -487,6 +497,7 @@ "postedit-confirmation-restored": "Sa pàgina est stada restaurada", "postedit-confirmation-saved": "S'acontzu tuo est stadu sarbadu", "content-model-wikitext": "wikitestu", + "content-model-text": "testu normale", "content-model-javascript": "JavaScript", "content-model-css": "CSS", "viewpagelogs": "Càstia sos registros de custa pàgina", @@ -513,12 +524,14 @@ "history-feed-item-nocomment": "$1 su $2", "rev-delundel": "ammustra/cua", "rev-showdeleted": "ammustra", + "revdelete-no-file": "Su documentu ispetzuficadu no esistit", "revdelete-show-file-submit": "Eja", "revdelete-radio-set": "Cua", "revdelete-log": "Motivu:", "revdel-restore": "Muda sa visibilidade", "pagehist": "Istòria de sa pàgina", "deletedhist": "Istòria fuliada", + "revdelete-otherreason": "Motivu diversu o agiuntivu:", "revdelete-reasonotherlist": "Àteru motivu", "mergehistory-from": "Pàgina de orìgine:", "mergehistory-into": "Pàgina de destinatzione:", @@ -526,6 +539,7 @@ "mergehistory-reason": "Motivu:", "revertmerge": "Iscontza s'unione", "history-title": "$1: Istòria de is revisiones", + "difference-multipage": "(Diferèntzias intre pàginas)", "lineno": "Lìnia $1:", "compareselectedversions": "Cumpara versiones scioberadas", "editundo": "annulla", @@ -567,8 +581,10 @@ "prefs-personal": "Datos personales", "prefs-rc": "Ùrtimas mudàntzias", "prefs-watchlist": "Watchlist", + "prefs-watchlist-edits-max": "Cantidade màssima: 1000", "prefs-misc": "Àteras preferèntzias", "prefs-resetpass": "Càmbia password", + "prefs-email": "Sèberos pro sa email", "saveprefs": "Sarva preferèntzias", "prefs-editing": "Box de acontzadura", "rows": "Lìnias:", @@ -654,15 +670,22 @@ "action-createpage": "creare pàginas", "action-move": "mòvere custa pàgina", "action-movefile": "mòvere custu file", + "action-upload": "carriga custu archìviu", "action-delete": "burrare custa pàgina", "action-browsearchive": "chircare pàginas fuliadas", "nchanges": "$1 {{PLURAL:$1|mudàntzia|mudàntzias}}", + "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|dae s'ùrtima bisita}}", + "enhancedrc-history": "istòria", "recentchanges": "Ùrtimas mudàntzias", "recentchanges-legend": "Possibilidades subra ùrtimas mudàntzias", + "recentchanges-summary": "Sighi is ùrtimas mudàntzias a sa wiki in custa pàgina.", "recentchanges-feed-description": "Custu feed riportada is ùrtimas mudàntzias a is cuntènnidos de su giassu.", "recentchanges-label-newpage": "Custu acontzu at creadu una pàgina noa", "recentchanges-label-minor": "Custu est unu acontzu minore", "recentchanges-label-bot": "Custu acontzu est stadu fatu dae unu bot", + "recentchanges-label-unpatrolled": "Custu càmbiu no est istadu cumprobadu", + "recentchanges-label-plusminus": "Sa muda de sa mannesa de sa pàgina dae su nùmeru de bytes", + "recentchanges-legend-heading": "'''Legenda:'''", "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (càstia [[Special:NewPages|is pàginas noas]])", "rcnotefrom": "{{PLURAL:$5|Sa chi sighit est sa mudàntzia|Sas chi sighint sunt sas mudàntzias}} dae $3, $4 (amostadas fintzas a $1).", "rclistfrom": "Ammustra mudàntzias dae $3 $2", @@ -727,6 +750,7 @@ "upload-description": "Descritzione de su file", "upload-success-subj": "Carrigamentu acabau", "upload-file-error": "Faddina a intru", + "img-auth-nofile": "Su File \"$1\" no esistit.", "license": "Licèntzia:", "license-header": "Licèntzia", "upload_source_file": "(su file seberadu in su computer tuo)", @@ -738,6 +762,8 @@ "listfiles_size": "Mannesa in byte", "listfiles_description": "Descritzione", "listfiles_count": "Versiones", + "listfiles-latestversion-yes": "Eja", + "listfiles-latestversion-no": "No", "file-anchor-link": "File", "filehist": "Stòria de su file", "filehist-help": "Carca unu grupu data/ora pro castiare su file comente si presentada in su tempus indicadu.", @@ -756,21 +782,26 @@ "imagelinks": "Ligant a custu file", "linkstoimage": "{{PLURAL:$1|Sa pàgina ki sighit ligat|Is $1 pàginas ki sighint ligant}} a custu file:", "nolinkstoimage": "Peruna pàgina ligat a custu file.", + "linkstoimage-redirect": "$1 (reindiritzamentu file) $2", "sharedupload": "Custu file benit dae $1 e podet èssere impreau in àteros progetos.", "uploadnewversion-linktext": "Carriga una versione noa de custu file", "shared-repo-from": "dae $1", "filerevert-comment": "Motivu:", "filedelete": "Cantzella $1", "filedelete-legend": "Cantzella su file", + "filedelete-comment": "Motivu:", "filedelete-submit": "Cantzella", "filedelete-success": "Su file '''$1''' est istadu fuliau.", + "filedelete-otherreason": "Motivu diversu o agiuntivu:", "filedelete-reason-otherlist": "Àteru motivu", "download": "scàrriga", "listredirects": "Lista de totu is redirects", "randompage": "Pàgina a sa tzurpa", + "randomincategory-category": "Categoria:", "statistics": "Statìsticas", "statistics-header-users": "Statìsticas subra is usuàrios", "statistics-pages": "Pàginas", + "pageswithprop-submit": "Bae", "doubleredirects": "Redirects dòpios", "doubleredirectstext": "Custa pàgina cuntenet una lista de pàginas ki re-indiritzant a àteras pàginas de re-indiritzamentu.\nOgni lìnia cuntenet ligàmines a su primu e a su de duos re-indiritzamentu, aici comente sa prima lìnia de sa de duos re-indiritzamentos, chi de sòlitu adòbiat s'artìculu \"beru\", a sa cale fintzas su primu re-indiritzamentu dia depet puntare.\nIs re-indiritzamentos cantzellados sunt stados curretos.", "brokenredirects": "Redirects isballiaus", @@ -786,15 +817,30 @@ "nrevisions": "$1 {{PLURAL:$1|revisione|revisiones}}", "nviews": "$1 {{PLURAL:$1|bisura|bisuras}}", "lonelypages": "Pàginas burdas", + "uncategorizedpages": "Pàginas chentza categoria", + "uncategorizedcategories": "Categorias chentza categoria", + "uncategorizedimages": "Documentos chentza categoria", + "uncategorizedtemplates": "Templates chentza categoria", + "unusedcategories": "Categorias no impreadas", "unusedimages": "Files no impreaus", "popularpages": "Pàginas populares", + "wantedcategories": "Categorias chircadas", "wantedpages": "Artìculos prus chircados", + "wantedfiles": "Documentos chircados", + "wantedtemplates": "Templates chircados", + "mostlinked": "Pàginas su prus ligadas", + "mostlinkedcategories": "Categorias su prus ligadas", + "mostimages": "Documentos su prus ligados", "mostrevisions": "Pàginas cun prus revisiones", "prefixindex": "Ìndighe de is pàginas pro initziales", "shortpages": "Pàginas crutzas", "longpages": "Pàginas longas", "deadendpages": "Pàginas chentza bessida", "protectedpages": "Pàginas amparadas", + "protectedpages-page": "Pàgina", + "protectedpages-expiry": "Iscadit", + "protectedpages-reason": "Motivu", + "protectedpages-unknown-timestamp": "Isconnottu", "protectedtitles": "Tìtulus amparadus", "listusers": "Lista usuàrios", "usereditcount": "$1 {{PLURAL:$1|acontzu|acontzos}}", @@ -829,9 +875,11 @@ "linksearch-ns": "Nùmene-logu:", "linksearch-ok": "Chirca", "listusers-submit": "Ammustra", + "listusers-blocked": "(blocadu)", "activeusers-hidebots": "Cua bots", "activeusers-hidesysops": "Cua amministradores", "listgrouprights-group": "Grupu", + "listgrouprights-rights": "Deretos", "listgrouprights-members": "(lista de is cumponentes)", "mailnologintext": "Depes èsser [[Special:UserLogin|identificadu (login)]] e àer registradu un'indiritzu e-mail vàlidu in is [[Special:Preferences|preferèntzias tuas]] pro imbiare e-mail a àteros usuàrios.", "emailuser": "E-mail a custu usuàriu", @@ -852,6 +900,7 @@ "usermessage-editor": "Missu de su sistema", "watchlist": "Sa watchlist mea", "mywatchlist": "Pàginas annotadas", + "watchlistfor2": "Pro $1 $2", "nowatchlist": "No as indicadu pàginas in sa watchlist tua.", "watchnologin": "No intrau (log in)", "addedwatchtext": "Sa pàgina \"[[:$1]]\" est istada aciunta a sa [[Special:Watchlist|watchlist]] tua.\nIs mudàntzias de custa pàgina e de sa pàgina de cuntierras sua ant a benner elencadas inoe.", @@ -892,6 +941,8 @@ "protectlogpage": "Amparaduras", "protectedarticle": "at amparau \"[[$1]]\"", "modifiedarticleprotection": "at cambiau su livellu de amparadura pro \"[[$1]]\"", + "prot_1movedto2": "[[$1]] est istada mòvida a [[$2]]", + "protect-legend": "Cunfirma amparadura", "protectcomment": "Motivu:", "protectexpiry": "Iscadèntzia:", "protect_expiry_invalid": "S'iscadèntzia est imbàlida.", @@ -905,9 +956,11 @@ "protect-level-sysop": "Isceti aministradores", "protect-summary-cascade": "ricorsiva", "protect-expiring": "iscadèntzia: $1 (UTC)", + "protect-expiring-local": "iscadit su $1", "protect-cascade": "Ampara totu is pàginas inclùdias in custa (amparadura ricorsiva)", "protect-cantedit": "Non podes cambiare is livellus de amparadura pro sa pàgina, pro ite non tenes su permissu de cambiare sa pàgina etotu.", "protect-othertime": "Àteru perìodu:", + "protect-otherreason-op": "Àteru motivu", "protect-expiry-options": "1 ora:1 hour,1 die:1 day,1 chida:1 week,2 chidas:2 weeks,1 mese:1 month,3 meses:3 months,6 meses:6 months,1 annu:1 year,infinidu:infinite", "restriction-type": "Permissu:", "restriction-level": "Livellu de restritzioni:", @@ -951,6 +1004,8 @@ "year": "Dae s'annu (e in antis):", "sp-contributions-newbies": "Ammustra feti is contributziones de is contos noos", "sp-contributions-blocklog": "registru de is bloccos", + "sp-contributions-uploads": "carrigamentos", + "sp-contributions-logs": "registros", "sp-contributions-talk": "cuntierra", "sp-contributions-search": "Chirca contributziones", "sp-contributions-username": "Indiritzu IP o nùmene usuàriu:", @@ -990,6 +1045,8 @@ "unblockiptext": "Usa il modulo sottostante per restituire il diritto di scrittura ad un indirizzo IP precedentemente bloccato.", "ipusubmit": "Boga custu bloccu", "ipblocklist": "Usuàrios bloccados", + "blocklist-expiry": "Iscadit", + "blocklist-reason": "Motivu", "ipblocklist-submit": "Chirca", "infiniteblock": "infinitu", "expiringblock": "scadit su $1 a is $2", @@ -1189,6 +1246,7 @@ "version-software-version": "Versione", "fileduplicatesearch-submit": "Chirca", "specialpages": "Pàginas ispetziales", + "specialpages-note-top": "Legenda", "specialpages-group-login": "Intra / crea contu", "specialpages-group-pages": "Listas de is pàginas", "tags-edit": "càmbia", diff --git a/languages/i18n/scn.json b/languages/i18n/scn.json index 052335e4d5..b527a83e52 100644 --- a/languages/i18n/scn.json +++ b/languages/i18n/scn.json @@ -570,7 +570,7 @@ "edit-conflict": "Cunflittu di edizzioni.", "edit-no-change": "La mudifica fu ignurata pirchì nu foru appurtati canci ntô testu.", "postedit-confirmation-saved": "Lu canciamentu fu sarbatu.", - "edit-already-exists": "Mpussìbbili criari na nova pàggina.\nEsisti ggià.", + "edit-already-exists": "Mpussìbbili criari na pàggina nova.\nEsisti ggià.", "expensive-parserfunction-warning": "Accura: Sta pàggina cunteni troppi chiamati ê parser functions.\n\nAvissi a èssiri menu di $2, ô mumentu ci {{PLURAL:$1|nn'è $1|nni sunnu $1}}.", "expensive-parserfunction-category": "Pàggini cu troppi chiamati ê parser functions", "post-expand-template-inclusion-warning": "Accura: la diminzioni di li template nziriti è troppu granni.\nArcuni template non vènunu nziriti.", @@ -962,7 +962,7 @@ "recentchanges-label-bot": "Stu canciamentu fu fattu dû bot", "recentchanges-label-unpatrolled": "Stu canciamentu nun havi ancora statu virificatu", "recentchanges-label-plusminus": "La diminsioni dâ pàggina canciau di stu nùmmuru di bytes", - "recentchanges-legend-newpage": "$1 - pàggina nova", + "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (talìa [[Special:NewPages|li pàggini novi]])", "rcnotefrom": "Ccà sutta cci sunnu li canciamenti a pàrtiri dû $2 (ammustrati nzinu ô $1).", "rclistfrom": "Ammustra li canciamenti novi a pàrtiri di $3 $2", "rcshowhideminor": "$1 li canciamenti nichi", @@ -1682,7 +1682,6 @@ "import": "Mporta pàggini", "importinterwiki": "Mpurtazzioni transwiki", "import-interwiki-text": "Silizziunari un pruggettu wiki e lu tìtulu dâ pàggina a mpurtari. Li dati di pubbricazzioni e li noma di l'autura dî vari virsioni sunnu sarvati. Tutti l'opirazzioni di mpurtazzioni trans-wiki sunnu riggistrati ntô [[Special:Log/import|log di mpurtazzioni]].", - "import-interwiki-source": "Surgenti wiki/pàggina:", "import-interwiki-history": "Copia la ntera cronoluggìa di sta pàggina", "import-interwiki-templates": "Includi tutti li template", "import-interwiki-submit": "Mporta", diff --git a/languages/i18n/sl.json b/languages/i18n/sl.json index b6502815f3..923e8b225d 100644 --- a/languages/i18n/sl.json +++ b/languages/i18n/sl.json @@ -3105,6 +3105,8 @@ "log-name-pagelang": "Dnevnik spreminjanja jezika", "log-description-pagelang": "Dnevnik sprememb jezika strani.", "logentry-pagelang-pagelang": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} jezik strani $3 z jezika $4 na jezik $5.", + "default-skin-not-found": "Ups! Privzeta koža vašega wikija ($wgDefaultSkin), $1, ni na voljo.\n\nKot kaže, vaša namestitev vsebuje kože, navedene spodaj. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.\n\n$2\n\n; Če ste MediaWiki pravkar namestili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo skins/.\n:* Klonirajte enega od repozitorijev mediawiki/skins/* z git v mapo skins/ vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git.\n\n; Če ste MediaWiki pravkar posodobili:\n: MediaWiki 1.24 in novejši nameščenih kož več ne omogočijo samodejno (oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priročnik: Samodejno odkrivanje kož]). V LocalSettings.php lahko prilepite naslednje vrstice, da omogočite trenutno nameščene kože:\n\n
$3
\n\n; Če ste pravkar spremenili LocalSettings.php:\n: Ponovno preverite imena kož, če ste se morda zatipkali.", + "default-skin-not-found-no-skins": "Ups! Privzeta koža vašega wikija ($wgDefaultSkin), $1, ni na voljo.\n\nNimate nameščenih kož.\n\n; Če ste MediaWiki pravkar namestili ali posodobili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. MediaWiki 1.24 in novejši nimajo vključene nobene kože v glavnem repozitoriju. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo skins/.\n:* Klonirajte enega od repozitorijev mediawiki/skins/* z git v mapo skins/ vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.", "default-skin-not-found-row-enabled": "* $1 / $2 (omogočeno)", "default-skin-not-found-row-disabled": "* $1 / $2 ('''onemogočeno''')" } diff --git a/languages/i18n/sr-ec.json b/languages/i18n/sr-ec.json index ea4e522385..153cf07b3c 100644 --- a/languages/i18n/sr-ec.json +++ b/languages/i18n/sr-ec.json @@ -428,7 +428,7 @@ "createacct-another-submit": "Отвори још један налог", "createacct-benefit-heading": "{{SITENAME}} је направљен од стране људи као што сте ви.", "createacct-benefit-body1": "{{PLURAL:$1|измена}}", - "createacct-benefit-body2": "{{PLURAL:$1|страница}}", + "createacct-benefit-body2": "{{PLURAL:$1|страница|странице}}", "createacct-benefit-body3": "скорашњих {{PLURAL:$1|доприноса}}", "badretype": "Унете лозинке се не поклапају.", "userexists": "Корисничко име је заузето. Изаберите друго.", diff --git a/languages/i18n/tet.json b/languages/i18n/tet.json index 3c840fd5dd..cbb282c8db 100644 --- a/languages/i18n/tet.json +++ b/languages/i18n/tet.json @@ -263,6 +263,7 @@ "historyempty": "(mamuk)", "history-feed-item-nocomment": "$1 iha $2", "rev-delundel": "hatudu/subar", + "rev-showdeleted": "hatudu", "revisiondelete": "Halakon/restaurar versaun", "revdelete-show-file-submit": "Sin", "revdelete-hide-user": "Subar naran edita-na'in/IP", @@ -362,10 +363,17 @@ "recentchanges-label-minor": "Ne'e mudansa ki'ik", "recentchanges-label-bot": "Edita husi prosesu automátiku (\"bot\")", "rcshowhideminor": "$1 muda ki-ki'ik", + "rcshowhideminor-show": "Hatudu", "rcshowhidebots": "$1 bot sira", + "rcshowhidebots-show": "Hatudu", "rcshowhideliu": "$1 ema rejista", + "rcshowhideliu-show": "Hatudu", "rcshowhideanons": "$1 ema anónimu", + "rcshowhideanons-show": "Hatudu", + "rcshowhideanons-hide": "Subar", + "rcshowhidepatr-show": "Hatudu", "rcshowhidemine": "$1 ha'u-nia edita", + "rcshowhidemine-show": "Hatudu", "diff": "diferensa", "hist": "istória", "hide": "Hamsumik", diff --git a/languages/i18n/th.json b/languages/i18n/th.json index 6b6f134189..7c5dd9ed21 100644 --- a/languages/i18n/th.json +++ b/languages/i18n/th.json @@ -1479,7 +1479,9 @@ "wantedpages-badtitle": "ชื่อเรื่องไม่สมเหตุสมผลในเซตผลลัพธ์: $1", "wantedfiles": "ไฟล์ที่ต้องการ", "wantedfiletext-cat": "ไฟล์ต่อไปนี้มีการเรียกใช้แต่ไม่มีอยู่ ไฟล์จากคลังเก็บภาษาอื่นอาจแสดงรายการแม้จะมีอยู่ ผลบวกลวงใด ๆ จะถูกขีดฆ่า ยิ่งไปกว่านั้น หน้าที่ฝังตัวไฟล์ที่ไม่มีอยู่จะแสดงรายการใน [[:$1]]", + "wantedfiletext-cat-noforeign": "ไฟล์ต่อไปนี้ถูกใช้แต่ไม่มีไฟล์ นอกเหนือจากนี้ หน้าที่ฝังตัวไฟล์ที่ไม่มีอยู่แสดงรายการใน [[:$1]]", "wantedfiletext-nocat": "ไฟล์ต่อไปนี้มีการเรียกใช้แต่ไม่มีอยู่ ไฟล์จากคลังเก็บภาษาอื่นอาจแสดงรายการแม้จะมีอยู่ ผลบวกลวงใด ๆ จะถูกขีดฆ่า", + "wantedfiletext-nocat-noforeign": "ไฟล์ต่อไปนี้ถูกใช้แต่ไม่มีไฟล์", "wantedtemplates": "แม่แบบที่ต้องการ", "mostlinked": "หน้าที่มีการเชื่อมโยงหามากที่สุด", "mostlinkedcategories": "หมวดหมู่ที่มีการเชื่อมโยงหามากที่สุด", diff --git a/languages/i18n/tr.json b/languages/i18n/tr.json index 6471c13327..34a58bd455 100644 --- a/languages/i18n/tr.json +++ b/languages/i18n/tr.json @@ -1484,6 +1484,8 @@ "randomincategory": "Kategoriye göre rastgele sayfa", "randomincategory-invalidcategory": "\"$1\" geçerli bir kategori adı değil.", "randomincategory-nopages": "[[:Category:$1|$1]] kategorisinde hiç sayfa yok.", + "randomincategory-category": "Kategori:", + "randomincategory-legend": "Kategoriden rastgele sayfa", "randomredirect": "Rastgele yönlendirme", "randomredirect-nopages": "\"$1\" ad alanında hiç bir yönlendirme yok.", "statistics": "İstatistikler", @@ -1757,7 +1759,7 @@ "exbeforeblank": "Silinmeden önceki içerik: '$1'", "delete-confirm": "\"$1\" sil", "delete-legend": "sil", - "historywarning": "'''Uyarı:''' Silmek üzere olduğunuz sayfanın yaklaşık olarak $1 {{PLURAL:$1|sürüme|sürüme}} sahip bir geçmişi var:", + "historywarning": "Uyarı: Silmek üzere olduğunuz sayfanın yaklaşık olarak $1 sürüme sahip bir geçmişi var:", "confirmdeletetext": "Bu sayfayı veya dosyayı tüm geçmişi ile birlikte veritabanından kalıcı olarak silmek üzeresiniz.\nBu işlemden kaynaklı doğabilecek sonuçların farkında iseniz ve işlemin [[{{MediaWiki:Policy-url}}|Silme kurallarına]] uygun olduğuna eminseniz, işlemi onaylayın.", "actioncomplete": "İşlem tamamlandı", "actionfailed": "İşlem başarısız oldu", @@ -1773,6 +1775,7 @@ "delete-edit-reasonlist": "Silme nedenlerini değiştir", "delete-toobig": "Bu sayfa, $1 {{PLURAL:$1|tane değişiklik|tane değişiklik}} ile çok uzun bir geçmişe sahiptir.\nBöyle sayfaların silinmesi, {{SITENAME}} sitesini bozmamak için sınırlanmaktadır.", "delete-warning-toobig": "Bu sayfanın büyük bir değişiklik geçmişi var, $1 {{PLURAL:$1|revizyonun|revizyonun}} üzerinde.\nBunu silmek {{SITENAME}} işlemlerini aksatabilir;\ndikkatle devam edin.", + "deleteprotected": "Bu sayfayı silemezsiniz çünkü sayfa korumaya alınmış.", "deleting-backlinks-warning": "'''Uyarı:''' Silmek üzere olduğunuz sayfaya [[Özel:SayfayaBağlantılar/{{FULLPAGENAME}}|başka sayfalardan]] bağlantılar var veya sayfanın bazı bölümleri başka sayfalar tarafından alıntı olarak kullanılıyor.", "rollback": "değişiklikleri geri al", "rollback_short": "geri al", @@ -2153,6 +2156,8 @@ "import": "Sayfaları aktar", "importinterwiki": "Vikilerarası içe aktarım", "import-interwiki-text": "İçe aktarmak için bir viki ve sayfa başlığı seçin.\nRevizyon tarihleri ve yazarların isimleri korunacaktır.\nBütün vikilerarası içe aktarım eylemleri [[Special:Log/import|içe aktarım günlüğünde]] kaydedilmektedir.", + "import-interwiki-sourcewiki": "Kaynak viki:", + "import-interwiki-sourcepage": "Kaynak sayfa:", "import-interwiki-history": "Sayfanın tüm geçmiş sürümlerini kopyala", "import-interwiki-templates": "Tüm şablonları içer", "import-interwiki-submit": "Import", diff --git a/languages/i18n/uk.json b/languages/i18n/uk.json index 26a9de1e0a..c5fceb916f 100644 --- a/languages/i18n/uk.json +++ b/languages/i18n/uk.json @@ -49,7 +49,8 @@ "아라", "Calak", "Mykola Swarnyk", - "Milicevic01" + "Milicevic01", + "Lamsec" ] }, "tog-underline": "Підкреслювання посилань:", @@ -1494,8 +1495,6 @@ "randomincategory": "Випадкова сторінка у категорії", "randomincategory-invalidcategory": "\" $1 \" не є дійсним іменем категорії.", "randomincategory-nopages": "У [[:Category:$1]] немає сторінок.", - "randomincategory-selectcategory": "Перейти на випадкову сторінку з категорії: $1 $2.", - "randomincategory-selectcategory-submit": "Перейти", "randomredirect": "Випадкове перенаправлення", "randomredirect-nopages": "Простір назв «$1» не містить перенаправлень.", "statistics": "Статистика", @@ -1808,7 +1807,7 @@ "delete-toobig": "У цієї сторінки дуже довга історія редагувань, більше $1 {{PLURAL:$1|версії|версій|версій}}.\nВилучення таких сторінок було заборонене з метою уникнення порушень у роботі сайту {{SITENAME}}.", "delete-warning-toobig": "У цієї сторінки дуже довга історія редагувань, більше $1 {{PLURAL:$1|версії|версій|версій}}.\nЇї вилучення може призвести до порушень у роботі бази даних сайту {{SITENAME}};\nдійте обережно.", "deleting-backlinks-warning": "'''Попередження:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|інші сторінки]] посилаються або містять сторінку, яку ви маєте намір видалити.", - "rollback": "Відкинути редагування", + "rollback": "Відкинуто редагування", "rollback_short": "Відкинути", "rollbacklink": "відкинути", "rollbacklinkcount": "відкинути $1 {{PLURAL:$1|редагування|редагування|редагувань}}", @@ -2190,7 +2189,6 @@ "import": "Імпорт статей", "importinterwiki": "Міжвікі імпорт", "import-interwiki-text": "Вкажіть вікі й назву імпортованої сторінки.\nДати змін й імена авторів буде збережено.\nУсі операції міжвікі-імпорту реєструються в [[Special:Log/import|відповідному протоколі]].", - "import-interwiki-source": "Вікі/сторінка-джерело", "import-interwiki-history": "Копіювати всю історію змін цієї сторінки", "import-interwiki-templates": "Включити всі шаблони", "import-interwiki-submit": "Імпортувати", diff --git a/languages/i18n/wuu.json b/languages/i18n/wuu.json index 32dc1d2372..5a6c870f99 100644 --- a/languages/i18n/wuu.json +++ b/languages/i18n/wuu.json @@ -15,7 +15,8 @@ "Cwek", "Duolaimi", "Impersonator 1", - "LNDDYL" + "LNDDYL", + "TheChampionMan1234" ] }, "tog-underline": "鏈接下橫線:", @@ -42,7 +43,7 @@ "tog-shownumberswatching": "顯示關注人數", "tog-oldsig": "能界签名先望:", "tog-fancysig": "畀簽名當wiki文本(弗自動鏈接)", - "tog-uselivepreview": "用当场先望(试验)", + "tog-uselivepreview": "用當場先望(試驗)", "tog-forceeditsummary": "編要空白到提醒我", "tog-watchlisthideown": "關注表裏囥脫我所編", "tog-watchlisthidebots": "關注表裏囥脫機器人所編", @@ -231,12 +232,12 @@ "currentevents-url": "Project:箇阶段个事干", "disclaimers": "甮追問", "disclaimerpage": "Project:甮追問", - "edithelp": "编写帮助", + "edithelp": "編寫幫助", "mainpage": "封面", "mainpage-description": "封面", "policy-url": "Project:策略", - "portal": "社区台门", - "portal-url": "Project:社区台门", + "portal": "社區臺門", + "portal-url": "Project:社區臺門", "privacy": "隱私策略", "privacypage": "Project:隱私策略", "badaccess": "权限", @@ -974,7 +975,6 @@ "unusedtemplateswlh": "其他鏈接", "randompage": "随便望望", "randomincategory": "分類裏個隨便一頁", - "randomincategory-selectcategory-submit": "去", "statistics": "统计", "statistics-header-users": "用户资料", "statistics-users-active": "活跃用户", diff --git a/languages/i18n/yi.json b/languages/i18n/yi.json index 3e490e96bc..2635330590 100644 --- a/languages/i18n/yi.json +++ b/languages/i18n/yi.json @@ -2082,6 +2082,8 @@ "import": "אימפארטירן בלעטער", "importinterwiki": "אריבערוויקי אימפארט", "import-interwiki-text": "קלויבט אויס א וויקי און אן ארטיקל קעפל צו אימפארטירן.\nדי דאטעס און די נעמען פון די רעדאקטארן וועט ווערן געהיטן.\nאלע צווישנוויקי אימפארט אקציעס ווערן פארשריבן אינעם [[Special:Log/import|אימפארט לאג]].", + "import-interwiki-sourcewiki": "מקור וויקי:", + "import-interwiki-sourcepage": "מקור בלאַט:", "import-interwiki-history": "קאפירן אלע היסטאריע ווערסיעס פאר דעם בלאט", "import-interwiki-templates": "איינשילסן אלע מוסטערן", "import-interwiki-submit": "אימפארט", diff --git a/languages/i18n/zh-hant.json b/languages/i18n/zh-hant.json index 68278b4b7e..f9cff93ff3 100644 --- a/languages/i18n/zh-hant.json +++ b/languages/i18n/zh-hant.json @@ -60,9 +60,9 @@ "NigelSoft" ] }, - "tog-underline": "連結底線:", + "tog-underline": "連結顯示底線:", "tog-hideminor": "隱藏最近變更中的小修訂", - "tog-hidepatrolled": "隱藏最近更改中巡查過的編輯", + "tog-hidepatrolled": "隱藏最近變更中巡查過的編輯", "tog-newpageshidepatrolled": "隱藏新頁面清單中巡查過的頁面", "tog-extendwatchlist": "展開監視清單顯示包含最近以外的所有變更", "tog-usenewrc": "依最近變更與監視清單頁面分類顯示變更", @@ -1554,9 +1554,9 @@ "wantedpages": "需要的頁面", "wantedpages-badtitle": "結果集合中的標題無效:$1", "wantedfiles": "需要的檔案", - "wantedfiletext-cat": "以下檔案被使用,但不存在。外部儲存庫的檔案儘管現有,但可能會在此列出,任何此類的誤報將被剔除。此外,內嵌了不存在的檔案的網頁將在[[:$1]]列出。", + "wantedfiletext-cat": "下列檔案被時用,但檔案不存在。 外部儲存庫的檔案儘管存在,但此清單仍會列出。 這類誤報的項目會以 刪除線 標示。 另外,頁面內嵌檔案不存在會於清單 [[:$1]] 中顯示。", "wantedfiletext-cat-noforeign": "下列檔案已被使用但不存在。 除此之外,頁面已內嵌但不存在的檔案列於 [[:$1]]。", - "wantedfiletext-nocat": "以下檔案被使用,但不存在。外部儲存庫的文件儘管現有,但可能會在此列出,任何此類的誤報將被剔除。", + "wantedfiletext-nocat": "下列檔案被時用,但檔案不存在。 外部儲存庫的檔案儘管存在,但此清單仍會列出。 這類誤報的項目會以 刪除線 標示。", "wantedfiletext-nocat-noforeign": "下列檔案已被使用但不存在。", "wantedtemplates": "需要的樣版", "mostlinked": "被連結最多的頁面", @@ -1610,13 +1610,13 @@ "pager-newer-n": "較新 $1 筆", "pager-older-n": "較舊 $1 筆", "suppress": "監督", - "querypage-disabled": "此特殊頁面基於效能的原因已經被停用。", + "querypage-disabled": "此特殊頁面因考量效能問題已被停用。", "booksources": "圖書資源", "booksources-search-legend": "尋找圖書資源", "booksources-isbn": "國際標準書號:", "booksources-go": "執行", - "booksources-text": "以下是一份銷售新書或二手書的列表,並可能有{{GENDER:|你|妳|你}}正尋找的書的進一步訊息:", - "booksources-invalid-isbn": "提供的ISBN號碼並不正確,請檢查原始複製來源號碼是否有誤。", + "booksources-text": "下列清單包含其他銷售新書籍或二手書籍的網站連結,可會有你想尋找書籍的進一部資訊:", + "booksources-invalid-isbn": "您提供的 ISBN 不正確,請檢查複製的來源是否有誤。", "specialloguserlabel": "執行者:", "speciallogtitlelabel": "目標 (標題或使用者):", "log": "日誌", @@ -1649,7 +1649,7 @@ "deletedcontributions-title": "已刪除的使用者貢獻", "sp-deletedcontributions-contribs": "貢獻", "linksearch": "外部連結搜尋", - "linksearch-pat": "搜尋網址:", + "linksearch-pat": "搜尋關鍵字:", "linksearch-ns": "命名空間:", "linksearch-ok": "搜尋", "linksearch-text": "可使用萬用字元如 \"*.wikipedia.org\"。\n萬用字元必須使用在最上層網域,例如 \"*.org\".
\n支援的{{PLURAL:$2|通訊協定|通訊協定}}有:$1 (若未指定則預設使用 http:// 通訊協定)。", @@ -1705,9 +1705,9 @@ "emailuser-title-notarget": "E-mail 給使用者", "emailpage": "E-mail 給使用者", "emailpagetext": "您可以使用以下表格傳送電子郵件給這位 {{Gender:$1|使用者}}。\n您在 [[Special:Preferences|偏好設定]] 中所輸入的電子郵件位址將會作為郵件的 \"寄件人\",因此該使用者可直接回覆您。", - "defemailsubject": "來自使用者 \"$1\" 於 {{SITENAME}} 寄來的電子郵件", + "defemailsubject": "{{SITENAME}} 使用者 \"$1\" 寄來的電子郵件", "usermaildisabled": "使用者電子郵件已停用", - "usermaildisabledtext": "您不可傳送信件到這個 Wiki 上的其他使用者", + "usermaildisabledtext": "您不能傳送信件到這個 Wiki 上的其他使用者", "noemailtitle": "沒有電子郵件位址", "noemailtext": "此使用者尚未指定一個有效的電子郵件位址。", "nowikiemailtext": "此使用者選擇不接收其他使用者的信件。", @@ -1715,13 +1715,13 @@ "emailtarget": "輸入收件人使用者名稱", "emailusername": "使用者名稱:", "emailusernamesubmit": "送出", - "email-legend": "傳送電子郵件給另一位 {{SITENAME}} 使用者", + "email-legend": "傳送電子郵件給另一位 {{SITENAME}} 的使用者", "emailfrom": "寄件人:", "emailto": "收件人:", "emailsubject": "主旨:", "emailmessage": "訊息:", "emailsend": "傳送", - "emailccme": "傳送一份副本到我的電子郵件信箱。", + "emailccme": "傳送一份訊息副本到我的電子郵件信箱。", "emailccsubject": "您寄給 $1 的訊息副本:$2", "emailsent": "已寄出電子郵件", "emailsenttext": "已寄出您的電子郵件訊息。", @@ -1933,10 +1933,10 @@ "sp-contributions-userrights": "使用者權限管理", "sp-contributions-blocked-notice": "此使用者目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:", "sp-contributions-blocked-notice-anon": "此 IP 位址目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:", - "sp-contributions-search": "搜尋貢獻記錄", + "sp-contributions-search": "搜尋貢獻", "sp-contributions-username": "IP 位址或使用者名稱:", - "sp-contributions-toponly": "只顯示最新修訂版本的編輯", - "sp-contributions-newonly": "僅顯示建立頁面之編輯", + "sp-contributions-toponly": "只顯示最新修訂的編輯", + "sp-contributions-newonly": "只顯示建立頁面的編輯", "sp-contributions-submit": "搜尋", "whatlinkshere": "連入頁面", "whatlinkshere-title": "連結到 \"$1\" 的頁面", @@ -2040,7 +2040,7 @@ "block-log-flags-angry-autoblock": "加強自動封鎖已開啟", "block-log-flags-hiddenname": "隱藏使用者名稱", "range_block_disabled": "管理員可建立範圍封鎖的權限以被關閉。", - "ipb_expiry_invalid": "無效的終止時間。", + "ipb_expiry_invalid": "無效的期限。", "ipb_expiry_temp": "隱藏使用者名稱的封鎖不可設定期限。", "ipb_hide_invalid": "無法禁止顯示此帳號;它擁有超過 $1 次的編輯。", "ipb_already_blocked": "已經封鎖 \"$1\"。", @@ -2276,7 +2276,7 @@ "tooltip-t-upload": "上傳檔案", "tooltip-t-specialpages": "全部特殊頁面的列表", "tooltip-t-print": "此頁面的可列印版本", - "tooltip-t-permalink": "此頁面修訂的固定連結", + "tooltip-t-permalink": "此頁面修訂的靜態連結", "tooltip-ca-nstab-main": "檢視頁面內容", "tooltip-ca-nstab-user": "檢視使用者頁面", "tooltip-ca-nstab-media": "檢視媒體頁面", @@ -2313,7 +2313,7 @@ "anonymous": "{{SITENAME}} 的匿名{{PLURAL:$1|使用者}}", "siteuser": "{{SITENAME}} 使用者 $1", "anonuser": "{{SITENAME}} 匿名使用者 $1", - "lastmodifiedatby": "此頁由 $3 於 $1 $2 的最後更改。", + "lastmodifiedatby": "此頁面由 $3 於 $1 $2 做最後修改。", "othercontribs": "此頁面由 $1 所貢獻。", "others": "其他", "siteusers": "{{SITENAME}} {{PLURAL:$2|使用者}} $1", @@ -3010,7 +3010,7 @@ "dberr-usegoogle": "在現階段您可以嘗試透過 Google 搜尋。", "dberr-outofdate": "留意他們索引出來之內容可能不是最新的。", "dberr-cachederror": "這個是所要求出來的快取複本,可能不是最新的。", - "htmlform-invalid-input": "您輸入的內容存在問題", + "htmlform-invalid-input": "您的輸入的內容有問題。", "htmlform-select-badoption": "您所指定的值不是有效的選項。", "htmlform-int-invalid": "您所指定的值不是一個整數。", "htmlform-float-invalid": "您所指定的值不是一個數字。", @@ -3096,31 +3096,31 @@ "api-error-filename-tooshort": "檔案名稱過短。", "api-error-filetype-banned": "此檔案類型已禁止使用。", "api-error-filetype-banned-type": "$1{{PLURAL:$4|不是允許的檔案類型}}。 允許的{{PLURAL:$3|檔案類型是}} $2。", - "api-error-filetype-missing": "本檔案缺少了副檔名。", + "api-error-filetype-missing": "此檔案名稱缺少副檔名。", "api-error-hookaborted": "你試圖進行的修改被一個擴展鉤子終止。", - "api-error-http": "內部錯誤:無法連接到伺服器。", + "api-error-http": "內部錯誤:無法連線到伺服器。", "api-error-illegal-filename": "不允許使用的檔案名稱。", "api-error-internal-error": "內部錯誤:此 Wiki 在處理你的上傳時發生錯誤。", "api-error-invalid-file-key": "內部錯誤:於臨時儲存庫中查無檔案。", - "api-error-missingparam": "內部錯誤:請求中缺少參數。", - "api-error-missingresult": "內部錯誤:無法確定複製是否成功。", + "api-error-missingparam": "內部錯誤:請求缺少參數。", + "api-error-missingresult": "內部錯誤:無法辨識複製是否成功。", "api-error-mustbeloggedin": "您必須登入方可上傳檔案。", - "api-error-mustbeposted": "內部錯誤:請求需要 HTTP POST。", + "api-error-mustbeposted": "內部錯誤:請求需使用 HTTP POST。", "api-error-noimageinfo": "上傳成功,但伺服器沒有給我們任何該檔案的資訊。", - "api-error-nomodule": "內部錯誤:缺少上傳模塊集。", - "api-error-ok-but-empty": "內部錯誤:伺服器沒有響應。", - "api-error-overwrite": "不允許覆蓋現有檔案。", - "api-error-stashfailed": "內部錯誤:伺服器儲存臨時檔案失敗。", - "api-error-publishfailed": "內部錯誤:伺服器發佈臨時檔案失敗。", - "api-error-stasherror": "上載檔案存檔時出錯。", + "api-error-nomodule": "內部錯誤:缺少上傳模組集。", + "api-error-ok-but-empty": "內部錯誤:伺服器沒有回應。", + "api-error-overwrite": "不允許覆蓋已存在的檔案。", + "api-error-stashfailed": "內部錯誤:伺服器儲存暫存檔案失敗。", + "api-error-publishfailed": "內部錯誤:伺服器發佈暫存檔案失敗。", + "api-error-stasherror": "上載檔案至儲存庫時發生錯誤。", "api-error-timeout": "伺服器沒有在預期的時間內回應。", - "api-error-unclassified": "發生未知錯誤。", - "api-error-unknown-code": "未知錯誤:$1", - "api-error-unknown-error": "內部錯誤:嘗試上傳檔案時出錯。", + "api-error-unclassified": "發生不明錯誤。", + "api-error-unknown-code": "不明錯誤:\"$1\"。", + "api-error-unknown-error": "內部錯誤:嘗試上傳您的檔案時發生錯誤。", "api-error-unknown-warning": "不明警告:\"$1\"。", "api-error-unknownerror": "不明錯誤:\"$1\"。", "api-error-uploaddisabled": "此 Wiki 的上傳功能已停用。", - "api-error-verification-error": "本檔案可能已損壞,或副檔名錯誤。", + "api-error-verification-error": "此檔案可能已損壞,或副檔名錯誤。", "duration-seconds": "$1 秒", "duration-minutes": "$1 分鐘", "duration-hours": "$1 小時", @@ -3130,7 +3130,7 @@ "duration-decades": "$1{{PLURAL:$1|0 年|0 年}}", "duration-centuries": "$1 世紀", "duration-millennia": "$1 千年", - "rotate-comment": "順時針旋轉圖像$1{{PLURAL:$1|度}}", + "rotate-comment": "已順時針旋轉圖片 $1 {{PLURAL:$1|度|度}}", "limitreport-title": "分析器分析資料:", "limitreport-cputime": "CPU 使用時間", "limitreport-cputime-value": "$1 秒", diff --git a/maintenance/deleteEqualMessages.php b/maintenance/deleteEqualMessages.php index bd99845687..dbe9698217 100644 --- a/maintenance/deleteEqualMessages.php +++ b/maintenance/deleteEqualMessages.php @@ -30,8 +30,8 @@ require_once __DIR__ . '/Maintenance.php'; class DeleteEqualMessages extends Maintenance { public function __construct() { parent::__construct(); - $this->mDescription = "Deletes all pages in the MediaWiki namespace that are equal to ' - . 'the default message"; + $this->mDescription = 'Deletes all pages in the MediaWiki namespace that are equal to ' + . 'the default message'; $this->addOption( 'delete', 'Actually delete the pages (default: dry run)' ); $this->addOption( 'delete-talk', 'Don\'t leave orphaned talk pages behind during deletion' ); $this->addOption( 'lang-code', 'Check for subpages of this language code (default: root ' @@ -138,10 +138,10 @@ class DeleteEqualMessages extends Maintenance { return; } - $this->output( "\n{$messageInfo['relevantPages']} pages in the MediaWiki namespace ' . - 'override messages." ); - $this->output( "\n{$messageInfo['equalPages']} pages are equal to the default message ' . - '(+ {$messageInfo['equalPagesTalks']} talk pages).\n" ); + $this->output( "\n{$messageInfo['relevantPages']} pages in the MediaWiki namespace " + . "override messages." ); + $this->output( "\n{$messageInfo['equalPages']} pages are equal to the default message " + . "(+ {$messageInfo['equalPagesTalks']} talk pages).\n" ); if ( !$doDelete ) { $list = ''; diff --git a/maintenance/preprocessorFuzzTest.php b/maintenance/preprocessorFuzzTest.php index 9155623f10..cb55f0f263 100644 --- a/maintenance/preprocessorFuzzTest.php +++ b/maintenance/preprocessorFuzzTest.php @@ -159,6 +159,7 @@ class PPFuzzTest { /** * @param Title $title + * @return array */ function templateHook( $title ) { $titleText = $title->getPrefixedDBkey(); diff --git a/maintenance/updateCollation.php b/maintenance/updateCollation.php index 5bee7f9622..342ffbad65 100644 --- a/maintenance/updateCollation.php +++ b/maintenance/updateCollation.php @@ -221,6 +221,7 @@ TEXT; * assuming an ordering of cl_to, cl_type, cl_from * @param stdClass $row * @param DatabaseBase $dbw + * @return string */ function getBatchCondition( $row, $dbw ) { $fields = array( 'cl_to', 'cl_type', 'cl_from' ); diff --git a/resources/Resources.php b/resources/Resources.php index 99e1e4fd39..4a9827a2a0 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -117,6 +117,12 @@ return array( 'targets' => array( 'desktop', 'mobile' ), ), + 'mediawiki.skinning.content.externallinks' => array( + 'styles' => array( + 'resources/src/mediawiki.skinning/content.externallinks.css' => array( 'media' => 'screen' ), + ), + ), + /* jQuery */ 'jquery' => array( @@ -1500,6 +1506,7 @@ return array( 'es5-shim' => array( 'scripts' => array( 'resources/lib/es5-shim/es5-shim.js', + 'resources/src/polyfill-object-create.js', ), 'targets' => array( 'desktop', 'mobile' ), 'skipFunction' => 'resources/src/es5-skip.js', @@ -1530,7 +1537,7 @@ return array( 'skinStyles' => array( 'default' => 'resources/lib/oojs-ui/oojs-ui-apex.css', // FIXME As of July 2014, this is to be gone "in a couple of months". - 'minerva' => 'resources/lib/oojs-ui/oojs-ui-agora.css', + 'minerva' => 'resources/lib/oojs-ui/oojs-ui-minerva.css', ), 'messages' => array( 'ooui-outline-control-move-down', diff --git a/resources/lib/oojs-ui/i18n/ko.json b/resources/lib/oojs-ui/i18n/ko.json index 56884a8592..82d91ab359 100644 --- a/resources/lib/oojs-ui/i18n/ko.json +++ b/resources/lib/oojs-ui/i18n/ko.json @@ -16,7 +16,7 @@ "ooui-toolbar-more": "더 보기", "ooui-dialog-message-accept": "확인", "ooui-dialog-message-reject": "취소", - "ooui-dialog-process-error": "오류가 발생했습니다.", + "ooui-dialog-process-error": "무언가가 잘못되었습니다", "ooui-dialog-process-dismiss": "숨기기", - "ooui-dialog-process-retry": "다시 시도하세요." + "ooui-dialog-process-retry": "다시 시도하세요" } diff --git a/resources/lib/oojs-ui/i18n/sw.json b/resources/lib/oojs-ui/i18n/sw.json index f9c46d75fb..510e468d32 100644 --- a/resources/lib/oojs-ui/i18n/sw.json +++ b/resources/lib/oojs-ui/i18n/sw.json @@ -5,8 +5,11 @@ "Muddyb Blast Producer" ] }, - "ooui-dialog-action-close": "Funga", "ooui-outline-control-move-down": "Sogeza kipengee chini", "ooui-outline-control-move-up": "Sogeza kipengee juu", - "ooui-toolbar-more": "Zaidi" + "ooui-outline-control-remove": "Toa kitu", + "ooui-toolbar-more": "Zaidi", + "ooui-dialog-message-accept": "Sawa", + "ooui-dialog-message-reject": "Batilisha", + "ooui-dialog-process-retry": "Jaribu tena" } diff --git a/resources/lib/oojs-ui/images/textures/transparency.svg b/resources/lib/oojs-ui/images/textures/transparency.svg new file mode 100644 index 0000000000..63a0b57cfd --- /dev/null +++ b/resources/lib/oojs-ui/images/textures/transparency.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/resources/lib/oojs-ui/oojs-ui-agora.css b/resources/lib/oojs-ui/oojs-ui-agora.css deleted file mode 100644 index c29b2629f8..0000000000 --- a/resources/lib/oojs-ui/oojs-ui-agora.css +++ /dev/null @@ -1,337 +0,0 @@ -/*! - * OOjs UI v0.1.0-pre (d6008381aa) - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2014 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2014-08-21T23:45:56Z - */ -.oo-ui-dialog-content > .oo-ui-window-head, -.oo-ui-dialog-content > .oo-ui-window-body, -.oo-ui-dialog-content > .oo-ui-window-foot { - position: absolute; - left: 0; - right: 0; - overflow: hidden; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-dialog-content > .oo-ui-window-head { - z-index: 1; - top: 0; -} -.oo-ui-dialog-content > .oo-ui-window-body { - z-index: 2; - top: 0; - bottom: 0; -} -.oo-ui-dialog-content > .oo-ui-window-foot { - z-index: 1; - bottom: 0; -} -.oo-ui-dialog-content > .oo-ui-window-overlay { - z-index: 3; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog { - background-color: rgba(255, 255, 255, 0.5); - opacity: 0; - -webkit-transition: opacity 250ms ease-in-out; - -moz-transition: opacity 250ms ease-in-out; - -ms-transition: opacity 250ms ease-in-out; - -o-transition: opacity 250ms ease-in-out; - transition: opacity 250ms ease-in-out; -} -.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame { - top: 0; - bottom: 0; - background-color: #fff; - -webkit-transform: translate3d(0, -200%, 0); - -moz-transform: translate3d(0, -200%, 0); - -ms-transform: translate3d(0, -200%, 0); - -o-transform: translate3d(0, -200%, 0); - transform: translate3d(0, -200%, 0); - -webkit-transition: transform 250ms ease-in-out; - -moz-transition: transform 250ms ease-in-out; - -ms-transition: transform 250ms ease-in-out; - -o-transition: transform 250ms ease-in-out; - transition: transform 250ms ease-in-out; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready { - opacity: 1; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { - -webkit-transform: translate3d(0, 0, 0); - -moz-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - -o-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); -} -.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame { - border: solid 1px #ccc; - border-radius: 0.5em; - box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3); -} - -.oo-ui-messageDialog-title, -.oo-ui-messageDialog-message { - display: block; - text-align: center; - padding-top: 0.5em; -} -.oo-ui-messageDialog-title { - font-size: 1.5em; - line-height: 1em; - color: #000; -} -.oo-ui-messageDialog-message { - font-size: 0.9em; - line-height: 1.25em; - color: #666; -} -.oo-ui-messageDialog-message-verbose { - font-size: 1.1em; - line-height: 1.5em; - text-align: left; -} -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget { - border-right: solid 1px #e5e5e5; -} -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child { - border-right-width: 0; -} -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget { - border-bottom: solid 1px #e5e5e5; -} -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child { - border-bottom-width: 0; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label { - text-align: center; - line-height: 3.4em; - padding: 0 2em; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover { - background-color: rgba(0, 0, 0, 0.05); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget:active { - background-color: rgba(0, 0, 0, 0.1); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover { - background-color: rgba(8, 126, 204, 0.05); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active { - background-color: rgba(8, 126, 204, 0.1); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label { - font-weight: bold; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover { - background-color: rgba(118, 171, 54, 0.05); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active { - background-color: rgba(118, 171, 54, 0.1); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover { - background-color: rgba(212, 83, 83, 0.05); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active { - background-color: rgba(212, 83, 83, 0.1); -} - -.oo-ui-processDialog-content .oo-ui-window-head { - height: 3.35em; - border-bottom: 1px solid #dddddd; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-processDialog-content .oo-ui-window-body { - top: 3.35em; - padding: 2em 0; -} -.oo-ui-processDialog-navigation { - position: relative; - height: 3.35em; - padding: 0 1em; -} -.oo-ui-processDialog-location { - padding: 0.25em 0; - height: 3.35em; - cursor: default; - text-align: center; -} -.oo-ui-processDialog-title { - font-weight: bold; - line-height: 1.85em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button { - padding: 0.35em 0.75em; - min-width: 1.85em; - min-height: 1.85em; - border: 1px solid #dddddd; - border-radius: 4px; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label { - line-height: 1.85em; - padding: 0 1em; - font-weight: bold; - color: #777777; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon { - position: absolute; - margin-top: -0.125em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button { - vertical-align: middle; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button { - border: 1px solid transparent; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label { - color: #d11d13; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button { - padding: 0.75em 0.35em; - border: none; - border-radius: 0; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button { - background-color: #347bff; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label { - color: #ffffff; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon { - left: 0.5em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label { - padding-left: 2.25em; -} -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon { - right: 0.5em; -} -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label { - padding-right: 2.25em; -} -.oo-ui-processDialog-actions-other { - position: absolute; - bottom: 1em; -} -.oo-ui-processDialog > .oo-ui-window-frame { - min-height: 5em; -} -.oo-ui-processDialog-errors { - background-color: rgba(255, 255, 255, 0.9); - padding: 3em 3em 1.5em 3em; - text-align: center; -} -.oo-ui-processDialog-errors .oo-ui-buttonWidget { - margin: 2em 1em 2em 1em; -} -.oo-ui-processDialog-errors-title { - font-size: 1.5em; - color: #000; - margin-bottom: 2em; -} -.oo-ui-processDialog-error { - text-align: left; - margin: 1em; - padding: 1em; - border: solid 1px #ff9e9e; - background-color: #fff7f7; - border-radius: 0.25em; -} - -.oo-ui-buttonedElement.oo-ui-indicatedElement .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator, -.oo-ui-buttonedElement.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - width: 3.35em; - height: 3.35em; - background-size: 2em auto; -} - -.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout { - padding: 0 0 1em; -} - -.oo-ui-panelLayout { - padding: 1em 3.35em; -} - -.oo-ui-optionWidget { - padding: 0.8em 1em 0.8em 3.35em; - font-weight: bold; - border-bottom: 1px solid #dddddd; -} -.oo-ui-optionWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label { - padding-right: 1.5em; -} -.oo-ui-optionWidget-level-0 { - padding-left: 3.5em; -} -.oo-ui-optionWidget-level-0 .oo-ui-iconedElement-icon { - left: 1em; -} -.oo-ui-optionWidget-level-1 { - padding-left: 5em; -} -.oo-ui-optionWidget-level-1 .oo-ui-iconedElement-icon { - left: 2.5em; -} -.oo-ui-optionWidget-level-2 { - padding-left: 6.5em; -} -.oo-ui-optionWidget-level-2 .oo-ui-iconedElement-icon { - left: 4em; -} - -.oo-ui-buttonOptionWidget { - padding: 0; -} - -.oo-ui-lookupWidget-menu { - background-color: #fff; -} - -.oo-ui-menuItemWidget.oo-ui-optionWidget-selected { - background: #347bff; - color: #ffffff; -} -.oo-ui-menuItemWidget .oo-ui-iconedElement-icon { - background-size: 24px auto; -} - -.oo-ui-menuSectionItemWidget { - font-weight: normal; - color: #777777; - border: none; -} - -.oo-ui-textInputWidget input, -.oo-ui-textInputWidget textarea { - padding: .8em 1em; -} - -/* Icons */ -.oo-ui-icon-check { - background-image: /* @embed */ url(themes/agora/images/icons/check.svg); - background: #347bff; -} diff --git a/resources/lib/oojs-ui/oojs-ui-agora.rtl.css b/resources/lib/oojs-ui/oojs-ui-agora.rtl.css deleted file mode 100644 index fef9ba5a1e..0000000000 --- a/resources/lib/oojs-ui/oojs-ui-agora.rtl.css +++ /dev/null @@ -1,420 +0,0 @@ -/*! - * OOjs UI v0.1.0 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2014 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2014-07-22T21:39:24Z - */ -.oo-ui-dialog-content > .oo-ui-window-head, -.oo-ui-dialog-content > .oo-ui-window-body, -.oo-ui-dialog-content > .oo-ui-window-foot { - position: absolute; - left: 0; - right: 0; - overflow: hidden; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-dialog-content > .oo-ui-window-head { - top: 0; - z-index: 1; -} - -.oo-ui-dialog-content > .oo-ui-window-body { - top: 0; - bottom: 0; - z-index: 2; -} - -.oo-ui-dialog-content > .oo-ui-window-foot { - bottom: 0; - z-index: 1; -} - -.oo-ui-dialog-content > .oo-ui-window-overlay { - z-index: 3; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog { - background-color: rgba(255, 255, 255, 0.5); - opacity: 0; - -webkit-transition: opacity 250ms ease-in-out; - -moz-transition: opacity 250ms ease-in-out; - -ms-transition: opacity 250ms ease-in-out; - -o-transition: opacity 250ms ease-in-out; - transition: opacity 250ms ease-in-out; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame { - top: 1em; - bottom: 1em; - background-color: #fff; - -webkit-transform: translate3d(0, -200%, 0); - -moz-transform: translate3d(0, -200%, 0); - -ms-transform: translate3d(0, -200%, 0); - -o-transform: translate3d(0, -200%, 0); - transform: translate3d(0, -200%, 0); - -webkit-transition: transform 250ms ease-in-out; - -moz-transition: transform 250ms ease-in-out; - -ms-transition: transform 250ms ease-in-out; - -o-transition: transform 250ms ease-in-out; - transition: transform 250ms ease-in-out; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready { - opacity: 1; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { - -webkit-transform: translate3d(0, 0, 0); - -moz-transform: translate3d(0, 0, 0); - -ms-transform: translate3d(0, 0, 0); - -o-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); -} - -.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame { - border: solid 1px #ccc; - border-radius: 0.5em; - box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3); -} - -.oo-ui-messageDialog-title, -.oo-ui-messageDialog-message { - display: block; - padding-top: 0.5em; - text-align: center; -} - -.oo-ui-messageDialog-title { - font-size: 1.5em; - line-height: 1em; - color: #000; -} - -.oo-ui-messageDialog-message { - font-size: 0.9em; - line-height: 1.25em; - color: #666; -} - -.oo-ui-messageDialog-message-verbose { - font-size: 1.1em; - line-height: 1.5em; - text-align: right; -} - -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget { - border-left: solid 1px #e5e5e5; -} - -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child { - border-left-width: 0; -} - -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget { - border-bottom: solid 1px #e5e5e5; -} - -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child { - border-bottom-width: 0; -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label { - padding: 0 2em; - line-height: 3.4em; - text-align: center; -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover { - background-color: rgba(0, 0, 0, 0.05); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget:active { - background-color: rgba(0, 0, 0, 0.1); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover { - background-color: rgba(8, 126, 204, 0.05); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active { - background-color: rgba(8, 126, 204, 0.1); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label { - font-weight: bold; -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover { - background-color: rgba(118, 171, 54, 0.05); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active { - background-color: rgba(118, 171, 54, 0.1); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover { - background-color: rgba(212, 83, 83, 0.05); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active { - background-color: rgba(212, 83, 83, 0.1); -} - -.oo-ui-processDialog-content .oo-ui-window-head { - height: 3.35em; - border-bottom: 1px solid #dddddd; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-processDialog-content .oo-ui-window-body { - top: 3.35em; - padding: 2em 0; -} - -.oo-ui-processDialog-navigation { - position: relative; - height: 3.35em; - padding: 0 1em; -} - -.oo-ui-processDialog-location { - height: 3.35em; - padding: 0.25em 0; - text-align: center; - cursor: default; -} - -.oo-ui-processDialog-title { - font-weight: bold; - line-height: 1.85em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button { - min-width: 1.85em; - min-height: 1.85em; - padding-top: 0.75em; - padding-bottom: 0.75em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label { - padding: 0 1em; - line-height: 1.85em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon { - position: absolute; - margin-top: -0.125em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed { - margin: 0.75em 0.75em 0.75em 0; - border: solid 1px #ccc; - border-radius: 0.25em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button { - padding: 0; - vertical-align: middle; -} - -.oo-ui-processDialog-actions-safe.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button { - margin: 0.75em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover { - background-color: rgba(0, 0, 0, 0.05); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active { - background-color: rgba(0, 0, 0, 0.1); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed { - margin: 0.75em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button { - /* Adjust for border so text aligns with title */ - - margin: -1px; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover { - background-color: rgba(8, 126, 204, 0.05); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active { - background-color: rgba(8, 126, 204, 0.1); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label { - font-weight: bold; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover { - background-color: rgba(118, 171, 54, 0.05); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active { - background-color: rgba(118, 171, 54, 0.1); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover { - background-color: rgba(212, 83, 83, 0.05); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active { - background-color: rgba(212, 83, 83, 0.1); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon { - right: 0.5em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label { - padding-right: 2.25em; -} - -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon { - left: 0.5em; -} - -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label { - padding-left: 2.25em; -} - -.oo-ui-processDialog > .oo-ui-window-frame { - min-height: 5em; -} - -.oo-ui-processDialog-errors { - padding: 3em 3em 1.5em 3em; - text-align: center; - background-color: rgba(255, 255, 255, 0.9); -} - -.oo-ui-processDialog-errors .oo-ui-buttonWidget { - margin: 2em 1em 2em 1em; -} - -.oo-ui-processDialog-errors-title { - margin-bottom: 2em; - font-size: 1.5em; - color: #000; -} - -.oo-ui-processDialog-error { - padding: 1em; - margin: 1em; - text-align: right; - background-color: #fff7f7; - border: solid 1px #ff9e9e; - border-radius: 0.25em; -} - -.oo-ui-buttonedElement.oo-ui-indicatedElement .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator, -.oo-ui-buttonedElement.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - width: 3.35em; - height: 3.35em; - background-size: 2em auto; -} - -.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout { - padding: 0 0 1em; -} - -.oo-ui-optionWidget { - padding: 0.8em 3.35em 0.8em 1em; - font-weight: bold; - border-bottom: 1px solid #dddddd; -} - -.oo-ui-optionWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label { - padding-left: 1.5em; -} - -.oo-ui-optionWidget-level-0 { - padding-right: 3.5em; -} - -.oo-ui-optionWidget-level-0 .oo-ui-iconedElement-icon { - right: 1em; -} - -.oo-ui-optionWidget-level-1 { - padding-right: 5em; -} - -.oo-ui-optionWidget-level-1 .oo-ui-iconedElement-icon { - right: 2.5em; -} - -.oo-ui-optionWidget-level-2 { - padding-right: 6.5em; -} - -.oo-ui-optionWidget-level-2 .oo-ui-iconedElement-icon { - right: 4em; -} - -.oo-ui-buttonOptionWidget { - padding: 0; -} - -.oo-ui-lookupWidget-menu { - background-color: #fff; -} - -.oo-ui-menuItemWidget.oo-ui-optionWidget-selected { - color: #ffffff; - background: #347bff; -} - -.oo-ui-menuSectionItemWidget { - font-weight: normal; - color: #777777; - border: none; -} - -.oo-ui-textInputWidget input, -.oo-ui-textInputWidget textarea { - padding: .8em 1em; -} - -/* Icons */ - -.oo-ui-icon-check { - background: #347bff; - background-image: /* @embed */ url(themes/agora/images/icons/check.svg); -} \ No newline at end of file diff --git a/resources/lib/oojs-ui/oojs-ui-apex.css b/resources/lib/oojs-ui/oojs-ui-apex.css index a1c96ccd97..02d17b005f 100644 --- a/resources/lib/oojs-ui/oojs-ui-apex.css +++ b/resources/lib/oojs-ui/oojs-ui-apex.css @@ -1,970 +1,11 @@ /*! - * OOjs UI v0.1.0-pre (d6008381aa) + * OOjs UI v0.1.0-pre (43f379c884) * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2014 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2014-08-21T23:45:56Z + * Date: 2014-08-28T21:49:12Z */ -.oo-ui-dialog-content > .oo-ui-window-head, -.oo-ui-dialog-content > .oo-ui-window-body, -.oo-ui-dialog-content > .oo-ui-window-foot { - position: absolute; - left: 0; - right: 0; - overflow: hidden; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-dialog-content > .oo-ui-window-head { - z-index: 1; - top: 0; -} -.oo-ui-dialog-content > .oo-ui-window-body { - z-index: 2; - top: 0; - bottom: 0; - box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25); -} -.oo-ui-dialog-content > .oo-ui-window-foot { - z-index: 1; - bottom: 0; -} -.oo-ui-dialog-content > .oo-ui-window-overlay { - z-index: 3; -} - -.oo-ui-toolbar-bar { - border-bottom: solid 1px #ccc; - background: #f8fbfd; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb'); - background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #f1f7fb)); - background-image: -webkit-linear-gradient(top, #ffffff 0%, #f1f7fb 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #f1f7fb 100%); - background-image: -ms-linear-gradient(top, #ffffff 0%, #f1f7fb 100%); - background-image: -o-linear-gradient(top, #ffffff 0%, #f1f7fb 100%); - background-image: linear-gradient(top, #ffffff 0%, #f1f7fb 100%); -} -.oo-ui-toolbar-bar .oo-ui-toolbar-bar { - border: none; - background: none; -} -.oo-ui-toolbar-shadow { - background-image: /* @embed */ url(images/toolbar-shadow.png); - bottom: -9px; - height: 9px; - opacity: 0.125; - -webkit-transition: opacity 500ms ease-in-out; - -moz-transition: opacity 500ms ease-in-out; - -ms-transition: opacity 500ms ease-in-out; - -o-transition: opacity 500ms ease-in-out; - transition: opacity 500ms ease-in-out; -} - -.oo-ui-toolGroup { - border-radius: 0.25em; - border: solid 1px transparent; - -webkit-transition: border-color 300ms ease-in-out; - -moz-transition: border-color 300ms ease-in-out; - -ms-transition: border-color 300ms ease-in-out; - -o-transition: border-color 300ms ease-in-out; - transition: border-color 300ms ease-in-out; -} -.oo-ui-toolGroup.oo-ui-widget-enabled:hover { - border-color: rgba(0, 0, 0, 0.1); -} -.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title { - color: #000; -} - -.oo-ui-window-isolated.oo-ui-window-content { - font-family: sans-serif; - font-size: 0.8em; - background: transparent; -} -.oo-ui-window-isolated.oo-ui-window-overlay { - font-family: sans-serif; - line-height: 1.5em; - font-size: 1em; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog { - background-color: rgba(255, 255, 255, 0.5); - opacity: 0; - -webkit-transition: opacity 250ms ease-in-out; - -moz-transition: opacity 250ms ease-in-out; - -ms-transition: opacity 250ms ease-in-out; - -o-transition: opacity 250ms ease-in-out; - transition: opacity 250ms ease-in-out; -} -.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame { - top: 1em; - bottom: 1em; - background-color: #fff; - -webkit-transform: scale(0.5); - -moz-transform: scale(0.5); - -ms-transform: scale(0.5); - -o-transform: scale(0.5); - transform: scale(0.5); - -webkit-transition: all 250ms ease-in-out; - -moz-transition: all 250ms ease-in-out; - -ms-transition: all 250ms ease-in-out; - -o-transition: all 250ms ease-in-out; - transition: all 250ms ease-in-out; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready { - opacity: 1; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); -} -.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame { - border: solid 1px #ccc; - border-radius: 0.5em; - box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3); -} - -.oo-ui-messageDialog-content .oo-ui-window-body { - box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33); -} -.oo-ui-messageDialog-title, -.oo-ui-messageDialog-message { - display: block; - text-align: center; - padding-top: 0.5em; -} -.oo-ui-messageDialog-title { - font-size: 1.5em; - line-height: 1em; - color: #000; -} -.oo-ui-messageDialog-message { - font-size: 0.9em; - line-height: 1.25em; - color: #666; -} -.oo-ui-messageDialog-message-verbose { - font-size: 1.1em; - line-height: 1.5em; - text-align: left; -} -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget { - border-right: solid 1px #e5e5e5; -} -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child { - border-right-width: 0; -} -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget { - border-bottom: solid 1px #e5e5e5; -} -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child { - border-bottom-width: 0; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label { - text-align: center; - line-height: 3.4em; - padding: 0 2em; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover { - background-color: rgba(0, 0, 0, 0.05); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget:active { - background-color: rgba(0, 0, 0, 0.1); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover { - background-color: rgba(8, 126, 204, 0.05); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active { - background-color: rgba(8, 126, 204, 0.1); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label { - font-weight: bold; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover { - background-color: rgba(118, 171, 54, 0.05); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active { - background-color: rgba(118, 171, 54, 0.1); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover { - background-color: rgba(212, 83, 83, 0.05); -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active { - background-color: rgba(212, 83, 83, 0.1); -} - -.oo-ui-processDialog-content .oo-ui-window-head { - height: 3.4em; -} -.oo-ui-processDialog-content .oo-ui-window-body { - top: 3.4em; - box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33); -} -.oo-ui-processDialog-navigation { - position: relative; - height: 3.4em; - padding: 0 1em; -} -.oo-ui-processDialog-location { - padding: 0.25em 0; - height: 1.9em; - cursor: default; - text-align: center; -} -.oo-ui-processDialog-title { - font-weight: bold; - line-height: 1.9em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button { - padding-top: 0.75em; - padding-bottom: 0.75em; - min-width: 1.9em; - min-height: 1.9em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label { - line-height: 1.9em; - padding: 0 1em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon { - position: absolute; - margin-top: -0.125em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed { - margin: 0.75em 0 0.75em 0.75em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button { - padding: 0; - vertical-align: middle; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover { - background-color: rgba(0, 0, 0, 0.05); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active { - background-color: rgba(0, 0, 0, 0.1); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed { - margin: 0.75em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button { - /* Adjust for border so text aligns with title */ - margin: -1px; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover { - background-color: rgba(8, 126, 204, 0.05); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active { - background-color: rgba(8, 126, 204, 0.1); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label { - font-weight: bold; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover { - background-color: rgba(118, 171, 54, 0.05); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active { - background-color: rgba(118, 171, 54, 0.1); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover { - background-color: rgba(212, 83, 83, 0.05); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active { - background-color: rgba(212, 83, 83, 0.1); -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon { - left: 0.5em; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label { - padding-left: 2.25em; -} -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon { - right: 0.5em; -} -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label { - padding-right: 2.25em; -} -.oo-ui-processDialog > .oo-ui-window-frame { - min-height: 5em; -} -.oo-ui-processDialog-errors { - background-color: rgba(255, 255, 255, 0.9); - padding: 3em 3em 1.5em 3em; - text-align: center; -} -.oo-ui-processDialog-errors .oo-ui-buttonWidget { - margin: 2em 1em 2em 1em; -} -.oo-ui-processDialog-errors-title { - font-size: 1.5em; - color: #000; - margin-bottom: 2em; -} -.oo-ui-processDialog-error { - text-align: left; - margin: 1em; - padding: 1em; - border: solid 1px #ff9e9e; - background-color: #fff7f7; - border-radius: 0.25em; -} - -.oo-ui-buttonedElement > .oo-ui-buttonedElement-button { - color: #333; -} -.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator, -.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - opacity: 0.8; - width: 1.9em; - height: 1.9em; -} -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */ - /*.oo-ui-transition(opacity 200ms);*/ -} -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-iconedElement-icon, -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-iconedElement-icon { - opacity: 1; -} -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-labeledElement-label, -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-labeledElement-label { - color: #000; -} -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - color: #333; -} -.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - color: #087ecc; -} -.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - color: #76ab36; -} -.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - color: #d45353; -} -.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - opacity: 0.2; -} -.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - color: #ccc; -} -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button { - margin: 0.1em 0; - padding: 0.2em 0.8em; - border-radius: 0.3em; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); - border: 1px #c9c9c9 solid; - -webkit-transition: border-color 100ms ease-in-out; - -moz-transition: border-color 100ms ease-in-out; - -ms-transition: border-color 100ms ease-in-out; - -o-transition: border-color 100ms ease-in-out; - transition: border-color 100ms ease-in-out; - background: #eeeeee; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd'); - background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd)); - background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%); -} -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:hover, -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:focus { - border-color: #aaa; -} -.oo-ui-buttonedElement-framed.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button, -.oo-ui-buttonedElement-framed.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button { - box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07); - color: black; - border-color: #c9c9c9; - background: #eeeeee; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff'); - background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff)); - background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%); -} -.oo-ui-buttonedElement-framed.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - margin-left: -0.5em; - margin-right: -0.5em; -} -.oo-ui-buttonedElement-framed.oo-ui-iconedElement.oo-ui-labeledElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - margin-left: -0.5em; - margin-right: 0.3em; -} -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button { - border: solid 1px #a6cee1; - background: #cde7f4; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee'); - background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee)); - background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); - background-image: -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); - background-image: -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); - background-image: -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); - background-image: linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); -} -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:hover, -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:focus { - border-color: #9dc2d4; -} -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button, -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button { - border: solid 1px #a6cee1; - background: #cde7f4; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa'); - background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa)); - background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); -} -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button { - border: solid 1px #b8d892; - background: #daf0be; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a'); - background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a)); - background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%); - background-image: -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%); - background-image: -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%); - background-image: -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%); - background-image: linear-gradient(top, #f0fbe1 0%, #c3e59a 100%); -} -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:hover, -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:focus { - border-color: #adcb89; -} -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button, -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button { - border: solid 1px #b8d892; - background: #daf0be; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1'); - background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1)); - background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%); - background-image: -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%); - background-image: -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%); - background-image: -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%); - background-image: linear-gradient(top, #c3e59a 0%, #f0fbe1 100%); -} -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button { - color: #d45353; -} -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button { - opacity: 0.5; - box-shadow: none; - color: #333; - background: #eee; - border-color: #ccc; -} -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:hover, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button:hover, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button:hover, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:focus, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button:focus, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button:focus { - border-color: #ccc; - box-shadow: none; -} - -.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout { - padding: 1.5em; -} -.oo-ui-bookletLayout-outlinePanel { - border-right: solid 1px #ddd; -} -.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget { - box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25); -} - -.oo-ui-fieldLayout-disabled .oo-ui-labeledElement-label { - color: #ccc; -} - -.oo-ui-fieldsetLayout { - border: none; -} -.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label { - font-size: 1.5em; -} - -.oo-ui-panelLayout-padded { - padding: 1.25em; -} - -.oo-ui-barToolGroup .oo-ui-tool { - margin: -1px 0 -1px -1px; - border: solid 1px transparent; -} -.oo-ui-barToolGroup .oo-ui-tool:first-child { - border-top-left-radius: 0.25em; - border-bottom-left-radius: 0.25em; -} -.oo-ui-barToolGroup .oo-ui-tool:last-child { - margin-right: -1px; - border-top-right-radius: 0.25em; - border-bottom-right-radius: 0.25em; -} -.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.8; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover { - border-color: rgba(0, 0, 0, 0.2); -} -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled { - border-color: rgba(0, 0, 0, 0.2); - box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07); - background: #f8fbfd; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff'); - background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff)); - background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%); -} -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled { - border-left-color: rgba(0, 0, 0, 0.1); -} -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.2; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.8; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 1; -} -.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.2; -} - -.oo-ui-listToolGroup.oo-ui-popupToolGroup-active { - border-color: rgba(0, 0, 0, 0.2); -} -.oo-ui-listToolGroup .oo-ui-tool { - border: solid 1px transparent; - margin: -1px 0; -} -.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled { - border-color: rgba(0, 0, 0, 0.1); - box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07); - background: #f8fbfd; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff'); - background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff)); - background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%); -} -.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled { - border-top-color: rgba(0, 0, 0, 0.1); -} -.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover { - border-color: rgba(0, 0, 0, 0.2); -} -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover { - border-color: rgba(0, 0, 0, 0.2); -} -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.8; -} -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 1; -} -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title { - color: #ccc; -} -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.2; -} -.oo-ui-listToolGroup.oo-ui-widget-disabled { - color: #ccc; -} -.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator, -.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon { - opacity: 0.2; -} - -.oo-ui-menuToolGroup { - border-color: rgba(0, 0, 0, 0.1); -} -.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover { - border-color: rgba(0, 0, 0, 0.2); -} -.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active { - border-color: rgba(0, 0, 0, 0.25); -} -.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover { - background-color: #e1f3ff; -} -.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title { - color: #ccc; -} -.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.2; -} -.oo-ui-menuToolGroup.oo-ui-widget-disabled { - color: #ccc; - border-color: rgba(0, 0, 0, 0.05); -} -.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator, -.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon { - opacity: 0.2; -} - -.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator, -.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon { - opacity: 0.8; -} -.oo-ui-popupToolGroup .oo-ui-toolGroup-tools { - border: solid 1px #ccc; - background-color: white; - box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25); -} -.oo-ui-popupToolGroup-active.oo-ui-widget-enabled { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07); - background: #f8fbfd; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff'); - background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff)); - background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%); -} - -.oo-ui-optionWidget { - padding: 0.5em 2em 0.5em 3em; -} -.oo-ui-optionWidget-highlighted { - background-color: #e1f3ff; -} -.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected { - background-color: #a7dcff; -} -.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed { - background-color: #a7dcff; -} -.oo-ui-optionWidget.oo-ui-widget-disabled { - color: #ccc; -} - -.oo-ui-menuWidget { - background: #fff; - margin-top: -1px; - border: solid 1px #ccc; - border-radius: 0 0 0.25em 0.25em; - box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2); -} - -.oo-ui-popupWidget-popup { - border: solid 1px #ccc; - border-radius: 0.25em; - background-color: #fff; - box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2); -} -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor { - background-image: /* @embed */ url(images/anchor.svg); - width: 15px; - height: 8px; - margin-left: -7px; -} -.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup { - -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out; - -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out; - -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out; - -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out; - transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out; -} -.oo-ui-popupWidget-body { - box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25); -} - -.oo-ui-buttonGroupWidget { - display: inline-block; - white-space: nowrap; -} - -.oo-ui-buttonOptionWidget { - padding: 0; -} -.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected, -.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed, -.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted { - background-color: transparent; -} - -.oo-ui-buttonSelectWidget { - border-radius: 0.3em; -} -.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button { - border-radius: 0; - margin-left: -1px; -} -.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonedElement-button { - border-bottom-left-radius: 0.3em; - border-top-left-radius: 0.3em; - margin-left: 0; -} -.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonedElement-button { - border-bottom-right-radius: 0.3em; - border-top-right-radius: 0.3em; -} - -.oo-ui-comboBoxWidget-handle { - border: solid 1px rgba(0, 0, 0, 0.1); - border-radius: 0.25em; -} -.oo-ui-comboBoxWidget-handle:hover { - border-color: rgba(0, 0, 0, 0.2); -} -.oo-ui-comboBoxWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator, -.oo-ui-comboBoxWidget-empty .oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator { - cursor: default; - opacity: 0.2; -} - -.oo-ui-inlineMenuWidget-handle { - border: solid 1px rgba(0, 0, 0, 0.1); - border-radius: 0.25em; -} -.oo-ui-inlineMenuWidget-handle:hover { - border-color: rgba(0, 0, 0, 0.2); -} -.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator, -.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon { - opacity: 0.8; -} -.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle { - color: #ccc; - text-shadow: 0 1px 1px #fff; - border-color: #ddd; - background-color: #f3f3f3; -} -.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator { - opacity: 0.2; -} - -.oo-ui-menuItemWidget.oo-ui-optionWidget-selected { - background-color: transparent; -} -.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted, -.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected { - background-color: #e1f3ff; -} - -.oo-ui-menuSectionItemWidget { - padding: 0.33em 0.75em; - color: #888; -} - -.oo-ui-outlineControlsWidget { - background-color: #fff; -} -.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon { - opacity: 0.2; -} - -.oo-ui-outlineItemWidget { - font-size: 1.1em; -} -.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label { - padding-right: 1.5em; -} -.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator { - opacity: 0.5; -} -.oo-ui-outlineItemWidget-level-0 { - padding-left: 3.5em; -} -.oo-ui-outlineItemWidget-level-0 .oo-ui-iconedElement-icon { - left: 1em; -} -.oo-ui-outlineItemWidget-level-1 { - padding-left: 5em; -} -.oo-ui-outlineItemWidget-level-1 .oo-ui-iconedElement-icon { - left: 2.5em; -} -.oo-ui-outlineItemWidget-level-2 { - padding-left: 6.5em; -} -.oo-ui-outlineItemWidget-level-2 .oo-ui-iconedElement-icon { - left: 4em; -} -.oo-ui-selectWidget-depressed .oo-ui-outlineItemWidget.oo-ui-optionWidget-selected { - background-color: #a7dcff; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); -} -.oo-ui-outlineItemWidget.oo-ui-flaggableElement-important { - font-weight: bold; -} -.oo-ui-outlineItemWidget.oo-ui-flaggableElement-placeholder { - font-style: italic; -} -.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-iconedElement-icon { - opacity: 0.5; -} -.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-labeledElement-label { - color: #777; -} - -.oo-ui-searchWidget-query { - box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2); -} - -.oo-ui-textInputWidget { - width: 20em; -} -.oo-ui-textInputWidget input, -.oo-ui-textInputWidget textarea { - padding: 0.5em; - font-size: 1em; - font-family: sans-serif; - background-color: #fff; - border: solid 1px #ccc; - box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd; - border-radius: 0.25em; - -webkit-transition: border-color 200ms, box-shadow 200ms; - -moz-transition: border-color 200ms, box-shadow 200ms; - -ms-transition: border-color 200ms, box-shadow 200ms; - -o-transition: border-color 200ms, box-shadow 200ms; - transition: border-color 200ms, box-shadow 200ms; -} -.oo-ui-textInputWidget-decorated input, -.oo-ui-textInputWidget-decorated textarea { - padding-left: 2em; -} -.oo-ui-textInputWidget-icon { - width: 2em; -} -.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus, -.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus { - outline: none; - border-color: #a7dcff; - box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white; -} -.oo-ui-textInputWidget input[readonly], -.oo-ui-textInputWidget textarea[readonly] { - color: #777; - text-shadow: 0 1px 1px #fff; -} -.oo-ui-textInputWidget-pending input, -.oo-ui-textInputWidget-pending textarea { - background-color: transparent; -} -.oo-ui-textInputWidget.oo-ui-widget-disabled input, -.oo-ui-textInputWidget.oo-ui-widget-disabled input:focus, -.oo-ui-textInputWidget.oo-ui-widget-disabled textarea, -.oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus { - color: #ccc; - text-shadow: 0 1px 1px #fff; - border-color: #ddd; - background-color: #f3f3f3; -} -.oo-ui-textInputWidget .oo-ui-iconedElement-icon, -.oo-ui-textInputWidget .oo-ui-indicatedElement-indicator { - opacity: 0.8; -} -.oo-ui-textInputWidget.oo-ui-iconedElement input, -.oo-ui-textInputWidget.oo-ui-iconedElement textarea { - padding-left: 2em; -} -.oo-ui-textInputWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon { - width: 2em; - background-position: right center; -} -.oo-ui-textInputWidget.oo-ui-indicatedElement input, -.oo-ui-textInputWidget.oo-ui-indicatedElement textarea { - padding-right: 1.5em; -} -.oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator { - width: 1.5em; - background-position: left center; -} - -.oo-ui-toggleSwitchWidget { - border-radius: 1em; - box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd; - border: solid 1px #ccc; - background: #eeeeee; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff'); - background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff)); - background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%); -} -.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled { - opacity: 0.5; -} -.oo-ui-toggleSwitchWidget-grip { - border-radius: 1em; - box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1); - border: 1px #c9c9c9 solid; - background: #eeeeee; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd'); - background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd)); - background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%); -} -.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover, -.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip { - border-color: #aaa; -} -.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow { - border-radius: 1em; - box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07); - background: #cde7f4; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa'); - background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa)); - background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); -} -.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow { - opacity: 1; -} -.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow { - display: block; - opacity: 0; -} +.oo-ui-rtl{direction:rtl}.oo-ui-ltr{direction:ltr}.oo-ui-buttonedElement>.oo-ui-buttonedElement-button{cursor:pointer;display:inline-block;vertical-align:middle;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.oo-ui-buttonedElement>.oo-ui-buttonedElement-button>.oo-ui-iconedElement-icon{display:none}.oo-ui-buttonedElement>.oo-ui-buttonedElement-button>.oo-ui-indicatedElement-indicator{display:none}.oo-ui-buttonedElement.oo-ui-widget-disabled>.oo-ui-buttonedElement-button{cursor:default}.oo-ui-buttonedElement.oo-ui-indicatedElement>.oo-ui-buttonedElement-button>.oo-ui-indicatedElement-indicator,.oo-ui-buttonedElement.oo-ui-iconedElement>.oo-ui-buttonedElement-button>.oo-ui-iconedElement-icon{display:inline-block;vertical-align:middle;background-position:center center;background-repeat:no-repeat}.oo-ui-buttonedElement-frameless{display:inline-block;position:relative}.oo-ui-buttonedElement-frameless>.oo-ui-buttonedElement-button>.oo-ui-labeledElement-label{display:inline-block;vertical-align:middle}.oo-ui-buttonedElement-framed>.oo-ui-buttonedElement-button{display:inline-block;vertical-align:top;text-align:center}.oo-ui-buttonedElement-framed>.oo-ui-buttonedElement-button>.oo-ui-labeledElement-label{display:inline-block;vertical-align:middle}.oo-ui-buttonedElement-framed.oo-ui-widget-disabled>.oo-ui-buttonedElement-button,.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active>.oo-ui-buttonedElement-button,.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed>.oo-ui-buttonedElement-button{cursor:default}.oo-ui-buttonedElement>.oo-ui-buttonedElement-button{color:#333}.oo-ui-buttonedElement>.oo-ui-buttonedElement-button>.oo-ui-iconedElement-icon{margin-left:0}.oo-ui-buttonedElement>.oo-ui-buttonedElement-button>.oo-ui-indicatedElement-indicator{margin-right:-.75em}.oo-ui-buttonedElement.oo-ui-indicatedElement>.oo-ui-buttonedElement-button>.oo-ui-indicatedElement-indicator,.oo-ui-buttonedElement.oo-ui-iconedElement>.oo-ui-buttonedElement-button>.oo-ui-iconedElement-icon{opacity:.8;width:1.9em;height:1.9em}.oo-ui-buttonedElement-frameless>.oo-ui-buttonedElement-button:hover>.oo-ui-iconedElement-icon,.oo-ui-buttonedElement-frameless>.oo-ui-buttonedElement-button:focus>.oo-ui-iconedElement-icon{opacity:1}.oo-ui-buttonedElement-frameless>.oo-ui-buttonedElement-button:hover>.oo-ui-labeledElement-label,.oo-ui-buttonedElement-frameless>.oo-ui-buttonedElement-button:focus>.oo-ui-labeledElement-label{color:#000}.oo-ui-buttonedElement-frameless>.oo-ui-buttonedElement-button>.oo-ui-labeledElement-label{color:#333;margin-left:.25em}.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-primary>.oo-ui-buttonedElement-button>.oo-ui-labeledElement-label{color:#087ecc}.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-constructive>.oo-ui-buttonedElement-button>.oo-ui-labeledElement-label{color:#76ab36}.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-destructive>.oo-ui-buttonedElement-button>.oo-ui-labeledElement-label{color:#d45353}.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled>.oo-ui-buttonedElement-button>.oo-ui-iconedElement-icon{opacity:.2}.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled>.oo-ui-buttonedElement-button>.oo-ui-labeledElement-label{color:#ccc}.oo-ui-buttonedElement-framed>.oo-ui-buttonedElement-button{margin:.1em 0;padding:.2em .8em;border-radius:.3em;text-shadow:0 1px 1px rgba(255,255,255,.5);border:1px #c9c9c9 solid;-webkit-transition:border-color 100ms ease-in-out;-moz-transition:border-color 100ms ease-in-out;-ms-transition:border-color 100ms ease-in-out;-o-transition:border-color 100ms ease-in-out;transition:border-color 100ms ease-in-out;background:#eee;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');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:-ms-linear-gradient(top,#fff 0,#ddd 100%);background-image:-o-linear-gradient(top,#fff 0,#ddd 100%);background-image:linear-gradient(top,#fff 0,#ddd 100%)}.oo-ui-buttonedElement-framed>.oo-ui-buttonedElement-button:hover,.oo-ui-buttonedElement-framed>.oo-ui-buttonedElement-button:focus{border-color:#aaa}.oo-ui-buttonedElement-framed>.oo-ui-buttonedElement-button>.oo-ui-labeledElement-label{line-height:1.9em}.oo-ui-buttonedElement-framed.oo-ui-buttonedElement-active>.oo-ui-buttonedElement-button,.oo-ui-buttonedElement-framed.oo-ui-buttonedElement-pressed>.oo-ui-buttonedElement-button{box-shadow:inset 0 1px 4px 0 rgba(0,0,0,.07);color:#000;border-color:#c9c9c9;background:#eee;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#ddd),color-stop(100%,#fff));background-image:-webkit-linear-gradient(top,#ddd 0,#fff 100%);background-image:-moz-linear-gradient(top,#ddd 0,#fff 100%);background-image:-ms-linear-gradient(top,#ddd 0,#fff 100%);background-image:-o-linear-gradient(top,#ddd 0,#fff 100%);background-image:linear-gradient(top,#ddd 0,#fff 100%)}.oo-ui-buttonedElement-framed.oo-ui-iconedElement>.oo-ui-buttonedElement-button>.oo-ui-iconedElement-icon{margin-left:-.5em;margin-right:-.5em}.oo-ui-buttonedElement-framed.oo-ui-iconedElement.oo-ui-labeledElement>.oo-ui-buttonedElement-button>.oo-ui-iconedElement-icon{margin-left:-.5em;margin-right:.3em}.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary>.oo-ui-buttonedElement-button{border:solid 1px #a6cee1;background:#cde7f4;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#eaf4fa),color-stop(100%,#b0d9ee));background-image:-webkit-linear-gradient(top,#eaf4fa 0,#b0d9ee 100%);background-image:-moz-linear-gradient(top,#eaf4fa 0,#b0d9ee 100%);background-image:-ms-linear-gradient(top,#eaf4fa 0,#b0d9ee 100%);background-image:-o-linear-gradient(top,#eaf4fa 0,#b0d9ee 100%);background-image:linear-gradient(top,#eaf4fa 0,#b0d9ee 100%)}.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary>.oo-ui-buttonedElement-button:hover,.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary>.oo-ui-buttonedElement-button:focus{border-color:#9dc2d4}.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary.oo-ui-buttonedElement-active>.oo-ui-buttonedElement-button,.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary.oo-ui-buttonedElement-pressed>.oo-ui-buttonedElement-button{border:solid 1px #a6cee1;background:#cde7f4;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#b0d9ee),color-stop(100%,#eaf4fa));background-image:-webkit-linear-gradient(top,#b0d9ee 0,#eaf4fa 100%);background-image:-moz-linear-gradient(top,#b0d9ee 0,#eaf4fa 100%);background-image:-ms-linear-gradient(top,#b0d9ee 0,#eaf4fa 100%);background-image:-o-linear-gradient(top,#b0d9ee 0,#eaf4fa 100%);background-image:linear-gradient(top,#b0d9ee 0,#eaf4fa 100%)}.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive>.oo-ui-buttonedElement-button{border:solid 1px #b8d892;background:#daf0be;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#f0fbe1),color-stop(100%,#c3e59a));background-image:-webkit-linear-gradient(top,#f0fbe1 0,#c3e59a 100%);background-image:-moz-linear-gradient(top,#f0fbe1 0,#c3e59a 100%);background-image:-ms-linear-gradient(top,#f0fbe1 0,#c3e59a 100%);background-image:-o-linear-gradient(top,#f0fbe1 0,#c3e59a 100%);background-image:linear-gradient(top,#f0fbe1 0,#c3e59a 100%)}.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive>.oo-ui-buttonedElement-button:hover,.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive>.oo-ui-buttonedElement-button:focus{border-color:#adcb89}.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive.oo-ui-buttonedElement-active>.oo-ui-buttonedElement-button,.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive.oo-ui-buttonedElement-pressed>.oo-ui-buttonedElement-button{border:solid 1px #b8d892;background:#daf0be;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#c3e59a),color-stop(100%,#f0fbe1));background-image:-webkit-linear-gradient(top,#c3e59a 0,#f0fbe1 100%);background-image:-moz-linear-gradient(top,#c3e59a 0,#f0fbe1 100%);background-image:-ms-linear-gradient(top,#c3e59a 0,#f0fbe1 100%);background-image:-o-linear-gradient(top,#c3e59a 0,#f0fbe1 100%);background-image:linear-gradient(top,#c3e59a 0,#f0fbe1 100%)}.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-destructive>.oo-ui-buttonedElement-button{color:#d45353}.oo-ui-buttonedElement-framed.oo-ui-widget-disabled>.oo-ui-buttonedElement-button,.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active>.oo-ui-buttonedElement-button,.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed>.oo-ui-buttonedElement-button{opacity:.5;box-shadow:none;color:#333;background:#eee;border-color:#ccc}.oo-ui-buttonedElement-framed.oo-ui-widget-disabled>.oo-ui-buttonedElement-button:hover,.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active>.oo-ui-buttonedElement-button:hover,.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed>.oo-ui-buttonedElement-button:hover,.oo-ui-buttonedElement-framed.oo-ui-widget-disabled>.oo-ui-buttonedElement-button:focus,.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active>.oo-ui-buttonedElement-button:focus,.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed>.oo-ui-buttonedElement-button:focus{border-color:#ccc;box-shadow:none}.oo-ui-clippableElement-clippable{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable{overflow-y:hidden}.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable{overflow-y:auto}.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded{padding:2em}.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget{position:absolute;top:0;left:0;right:0;bottom:3em;overflow-y:auto}.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget{position:absolute;bottom:0;left:0;right:0}.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout{padding:1.5em}.oo-ui-bookletLayout-outlinePanel{border-right:solid 1px #ddd}.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget{box-shadow:0 0 .25em rgba(0,0,0,.25)}.oo-ui-fieldLayout{margin-bottom:1em}.oo-ui-fieldLayout:before,.oo-ui-fieldLayout:after{content:" ";display:table}.oo-ui-fieldLayout:after{clear:both}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left>.oo-ui-labeledElement-label,.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right>.oo-ui-labeledElement-label{display:block;float:left}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left>.oo-ui-fieldLayout-field,.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right>.oo-ui-fieldLayout-field{display:block;float:left}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right>.oo-ui-labeledElement-label{text-align:right}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline>.oo-ui-labeledElement-label{display:inline-block;vertical-align:middle}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline>.oo-ui-fieldLayout-field{display:inline-block;vertical-align:middle}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top>.oo-ui-labeledElement-label{display:inline-block}.oo-ui-fieldLayout>.oo-ui-popupButtonWidget>.oo-ui-popupWidget>.oo-ui-popupWidget-popup{z-index:1}.oo-ui-fieldLayout:last-child{margin-bottom:0}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left>.oo-ui-labeledElement-label,.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right>.oo-ui-labeledElement-label{padding-top:.5em;margin-right:5%;width:35%}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left>.oo-ui-fieldLayout-field,.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right>.oo-ui-fieldLayout-field{width:60%}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline>.oo-ui-labeledElement-label{padding:.75em .5em .5em}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline>.oo-ui-fieldLayout-field{padding:.5em 0}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top>.oo-ui-labeledElement-label{padding:.5em 0}.oo-ui-fieldLayout>.oo-ui-popupButtonWidget>.oo-ui-buttonedElement-button>.oo-ui-iconedElement-icon{margin-top:.25em}.oo-ui-fieldLayout-disabled .oo-ui-labeledElement-label{color:#ccc}.oo-ui-fieldsetLayout{position:relative;margin:0;padding:0;border:none}.oo-ui-fieldsetLayout.oo-ui-iconedElement>.oo-ui-iconedElement-icon{display:block;position:absolute;background-position:center center;background-repeat:no-repeat}.oo-ui-fieldsetLayout+.oo-ui-fieldsetLayout{margin-top:2em}.oo-ui-fieldsetLayout>.oo-ui-labeledElement-label{font-size:1.5em;margin-bottom:.5em;padding:.25em 0}.oo-ui-fieldsetLayout.oo-ui-iconedElement>.oo-ui-labeledElement-label{padding-left:1.75em;line-height:1.33em}.oo-ui-fieldsetLayout.oo-ui-iconedElement>.oo-ui-iconedElement-icon{left:0;top:.25em;width:2em;height:2em}.oo-ui-gridLayout{position:absolute;top:0;left:0;right:0;bottom:0}.oo-ui-panelLayout{position:relative}.oo-ui-panelLayout-scrollable{overflow-y:auto}.oo-ui-panelLayout-expanded{position:absolute;top:0;left:0;right:0;bottom:0}.oo-ui-panelLayout-padded{padding:1.25em}.oo-ui-stackLayout>.oo-ui-panelLayout{display:none}.oo-ui-stackLayout-continuous>.oo-ui-panelLayout{display:block;position:relative}.oo-ui-popupTool .oo-ui-popupWidget-popup,.oo-ui-popupTool .oo-ui-popupWidget-anchor{z-index:4}.oo-ui-popupTool .oo-ui-popupWidget{margin-left:1.25em;font-size:.8em}.oo-ui-toolGroup{display:inline-block;vertical-align:middle;margin:.3em;border-radius:.25em;border:solid 1px transparent;-webkit-transition:border-color 300ms ease-in-out;-moz-transition:border-color 300ms ease-in-out;-ms-transition:border-color 300ms ease-in-out;-o-transition:border-color 300ms ease-in-out;transition:border-color 300ms ease-in-out}.oo-ui-toolGroup-empty{display:none}.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon{background-position:center center;background-repeat:no-repeat}.oo-ui-toolGroup.oo-ui-widget-enabled:hover{border-color:rgba(0,0,0,.1)}.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title{color:#000}.oo-ui-barToolGroup>.oo-ui-iconedElement-icon,.oo-ui-barToolGroup>.oo-ui-labeledElement-label{display:none}.oo-ui-barToolGroup .oo-ui-tool{display:inline-block;position:relative;vertical-align:top}.oo-ui-barToolGroup .oo-ui-tool-link{display:block}.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon{display:block}.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title{display:none}.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link{cursor:default}.oo-ui-barToolGroup .oo-ui-tool-title,.oo-ui-barToolGroup .oo-ui-tool-accel{display:none}.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link{cursor:pointer}.oo-ui-barToolGroup .oo-ui-tool{margin:-1px 0 -1px -1px;border:solid 1px transparent}.oo-ui-barToolGroup .oo-ui-tool:first-child{border-top-left-radius:.25em;border-bottom-left-radius:.25em}.oo-ui-barToolGroup .oo-ui-tool:last-child{margin-right:-1px;border-top-right-radius:.25em;border-bottom-right-radius:.25em}.oo-ui-barToolGroup .oo-ui-tool-link{height:1.5em;padding:.25em}.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon{height:1.5em;width:1.5em;opacity:.8}.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover{border-color:rgba(0,0,0,.2)}.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled{border-color:rgba(0,0,0,.2);box-shadow:inset 0 .07em .07em 0 rgba(0,0,0,.07);background:#f8fbfd;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');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:-ms-linear-gradient(top,#f1f7fb 0,#fff 100%);background-image:-o-linear-gradient(top,#f1f7fb 0,#fff 100%);background-image:linear-gradient(top,#f1f7fb 0,#fff 100%)}.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled+.oo-ui-tool-active.oo-ui-widget-enabled{border-left-color:rgba(0,0,0,.1)}.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon{opacity:.2}.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon{opacity:.8}.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon{opacity:1}.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon{opacity:.2}.oo-ui-popupToolGroup{position:relative;height:2em;min-width:2.5em}.oo-ui-popupToolGroup-handle{display:block;cursor:pointer}.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon{position:absolute;background-position:center center;background-repeat:no-repeat}.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle{cursor:default}.oo-ui-popupToolGroup .oo-ui-toolGroup-tools{display:none;position:absolute;z-index:4}.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon{background-repeat:no-repeat;background-position:center center}.oo-ui-popupToolGroup-active.oo-ui-widget-enabled>.oo-ui-toolGroup-tools{display:block}.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon{display:inline-block;vertical-align:middle}.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title{display:inline-block;vertical-align:middle}.oo-ui-popupToolGroup .oo-ui-tool-accel{display:none}.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement{min-width:3.5em}.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon{top:0;width:2em;height:2em;opacity:.8}.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator{right:0}.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon{left:.25em}.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label{line-height:2.6em;font-size:.8em;margin:0 1em}.oo-ui-popupToolGroup-header{line-height:2.6em;font-size:.8em;margin:0 .6em;font-weight:700}.oo-ui-popupToolGroup-active.oo-ui-widget-enabled{border-bottom-left-radius:0;border-bottom-right-radius:0;box-shadow:inset 0 .07em .07em 0 rgba(0,0,0,.07);background:#f8fbfd;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');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:-ms-linear-gradient(top,#f1f7fb 0,#fff 100%);background-image:-o-linear-gradient(top,#f1f7fb 0,#fff 100%);background-image:linear-gradient(top,#f1f7fb 0,#fff 100%)}.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label{margin-left:3em}.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label{margin-right:2.25em}.oo-ui-popupToolGroup .oo-ui-toolGroup-tools{top:2em;left:-1px;border:solid 1px #ccc;background-color:#fff;box-shadow:0 .25em 1em rgba(0,0,0,.25)}.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon{height:2em;width:2em;margin-right:.25em}.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title{line-height:2em;font-size:.8em}.oo-ui-listToolGroup .oo-ui-tool{display:inline-block;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-listToolGroup .oo-ui-tool-link{display:block;cursor:pointer;white-space:nowrap}.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link{cursor:default}.oo-ui-listToolGroup .oo-ui-toolGroup-tools{padding:.25em}.oo-ui-listToolGroup.oo-ui-popupToolGroup-active{border-color:rgba(0,0,0,.2)}.oo-ui-listToolGroup .oo-ui-tool{border:solid 1px transparent;margin:-1px 0}.oo-ui-listToolGroup .oo-ui-tool-link{padding-right:.5em}.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled{border-color:rgba(0,0,0,.1);box-shadow:inset 0 .07em .07em 0 rgba(0,0,0,.07);background:#f8fbfd;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');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:-ms-linear-gradient(top,#f1f7fb 0,#fff 100%);background-image:-o-linear-gradient(top,#f1f7fb 0,#fff 100%);background-image:linear-gradient(top,#f1f7fb 0,#fff 100%)}.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled+.oo-ui-tool-active.oo-ui-widget-enabled{border-top-color:rgba(0,0,0,.1)}.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover{border-color:rgba(0,0,0,.2)}.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover{border-color:rgba(0,0,0,.2)}.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon{opacity:.8}.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon{opacity:1}.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title{color:#ccc}.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon{opacity:.2}.oo-ui-listToolGroup.oo-ui-widget-disabled{color:#ccc}.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator,.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon{opacity:.2}.oo-ui-menuToolGroup{border-color:rgba(0,0,0,.1)}.oo-ui-menuToolGroup .oo-ui-tool{display:block}.oo-ui-menuToolGroup .oo-ui-tool-link{display:block;cursor:pointer;white-space:nowrap}.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon{background-image:none}.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon{background-image:url(images/icons/check.svg)}.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link{cursor:default}.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle{min-width:8em}.oo-ui-menuToolGroup .oo-ui-toolGroup-tools{padding:.25em 0}.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover{border-color:rgba(0,0,0,.2)}.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active{border-color:rgba(0,0,0,.25)}.oo-ui-menuToolGroup .oo-ui-tool-link{padding:0 1em 0 .25em}.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover{background-color:#e1f3ff}.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title{color:#ccc}.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon{opacity:.2}.oo-ui-menuToolGroup.oo-ui-widget-disabled{color:#ccc;border-color:rgba(0,0,0,.05)}.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator,.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon{opacity:.2}.oo-ui-toolbar{clear:both}.oo-ui-toolbar-bar{line-height:1em}.oo-ui-toolbar-actions{float:right}.oo-ui-toolbar-tools{float:left}.oo-ui-toolbar-tools,.oo-ui-toolbar-actions,.oo-ui-toolbar-shadow{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.oo-ui-toolbar-actions .oo-ui-popupWidget{-webkit-touch-callout:default;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.oo-ui-toolbar-shadow{background-position:left top;background-repeat:repeat-x;position:absolute;width:100%;pointer-events:none}.oo-ui-toolbar-bar{border-bottom:solid 1px #ccc;background:#f8fbfd;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb');background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#fff),color-stop(100%,#f1f7fb));background-image:-webkit-linear-gradient(top,#fff 0,#f1f7fb 100%);background-image:-moz-linear-gradient(top,#fff 0,#f1f7fb 100%);background-image:-ms-linear-gradient(top,#fff 0,#f1f7fb 100%);background-image:-o-linear-gradient(top,#fff 0,#f1f7fb 100%);background-image:linear-gradient(top,#fff 0,#f1f7fb 100%)}.oo-ui-toolbar-bar .oo-ui-toolbar-bar{border:none;background:0 0}.oo-ui-toolbar-shadow{background-image:url(images/toolbar-shadow.png);bottom:-9px;height:9px;opacity:.125;-webkit-transition:opacity 500ms ease-in-out;-moz-transition:opacity 500ms ease-in-out;-ms-transition:opacity 500ms ease-in-out;-o-transition:opacity 500ms ease-in-out;transition:opacity 500ms ease-in-out}.oo-ui-optionWidget{position:relative;display:block;cursor:pointer;padding:.5em 2em .5em 3em;border:none}.oo-ui-optionWidget.oo-ui-widget-disabled{cursor:default}.oo-ui-optionWidget .oo-ui-labeledElement-label{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.oo-ui-optionWidget-highlighted{background-color:#e1f3ff}.oo-ui-optionWidget .oo-ui-labeledElement-label{line-height:1.5em}.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected{background-color:#a7dcff}.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed{background-color:#a7dcff}.oo-ui-optionWidget.oo-ui-widget-disabled{color:#ccc}.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon,.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator{position:absolute;background-repeat:no-repeat;background-position:center center}.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon,.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator{top:50%;width:2em;height:2em;margin-top:-1em}.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon{left:.5em}.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator{right:.5em}.oo-ui-buttonSelectWidget{display:inline-block;white-space:nowrap;border-radius:.3em}.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button{border-radius:0;margin-left:-1px}.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonedElement-button{border-bottom-left-radius:.3em;border-top-left-radius:.3em;margin-left:0}.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonedElement-button{border-bottom-right-radius:.3em;border-top-right-radius:.3em}.oo-ui-buttonOptionWidget{display:inline-block;padding:0;background-color:transparent}.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button{position:relative}.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator{position:static;display:inline-block;vertical-align:middle}.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button{height:1.9em}.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator{height:1.9em;margin-top:0}.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted{background-color:transparent}.oo-ui-labelWidget{display:inline-block;padding:.5em 0}.oo-ui-iconWidget{display:inline-block;vertical-align:middle;background-position:center center;background-repeat:no-repeat;line-height:2.5em;height:1.9em;width:1.9em;opacity:.8}.oo-ui-iconWidget.oo-ui-widget-disabled{opacity:.2}.oo-ui-indicatorWidget{display:inline-block;vertical-align:middle;background-position:center center;background-repeat:no-repeat;line-height:2.5em;height:1.9em;width:1.9em;opacity:.8}.oo-ui-indicatorWidget.oo-ui-widget-disabled{opacity:.2}.oo-ui-buttonWidget{display:inline-block;vertical-align:middle}.oo-ui-buttonGroupWidget{display:inline-block;white-space:nowrap;border-radius:.3em}.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button{border-radius:0;margin-bottom:-1px;margin-left:-1px}.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button{border-bottom-left-radius:.3em;border-top-left-radius:.3em;margin-left:0}.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button{border-bottom-right-radius:.3em;border-top-right-radius:.3em}.oo-ui-toggleSwitchWidget{position:relative;display:inline-block;vertical-align:middle;overflow:hidden;cursor:pointer;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transform:translateZ(0px);-moz-transform:translateZ(0px);-ms-transform:translateZ(0px);-o-transform:translateZ(0px);transform:translateZ(0px);height:2em;width:4em;border-radius:1em;box-shadow:0 0 0 white,inset 0 .1em .2em #ddd;border:solid 1px #ccc;background:#eee;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#ddd),color-stop(100%,#fff));background-image:-webkit-linear-gradient(top,#ddd 0,#fff 100%);background-image:-moz-linear-gradient(top,#ddd 0,#fff 100%);background-image:-ms-linear-gradient(top,#ddd 0,#fff 100%);background-image:-o-linear-gradient(top,#ddd 0,#fff 100%);background-image:linear-gradient(top,#ddd 0,#fff 100%)}.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled{cursor:default}.oo-ui-toggleSwitchWidget-grip{position:absolute;display:block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow{position:absolute;top:0;bottom:0;right:0;left:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow{display:none}.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled{opacity:.5}.oo-ui-toggleSwitchWidget-grip{top:.25em;left:.25em;width:1.5em;height:1.5em;margin-top:-1px;border-radius:1em;box-shadow:0 .1em .25em rgba(0,0,0,.1);border:1px #c9c9c9 solid;-webkit-transition:left 200ms ease-in-out,margin-left 200ms ease-in-out;-moz-transition:left 200ms ease-in-out,margin-left 200ms ease-in-out;-ms-transition:left 200ms ease-in-out,margin-left 200ms ease-in-out;-o-transition:left 200ms ease-in-out,margin-left 200ms ease-in-out;transition:left 200ms ease-in-out,margin-left 200ms ease-in-out;background:#eee;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');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:-ms-linear-gradient(top,#fff 0,#ddd 100%);background-image:-o-linear-gradient(top,#fff 0,#ddd 100%);background-image:linear-gradient(top,#fff 0,#ddd 100%)}.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover,.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip{border-color:#aaa}.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow{border-radius:1em;box-shadow:inset 0 1px 4px 0 rgba(0,0,0,.07);-webkit-transition:opacity 200ms ease-in-out;-moz-transition:opacity 200ms ease-in-out;-ms-transition:opacity 200ms ease-in-out;-o-transition:opacity 200ms ease-in-out;transition:opacity 200ms ease-in-out;background:#cde7f4;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#b0d9ee),color-stop(100%,#eaf4fa));background-image:-webkit-linear-gradient(top,#b0d9ee 0,#eaf4fa 100%);background-image:-moz-linear-gradient(top,#b0d9ee 0,#eaf4fa 100%);background-image:-ms-linear-gradient(top,#b0d9ee 0,#eaf4fa 100%);background-image:-o-linear-gradient(top,#b0d9ee 0,#eaf4fa 100%);background-image:linear-gradient(top,#b0d9ee 0,#eaf4fa 100%)}.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow{opacity:1}.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip{left:2.25em;margin-left:-2px}.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow{display:block;opacity:0}.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip{left:.25em;margin-left:0}.oo-ui-popupWidget-popup{position:absolute;overflow:hidden;z-index:1}.oo-ui-popupWidget-anchor{display:none;z-index:1}.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor{display:block;position:absolute;background-repeat:no-repeat}.oo-ui-popupWidget-head{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.oo-ui-popupWidget-head .oo-ui-buttonWidget{float:right}.oo-ui-popupWidget-head .oo-ui-labeledElement-label{float:left;cursor:default}.oo-ui-popupWidget-body{clear:both;overflow:hidden}.oo-ui-popupWidget-popup{border:solid 1px #ccc;border-radius:.25em;background-color:#fff;box-shadow:0 .15em .5em 0 rgba(0,0,0,.2)}.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup{margin-top:7px}.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor{width:15px;height:8px;margin-left:-7px;background-image:url(images/anchor.svg)}.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup{-webkit-transition:width 100ms ease-in-out,height 100ms ease-in-out,left 100ms ease-in-out;-moz-transition:width 100ms ease-in-out,height 100ms ease-in-out,left 100ms ease-in-out;-ms-transition:width 100ms ease-in-out,height 100ms ease-in-out,left 100ms ease-in-out;-o-transition:width 100ms ease-in-out,height 100ms ease-in-out,left 100ms ease-in-out;transition:width 100ms ease-in-out,height 100ms ease-in-out,left 100ms ease-in-out}.oo-ui-popupWidget-head{height:2.5em}.oo-ui-popupWidget-head .oo-ui-buttonWidget{margin:.25em}.oo-ui-popupWidget-head .oo-ui-labeledElement-label{margin:.75em 1em}.oo-ui-popupWidget-body{box-shadow:0 0 .66em rgba(0,0,0,.25)}.oo-ui-popupWidget-body-padded{padding:0 1em}.oo-ui-popupButtonWidget{position:relative}.oo-ui-popupButtonWidget .oo-ui-popupWidget{position:absolute;left:1em;cursor:auto}.oo-ui-textInputWidget{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:20em}.oo-ui-textInputWidget input,.oo-ui-textInputWidget textarea{display:inline-block;width:100%;resize:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-textInputWidget>.oo-ui-iconedElement-icon,.oo-ui-textInputWidget>.oo-ui-indicatedElement-indicator{position:absolute;top:0;height:100%;background-repeat:no-repeat;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.oo-ui-textInputWidget>.oo-ui-iconedElement-icon{left:0}.oo-ui-textInputWidget>.oo-ui-indicatedElement-indicator{right:0}.oo-ui-textInputWidget input,.oo-ui-textInputWidget textarea{padding:.5em;font-size:1em;font-family:sans-serif;background-color:#fff;border:solid 1px #ccc;box-shadow:0 0 0 white,inset 0 .1em .2em #ddd;border-radius:.25em;-webkit-transition:border-color 200ms,box-shadow 200ms;-moz-transition:border-color 200ms,box-shadow 200ms;-ms-transition:border-color 200ms,box-shadow 200ms;-o-transition:border-color 200ms,box-shadow 200ms;transition:border-color 200ms,box-shadow 200ms}.oo-ui-textInputWidget-decorated input,.oo-ui-textInputWidget-decorated textarea{padding-left:2em}.oo-ui-textInputWidget-icon{width:2em}.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus{outline:0;border-color:#a7dcff;box-shadow:0 0 .3em #a7dcff,0 0 0 #fff}.oo-ui-textInputWidget input[readonly],.oo-ui-textInputWidget textarea[readonly]{color:#777;text-shadow:0 1px 1px #fff}.oo-ui-textInputWidget-pending input,.oo-ui-textInputWidget-pending textarea{background-color:transparent}.oo-ui-textInputWidget.oo-ui-widget-disabled input,.oo-ui-textInputWidget.oo-ui-widget-disabled input:focus,.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,.oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus{color:#ccc;text-shadow:0 1px 1px #fff;border-color:#ddd;background-color:#f3f3f3}.oo-ui-textInputWidget .oo-ui-iconedElement-icon,.oo-ui-textInputWidget .oo-ui-indicatedElement-indicator{opacity:.8}.oo-ui-textInputWidget.oo-ui-iconedElement input,.oo-ui-textInputWidget.oo-ui-iconedElement textarea{padding-left:2em}.oo-ui-textInputWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon{width:2em;background-position:right center}.oo-ui-textInputWidget.oo-ui-indicatedElement input,.oo-ui-textInputWidget.oo-ui-indicatedElement textarea{padding-right:1.5em}.oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator{width:1.5em;background-position:left center}.oo-ui-menuWidget{position:absolute;background:#fff;margin-top:-1px;border:solid 1px #ccc;border-radius:0 0 .25em .25em;box-shadow:0 .15em 1em 0 rgba(0,0,0,.2)}.oo-ui-menuWidget input{position:absolute;width:0;height:0;overflow:hidden;opacity:0}.oo-ui-menuItemWidget{position:relative}.oo-ui-menuItemWidget .oo-ui-iconedElement-icon{display:none}.oo-ui-menuItemWidget.oo-ui-optionWidget-selected{background-color:transparent}.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon{display:block}.oo-ui-menuItemWidget.oo-ui-optionWidget-selected{background-color:transparent}.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted,.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected{background-color:#e1f3ff}.oo-ui-menuSectionItemWidget{cursor:default;padding:.33em .75em;color:#888}.oo-ui-inlineMenuWidget{position:relative;display:inline-block;margin:.25em 0;min-width:20em}.oo-ui-inlineMenuWidget-handle{width:100%;display:inline-block;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon{position:absolute;background-position:center center;background-repeat:no-repeat}.oo-ui-inlineMenuWidget .oo-ui-menuWidget{z-index:1;width:100%}.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle{cursor:default}.oo-ui-inlineMenuWidget-handle{height:2.5em;border:solid 1px rgba(0,0,0,.1);border-radius:.25em}.oo-ui-inlineMenuWidget-handle:hover{border-color:rgba(0,0,0,.2)}.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator{right:0}.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon{left:.25em}.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label{line-height:2.5em;margin:0 .5em}.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon{top:0;width:2.5em;height:2.5em;opacity:.8}.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle{color:#ccc;text-shadow:0 1px 1px #fff;border-color:#ddd;background-color:#f3f3f3}.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator{opacity:.2}.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label{margin-left:3em}.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label{margin-right:2em}.oo-ui-outlineItemWidget{position:relative;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:1.1em;padding:.75em}.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label{padding-right:1.5em}.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator{opacity:.5}.oo-ui-outlineItemWidget-level-0{padding-left:3.5em}.oo-ui-outlineItemWidget-level-0 .oo-ui-iconedElement-icon{left:1em}.oo-ui-outlineItemWidget-level-1{padding-left:5em}.oo-ui-outlineItemWidget-level-1 .oo-ui-iconedElement-icon{left:2.5em}.oo-ui-outlineItemWidget-level-2{padding-left:6.5em}.oo-ui-outlineItemWidget-level-2 .oo-ui-iconedElement-icon{left:4em}.oo-ui-selectWidget-depressed .oo-ui-outlineItemWidget.oo-ui-optionWidget-selected{background-color:#a7dcff;text-shadow:0 1px 1px rgba(255,255,255,.5)}.oo-ui-outlineItemWidget.oo-ui-flaggableElement-important{font-weight:700}.oo-ui-outlineItemWidget.oo-ui-flaggableElement-placeholder{font-style:italic}.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-iconedElement-icon{opacity:.5}.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-labeledElement-label{color:#777}.oo-ui-outlineControlsWidget{height:3em;background-color:#fff}.oo-ui-outlineControlsWidget-items,.oo-ui-outlineControlsWidget-movers{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-outlineControlsWidget>.oo-ui-iconedElement-icon{float:left;background-position:right center;background-repeat:no-repeat}.oo-ui-outlineControlsWidget-items{float:left}.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget{float:left}.oo-ui-outlineControlsWidget-movers{float:right}.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget{float:right}.oo-ui-outlineControlsWidget-items,.oo-ui-outlineControlsWidget-movers{height:2em;margin:.5em;padding:0}.oo-ui-outlineControlsWidget>.oo-ui-iconedElement-icon{width:1.5em;height:2em;margin:.5em 0 .5em .5em;opacity:.2}.oo-ui-outlineControlsWidget-items{margin-left:0}.oo-ui-comboBoxWidget>.oo-ui-selectWidget{z-index:1;min-width:20em}.oo-ui-comboBoxWidget>.oo-ui-selectWidget-handle{border:solid 1px rgba(0,0,0,.1);border-radius:.25em}.oo-ui-comboBoxWidget>.oo-ui-selectWidget-handle:hover{border-color:rgba(0,0,0,.2)}.oo-ui-comboBoxWidget>.oo-ui-selectWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator,.oo-ui-comboBoxWidget>.oo-ui-selectWidget-empty .oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator{cursor:default;opacity:.2}.oo-ui-searchWidget-query{position:absolute;top:0;left:0;right:0}.oo-ui-searchWidget-query .oo-ui-textInputWidget{width:100%}.oo-ui-searchWidget-results{position:absolute;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:auto}.oo-ui-searchWidget-query{height:4em;padding:0 1em;box-shadow:0 0 .5em rgba(0,0,0,.2)}.oo-ui-searchWidget-query .oo-ui-textInputWidget{margin:.75em 0}.oo-ui-searchWidget-results{top:4em;padding:1em;line-height:0}.oo-ui-window{line-height:1em}.oo-ui-window-frame{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-window-frame>iframe{width:100%;height:100%;margin:0;padding:0}.oo-ui-window-content:focus{outline:0}.oo-ui-window-head,.oo-ui-window-foot{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.oo-ui-window-body{margin:0;padding:0;background:0 0}.oo-ui-window-overlay{position:absolute;top:0;left:0}.oo-ui-window-isolated{background:0 0;font-family:sans-serif;font-size:.8em}.oo-ui-dialog-content>.oo-ui-window-head,.oo-ui-dialog-content>.oo-ui-window-body,.oo-ui-dialog-content>.oo-ui-window-foot{position:absolute;left:0;right:0;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-dialog-content>.oo-ui-window-head{z-index:1;top:0}.oo-ui-dialog-content>.oo-ui-window-body{z-index:2;top:0;bottom:0}.oo-ui-dialog-content>.oo-ui-window-foot{z-index:1;bottom:0}.oo-ui-dialog-content>.oo-ui-window-overlay{z-index:3}.oo-ui-dialog-content>.oo-ui-window-body{box-shadow:0 0 .66em rgba(0,0,0,.25)}.oo-ui-messageDialog-actions-horizontal{display:table;table-layout:fixed;width:100%}.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget{display:table-cell;width:1%}.oo-ui-messageDialog-actions-vertical{display:block}.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget{display:block;overflow:hidden;text-overflow:ellipsis}.oo-ui-messageDialog-actions .oo-ui-actionWidget{position:relative;text-align:center}.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonedElement-button{display:block}.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label{position:relative;top:auto;bottom:auto;display:inline;white-space:nowrap}.oo-ui-messageDialog-content .oo-ui-window-body{box-shadow:0 0 .33em rgba(0,0,0,.33)}.oo-ui-messageDialog-title,.oo-ui-messageDialog-message{display:block;text-align:center;padding-top:.5em}.oo-ui-messageDialog-title{font-size:1.5em;line-height:1em;color:#000}.oo-ui-messageDialog-message{font-size:.9em;line-height:1.25em;color:#666}.oo-ui-messageDialog-message-verbose{font-size:1.1em;line-height:1.5em;text-align:left}.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget{border-right:solid 1px #e5e5e5}.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child{border-right-width:0}.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget{border-bottom:solid 1px #e5e5e5}.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child{border-bottom-width:0}.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label{text-align:center;line-height:3.4em;padding:0 2em}.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover{background-color:rgba(0,0,0,.05)}.oo-ui-messageDialog-actions .oo-ui-actionWidget:active{background-color:rgba(0,0,0,.1)}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover{background-color:rgba(8,126,204,.05)}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active{background-color:rgba(8,126,204,.1)}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label{font-weight:700}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover{background-color:rgba(118,171,54,.05)}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active{background-color:rgba(118,171,54,.1)}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover{background-color:rgba(212,83,83,.05)}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active{background-color:rgba(212,83,83,.1)}.oo-ui-processDialog-location{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.oo-ui-processDialog-title{display:inline}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,.oo-ui-processDialog-actions-other .oo-ui-actionWidget{white-space:nowrap}.oo-ui-processDialog-actions-safe,.oo-ui-processDialog-actions-primary{position:absolute;top:0;bottom:0}.oo-ui-processDialog-actions-safe{left:0}.oo-ui-processDialog-actions-primary{right:0}.oo-ui-processDialog-errors{display:none;position:absolute;top:0;left:0;right:0;bottom:0;z-index:2;overflow-x:hidden;overflow-y:auto}.oo-ui-processDialog-content .oo-ui-window-head{height:3.4em}.oo-ui-processDialog-content .oo-ui-window-body{top:3.4em;box-shadow:0 0 .33em rgba(0,0,0,.33)}.oo-ui-processDialog-navigation{position:relative;height:3.4em;padding:0 1em}.oo-ui-processDialog-location{padding:.25em 0;height:1.9em;cursor:default;text-align:center}.oo-ui-processDialog-title{font-weight:700;line-height:1.9em}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button,.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button{padding-top:.75em;padding-bottom:.75em;min-width:1.9em;min-height:1.9em}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label,.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label{line-height:1.9em;padding:0 1em}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon,.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon{position:absolute;margin-top:-.125em}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed,.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed{margin:.75em 0 .75em .75em}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button{padding:0;vertical-align:middle}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover{background-color:rgba(0,0,0,.05)}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active{background-color:rgba(0,0,0,.1)}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed{margin:.75em}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button{margin:-1px}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover{background-color:rgba(8,126,204,.05)}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active{background-color:rgba(8,126,204,.1)}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label{font-weight:700}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover{background-color:rgba(118,171,54,.05)}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active{background-color:rgba(118,171,54,.1)}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover{background-color:rgba(212,83,83,.05)}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active{background-color:rgba(212,83,83,.1)}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon{left:.5em}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label{padding-left:2.25em}.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon{right:.5em}.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label{padding-right:2.25em}.oo-ui-processDialog>.oo-ui-window-frame{min-height:5em}.oo-ui-processDialog-errors{background-color:rgba(255,255,255,.9);padding:3em 3em 1.5em;text-align:center}.oo-ui-processDialog-errors .oo-ui-buttonWidget{margin:2em 1em}.oo-ui-processDialog-errors-title{font-size:1.5em;color:#000;margin-bottom:2em}.oo-ui-processDialog-error{text-align:left;margin:1em;padding:1em;border:solid 1px #ff9e9e;background-color:#fff7f7;border-radius:.25em}.oo-ui-windowManager-modal>.oo-ui-dialog{position:fixed;width:0;height:0;overflow:hidden}.oo-ui-windowManager-modal>.oo-ui-dialog.oo-ui-window-setup{width:auto;height:auto;top:0;right:0;bottom:0;left:0;padding:1em}.oo-ui-windowManager-modal>.oo-ui-dialog.oo-ui-window-setup>.oo-ui-window-frame{position:fixed;right:0;left:0;margin:auto;overflow:hidden;max-width:100%;max-height:100%}.oo-ui-windowManager-modal>.oo-ui-dialog.oo-ui-window-setup>.oo-ui-window-frame>iframe{width:100%;height:100%}.oo-ui-windowManager-fullscreen>.oo-ui-dialog>.oo-ui-window-frame{width:100%;height:100%;top:0;bottom:0}.oo-ui-windowManager-modal>.oo-ui-dialog{background-color:rgba(255,255,255,.5);opacity:0;-webkit-transition:opacity 250ms ease-in-out;-moz-transition:opacity 250ms ease-in-out;-ms-transition:opacity 250ms ease-in-out;-o-transition:opacity 250ms ease-in-out;transition:opacity 250ms ease-in-out}.oo-ui-windowManager-modal>.oo-ui-dialog>.oo-ui-window-frame{top:1em;bottom:1em;background-color:#fff;-webkit-transform:scale(0.5);-moz-transform:scale(0.5);-ms-transform:scale(0.5);-o-transform:scale(0.5);transform:scale(0.5);-webkit-transition:all 250ms ease-in-out;-moz-transition:all 250ms ease-in-out;-ms-transition:all 250ms ease-in-out;-o-transition:all 250ms ease-in-out;transition:all 250ms ease-in-out}.oo-ui-windowManager-modal>.oo-ui-dialog.oo-ui-window-ready{opacity:1}.oo-ui-windowManager-modal>.oo-ui-dialog.oo-ui-window-ready>.oo-ui-window-frame{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.oo-ui-windowManager-modal.oo-ui-windowManager-floating>.oo-ui-dialog>.oo-ui-window-frame{border:solid 1px #ccc;border-radius:.5em;box-shadow:0 .2em 1em rgba(0,0,0,.3)} \ No newline at end of file diff --git a/resources/lib/oojs-ui/oojs-ui-apex.rtl.css b/resources/lib/oojs-ui/oojs-ui-apex.rtl.css deleted file mode 100644 index 3cbb6778f8..0000000000 --- a/resources/lib/oojs-ui/oojs-ui-apex.rtl.css +++ /dev/null @@ -1,1103 +0,0 @@ -/*! - * OOjs UI v0.1.0 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2014 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2014-07-22T21:39:24Z - */ -.oo-ui-dialog-content > .oo-ui-window-head, -.oo-ui-dialog-content > .oo-ui-window-body, -.oo-ui-dialog-content > .oo-ui-window-foot { - position: absolute; - left: 0; - right: 0; - overflow: hidden; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-dialog-content > .oo-ui-window-head { - top: 0; - z-index: 1; -} - -.oo-ui-dialog-content > .oo-ui-window-body { - top: 0; - bottom: 0; - z-index: 2; - box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25); -} - -.oo-ui-dialog-content > .oo-ui-window-foot { - bottom: 0; - z-index: 1; -} - -.oo-ui-dialog-content > .oo-ui-window-overlay { - z-index: 3; -} - -.oo-ui-frame-content { - font-family: sans-serif; - font-size: 0.8em; -} - -.oo-ui-toolbar-bar { - background: #f8fbfd; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f1f7fb)); - background-image: -webkit-linear-gradient(top, #ffffff 0%, #f1f7fb 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #f1f7fb 100%); - background-image: -ms-linear-gradient(top, #ffffff 0%, #f1f7fb 100%); - background-image: -o-linear-gradient(top, #ffffff 0%, #f1f7fb 100%); - background-image: linear-gradient(top, #ffffff 0%, #f1f7fb 100%); - border-bottom: solid 1px #ccc; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb'); -} - -.oo-ui-toolbar-bar .oo-ui-toolbar-bar { - background: none; - border: none; -} - -.oo-ui-toolbar-shadow { - bottom: -9px; - height: 9px; - background-image: /* @embed */ url(images/toolbar-shadow.png); - opacity: 0.125; - -webkit-transition: opacity 500ms ease-in-out; - -moz-transition: opacity 500ms ease-in-out; - -ms-transition: opacity 500ms ease-in-out; - -o-transition: opacity 500ms ease-in-out; - transition: opacity 500ms ease-in-out; -} - -.oo-ui-toolGroup { - border: solid 1px transparent; - border-radius: 0.25em; - -webkit-transition: border-color 300ms ease-in-out; - -moz-transition: border-color 300ms ease-in-out; - -ms-transition: border-color 300ms ease-in-out; - -o-transition: border-color 300ms ease-in-out; - transition: border-color 300ms ease-in-out; -} - -.oo-ui-toolGroup.oo-ui-widget-enabled:hover { - border-color: rgba(0, 0, 0, 0.1); -} - -.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title { - color: #000; -} - -.oo-ui-window-content { - background: transparent; -} - -.oo-ui-window-overlay { - font-family: sans-serif; - font-size: 1em; - line-height: 1.5em; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog { - background-color: rgba(255, 255, 255, 0.5); - opacity: 0; - -webkit-transition: opacity 250ms ease-in-out; - -moz-transition: opacity 250ms ease-in-out; - -ms-transition: opacity 250ms ease-in-out; - -o-transition: opacity 250ms ease-in-out; - transition: opacity 250ms ease-in-out; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame { - top: 1em; - bottom: 1em; - background-color: #fff; - -webkit-transform: scale(0.5); - -moz-transform: scale(0.5); - -ms-transform: scale(0.5); - -o-transform: scale(0.5); - transform: scale(0.5); - -webkit-transition: all 250ms ease-in-out; - -moz-transition: all 250ms ease-in-out; - -ms-transition: all 250ms ease-in-out; - -o-transition: all 250ms ease-in-out; - transition: all 250ms ease-in-out; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready { - opacity: 1; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame { - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); -} - -.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame { - border: solid 1px #ccc; - border-radius: 0.5em; - box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3); -} - -.oo-ui-messageDialog-content .oo-ui-window-body { - box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33); -} - -.oo-ui-messageDialog-title, -.oo-ui-messageDialog-message { - display: block; - padding-top: 0.5em; - text-align: center; -} - -.oo-ui-messageDialog-title { - font-size: 1.5em; - line-height: 1em; - color: #000; -} - -.oo-ui-messageDialog-message { - font-size: 0.9em; - line-height: 1.25em; - color: #666; -} - -.oo-ui-messageDialog-message-verbose { - font-size: 1.1em; - line-height: 1.5em; - text-align: right; -} - -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget { - border-left: solid 1px #e5e5e5; -} - -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child { - border-left-width: 0; -} - -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget { - border-bottom: solid 1px #e5e5e5; -} - -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child { - border-bottom-width: 0; -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label { - padding: 0 2em; - line-height: 3.4em; - text-align: center; -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover { - background-color: rgba(0, 0, 0, 0.05); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget:active { - background-color: rgba(0, 0, 0, 0.1); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover { - background-color: rgba(8, 126, 204, 0.05); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active { - background-color: rgba(8, 126, 204, 0.1); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label { - font-weight: bold; -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover { - background-color: rgba(118, 171, 54, 0.05); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active { - background-color: rgba(118, 171, 54, 0.1); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover { - background-color: rgba(212, 83, 83, 0.05); -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active { - background-color: rgba(212, 83, 83, 0.1); -} - -.oo-ui-processDialog-content .oo-ui-window-head { - height: 3.4em; -} - -.oo-ui-processDialog-content .oo-ui-window-body { - top: 3.4em; - box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33); -} - -.oo-ui-processDialog-navigation { - position: relative; - height: 3.4em; - padding: 0 1em; -} - -.oo-ui-processDialog-location { - height: 1.9em; - padding: 0.25em 0; - text-align: center; - cursor: default; -} - -.oo-ui-processDialog-title { - font-weight: bold; - line-height: 1.9em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button { - min-width: 1.9em; - min-height: 1.9em; - padding-top: 0.75em; - padding-bottom: 0.75em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label { - padding: 0 1em; - line-height: 1.9em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon { - position: absolute; - margin-top: -0.125em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed { - margin: 0.75em 0.75em 0.75em 0; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button { - padding: 0; - vertical-align: middle; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover { - background-color: rgba(0, 0, 0, 0.05); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active { - background-color: rgba(0, 0, 0, 0.1); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed { - margin: 0.75em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button { - /* Adjust for border so text aligns with title */ - - margin: -1px; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover { - background-color: rgba(8, 126, 204, 0.05); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active { - background-color: rgba(8, 126, 204, 0.1); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label { - font-weight: bold; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover { - background-color: rgba(118, 171, 54, 0.05); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active { - background-color: rgba(118, 171, 54, 0.1); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover { - background-color: rgba(212, 83, 83, 0.05); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active { - background-color: rgba(212, 83, 83, 0.1); -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon { - right: 0.5em; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label { - padding-right: 2.25em; -} - -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon { - left: 0.5em; -} - -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label { - padding-left: 2.25em; -} - -.oo-ui-processDialog > .oo-ui-window-frame { - min-height: 5em; -} - -.oo-ui-processDialog-errors { - padding: 3em 3em 1.5em 3em; - text-align: center; - background-color: rgba(255, 255, 255, 0.9); -} - -.oo-ui-processDialog-errors .oo-ui-buttonWidget { - margin: 2em 1em 2em 1em; -} - -.oo-ui-processDialog-errors-title { - margin-bottom: 2em; - font-size: 1.5em; - color: #000; -} - -.oo-ui-processDialog-error { - padding: 1em; - margin: 1em; - text-align: right; - background-color: #fff7f7; - border: solid 1px #ff9e9e; - border-radius: 0.25em; -} - -.oo-ui-buttonedElement > .oo-ui-buttonedElement-button { - color: #333; -} - -.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator, -.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - width: 1.9em; - height: 1.9em; - opacity: 0.8; -} - -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */ - - /*.oo-ui-transition(opacity 200ms);*/ - -} - -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-iconedElement-icon, -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-iconedElement-icon { - opacity: 1; -} - -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-labeledElement-label, -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-labeledElement-label { - color: #000; -} - -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - color: #333; -} - -.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - color: #087ecc; -} - -.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - color: #76ab36; -} - -.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - color: #d45353; -} - -.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - opacity: 0.2; -} - -.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - color: #ccc; -} - -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button { - padding: 0.2em 0.8em; - margin: 0.1em 0; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); - background: #eeeeee; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd)); - background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%); - border: 1px #c9c9c9 solid; - border-radius: 0.3em; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd'); - -webkit-transition: border-color 100ms ease-in-out; - -moz-transition: border-color 100ms ease-in-out; - -ms-transition: border-color 100ms ease-in-out; - -o-transition: border-color 100ms ease-in-out; - transition: border-color 100ms ease-in-out; -} - -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:hover, -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:focus { - border-color: #aaa; -} - -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active, -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed { - color: black; - background: #eeeeee; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff)); - background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%); - border-color: #c9c9c9; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff'); - box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07); -} - -.oo-ui-buttonedElement-framed.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - margin-left: -0.5em; - margin-right: -0.5em; -} - -.oo-ui-buttonedElement-framed.oo-ui-iconedElement.oo-ui-labeledElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - margin-left: 0.3em; - margin-right: -0.5em; -} - -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button { - background: #cde7f4; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee)); - background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); - background-image: -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); - background-image: -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); - background-image: -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); - background-image: linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%); - border: solid 1px #a6cee1; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee'); -} - -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:hover, -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:focus { - border-color: #9dc2d4; -} - -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active, -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed { - background: #cde7f4; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa)); - background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - border: solid 1px #a6cee1; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa'); -} - -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button { - background: #daf0be; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a)); - background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%); - background-image: -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%); - background-image: -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%); - background-image: -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%); - background-image: linear-gradient(top, #f0fbe1 0%, #c3e59a 100%); - border: solid 1px #b8d892; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a'); -} - -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:hover, -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:focus { - border-color: #adcb89; -} - -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active, -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed { - background: #daf0be; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1)); - background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%); - background-image: -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%); - background-image: -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%); - background-image: -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%); - background-image: linear-gradient(top, #c3e59a 0%, #f0fbe1 100%); - border: solid 1px #b8d892; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1'); -} - -.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button { - color: #d45353; -} - -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed { - color: #333; - background: #eee; - border-color: #ccc; - opacity: 0.5; - box-shadow: none; -} - -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:hover, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active:hover, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed:hover, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:focus, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active:focus, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed:focus { - border-color: #ccc; - box-shadow: none; -} - -.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout { - padding: 1.5em; -} - -.oo-ui-bookletLayout-outlinePanel { - border-left: solid 1px #ddd; -} - -.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget { - box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25); -} - -.oo-ui-fieldLayout-disabled .oo-ui-labeledElement-label { - color: #ccc; -} - -.oo-ui-fieldsetLayout { - border: none; -} - -.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label { - font-size: 1.5em; -} - -.oo-ui-panelLayout-padded { - padding: 1.25em; -} - -.oo-ui-barToolGroup .oo-ui-tool { - margin: -1px -1px -1px 0; - border: solid 1px transparent; -} - -.oo-ui-barToolGroup .oo-ui-tool:first-child { - border-bottom-right-radius: 0.25em; - border-top-right-radius: 0.25em; -} - -.oo-ui-barToolGroup .oo-ui-tool:last-child { - margin-left: -1px; - border-top-left-radius: 0.25em; - border-bottom-left-radius: 0.25em; -} - -.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.8; -} - -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover { - border-color: rgba(0, 0, 0, 0.2); -} - -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled { - background: #f8fbfd; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff)); - background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - border-color: rgba(0, 0, 0, 0.2); - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff'); - box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07); -} - -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled { - border-right-color: rgba(0, 0, 0, 0.1); -} - -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.2; -} - -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.8; -} - -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 1; -} - -.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.2; -} - -.oo-ui-listToolGroup.oo-ui-popupToolGroup-active { - border-color: rgba(0, 0, 0, 0.2); -} - -.oo-ui-listToolGroup .oo-ui-tool { - margin: -1px 0; - border: solid 1px transparent; -} - -.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled { - background: #f8fbfd; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff)); - background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - border-color: rgba(0, 0, 0, 0.1); - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff'); - box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07); -} - -.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled { - border-top-color: rgba(0, 0, 0, 0.1); -} - -.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover { - border-color: rgba(0, 0, 0, 0.2); -} - -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover { - border-color: rgba(0, 0, 0, 0.2); -} - -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.8; -} - -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 1; -} - -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title { - color: #ccc; -} - -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.2; -} - -.oo-ui-listToolGroup.oo-ui-widget-disabled { - color: #ccc; -} - -.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator, -.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon { - opacity: 0.2; -} - -.oo-ui-menuToolGroup { - border-color: rgba(0, 0, 0, 0.1); -} - -.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover { - border-color: rgba(0, 0, 0, 0.2); -} - -.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active { - border-color: rgba(0, 0, 0, 0.25); -} - -.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover { - background-color: #e1f3ff; -} - -.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title { - color: #ccc; -} - -.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon { - opacity: 0.2; -} - -.oo-ui-menuToolGroup.oo-ui-widget-disabled { - color: #ccc; - border-color: rgba(0, 0, 0, 0.05); -} - -.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator, -.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon { - opacity: 0.2; -} - -.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator, -.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon { - opacity: 0.8; -} - -.oo-ui-popupToolGroup .oo-ui-toolGroup-tools { - background-color: white; - border: solid 1px #ccc; - box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25); -} - -.oo-ui-popupToolGroup-active.oo-ui-widget-enabled { - background: #f8fbfd; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff)); - background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%); - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff'); - box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07); -} - -.oo-ui-optionWidget { - padding: 0.5em 3em 0.5em 2em; -} - -.oo-ui-optionWidget-highlighted { - background-color: #e1f3ff; -} - -.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected { - background-color: #a7dcff; -} - -.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed { - background-color: #a7dcff; -} - -.oo-ui-optionWidget.oo-ui-widget-disabled { - color: #ccc; -} - -.oo-ui-menuWidget { - margin-top: -1px; - background: #fff; - border: solid 1px #ccc; - border-radius: 0 0 0.25em 0.25em; - box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2); -} - -.oo-ui-popupWidget-popup { - background-color: #fff; - border: solid 1px #ccc; - border-radius: 0.25em; - box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2); -} - -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor { - width: 15px; - height: 8px; - margin-right: -7px; - background-image: /* @embed */ url(images/anchor.svg); -} - -.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup { - -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out; - -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out; - -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out; - -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out; - transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out; -} - -.oo-ui-popupWidget-body { - box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25); -} - -.oo-ui-buttonGroupWidget { - display: inline-block; - white-space: nowrap; -} - -.oo-ui-buttonOptionWidget { - padding: 0; -} - -.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected, -.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed, -.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted { - background-color: transparent; -} - -.oo-ui-buttonSelectWidget { - border-radius: 0.3em; -} - -.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button { - margin-right: -1px; - border-radius: 0; -} - -.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonedElement-button { - margin-right: 0; - border-bottom-right-radius: 0.3em; - border-top-right-radius: 0.3em; -} - -.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonedElement-button { - border-top-left-radius: 0.3em; - border-bottom-left-radius: 0.3em; -} - -.oo-ui-inlineMenuWidget-handle { - border: solid 1px rgba(0, 0, 0, 0.1); - border-radius: 0.25em; -} - -.oo-ui-inlineMenuWidget-handle:hover { - border-color: rgba(0, 0, 0, 0.2); -} - -.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator, -.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon { - opacity: 0.8; -} - -.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle { - color: #ccc; - text-shadow: 0 1px 1px #fff; - background-color: #f3f3f3; - border-color: #ddd; -} - -.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator { - opacity: 0.2; -} - -.oo-ui-menuItemWidget.oo-ui-optionWidget-selected { - background-color: transparent; -} - -.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted, -.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected { - background-color: #e1f3ff; -} - -.oo-ui-menuSectionItemWidget { - padding: 0.33em 0.75em; - color: #888; -} - -.oo-ui-outlineControlsWidget { - background-color: #fff; -} - -.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon { - opacity: 0.2; -} - -.oo-ui-outlineItemWidget { - font-size: 1.1em; -} - -.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label { - padding-left: 1.5em; -} - -.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator { - opacity: 0.5; -} - -.oo-ui-outlineItemWidget-level-0 { - padding-right: 3.5em; -} - -.oo-ui-outlineItemWidget-level-0 .oo-ui-iconedElement-icon { - right: 1em; -} - -.oo-ui-outlineItemWidget-level-1 { - padding-right: 5em; -} - -.oo-ui-outlineItemWidget-level-1 .oo-ui-iconedElement-icon { - right: 2.5em; -} - -.oo-ui-outlineItemWidget-level-2 { - padding-right: 6.5em; -} - -.oo-ui-outlineItemWidget-level-2 .oo-ui-iconedElement-icon { - right: 4em; -} - -.oo-ui-selectWidget-depressed .oo-ui-outlineItemWidget.oo-ui-optionWidget-selected { - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); - background-color: #a7dcff; -} - -.oo-ui-outlineItemWidget.oo-ui-flaggableElement-important { - font-weight: bold; -} - -.oo-ui-outlineItemWidget.oo-ui-flaggableElement-placeholder { - font-style: italic; -} - -.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-iconedElement-icon { - opacity: 0.5; -} - -.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-labeledElement-label { - color: #777; -} - -.oo-ui-searchWidget-query { - box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2); -} - -.oo-ui-textInputWidget { - width: 20em; -} - -.oo-ui-textInputWidget input, -.oo-ui-textInputWidget textarea { - padding: 0.5em; - font-family: sans-serif; - font-size: 1em; - background-color: #fff; - border: solid 1px #ccc; - border-radius: 0.25em; - box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd; - -webkit-transition: border-color 200ms, box-shadow 200ms; - -moz-transition: border-color 200ms, box-shadow 200ms; - -ms-transition: border-color 200ms, box-shadow 200ms; - -o-transition: border-color 200ms, box-shadow 200ms; - transition: border-color 200ms, box-shadow 200ms; -} - -.oo-ui-textInputWidget-decorated input, -.oo-ui-textInputWidget-decorated textarea { - padding-right: 2em; -} - -.oo-ui-textInputWidget-icon { - width: 2em; -} - -.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus, -.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus { - border-color: #a7dcff; - outline: none; - box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white; -} - -.oo-ui-textInputWidget input[readonly], -.oo-ui-textInputWidget textarea[readonly] { - color: #777; - text-shadow: 0 1px 1px #fff; -} - -.oo-ui-textInputWidget-pending input, -.oo-ui-textInputWidget-pending textarea { - background-color: transparent; -} - -.oo-ui-textInputWidget.oo-ui-widget-disabled input, -.oo-ui-textInputWidget.oo-ui-widget-disabled input:focus, -.oo-ui-textInputWidget.oo-ui-widget-disabled textarea, -.oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus { - color: #ccc; - text-shadow: 0 1px 1px #fff; - background-color: #f3f3f3; - border-color: #ddd; -} - -.oo-ui-toggleSwitchWidget { - background: #eeeeee; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff)); - background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%); - background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%); - border: solid 1px #ccc; - border-radius: 1em; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff'); - box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd; -} - -.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled { - opacity: 0.5; -} - -.oo-ui-toggleSwitchWidget-grip { - background: #eeeeee; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd)); - background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%); - background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%); - border: 1px #c9c9c9 solid; - border-radius: 1em; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd'); - box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1); -} - -.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover, -.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip { - border-color: #aaa; -} - -.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow { - background: #cde7f4; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa)); - background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%); - border-radius: 1em; - filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa'); - box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07); -} - -.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow { - opacity: 1; -} - -.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow { - display: block; - opacity: 0; -} \ No newline at end of file diff --git a/resources/lib/oojs-ui/oojs-ui-minerva.css b/resources/lib/oojs-ui/oojs-ui-minerva.css new file mode 100644 index 0000000000..bc7c8ef83c --- /dev/null +++ b/resources/lib/oojs-ui/oojs-ui-minerva.css @@ -0,0 +1,11 @@ +/*! + * OOjs UI v0.1.0-pre (43f379c884) + * https://www.mediawiki.org/wiki/OOjs_UI + * + * Copyright 2011–2014 OOjs Team and other contributors. + * Released under the MIT license + * http://oojs.mit-license.org + * + * Date: 2014-08-28T21:49:12Z + */ +.oo-ui-rtl{direction:rtl}.oo-ui-ltr{direction:ltr}.oo-ui-buttonedElement>.oo-ui-buttonedElement-button{cursor:pointer;display:inline-block;vertical-align:middle;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.oo-ui-buttonedElement>.oo-ui-buttonedElement-button>.oo-ui-iconedElement-icon{display:none}.oo-ui-buttonedElement>.oo-ui-buttonedElement-button>.oo-ui-indicatedElement-indicator{display:none}.oo-ui-buttonedElement.oo-ui-widget-disabled>.oo-ui-buttonedElement-button{cursor:default}.oo-ui-buttonedElement.oo-ui-indicatedElement>.oo-ui-buttonedElement-button>.oo-ui-indicatedElement-indicator,.oo-ui-buttonedElement.oo-ui-iconedElement>.oo-ui-buttonedElement-button>.oo-ui-iconedElement-icon{display:inline-block;vertical-align:middle;background-position:center center;background-repeat:no-repeat}.oo-ui-buttonedElement-frameless{display:inline-block;position:relative}.oo-ui-buttonedElement-frameless>.oo-ui-buttonedElement-button>.oo-ui-labeledElement-label{display:inline-block;vertical-align:middle}.oo-ui-buttonedElement-framed>.oo-ui-buttonedElement-button{display:inline-block;vertical-align:top;text-align:center}.oo-ui-buttonedElement-framed>.oo-ui-buttonedElement-button>.oo-ui-labeledElement-label{display:inline-block;vertical-align:middle}.oo-ui-buttonedElement-framed.oo-ui-widget-disabled>.oo-ui-buttonedElement-button,.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active>.oo-ui-buttonedElement-button,.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed>.oo-ui-buttonedElement-button{cursor:default}.oo-ui-buttonedElement>.oo-ui-buttonedElement-button>.oo-ui-iconedElement-icon{margin-left:0}.oo-ui-buttonedElement>.oo-ui-buttonedElement-button>.oo-ui-indicatedElement-indicator{margin-right:-.75em}.oo-ui-buttonedElement.oo-ui-indicatedElement .oo-ui-buttonedElement-button>.oo-ui-indicatedElement-indicator,.oo-ui-buttonedElement.oo-ui-iconedElement .oo-ui-buttonedElement-button>.oo-ui-iconedElement-icon{width:3.35em;height:3.35em;background-size:2em auto}.oo-ui-buttonedElement-frameless>.oo-ui-buttonedElement-button>.oo-ui-labeledElement-label{margin-left:.25em}.oo-ui-buttonedElement-framed>.oo-ui-buttonedElement-button>.oo-ui-labeledElement-label{line-height:1.9em}.oo-ui-clippableElement-clippable{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable{overflow-y:hidden}.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable{overflow-y:auto}.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded{padding:2em}.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget{position:absolute;top:0;left:0;right:0;bottom:3em;overflow-y:auto}.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget{position:absolute;bottom:0;left:0;right:0}.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout{padding:0 0 1em}.oo-ui-fieldLayout{margin-bottom:1em}.oo-ui-fieldLayout:before,.oo-ui-fieldLayout:after{content:" ";display:table}.oo-ui-fieldLayout:after{clear:both}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left>.oo-ui-labeledElement-label,.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right>.oo-ui-labeledElement-label{display:block;float:left}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left>.oo-ui-fieldLayout-field,.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right>.oo-ui-fieldLayout-field{display:block;float:left}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right>.oo-ui-labeledElement-label{text-align:right}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline>.oo-ui-labeledElement-label{display:inline-block;vertical-align:middle}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline>.oo-ui-fieldLayout-field{display:inline-block;vertical-align:middle}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top>.oo-ui-labeledElement-label{display:inline-block}.oo-ui-fieldLayout>.oo-ui-popupButtonWidget>.oo-ui-popupWidget>.oo-ui-popupWidget-popup{z-index:1}.oo-ui-fieldLayout:last-child{margin-bottom:0}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left>.oo-ui-labeledElement-label,.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right>.oo-ui-labeledElement-label{padding-top:.5em;margin-right:5%;width:35%}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left>.oo-ui-fieldLayout-field,.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right>.oo-ui-fieldLayout-field{width:60%}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline>.oo-ui-labeledElement-label{padding:.75em .5em .5em}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline>.oo-ui-fieldLayout-field{padding:.5em 0}.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top>.oo-ui-labeledElement-label{padding:.5em 0}.oo-ui-fieldLayout>.oo-ui-popupButtonWidget>.oo-ui-buttonedElement-button>.oo-ui-iconedElement-icon{margin-top:.25em}.oo-ui-fieldLayout-disabled .oo-ui-labeledElement-label{color:#ccc}.oo-ui-fieldsetLayout{position:relative;margin:0;padding:0}.oo-ui-fieldsetLayout.oo-ui-iconedElement>.oo-ui-iconedElement-icon{display:block;position:absolute;background-position:center center;background-repeat:no-repeat}.oo-ui-fieldsetLayout+.oo-ui-fieldsetLayout{margin-top:2em}.oo-ui-fieldsetLayout>.oo-ui-labeledElement-label{margin-bottom:.5em;padding:.25em 0}.oo-ui-fieldsetLayout.oo-ui-iconedElement>.oo-ui-labeledElement-label{padding-left:1.75em;line-height:1.33em}.oo-ui-fieldsetLayout.oo-ui-iconedElement>.oo-ui-iconedElement-icon{left:0;top:.25em;width:2em;height:2em}.oo-ui-gridLayout{position:absolute;top:0;left:0;right:0;bottom:0}.oo-ui-panelLayout{position:relative;padding:1em 3.35em}.oo-ui-panelLayout-scrollable{overflow-y:auto}.oo-ui-panelLayout-expanded{position:absolute;top:0;left:0;right:0;bottom:0}.oo-ui-stackLayout>.oo-ui-panelLayout{display:none}.oo-ui-stackLayout-continuous>.oo-ui-panelLayout{display:block;position:relative}.oo-ui-popupTool .oo-ui-popupWidget-popup,.oo-ui-popupTool .oo-ui-popupWidget-anchor{z-index:4}.oo-ui-popupTool .oo-ui-popupWidget{margin-left:1.25em;font-size:.8em}.oo-ui-toolGroup{display:inline-block;vertical-align:middle;margin:.3em}.oo-ui-toolGroup-empty{display:none}.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon{background-position:center center;background-repeat:no-repeat}.oo-ui-barToolGroup>.oo-ui-iconedElement-icon,.oo-ui-barToolGroup>.oo-ui-labeledElement-label{display:none}.oo-ui-barToolGroup .oo-ui-tool{display:inline-block;position:relative;vertical-align:top}.oo-ui-barToolGroup .oo-ui-tool-link{display:block}.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon{display:block}.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title{display:none}.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link{cursor:default}.oo-ui-barToolGroup .oo-ui-tool-title,.oo-ui-barToolGroup .oo-ui-tool-accel{display:none}.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link{cursor:pointer}.oo-ui-barToolGroup .oo-ui-tool-link{height:1.5em;padding:.25em}.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon{height:1.5em;width:1.5em}.oo-ui-popupToolGroup{position:relative;height:2em;min-width:2.5em}.oo-ui-popupToolGroup-handle{display:block;cursor:pointer}.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon{position:absolute;background-position:center center;background-repeat:no-repeat}.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle{cursor:default}.oo-ui-popupToolGroup .oo-ui-toolGroup-tools{display:none;position:absolute;z-index:4}.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon{background-repeat:no-repeat;background-position:center center}.oo-ui-popupToolGroup-active.oo-ui-widget-enabled>.oo-ui-toolGroup-tools{display:block}.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon{display:inline-block;vertical-align:middle}.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title{display:inline-block;vertical-align:middle}.oo-ui-popupToolGroup .oo-ui-tool-accel{display:none}.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement{min-width:3.5em}.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon{top:0;width:2em;height:2em}.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator{right:0}.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon{left:.25em}.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label{line-height:2.6em;font-size:.8em;margin:0 1em}.oo-ui-popupToolGroup-header{line-height:2.6em;font-size:.8em;margin:0 .6em;font-weight:700}.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label{margin-left:3em}.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label{margin-right:2.25em}.oo-ui-popupToolGroup .oo-ui-toolGroup-tools{top:2em;left:-1px}.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon{height:2em;width:2em;margin-right:.25em}.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title{line-height:2em;font-size:.8em}.oo-ui-listToolGroup .oo-ui-tool{display:inline-block;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-listToolGroup .oo-ui-tool-link{display:block;cursor:pointer;white-space:nowrap}.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link{cursor:default}.oo-ui-listToolGroup .oo-ui-toolGroup-tools{padding:.25em}.oo-ui-listToolGroup .oo-ui-tool-link{padding-right:.5em}.oo-ui-menuToolGroup .oo-ui-tool{display:block}.oo-ui-menuToolGroup .oo-ui-tool-link{display:block;cursor:pointer;white-space:nowrap}.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon{background-image:none}.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon{background-image:url(images/icons/check.svg)}.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link{cursor:default}.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle{min-width:8em}.oo-ui-menuToolGroup .oo-ui-toolGroup-tools{padding:.25em 0}.oo-ui-menuToolGroup .oo-ui-tool-link{padding:0 1em 0 .25em}.oo-ui-toolbar{clear:both}.oo-ui-toolbar-bar{line-height:1em}.oo-ui-toolbar-actions{float:right}.oo-ui-toolbar-tools{float:left}.oo-ui-toolbar-tools,.oo-ui-toolbar-actions,.oo-ui-toolbar-shadow{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.oo-ui-toolbar-actions .oo-ui-popupWidget{-webkit-touch-callout:default;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.oo-ui-toolbar-shadow{background-position:left top;background-repeat:repeat-x;position:absolute;width:100%;pointer-events:none}.oo-ui-selectWidget{margin:0;padding:0}.oo-ui-optionWidget{position:relative;display:block;cursor:pointer;padding:.8em 1em .8em 3.35em;border:none;border-bottom:1px solid #ddd;font-weight:700}.oo-ui-optionWidget.oo-ui-widget-disabled{cursor:default}.oo-ui-optionWidget .oo-ui-labeledElement-label{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.oo-ui-optionWidget .oo-ui-labeledElement-label{line-height:1.5em}.oo-ui-optionWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label{padding-right:1.5em}.oo-ui-optionWidget-level-0{padding-left:3.5em}.oo-ui-optionWidget-level-0 .oo-ui-iconedElement-icon{left:1em}.oo-ui-optionWidget-level-1{padding-left:5em}.oo-ui-optionWidget-level-1 .oo-ui-iconedElement-icon{left:2.5em}.oo-ui-optionWidget-level-2{padding-left:6.5em}.oo-ui-optionWidget-level-2 .oo-ui-iconedElement-icon{left:4em}.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon,.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator{position:absolute;background-repeat:no-repeat;background-position:center center}.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon,.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator{top:50%;width:2em;height:2em;margin-top:-1em}.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon{left:.5em}.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator{right:.5em}.oo-ui-buttonSelectWidget{display:inline-block;white-space:nowrap}.oo-ui-buttonOptionWidget{display:inline-block;padding:0;background-color:transparent}.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button{position:relative}.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator{position:static;display:inline-block;vertical-align:middle}.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button{height:1.9em}.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator{height:1.9em;margin-top:0}.oo-ui-labelWidget{display:inline-block;padding:.5em 0}.oo-ui-iconWidget{display:inline-block;vertical-align:middle;background-position:center center;background-repeat:no-repeat;line-height:2.5em;height:1.9em;width:1.9em;opacity:.8}.oo-ui-iconWidget.oo-ui-widget-disabled{opacity:.2}.oo-ui-indicatorWidget{display:inline-block;vertical-align:middle;background-position:center center;background-repeat:no-repeat;line-height:2.5em;height:1.9em;width:1.9em;opacity:.8}.oo-ui-indicatorWidget.oo-ui-widget-disabled{opacity:.2}.oo-ui-buttonWidget{display:inline-block;vertical-align:middle}.oo-ui-buttonGroupWidget{border-radius:.3em}.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button{border-radius:0;margin-bottom:-1px;margin-left:-1px}.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button{border-bottom-left-radius:.3em;border-top-left-radius:.3em;margin-left:0}.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button{border-bottom-right-radius:.3em;border-top-right-radius:.3em}.oo-ui-toggleSwitchWidget{position:relative;display:inline-block;vertical-align:middle;overflow:hidden;cursor:pointer;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transform:translateZ(0px);-moz-transform:translateZ(0px);-ms-transform:translateZ(0px);-o-transform:translateZ(0px);transform:translateZ(0px);height:2em;width:4em}.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled{cursor:default}.oo-ui-toggleSwitchWidget-grip{position:absolute;display:block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow{position:absolute;top:0;bottom:0;right:0;left:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow{display:none}.oo-ui-toggleSwitchWidget-grip{top:.25em;left:.25em;width:1.5em;height:1.5em;margin-top:-1px;-webkit-transition:left 200ms ease-in-out,margin-left 200ms ease-in-out;-moz-transition:left 200ms ease-in-out,margin-left 200ms ease-in-out;-ms-transition:left 200ms ease-in-out,margin-left 200ms ease-in-out;-o-transition:left 200ms ease-in-out,margin-left 200ms ease-in-out;transition:left 200ms ease-in-out,margin-left 200ms ease-in-out}.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow{-webkit-transition:opacity 200ms ease-in-out;-moz-transition:opacity 200ms ease-in-out;-ms-transition:opacity 200ms ease-in-out;-o-transition:opacity 200ms ease-in-out;transition:opacity 200ms ease-in-out}.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip{left:2.25em;margin-left:-2px}.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip{left:.25em;margin-left:0}.oo-ui-popupWidget-popup{position:absolute;overflow:hidden;z-index:1}.oo-ui-popupWidget-anchor{display:none;z-index:1}.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor{display:block;position:absolute;background-repeat:no-repeat}.oo-ui-popupWidget-head{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.oo-ui-popupWidget-head .oo-ui-buttonWidget{float:right}.oo-ui-popupWidget-head .oo-ui-labeledElement-label{float:left;cursor:default}.oo-ui-popupWidget-body{clear:both;overflow:hidden}.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup{margin-top:7px}.oo-ui-popupWidget-head{height:2.5em}.oo-ui-popupWidget-head .oo-ui-buttonWidget{margin:.25em}.oo-ui-popupWidget-head .oo-ui-labeledElement-label{margin:.75em 1em}.oo-ui-popupWidget-body-padded{padding:0 1em}.oo-ui-popupButtonWidget{position:relative}.oo-ui-popupButtonWidget .oo-ui-popupWidget{position:absolute;left:1em;cursor:auto}.oo-ui-lookupInputWidget-menu{background-color:#fff}.oo-ui-textInputWidget{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-textInputWidget input,.oo-ui-textInputWidget textarea{display:inline-block;width:100%;resize:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-textInputWidget>.oo-ui-iconedElement-icon,.oo-ui-textInputWidget>.oo-ui-indicatedElement-indicator{position:absolute;top:0;height:100%;background-repeat:no-repeat;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.oo-ui-textInputWidget>.oo-ui-iconedElement-icon{left:0}.oo-ui-textInputWidget>.oo-ui-indicatedElement-indicator{right:0}.oo-ui-textInputWidget input,.oo-ui-textInputWidget textarea{padding:.8em 1em}.oo-ui-menuWidget{position:absolute}.oo-ui-menuWidget input{position:absolute;width:0;height:0;overflow:hidden;opacity:0}.oo-ui-menuItemWidget{position:relative}.oo-ui-menuItemWidget .oo-ui-iconedElement-icon{display:none}.oo-ui-menuItemWidget.oo-ui-optionWidget-selected{background-color:transparent}.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon{display:block}.oo-ui-menuItemWidget.oo-ui-optionWidget-selected{background:#347bff;color:#fff}.oo-ui-menuItemWidget .oo-ui-iconedElement-icon{background-size:24px auto}.oo-ui-menuSectionItemWidget{cursor:default;font-weight:400;color:#777;border:none}.oo-ui-inlineMenuWidget{position:relative;display:inline-block;margin:.25em 0;min-width:20em}.oo-ui-inlineMenuWidget-handle{width:100%;display:inline-block;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon{position:absolute;background-position:center center;background-repeat:no-repeat}.oo-ui-inlineMenuWidget .oo-ui-menuWidget{z-index:1;width:100%}.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle{cursor:default}.oo-ui-inlineMenuWidget-handle{height:2.5em}.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon{top:0;width:2.5em;height:2.5em}.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator{right:0}.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon{left:.25em}.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label{line-height:2.5em;margin:0 .5em}.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label{margin-left:3em}.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label{margin-right:2em}.oo-ui-outlineItemWidget{position:relative;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:.75em}.oo-ui-outlineControlsWidget{height:3em}.oo-ui-outlineControlsWidget-items,.oo-ui-outlineControlsWidget-movers{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-outlineControlsWidget>.oo-ui-iconedElement-icon{float:left;background-position:right center;background-repeat:no-repeat}.oo-ui-outlineControlsWidget-items{float:left}.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget{float:left}.oo-ui-outlineControlsWidget-movers{float:right}.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget{float:right}.oo-ui-outlineControlsWidget-items,.oo-ui-outlineControlsWidget-movers{height:2em;margin:.5em;padding:0}.oo-ui-outlineControlsWidget>.oo-ui-iconedElement-icon{width:1.5em;height:2em;margin:.5em 0 .5em .5em}.oo-ui-outlineControlsWidget-items{margin-left:0}.oo-ui-comboBoxWidget>.oo-ui-selectWidget{z-index:1}.oo-ui-comboBoxWidget>.oo-ui-selectWidget>.oo-ui-selectWidget{min-width:20em}.oo-ui-searchWidget-query{position:absolute;top:0;left:0;right:0}.oo-ui-searchWidget-query .oo-ui-textInputWidget{width:100%}.oo-ui-searchWidget-results{position:absolute;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:auto}.oo-ui-searchWidget-query{height:4em;padding:0 1em}.oo-ui-searchWidget-query .oo-ui-textInputWidget{margin:.75em 0}.oo-ui-searchWidget-results{top:4em;padding:1em;line-height:0}.oo-ui-window{line-height:1em}.oo-ui-window-frame{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-window-frame>iframe{width:100%;height:100%;margin:0;padding:0}.oo-ui-window-content:focus{outline:0}.oo-ui-window-head,.oo-ui-window-foot{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.oo-ui-window-body{margin:0;padding:0;background:0 0}.oo-ui-window-overlay{position:absolute;top:0;left:0}.oo-ui-dialog-content>.oo-ui-window-head,.oo-ui-dialog-content>.oo-ui-window-body,.oo-ui-dialog-content>.oo-ui-window-foot{position:absolute;left:0;right:0;overflow:hidden;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-dialog-content>.oo-ui-window-head{z-index:1;top:0}.oo-ui-dialog-content>.oo-ui-window-body{z-index:2;top:0;bottom:0}.oo-ui-dialog-content>.oo-ui-window-foot{z-index:1;bottom:0}.oo-ui-dialog-content>.oo-ui-window-overlay{z-index:3}.oo-ui-messageDialog-actions-horizontal{display:table;table-layout:fixed;width:100%}.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget{display:table-cell;width:1%}.oo-ui-messageDialog-actions-vertical{display:block}.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget{display:block;overflow:hidden;text-overflow:ellipsis}.oo-ui-messageDialog-actions .oo-ui-actionWidget{position:relative;text-align:center}.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonedElement-button{display:block}.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label{position:relative;top:auto;bottom:auto;display:inline;white-space:nowrap}.oo-ui-messageDialog-title,.oo-ui-messageDialog-message{display:block;text-align:center;padding-top:.5em}.oo-ui-messageDialog-title{font-size:1.5em;line-height:1em;color:#000}.oo-ui-messageDialog-message{font-size:.9em;line-height:1.25em;color:#666}.oo-ui-messageDialog-message-verbose{font-size:1.1em;line-height:1.5em;text-align:left}.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget{border-right:solid 1px #e5e5e5}.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child{border-right-width:0}.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget{border-bottom:solid 1px #e5e5e5}.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child{border-bottom-width:0}.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label{text-align:center;line-height:3.4em;padding:0 2em}.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover{background-color:rgba(0,0,0,.05)}.oo-ui-messageDialog-actions .oo-ui-actionWidget:active{background-color:rgba(0,0,0,.1)}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover{background-color:rgba(8,126,204,.05)}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active{background-color:rgba(8,126,204,.1)}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label{font-weight:700}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover{background-color:rgba(118,171,54,.05)}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active{background-color:rgba(118,171,54,.1)}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover{background-color:rgba(212,83,83,.05)}.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active{background-color:rgba(212,83,83,.1)}.oo-ui-processDialog-location{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.oo-ui-processDialog-title{display:inline}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,.oo-ui-processDialog-actions-other .oo-ui-actionWidget{white-space:nowrap}.oo-ui-processDialog-actions-safe,.oo-ui-processDialog-actions-primary{position:absolute;top:0;bottom:0}.oo-ui-processDialog-actions-safe{left:0}.oo-ui-processDialog-actions-primary{right:0}.oo-ui-processDialog-errors{display:none;position:absolute;top:0;left:0;right:0;bottom:0;z-index:2;overflow-x:hidden;overflow-y:auto}.oo-ui-processDialog-content .oo-ui-window-head{height:3.35em;border-bottom:1px solid #ddd;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.oo-ui-processDialog-content .oo-ui-window-body{top:3.35em;padding:2em 0}.oo-ui-processDialog-navigation{position:relative;height:3.35em;padding:0 1em}.oo-ui-processDialog-location{padding:.25em 0;height:3.35em;cursor:default;text-align:center}.oo-ui-processDialog-title{font-weight:700;line-height:1.85em}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button,.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button{padding:.35em .75em;min-width:1.85em;min-height:1.85em;border:1px solid #ddd;border-radius:4px}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label,.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label{line-height:1.85em;padding:0 1em;font-weight:700;color:#777}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon,.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon{position:absolute;margin-top:-.125em}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button{vertical-align:middle}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button,.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button{border:1px solid transparent}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label,.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label{color:#d11d13}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button{padding:.75em .35em;border:none;border-radius:0}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button{background-color:#347bff}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label,.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label{color:#fff}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon{left:.5em}.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label{padding-left:2.25em}.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon{right:.5em}.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label{padding-right:2.25em}.oo-ui-processDialog-actions-other{position:absolute;bottom:1em}.oo-ui-processDialog>.oo-ui-window-frame{min-height:5em}.oo-ui-processDialog-errors{background-color:rgba(255,255,255,.9);padding:3em 3em 1.5em;text-align:center}.oo-ui-processDialog-errors .oo-ui-buttonWidget{margin:2em 1em}.oo-ui-processDialog-errors-title{font-size:1.5em;color:#000;margin-bottom:2em}.oo-ui-processDialog-error{text-align:left;margin:1em;padding:1em;border:solid 1px #ff9e9e;background-color:#fff7f7;border-radius:.25em}.oo-ui-windowManager-modal>.oo-ui-dialog{position:fixed;width:0;height:0;overflow:hidden}.oo-ui-windowManager-modal>.oo-ui-dialog.oo-ui-window-setup{width:auto;height:auto;top:0;right:0;bottom:0;left:0;padding:1em}.oo-ui-windowManager-modal>.oo-ui-dialog.oo-ui-window-setup>.oo-ui-window-frame{position:fixed;right:0;left:0;margin:auto;overflow:hidden;max-width:100%;max-height:100%}.oo-ui-windowManager-modal>.oo-ui-dialog.oo-ui-window-setup>.oo-ui-window-frame>iframe{width:100%;height:100%}.oo-ui-windowManager-fullscreen>.oo-ui-dialog>.oo-ui-window-frame{width:100%;height:100%;top:0;bottom:0}.oo-ui-windowManager-modal>.oo-ui-dialog{background-color:rgba(255,255,255,.5);opacity:0;-webkit-transition:opacity 250ms ease-in-out;-moz-transition:opacity 250ms ease-in-out;-ms-transition:opacity 250ms ease-in-out;-o-transition:opacity 250ms ease-in-out;transition:opacity 250ms ease-in-out}.oo-ui-windowManager-modal>.oo-ui-dialog>.oo-ui-window-frame{top:0;bottom:0;background-color:#fff;-webkit-transform:translate3d(0,-200%,0);-moz-transform:translate3d(0,-200%,0);-ms-transform:translate3d(0,-200%,0);-o-transform:translate3d(0,-200%,0);transform:translate3d(0,-200%,0);-webkit-transition:transform 250ms ease-in-out;-moz-transition:transform 250ms ease-in-out;-ms-transition:transform 250ms ease-in-out;-o-transition:transform 250ms ease-in-out;transition:transform 250ms ease-in-out}.oo-ui-windowManager-modal>.oo-ui-dialog.oo-ui-window-ready{opacity:1}.oo-ui-windowManager-modal>.oo-ui-dialog.oo-ui-window-ready>.oo-ui-window-frame{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.oo-ui-windowManager-modal.oo-ui-windowManager-floating>.oo-ui-dialog>.oo-ui-window-frame{border:solid 1px #ccc;border-radius:.5em;box-shadow:0 .2em 1em rgba(0,0,0,.3)}.oo-ui-icon-check{background-image:url(themes/minerva/images/icons/check.png);background:#347bff} \ No newline at end of file diff --git a/resources/lib/oojs-ui/oojs-ui.js b/resources/lib/oojs-ui/oojs-ui.js index 13f4282660..1627aa9556 100644 --- a/resources/lib/oojs-ui/oojs-ui.js +++ b/resources/lib/oojs-ui/oojs-ui.js @@ -1,12 +1,12 @@ /*! - * OOjs UI v0.1.0-pre (d6008381aa) + * OOjs UI v0.1.0-pre (43f379c884) * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2014 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2014-08-21T23:45:56Z + * Date: 2014-08-28T21:49:12Z */ ( function ( OO ) { @@ -1982,8 +1982,9 @@ OO.ui.Window.prototype.load = function () { doc.write( '' + '' + - '' + + '
' + '' + '' ); @@ -4256,7 +4257,7 @@ OO.initClass( OO.ui.LabeledElement ); * * @static * @inheritable - * @property {string|Function|null} Label text; a function that returns a nodes or text; or null for + * @property {string|Function|null} Label text; a function that returns nodes or text; or null for * no label */ OO.ui.LabeledElement.static.label = null; @@ -8959,7 +8960,7 @@ OO.mixinClass( OO.ui.LabelWidget, OO.ui.LabeledElement ); /* Static Properties */ -OO.ui.LabelWidget.static.tagName = 'label'; +OO.ui.LabelWidget.static.tagName = 'span'; /* Methods */ @@ -9025,8 +9026,6 @@ OO.mixinClass( OO.ui.OptionWidget, OO.ui.FlaggableElement ); /* Static Properties */ -OO.ui.OptionWidget.static.tagName = 'li'; - OO.ui.OptionWidget.static.selectable = true; OO.ui.OptionWidget.static.highlightable = true; @@ -9955,10 +9954,6 @@ OO.mixinClass( OO.ui.SelectWidget, OO.ui.GroupWidget ); * @param {OO.ui.OptionWidget[]} items Removed items */ -/* Static Properties */ - -OO.ui.SelectWidget.static.tagName = 'ul'; - /* Methods */ /** diff --git a/resources/lib/oojs-ui/oojs-ui.rtl.css b/resources/lib/oojs-ui/oojs-ui.rtl.css deleted file mode 100644 index deca745a57..0000000000 --- a/resources/lib/oojs-ui/oojs-ui.rtl.css +++ /dev/null @@ -1,1271 +0,0 @@ -/*! - * OOjs UI v0.1.0 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2014 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2014-07-22T21:39:24Z - */ -/* Textures */ - -.oo-ui-texture-pending { - background-image: /* @embed */ url(images/textures/pending.gif); -} - -.oo-ui-texture-transparency { - background-image: /* @embed */ url(images/textures/transparency.png); -} - -/* RTL Definitions */ - -/* @noflip */ - -.oo-ui-rtl { - direction: rtl; -} - -/* @noflip */ - -.oo-ui-ltr { - direction: ltr; -} - -.oo-ui-frame { - padding: 0; - margin: 0; -} - -.oo-ui-frame-body { - padding: 0; - margin: 0; - background: none; -} - -.oo-ui-frame-content:focus { - outline: none; -} - -.oo-ui-toolbar { - clear: both; -} - -.oo-ui-toolbar-bar { - line-height: 1em; -} - -.oo-ui-toolbar-bottom .oo-ui-toolbar-bar { - position: absolute; -} - -.oo-ui-toolbar-actions { - float: left; -} - -.oo-ui-toolbar-tools { - float: right; -} - -.oo-ui-toolbar-tools, -.oo-ui-toolbar-actions, -.oo-ui-toolbar-shadow { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-toolbar-actions .oo-ui-popupWidget { - -webkit-user-select: all; - -moz-user-select: all; - -ms-user-select: all; - user-select: all; - -webkit-touch-callout: default; -} - -.oo-ui-toolbar-shadow { - position: absolute; - width: 100%; - pointer-events: none; - background-position: right top; - background-repeat: repeat-x; -} - -.oo-ui-toolGroup { - display: inline-block; - margin: 0.3em; - vertical-align: middle; -} - -.oo-ui-toolGroup-empty { - display: none; -} - -.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-window { - line-height: 1em; -} - -.oo-ui-window > .oo-ui-window-frame { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-window > .oo-ui-window-frame > .oo-ui-frame { - width: 100%; - height: 100%; -} - -.oo-ui-window-head, -.oo-ui-window-foot { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-window-overlay { - position: absolute; - top: 0; - right: 0; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog { - position: fixed; - width: 0; - height: 0; - overflow: hidden; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup { - top: 0; - left: 0; - bottom: 0; - right: 0; - width: auto; - height: auto; - padding: 1em; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame { - position: fixed; - left: 0; - right: 0; - max-width: 100%; - max-height: 100%; - margin: auto; - overflow: hidden; -} - -.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame { - top: 0; - bottom: 0; - width: 100%; - height: 100%; -} - -.oo-ui-messageDialog-actions-horizontal { - display: table; - width: 100%; - table-layout: fixed; -} - -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget { - display: table-cell; - width: 1%; -} - -.oo-ui-messageDialog-actions-vertical { - display: block; -} - -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget { - display: block; - overflow: hidden; - text-overflow: ellipsis; -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget { - position: relative; - text-align: center; -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonedElement-button { - display: block; -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label { - position: relative; - top: auto; - bottom: auto; - display: inline; - white-space: nowrap; -} - -.oo-ui-processDialog-location { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.oo-ui-processDialog-title { - display: inline; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget { - white-space: nowrap; -} - -.oo-ui-processDialog-actions-safe, -.oo-ui-processDialog-actions-primary { - position: absolute; - top: 0; - bottom: 0; -} - -.oo-ui-processDialog-actions-safe { - right: 0; -} - -.oo-ui-processDialog-actions-primary { - left: 0; -} - -.oo-ui-processDialog-errors { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - z-index: 2; - display: none; - padding: 3em 3em 1.5em 3em; - overflow-x: hidden; - overflow-y: auto; -} - -.oo-ui-buttonedElement > .oo-ui-buttonedElement-button { - display: inline-block; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - display: none; - margin-right: 0; -} - -.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator { - display: none; - margin-left: -0.75em; -} - -.oo-ui-buttonedElement.oo-ui-widget-disabled > .oo-ui-buttonedElement-button { - cursor: default; -} - -.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator, -.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - display: inline-block; - vertical-align: middle; - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-buttonedElement-frameless { - position: relative; - display: inline-block; -} - -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - display: inline-block; - margin-right: 0.25em; - vertical-align: middle; -} - -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button { - display: inline-block; - text-align: center; - vertical-align: top; -} - -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - display: inline-block; - line-height: 1.9em; - vertical-align: middle; -} - -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed { - cursor: default; -} - -.oo-ui-clippableElement-clippable { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable { - overflow-y: hidden; -} - -.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable { - overflow-y: auto; -} - -.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded { - padding: 2em; -} - -.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget { - position: absolute; - top: 0; - left: 0; - bottom: 3em; - right: 0; - overflow-y: auto; -} - -.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget { - position: absolute; - left: 0; - bottom: 0; - right: 0; -} - -.oo-ui-fieldLayout { - margin-bottom: 1em; -} - -.oo-ui-fieldLayout:last-child { - margin-bottom: 0; -} - -.oo-ui-fieldLayout:before, -.oo-ui-fieldLayout:after { - display: table; - content: " "; -} - -.oo-ui-fieldLayout:after { - clear: both; -} - -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labeledElement-label, -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label { - display: block; - float: right; - width: 35%; - padding-top: 0.5em; - margin-left: 5%; -} - -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field, -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field { - display: block; - float: right; - width: 60%; -} - -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label { - text-align: left; -} - -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labeledElement-label { - display: inline-block; - padding: 0.75em 0.5em 0.5em 0.5em; - vertical-align: middle; -} - -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field { - display: inline-block; - padding: 0.5em 0; - vertical-align: middle; -} - -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labeledElement-label { - display: inline-block; - padding: 0.5em 0; -} - -.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - margin-top: 0.25em; -} - -.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { - z-index: 1; -} - -.oo-ui-fieldsetLayout { - position: relative; - padding: 0; - margin: 0; -} - -.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout { - margin-top: 2em; -} - -.oo-ui-fieldsetLayout-labeled { - margin-top: -0.75em; -} - -.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label { - padding: 0.25em 0; - margin-bottom: 0.5em; -} - -.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-labeledElement-label { - padding-right: 1.75em; - line-height: 1.33em; -} - -.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-iconedElement-icon { - position: absolute; - top: 0.25em; - right: 0; - display: block; - width: 2em; - height: 2em; - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-gridLayout { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; -} - -.oo-ui-labelWidget { - display: inline-block; - padding: 0.5em 0; -} - -.oo-ui-panelLayout { - position: relative; -} - -.oo-ui-panelLayout-scrollable { - overflow-y: auto; -} - -.oo-ui-panelLayout-expanded { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; -} - -.oo-ui-stackLayout > .oo-ui-panelLayout { - display: none; -} - -.oo-ui-stackLayout-continuous > .oo-ui-panelLayout { - position: relative; - display: block; -} - -.oo-ui-barToolGroup > .oo-ui-iconedElement-icon, -.oo-ui-barToolGroup > .oo-ui-labeledElement-label { - display: none; -} - -.oo-ui-barToolGroup .oo-ui-tool { - position: relative; - display: inline-block; - vertical-align: top; -} - -.oo-ui-barToolGroup .oo-ui-tool-link { - display: block; - height: 1.5em; - padding: 0.25em; -} - -.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - display: block; - width: 1.5em; - height: 1.5em; -} - -.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title { - display: none; -} - -.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link { - cursor: default; -} - -.oo-ui-barToolGroup .oo-ui-tool-title, -.oo-ui-barToolGroup .oo-ui-tool-accel { - display: none; -} - -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link { - cursor: pointer; -} - -.oo-ui-listToolGroup .oo-ui-toolGroup-tools { - padding: 0.25em; -} - -.oo-ui-listToolGroup .oo-ui-tool { - display: inline-block; - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-listToolGroup .oo-ui-tool-link { - display: block; - padding-left: 0.5em; - white-space: nowrap; - cursor: pointer; -} - -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link { - cursor: default; -} - -.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle { - min-width: 8em; -} - -.oo-ui-menuToolGroup .oo-ui-toolGroup-tools { - padding: 0.25em 0 0.25em 0; -} - -.oo-ui-menuToolGroup .oo-ui-tool { - display: block; -} - -.oo-ui-menuToolGroup .oo-ui-tool-link { - display: block; - padding: 0 0.25em 0 1em; - white-space: nowrap; - cursor: pointer; -} - -.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - background-image: none; -} - -.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon { - background-image: /* @embed */ url(images/icons/check.svg); -} - -.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link { - cursor: default; -} - -.oo-ui-popupToolGroup { - position: relative; - height: 2em; - min-width: 2.5em; -} - -.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement { - min-width: 3.5em; -} - -.oo-ui-popupToolGroup-handle { - display: block; - cursor: pointer; -} - -.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator, -.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon { - position: absolute; - top: 0; - width: 2em; - height: 2em; - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator { - left: 0; -} - -.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon { - right: 0.25em; -} - -.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label { - margin: 0 1em; - font-size: 0.8em; - line-height: 2.6em; -} - -.oo-ui-popupToolGroup-header { - margin: 0 0.6em; - font-size: 0.8em; - font-weight: bold; - line-height: 2.6em; -} - -.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle { - cursor: default; -} - -.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label { - margin-right: 3em; -} - -.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label { - margin-left: 2.25em; -} - -.oo-ui-popupToolGroup .oo-ui-toolGroup-tools { - position: absolute; - top: 2em; - right: -1px; - z-index: 4; - display: none; -} - -.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon { - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools { - display: block; -} - -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - display: inline-block; - width: 2em; - height: 2em; - margin-left: 0.25em; - vertical-align: middle; -} - -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title { - display: inline-block; - font-size: 0.8em; - line-height: 2em; - vertical-align: middle; -} - -.oo-ui-popupToolGroup .oo-ui-tool-accel { - display: none; -} - -.oo-ui-popupTool .oo-ui-popupWidget { - margin-right: 1.25em; - font-size: 0.8em; -} - -.oo-ui-popupTool .oo-ui-popupWidget-popup, -.oo-ui-popupTool .oo-ui-popupWidget-anchor { - z-index: 4; -} - -.oo-ui-iconWidget { - display: inline-block; - width: 1.9em; - height: 1.9em; - line-height: 2.5em; - vertical-align: middle; - background-position: center center; - background-repeat: no-repeat; - opacity: 0.8; -} - -.oo-ui-iconWidget.oo-ui-widget-disabled { - opacity: 0.2; -} - -.oo-ui-indicatorWidget { - display: inline-block; - width: 1.9em; - height: 1.9em; - line-height: 2.5em; - vertical-align: middle; - background-position: center center; - background-repeat: no-repeat; - opacity: 0.8; -} - -.oo-ui-indicatorWidget.oo-ui-widget-disabled { - opacity: 0.2; -} - -.oo-ui-selectWidget { - padding: 0; - margin: 0; - list-style: none; -} - -.oo-ui-optionWidget { - position: relative; - display: block; - margin: 0; - list-style: none; - cursor: pointer; - border: none; -} - -.oo-ui-optionWidget.oo-ui-widget-disabled { - cursor: default; -} - -.oo-ui-optionWidget .oo-ui-labeledElement-label { - display: block; - overflow: hidden; - line-height: 1.5em; - text-overflow: ellipsis; - white-space: nowrap; -} - -.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon, -.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator { - position: absolute; - top: 50%; - width: 2em; - height: 2em; - margin-top: -1em; - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon { - right: 0.5em; -} - -.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator { - left: 0.5em; -} - -.oo-ui-menuWidget { - position: absolute; -} - -.oo-ui-menuWidget input { - position: absolute; - width: 0; - height: 0; - overflow: hidden; - opacity: 0; -} - -.oo-ui-popupWidget-popup { - position: absolute; - z-index: 1; - overflow: hidden; -} - -.oo-ui-popupWidget-anchor { - z-index: 1; - display: none; -} - -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup { - margin-top: 7px; -} - -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor { - position: absolute; - display: block; - background-repeat: no-repeat; -} - -.oo-ui-popupWidget-head { - height: 2.5em; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-popupWidget-head .oo-ui-buttonWidget { - float: left; - margin: 0.25em; -} - -.oo-ui-popupWidget-head .oo-ui-labeledElement-label { - float: right; - margin: 0.75em 1em; - cursor: default; -} - -.oo-ui-popupWidget-body { - overflow: hidden; - clear: both; -} - -.oo-ui-popupWidget-body-padded { - padding: 0 1em; -} - -.oo-ui-buttonGroupWidget { - border-radius: 0.3em; -} - -.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button { - margin-bottom: -1px; - margin-right: -1px; - border-radius: 0; -} - -.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button { - margin-right: 0; - border-bottom-right-radius: 0.3em; - border-top-right-radius: 0.3em; -} - -.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button { - border-top-left-radius: 0.3em; - border-bottom-left-radius: 0.3em; -} - -.oo-ui-buttonOptionWidget { - display: inline-block; - background-color: transparent; -} - -.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button { - position: relative; - height: 1.9em; -} - -.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon, -.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator { - position: static; - display: inline-block; - height: 1.9em; - margin-top: 0; - vertical-align: middle; -} - -.oo-ui-buttonSelectWidget { - display: inline-block; - white-space: nowrap; -} - -.oo-ui-buttonWidget { - display: inline-block; - vertical-align: middle; -} - -.oo-ui-inlineMenuWidget { - position: relative; - display: inline-block; - min-width: 20em; - margin: 0.25em 0; -} - -.oo-ui-inlineMenuWidget-handle { - display: inline-block; - width: 100%; - height: 2.5em; - cursor: pointer; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator, -.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon { - position: absolute; - top: 0; - width: 2.5em; - height: 2.5em; - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator { - left: 0; -} - -.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon { - right: 0.25em; -} - -.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label { - margin: 0 0.5em; - line-height: 2.5em; -} - -.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label { - margin-right: 3em; -} - -.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label { - margin-left: 2em; -} - -.oo-ui-inlineMenuWidget .oo-ui-menuWidget { - z-index: 1; - width: 100%; -} - -.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle { - cursor: default; -} - -.oo-ui-menuItemWidget { - position: relative; -} - -.oo-ui-menuItemWidget .oo-ui-iconedElement-icon { - display: none; -} - -.oo-ui-menuItemWidget.oo-ui-optionWidget-selected { - background-color: transparent; -} - -.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon { - display: block; -} - -.oo-ui-menuSectionItemWidget { - cursor: default; -} - -.oo-ui-outlineControlsWidget { - height: 3em; -} - -.oo-ui-outlineControlsWidget-items, -.oo-ui-outlineControlsWidget-movers { - float: right; - height: 2em; - padding: 0; - margin: 0.5em; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon { - float: right; - width: 1.5em; - height: 2em; - margin: 0.5em 0.5em 0.5em 0; - background-position: left center; - background-repeat: no-repeat; -} - -.oo-ui-outlineControlsWidget-items { - float: right; - margin-right: 0; -} - -.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget { - float: right; -} - -.oo-ui-outlineControlsWidget-movers { - float: left; -} - -.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget { - float: left; -} - -.oo-ui-outlineItemWidget { - position: relative; - padding: 0.75em; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-popupButtonWidget { - position: relative; -} - -.oo-ui-popupButtonWidget .oo-ui-popupWidget { - position: absolute; - right: 1em; - cursor: auto; -} - -.oo-ui-searchWidget-query { - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4em; - padding: 0 1em; -} - -.oo-ui-searchWidget-query .oo-ui-textInputWidget { - width: 100%; - margin: 0.75em 0; -} - -.oo-ui-searchWidget-results { - position: absolute; - top: 4em; - left: 0; - bottom: 0; - right: 0; - padding: 1em; - overflow-x: hidden; - overflow-y: auto; - line-height: 0; -} - -.oo-ui-textInputWidget { - position: relative; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-textInputWidget input, -.oo-ui-textInputWidget textarea { - display: inline-block; - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - resize: none; -} - -.oo-ui-textInputWidget-icon { - position: absolute; - top: 0; - right: 0; - height: 100%; - background-position: left center; - background-repeat: no-repeat; -} - -.oo-ui-toggleSwitchWidget { - position: relative; - display: inline-block; - width: 4em; - height: 2em; - overflow: hidden; - vertical-align: middle; - cursor: pointer; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled { - cursor: default; -} - -.oo-ui-toggleSwitchWidget-grip { - position: absolute; - top: 0.25em; - right: 0.25em; - display: block; - width: 1.5em; - height: 1.5em; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out; - -moz-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out; - -ms-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out; - -o-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out; - transition: right 200ms ease-in-out, margin-right 200ms ease-in-out; -} - -.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - -webkit-transition: opacity 200ms ease-in-out; - -moz-transition: opacity 200ms ease-in-out; - -ms-transition: opacity 200ms ease-in-out; - -o-transition: opacity 200ms ease-in-out; - transition: opacity 200ms ease-in-out; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip { - right: 2.25em; - margin-right: -2px; -} - -.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip { - right: 0.25em; - margin-right: 0; -} - -.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow { - display: none; -} - -/* Icons */ - -.oo-ui-icon-add-item { - background-image: /* @embed */ url(images/icons/add-item.png); -} - -.oo-ui-icon-advanced { - background-image: /* @embed */ url(images/icons/advanced.png); -} - -.oo-ui-icon-alert { - background-image: /* @embed */ url(images/icons/alert.png); -} - -.oo-ui-icon-check { - background-image: /* @embed */ url(images/icons/check.png); -} - -.oo-ui-icon-clear { - background-image: /* @embed */ url(images/icons/clear.png); -} - -.oo-ui-icon-close { - background-image: /* @embed */ url(images/icons/close.png); -} - -.oo-ui-icon-code { - background-image: /* @embed */ url(images/icons/code.png); -} - -.oo-ui-icon-collapse { - background-image: /* @embed */ url(images/icons/collapse.png); -} - -.oo-ui-icon-comment { - background-image: /* @embed */ url(images/icons/comment.png); -} - -.oo-ui-icon-expand { - background-image: /* @embed */ url(images/icons/expand.png); -} - -.oo-ui-icon-help { - background-image: /* @embed */ url(images/icons/help.png); -} - -.oo-ui-icon-info { - background-image: /* @embed */ url(images/icons/info.png); -} - -.oo-ui-icon-link { - background-image: /* @embed */ url(images/icons/link.png); -} - -.oo-ui-icon-menu { - background-image: /* @embed */ url(images/icons/menu.png); -} - -.oo-ui-icon-next { - background-image: /* @embed */ url(images/icons/move-rtl.png); -} - -.oo-ui-icon-picture { - background-image: /* @embed */ url(images/icons/picture.png); -} - -.oo-ui-icon-previous { - background-image: /* @embed */ url(images/icons/move-ltr.png); -} - -.oo-ui-icon-redo { - background-image: /* @embed */ url(images/icons/arched-arrow-rtl.png); -} - -.oo-ui-icon-remove { - background-image: /* @embed */ url(images/icons/remove.png); -} - -.oo-ui-icon-search { - background-image: /* @embed */ url(images/icons/search.png); -} - -.oo-ui-icon-settings { - background-image: /* @embed */ url(images/icons/settings.png); -} - -.oo-ui-icon-tag { - background-image: /* @embed */ url(images/icons/tag.png); -} - -.oo-ui-icon-undo { - background-image: /* @embed */ url(images/icons/arched-arrow-ltr.png); -} - -.oo-ui-icon-window { - background-image: /* @embed */ url(images/icons/window.png); -} - -/* Indicators */ - -.oo-ui-indicator-alert { - background-image: /* @embed */ url(images/indicators/alert.png); -} - -.oo-ui-indicator-down { - background-image: /* @embed */ url(images/indicators/arrow-down.png); -} - -.oo-ui-indicator-next { - background-image: /* @embed */ url(images/indicators/arrow-rtl.png); -} - -.oo-ui-indicator-previous { - background-image: /* @embed */ url(images/indicators/arrow-ltr.png); -} - -.oo-ui-indicator-required { - background-image: /* @embed */ url(images/indicators/required.png); -} - -.oo-ui-indicator-up { - background-image: /* @embed */ url(images/indicators/arrow-up.png); -} \ No newline at end of file diff --git a/resources/lib/oojs-ui/oojs-ui.svg.css b/resources/lib/oojs-ui/oojs-ui.svg.css index 17432f8fe1..7f919a3f68 100644 --- a/resources/lib/oojs-ui/oojs-ui.svg.css +++ b/resources/lib/oojs-ui/oojs-ui.svg.css @@ -1,1101 +1,11 @@ /*! - * OOjs UI v0.1.0-pre (d6008381aa) + * OOjs UI v0.1.0-pre (43f379c884) * https://www.mediawiki.org/wiki/OOjs_UI * * Copyright 2011–2014 OOjs Team and other contributors. * Released under the MIT license * http://oojs.mit-license.org * - * Date: 2014-08-21T23:45:56Z + * Date: 2014-08-28T21:49:12Z */ -/* Textures */ -.oo-ui-texture-pending { - background-image: /* @embed */ url(images/textures/pending.gif); -} -.oo-ui-texture-transparency { - background-image: /* @embed */ url(images/textures/transparency.png); -} -/* RTL Definitions */ -/* @noflip */ -.oo-ui-rtl { - direction: rtl; -} -/* @noflip */ -.oo-ui-ltr { - direction: ltr; -} - -.oo-ui-toolbar { - clear: both; -} -.oo-ui-toolbar-bar { - line-height: 1em; -} -.oo-ui-toolbar-actions { - float: right; -} -.oo-ui-toolbar-tools { - float: left; -} -.oo-ui-toolbar-tools, -.oo-ui-toolbar-actions, -.oo-ui-toolbar-shadow { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.oo-ui-toolbar-actions .oo-ui-popupWidget { - -webkit-touch-callout: default; - -webkit-user-select: all; - -moz-user-select: all; - -ms-user-select: all; - user-select: all; -} -.oo-ui-toolbar-shadow { - background-position: left top; - background-repeat: repeat-x; - position: absolute; - width: 100%; - pointer-events: none; -} - -.oo-ui-toolGroup { - display: inline-block; - margin: 0.3em; - vertical-align: middle; -} -.oo-ui-toolGroup-empty { - display: none; -} -.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-window { - line-height: 1em; - /* Content div takes focus when opened, so hide outline */ -} -.oo-ui-window-frame { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-window-frame > iframe { - width: 100%; - height: 100%; - margin: 0; - padding: 0; -} -.oo-ui-window-content:focus { - outline: none; -} -.oo-ui-window-head, -.oo-ui-window-foot { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.oo-ui-window-body { - margin: 0; - padding: 0; - background: none; -} -.oo-ui-window-overlay { - position: absolute; - top: 0; - left: 0; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog { - position: fixed; - width: 0; - height: 0; - overflow: hidden; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup { - width: auto; - height: auto; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1em; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame { - position: fixed; - right: 0; - left: 0; - margin: auto; - overflow: hidden; - max-width: 100%; - max-height: 100%; -} -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe { - width: 100%; - height: 100%; -} -.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame { - width: 100%; - height: 100%; - top: 0; - bottom: 0; -} - -.oo-ui-messageDialog-actions-horizontal { - display: table; - table-layout: fixed; - width: 100%; -} -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget { - display: table-cell; - width: 1%; -} -.oo-ui-messageDialog-actions-vertical { - display: block; -} -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget { - display: block; - overflow: hidden; - text-overflow: ellipsis; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget { - position: relative; - text-align: center; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonedElement-button { - display: block; -} -.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label { - position: relative; - top: auto; - bottom: auto; - display: inline; - white-space: nowrap; -} - -.oo-ui-processDialog-location { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.oo-ui-processDialog-title { - display: inline; -} -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget { - white-space: nowrap; -} -.oo-ui-processDialog-actions-safe, -.oo-ui-processDialog-actions-primary { - position: absolute; - top: 0; - bottom: 0; -} -.oo-ui-processDialog-actions-safe { - left: 0; -} -.oo-ui-processDialog-actions-primary { - right: 0; -} -.oo-ui-processDialog-errors { - display: none; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - padding: 3em 3em 1.5em 3em; - z-index: 2; - overflow-x: hidden; - overflow-y: auto; -} - -.oo-ui-buttonedElement > .oo-ui-buttonedElement-button { - cursor: pointer; - display: inline-block; - vertical-align: middle; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - display: none; - margin-left: 0; -} -.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator { - display: none; - margin-right: -0.75em; -} -.oo-ui-buttonedElement.oo-ui-widget-disabled > .oo-ui-buttonedElement-button { - cursor: default; -} -.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator, -.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - display: inline-block; - vertical-align: middle; - background-position: center center; - background-repeat: no-repeat; -} -.oo-ui-buttonedElement-frameless { - display: inline-block; - position: relative; -} -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - display: inline-block; - vertical-align: middle; - margin-left: 0.25em; -} -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button { - display: inline-block; - vertical-align: top; - text-align: center; -} -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - display: inline-block; - vertical-align: middle; - line-height: 1.9em; -} -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button { - cursor: default; -} - -.oo-ui-clippableElement-clippable { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable { - overflow-y: hidden; -} -.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable { - overflow-y: auto; -} -.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded { - padding: 2em; -} -.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 3em; - overflow-y: auto; -} -.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget { - position: absolute; - bottom: 0; - left: 0; - right: 0; -} - -.oo-ui-fieldLayout { - margin-bottom: 1em; -} -.oo-ui-fieldLayout:last-child { - margin-bottom: 0; -} -.oo-ui-fieldLayout:before, -.oo-ui-fieldLayout:after { - content: " "; - display: table; -} -.oo-ui-fieldLayout:after { - clear: both; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labeledElement-label, -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label { - display: block; - float: left; - width: 35%; - padding-top: 0.5em; - margin-right: 5%; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field, -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field { - display: block; - float: left; - width: 60%; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label { - text-align: right; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labeledElement-label { - display: inline-block; - vertical-align: middle; - padding: 0.75em 0.5em 0.5em 0.5em; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field { - display: inline-block; - vertical-align: middle; - padding: 0.5em 0; -} -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labeledElement-label { - display: inline-block; - padding: 0.5em 0; -} -.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - margin-top: 0.25em; -} -.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { - z-index: 1; -} - -.oo-ui-fieldsetLayout { - position: relative; - margin: 0; - padding: 0; -} -.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout { - margin-top: 2em; -} -.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label { - margin-bottom: 0.5em; - padding: 0.25em 0; -} -.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-labeledElement-label { - padding-left: 1.75em; - line-height: 1.33em; -} -.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-iconedElement-icon { - display: block; - position: absolute; - left: 0; - top: 0.25em; - width: 2em; - height: 2em; - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-gridLayout { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; -} - -.oo-ui-labelWidget { - display: inline-block; - padding: 0.5em 0; -} - -.oo-ui-panelLayout { - position: relative; -} -.oo-ui-panelLayout-scrollable { - overflow-y: auto; -} -.oo-ui-panelLayout-expanded { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; -} - -.oo-ui-stackLayout > .oo-ui-panelLayout { - display: none; -} -.oo-ui-stackLayout-continuous > .oo-ui-panelLayout { - display: block; - position: relative; -} - -.oo-ui-barToolGroup > .oo-ui-iconedElement-icon, -.oo-ui-barToolGroup > .oo-ui-labeledElement-label { - display: none; -} -.oo-ui-barToolGroup .oo-ui-tool { - display: inline-block; - position: relative; - vertical-align: top; -} -.oo-ui-barToolGroup .oo-ui-tool-link { - display: block; - height: 1.5em; - padding: 0.25em; -} -.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - display: block; - height: 1.5em; - width: 1.5em; -} -.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title { - display: none; -} -.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link { - cursor: default; -} -.oo-ui-barToolGroup .oo-ui-tool-title, -.oo-ui-barToolGroup .oo-ui-tool-accel { - display: none; -} -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link { - cursor: pointer; -} - -.oo-ui-listToolGroup .oo-ui-toolGroup-tools { - padding: 0.25em; -} -.oo-ui-listToolGroup .oo-ui-tool { - display: inline-block; - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-listToolGroup .oo-ui-tool-link { - display: block; - cursor: pointer; - white-space: nowrap; - padding-right: 0.5em; -} -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link { - cursor: default; -} - -.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle { - min-width: 8em; -} -.oo-ui-menuToolGroup .oo-ui-toolGroup-tools { - padding: 0.25em 0 0.25em 0; -} -.oo-ui-menuToolGroup .oo-ui-tool { - display: block; -} -.oo-ui-menuToolGroup .oo-ui-tool-link { - display: block; - cursor: pointer; - white-space: nowrap; - padding: 0 1em 0 0.25em; -} -.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - background-image: none; -} -.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon { - background-image: /* @embed */ url(images/icons/check.svg); -} -.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link { - cursor: default; -} - -.oo-ui-popupToolGroup { - position: relative; - height: 2em; - min-width: 2.5em; -} -.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement { - min-width: 3.5em; -} -.oo-ui-popupToolGroup-handle { - display: block; - cursor: pointer; -} -.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator, -.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon { - position: absolute; - top: 0; - width: 2em; - height: 2em; - background-position: center center; - background-repeat: no-repeat; -} -.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator { - right: 0; -} -.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon { - left: 0.25em; -} -.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label { - line-height: 2.6em; - font-size: 0.8em; - margin: 0 1em; -} -.oo-ui-popupToolGroup-header { - line-height: 2.6em; - font-size: 0.8em; - margin: 0 0.6em; - font-weight: bold; -} -.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle { - cursor: default; -} -.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label { - margin-left: 3em; -} -.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label { - margin-right: 2.25em; -} -.oo-ui-popupToolGroup .oo-ui-toolGroup-tools { - display: none; - position: absolute; - top: 2em; - left: -1px; - z-index: 4; -} -.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon { - background-repeat: no-repeat; - background-position: center center; -} -.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools { - display: block; -} -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - display: inline-block; - vertical-align: middle; - height: 2em; - width: 2em; - margin-right: 0.25em; -} -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title { - display: inline-block; - vertical-align: middle; - line-height: 2em; - font-size: 0.8em; -} -.oo-ui-popupToolGroup .oo-ui-tool-accel { - display: none; -} - -.oo-ui-popupTool .oo-ui-popupWidget { - margin-left: 1.25em; - font-size: 0.8em; -} -.oo-ui-popupTool .oo-ui-popupWidget-popup, -.oo-ui-popupTool .oo-ui-popupWidget-anchor { - z-index: 4; -} - -.oo-ui-iconWidget { - display: inline-block; - vertical-align: middle; - line-height: 2.5em; - height: 1.9em; - width: 1.9em; - background-position: center center; - background-repeat: no-repeat; - opacity: 0.8; -} -.oo-ui-iconWidget.oo-ui-widget-disabled { - opacity: 0.2; -} - -.oo-ui-indicatorWidget { - display: inline-block; - vertical-align: middle; - line-height: 2.5em; - height: 1.9em; - width: 1.9em; - background-position: center center; - background-repeat: no-repeat; - opacity: 0.8; -} -.oo-ui-indicatorWidget.oo-ui-widget-disabled { - opacity: 0.2; -} - -.oo-ui-selectWidget { - list-style: none; - margin: 0; - padding: 0; -} - -.oo-ui-optionWidget { - position: relative; - display: block; - border: none; - list-style: none; - margin: 0; - cursor: pointer; -} -.oo-ui-optionWidget.oo-ui-widget-disabled { - cursor: default; -} -.oo-ui-optionWidget .oo-ui-labeledElement-label { - display: block; - line-height: 1.5em; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} - -.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon, -.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator { - position: absolute; - top: 50%; - width: 2em; - height: 2em; - margin-top: -1em; - background-repeat: no-repeat; - background-position: center center; -} -.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon { - left: 0.5em; -} -.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator { - right: 0.5em; -} - -.oo-ui-menuWidget { - position: absolute; -} -.oo-ui-menuWidget input { - position: absolute; - width: 0; - height: 0; - overflow: hidden; - opacity: 0; -} - -.oo-ui-comboBoxWidget > .oo-ui-selectWidget { - z-index: 1; - min-width: 20em; -} - -.oo-ui-popupWidget-popup { - position: absolute; - overflow: hidden; - z-index: 1; -} -.oo-ui-popupWidget-anchor { - display: none; - z-index: 1; -} -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup { - margin-top: 7px; -} -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor { - display: block; - position: absolute; - background-repeat: no-repeat; -} -.oo-ui-popupWidget-head { - height: 2.5em; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.oo-ui-popupWidget-head .oo-ui-buttonWidget { - float: right; - margin: 0.25em; -} -.oo-ui-popupWidget-head .oo-ui-labeledElement-label { - float: left; - margin: 0.75em 1em; - cursor: default; -} -.oo-ui-popupWidget-body { - clear: both; - overflow: hidden; -} -.oo-ui-popupWidget-body-padded { - padding: 0 1em; -} - -.oo-ui-buttonGroupWidget { - border-radius: 0.3em; -} -.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button { - border-radius: 0; - margin-bottom: -1px; - margin-left: -1px; -} -.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button { - border-bottom-left-radius: 0.3em; - border-top-left-radius: 0.3em; - margin-left: 0; -} -.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button { - border-bottom-right-radius: 0.3em; - border-top-right-radius: 0.3em; -} - -.oo-ui-buttonOptionWidget { - display: inline-block; - background-color: transparent; -} -.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button { - position: relative; - height: 1.9em; -} -.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon, -.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator { - position: static; - display: inline-block; - vertical-align: middle; - height: 1.9em; - margin-top: 0; -} - -.oo-ui-buttonSelectWidget { - display: inline-block; - white-space: nowrap; -} - -.oo-ui-buttonWidget { - display: inline-block; - vertical-align: middle; -} - -.oo-ui-inlineMenuWidget { - position: relative; - display: inline-block; - margin: 0.25em 0; - min-width: 20em; -} -.oo-ui-inlineMenuWidget-handle { - display: inline-block; - width: 100%; - height: 2.5em; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator, -.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon { - position: absolute; - top: 0; - width: 2.5em; - height: 2.5em; - background-position: center center; - background-repeat: no-repeat; -} -.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator { - right: 0; -} -.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon { - left: 0.25em; -} -.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label { - line-height: 2.5em; - margin: 0 0.5em; -} -.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label { - margin-left: 3em; -} -.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label { - margin-right: 2em; -} -.oo-ui-inlineMenuWidget .oo-ui-menuWidget { - width: 100%; - z-index: 1; -} -.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle { - cursor: default; -} - -.oo-ui-menuItemWidget { - position: relative; -} -.oo-ui-menuItemWidget .oo-ui-iconedElement-icon { - display: none; -} -.oo-ui-menuItemWidget.oo-ui-optionWidget-selected { - background-color: transparent; -} -.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon { - display: block; -} - -.oo-ui-menuSectionItemWidget { - cursor: default; -} - -.oo-ui-outlineControlsWidget { - height: 3em; -} -.oo-ui-outlineControlsWidget-items, -.oo-ui-outlineControlsWidget-movers { - float: left; - height: 2em; - margin: 0.5em; - padding: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon { - float: left; - width: 1.5em; - height: 2em; - margin: 0.5em 0 0.5em 0.5em; - background-position: right center; - background-repeat: no-repeat; -} -.oo-ui-outlineControlsWidget-items { - float: left; - margin-left: 0; -} -.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget { - float: left; -} -.oo-ui-outlineControlsWidget-movers { - float: right; -} -.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget { - float: right; -} - -.oo-ui-outlineItemWidget { - position: relative; - padding: 0.75em; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.oo-ui-popupButtonWidget { - position: relative; -} -.oo-ui-popupButtonWidget .oo-ui-popupWidget { - position: absolute; - left: 1em; - cursor: auto; -} - -.oo-ui-searchWidget-query { - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4em; - padding: 0 1em; -} -.oo-ui-searchWidget-query .oo-ui-textInputWidget { - width: 100%; - margin: 0.75em 0; -} -.oo-ui-searchWidget-results { - position: absolute; - top: 4em; - bottom: 0; - left: 0; - right: 0; - padding: 1em; - overflow-x: hidden; - overflow-y: auto; - line-height: 0; -} - -.oo-ui-textInputWidget { - position: relative; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-textInputWidget input, -.oo-ui-textInputWidget textarea { - display: inline-block; - width: 100%; - resize: none; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.oo-ui-textInputWidget > .oo-ui-iconedElement-icon, -.oo-ui-textInputWidget > .oo-ui-indicatedElement-indicator { - position: absolute; - top: 0; - height: 100%; - background-repeat: no-repeat; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.oo-ui-textInputWidget > .oo-ui-iconedElement-icon { - left: 0; -} -.oo-ui-textInputWidget > .oo-ui-indicatedElement-indicator { - right: 0; -} - -.oo-ui-toggleSwitchWidget { - position: relative; - display: inline-block; - vertical-align: middle; - height: 2em; - width: 4em; - overflow: hidden; - cursor: pointer; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transform: translateZ(0px); - -moz-transform: translateZ(0px); - -ms-transform: translateZ(0px); - -o-transform: translateZ(0px); - transform: translateZ(0px); -} -.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled { - cursor: default; -} -.oo-ui-toggleSwitchWidget-grip { - position: absolute; - display: block; - top: 0.25em; - left: 0.25em; - width: 1.5em; - height: 1.5em; - margin-top: -1px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out; - -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out; - -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out; - -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out; - transition: left 200ms ease-in-out, margin-left 200ms ease-in-out; -} -.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow { - position: absolute; - top: 0; - bottom: 0; - right: 0; - left: 0; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-transition: opacity 200ms ease-in-out; - -moz-transition: opacity 200ms ease-in-out; - -ms-transition: opacity 200ms ease-in-out; - -o-transition: opacity 200ms ease-in-out; - transition: opacity 200ms ease-in-out; -} -.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip { - left: 2.25em; - margin-left: -2px; -} -.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip { - left: 0.25em; - margin-left: 0; -} -.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow { - display: none; -} - -/* Icons */ -.oo-ui-icon-add-item { - background-image: /* @embed */ url(images/icons/add-item.svg); -} -.oo-ui-icon-advanced { - background-image: /* @embed */ url(images/icons/advanced.svg); -} -.oo-ui-icon-alert { - background-image: /* @embed */ url(images/icons/alert.svg); -} -.oo-ui-icon-check { - background-image: /* @embed */ url(images/icons/check.svg); -} -.oo-ui-icon-clear { - background-image: /* @embed */ url(images/icons/clear.svg); -} -.oo-ui-icon-close { - background-image: /* @embed */ url(images/icons/close.svg); -} -.oo-ui-icon-code { - background-image: /* @embed */ url(images/icons/code.svg); -} -.oo-ui-icon-collapse { - background-image: /* @embed */ url(images/icons/collapse.svg); -} -.oo-ui-icon-comment { - background-image: /* @embed */ url(images/icons/comment.svg); -} -.oo-ui-icon-expand { - background-image: /* @embed */ url(images/icons/expand.svg); -} -.oo-ui-icon-help { - background-image: /* @embed */ url(images/icons/help.svg); -} -.oo-ui-icon-info { - background-image: /* @embed */ url(images/icons/info.svg); -} -.oo-ui-icon-link { - background-image: /* @embed */ url(images/icons/link.svg); -} -.oo-ui-icon-menu { - background-image: /* @embed */ url(images/icons/menu.svg); -} -.oo-ui-icon-next { - background-image: /* @embed */ url(images/icons/move-ltr.svg); -} -.oo-ui-icon-picture { - background-image: /* @embed */ url(images/icons/picture.svg); -} -.oo-ui-icon-previous { - background-image: /* @embed */ url(images/icons/move-rtl.svg); -} -.oo-ui-icon-redo { - background-image: /* @embed */ url(images/icons/arched-arrow-ltr.svg); -} -.oo-ui-icon-remove { - background-image: /* @embed */ url(images/icons/remove.svg); -} -.oo-ui-icon-search { - background-image: /* @embed */ url(images/icons/search.svg); -} -.oo-ui-icon-settings { - background-image: /* @embed */ url(images/icons/settings.svg); -} -.oo-ui-icon-tag { - background-image: /* @embed */ url(images/icons/tag.svg); -} -.oo-ui-icon-undo { - background-image: /* @embed */ url(images/icons/arched-arrow-rtl.svg); -} -.oo-ui-icon-window { - background-image: /* @embed */ url(images/icons/window.svg); -} -/* Indicators */ -.oo-ui-indicator-alert { - background-image: /* @embed */ url(images/indicators/alert.svg); -} -.oo-ui-indicator-down { - background-image: /* @embed */ url(images/indicators/arrow-down.svg); -} -.oo-ui-indicator-next { - background-image: /* @embed */ url(images/indicators/arrow-ltr.svg); -} -.oo-ui-indicator-previous { - background-image: /* @embed */ url(images/indicators/arrow-rtl.svg); -} -.oo-ui-indicator-required { - background-image: /* @embed */ url(images/indicators/required.svg); -} -.oo-ui-indicator-up { - background-image: /* @embed */ url(images/indicators/arrow-up.svg); -} +.oo-ui-icon-add-item{background-image:url(images/icons/add-item.svg)}.oo-ui-icon-advanced{background-image:url(images/icons/advanced.svg)}.oo-ui-icon-alert{background-image:url(images/icons/alert.svg)}.oo-ui-icon-check{background-image:url(images/icons/check.svg)}.oo-ui-icon-clear{background-image:url(images/icons/clear.svg)}.oo-ui-icon-close{background-image:url(images/icons/close.svg)}.oo-ui-icon-code{background-image:url(images/icons/code.svg)}.oo-ui-icon-collapse{background-image:url(images/icons/collapse.svg)}.oo-ui-icon-comment{background-image:url(images/icons/comment.svg)}.oo-ui-icon-expand{background-image:url(images/icons/expand.svg)}.oo-ui-icon-help{background-image:url(images/icons/help.svg)}.oo-ui-icon-info{background-image:url(images/icons/info.svg)}.oo-ui-icon-link{background-image:url(images/icons/link.svg)}.oo-ui-icon-menu{background-image:url(images/icons/menu.svg)}.oo-ui-icon-next{background-image:url(images/icons/move-ltr.svg)}.oo-ui-icon-picture{background-image:url(images/icons/picture.svg)}.oo-ui-icon-previous{background-image:url(images/icons/move-rtl.svg)}.oo-ui-icon-redo{background-image:url(images/icons/arched-arrow-ltr.svg)}.oo-ui-icon-remove{background-image:url(images/icons/remove.svg)}.oo-ui-icon-search{background-image:url(images/icons/search.svg)}.oo-ui-icon-settings{background-image:url(images/icons/settings.svg)}.oo-ui-icon-tag{background-image:url(images/icons/tag.svg)}.oo-ui-icon-undo{background-image:url(images/icons/arched-arrow-rtl.svg)}.oo-ui-icon-window{background-image:url(images/icons/window.svg)}.oo-ui-indicator-alert{background-image:url(images/indicators/alert.svg)}.oo-ui-indicator-down{background-image:url(images/indicators/arrow-down.svg)}.oo-ui-indicator-next{background-image:url(images/indicators/arrow-ltr.svg)}.oo-ui-indicator-previous{background-image:url(images/indicators/arrow-rtl.svg)}.oo-ui-indicator-required{background-image:url(images/indicators/required.svg)}.oo-ui-indicator-up{background-image:url(images/indicators/arrow-up.svg)}.oo-ui-texture-pending{background-image:url(images/textures/pending.gif)}.oo-ui-texture-transparency{background-image:url(images/textures/transparency.svg)} \ No newline at end of file diff --git a/resources/lib/oojs-ui/oojs-ui.svg.rtl.css b/resources/lib/oojs-ui/oojs-ui.svg.rtl.css deleted file mode 100644 index 9a7fe08aa6..0000000000 --- a/resources/lib/oojs-ui/oojs-ui.svg.rtl.css +++ /dev/null @@ -1,1271 +0,0 @@ -/*! - * OOjs UI v0.1.0 - * https://www.mediawiki.org/wiki/OOjs_UI - * - * Copyright 2011–2014 OOjs Team and other contributors. - * Released under the MIT license - * http://oojs.mit-license.org - * - * Date: 2014-07-22T21:39:24Z - */ -/* Textures */ - -.oo-ui-texture-pending { - background-image: /* @embed */ url(images/textures/pending.gif); -} - -.oo-ui-texture-transparency { - background-image: /* @embed */ url(images/textures/transparency.png); -} - -/* RTL Definitions */ - -/* @noflip */ - -.oo-ui-rtl { - direction: rtl; -} - -/* @noflip */ - -.oo-ui-ltr { - direction: ltr; -} - -.oo-ui-frame { - padding: 0; - margin: 0; -} - -.oo-ui-frame-body { - padding: 0; - margin: 0; - background: none; -} - -.oo-ui-frame-content:focus { - outline: none; -} - -.oo-ui-toolbar { - clear: both; -} - -.oo-ui-toolbar-bar { - line-height: 1em; -} - -.oo-ui-toolbar-bottom .oo-ui-toolbar-bar { - position: absolute; -} - -.oo-ui-toolbar-actions { - float: left; -} - -.oo-ui-toolbar-tools { - float: right; -} - -.oo-ui-toolbar-tools, -.oo-ui-toolbar-actions, -.oo-ui-toolbar-shadow { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-toolbar-actions .oo-ui-popupWidget { - -webkit-user-select: all; - -moz-user-select: all; - -ms-user-select: all; - user-select: all; - -webkit-touch-callout: default; -} - -.oo-ui-toolbar-shadow { - position: absolute; - width: 100%; - pointer-events: none; - background-position: right top; - background-repeat: repeat-x; -} - -.oo-ui-toolGroup { - display: inline-block; - margin: 0.3em; - vertical-align: middle; -} - -.oo-ui-toolGroup-empty { - display: none; -} - -.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-window { - line-height: 1em; -} - -.oo-ui-window > .oo-ui-window-frame { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-window > .oo-ui-window-frame > .oo-ui-frame { - width: 100%; - height: 100%; -} - -.oo-ui-window-head, -.oo-ui-window-foot { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-window-overlay { - position: absolute; - top: 0; - right: 0; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog { - position: fixed; - width: 0; - height: 0; - overflow: hidden; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup { - top: 0; - left: 0; - bottom: 0; - right: 0; - width: auto; - height: auto; - padding: 1em; -} - -.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame { - position: fixed; - left: 0; - right: 0; - max-width: 100%; - max-height: 100%; - margin: auto; - overflow: hidden; -} - -.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame { - top: 0; - bottom: 0; - width: 100%; - height: 100%; -} - -.oo-ui-messageDialog-actions-horizontal { - display: table; - width: 100%; - table-layout: fixed; -} - -.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget { - display: table-cell; - width: 1%; -} - -.oo-ui-messageDialog-actions-vertical { - display: block; -} - -.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget { - display: block; - overflow: hidden; - text-overflow: ellipsis; -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget { - position: relative; - text-align: center; -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonedElement-button { - display: block; -} - -.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label { - position: relative; - top: auto; - bottom: auto; - display: inline; - white-space: nowrap; -} - -.oo-ui-processDialog-location { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.oo-ui-processDialog-title { - display: inline; -} - -.oo-ui-processDialog-actions-safe .oo-ui-actionWidget, -.oo-ui-processDialog-actions-primary .oo-ui-actionWidget, -.oo-ui-processDialog-actions-other .oo-ui-actionWidget { - white-space: nowrap; -} - -.oo-ui-processDialog-actions-safe, -.oo-ui-processDialog-actions-primary { - position: absolute; - top: 0; - bottom: 0; -} - -.oo-ui-processDialog-actions-safe { - right: 0; -} - -.oo-ui-processDialog-actions-primary { - left: 0; -} - -.oo-ui-processDialog-errors { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - z-index: 2; - display: none; - padding: 3em 3em 1.5em 3em; - overflow-x: hidden; - overflow-y: auto; -} - -.oo-ui-buttonedElement > .oo-ui-buttonedElement-button { - display: inline-block; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - display: none; - margin-right: 0; -} - -.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator { - display: none; - margin-left: -0.75em; -} - -.oo-ui-buttonedElement.oo-ui-widget-disabled > .oo-ui-buttonedElement-button { - cursor: default; -} - -.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator, -.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - display: inline-block; - vertical-align: middle; - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-buttonedElement-frameless { - position: relative; - display: inline-block; -} - -.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - display: inline-block; - margin-right: 0.25em; - vertical-align: middle; -} - -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button { - display: inline-block; - text-align: center; - vertical-align: top; -} - -.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label { - display: inline-block; - line-height: 1.9em; - vertical-align: middle; -} - -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active, -.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed { - cursor: default; -} - -.oo-ui-clippableElement-clippable { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable { - overflow-y: hidden; -} - -.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable { - overflow-y: auto; -} - -.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded { - padding: 2em; -} - -.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget { - position: absolute; - top: 0; - left: 0; - bottom: 3em; - right: 0; - overflow-y: auto; -} - -.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget { - position: absolute; - left: 0; - bottom: 0; - right: 0; -} - -.oo-ui-fieldLayout { - margin-bottom: 1em; -} - -.oo-ui-fieldLayout:last-child { - margin-bottom: 0; -} - -.oo-ui-fieldLayout:before, -.oo-ui-fieldLayout:after { - display: table; - content: " "; -} - -.oo-ui-fieldLayout:after { - clear: both; -} - -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labeledElement-label, -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label { - display: block; - float: right; - width: 35%; - padding-top: 0.5em; - margin-left: 5%; -} - -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field, -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field { - display: block; - float: right; - width: 60%; -} - -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label { - text-align: left; -} - -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labeledElement-label { - display: inline-block; - padding: 0.75em 0.5em 0.5em 0.5em; - vertical-align: middle; -} - -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field { - display: inline-block; - padding: 0.5em 0; - vertical-align: middle; -} - -.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labeledElement-label { - display: inline-block; - padding: 0.5em 0; -} - -.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon { - margin-top: 0.25em; -} - -.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup { - z-index: 1; -} - -.oo-ui-fieldsetLayout { - position: relative; - padding: 0; - margin: 0; -} - -.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout { - margin-top: 2em; -} - -.oo-ui-fieldsetLayout-labeled { - margin-top: -0.75em; -} - -.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label { - padding: 0.25em 0; - margin-bottom: 0.5em; -} - -.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-labeledElement-label { - padding-right: 1.75em; - line-height: 1.33em; -} - -.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-iconedElement-icon { - position: absolute; - top: 0.25em; - right: 0; - display: block; - width: 2em; - height: 2em; - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-gridLayout { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; -} - -.oo-ui-labelWidget { - display: inline-block; - padding: 0.5em 0; -} - -.oo-ui-panelLayout { - position: relative; -} - -.oo-ui-panelLayout-scrollable { - overflow-y: auto; -} - -.oo-ui-panelLayout-expanded { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; -} - -.oo-ui-stackLayout > .oo-ui-panelLayout { - display: none; -} - -.oo-ui-stackLayout-continuous > .oo-ui-panelLayout { - position: relative; - display: block; -} - -.oo-ui-barToolGroup > .oo-ui-iconedElement-icon, -.oo-ui-barToolGroup > .oo-ui-labeledElement-label { - display: none; -} - -.oo-ui-barToolGroup .oo-ui-tool { - position: relative; - display: inline-block; - vertical-align: top; -} - -.oo-ui-barToolGroup .oo-ui-tool-link { - display: block; - height: 1.5em; - padding: 0.25em; -} - -.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - display: block; - width: 1.5em; - height: 1.5em; -} - -.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title { - display: none; -} - -.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link { - cursor: default; -} - -.oo-ui-barToolGroup .oo-ui-tool-title, -.oo-ui-barToolGroup .oo-ui-tool-accel { - display: none; -} - -.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link { - cursor: pointer; -} - -.oo-ui-listToolGroup .oo-ui-toolGroup-tools { - padding: 0.25em; -} - -.oo-ui-listToolGroup .oo-ui-tool { - display: inline-block; - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-listToolGroup .oo-ui-tool-link { - display: block; - padding-left: 0.5em; - white-space: nowrap; - cursor: pointer; -} - -.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link { - cursor: default; -} - -.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle { - min-width: 8em; -} - -.oo-ui-menuToolGroup .oo-ui-toolGroup-tools { - padding: 0.25em 0 0.25em 0; -} - -.oo-ui-menuToolGroup .oo-ui-tool { - display: block; -} - -.oo-ui-menuToolGroup .oo-ui-tool-link { - display: block; - padding: 0 0.25em 0 1em; - white-space: nowrap; - cursor: pointer; -} - -.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - background-image: none; -} - -.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon { - background-image: /* @embed */ url(images/icons/check.svg); -} - -.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link { - cursor: default; -} - -.oo-ui-popupToolGroup { - position: relative; - height: 2em; - min-width: 2.5em; -} - -.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement { - min-width: 3.5em; -} - -.oo-ui-popupToolGroup-handle { - display: block; - cursor: pointer; -} - -.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator, -.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon { - position: absolute; - top: 0; - width: 2em; - height: 2em; - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator { - left: 0; -} - -.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon { - right: 0.25em; -} - -.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label { - margin: 0 1em; - font-size: 0.8em; - line-height: 2.6em; -} - -.oo-ui-popupToolGroup-header { - margin: 0 0.6em; - font-size: 0.8em; - font-weight: bold; - line-height: 2.6em; -} - -.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle { - cursor: default; -} - -.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label { - margin-right: 3em; -} - -.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label { - margin-left: 2.25em; -} - -.oo-ui-popupToolGroup .oo-ui-toolGroup-tools { - position: absolute; - top: 2em; - right: -1px; - z-index: 4; - display: none; -} - -.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon { - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools { - display: block; -} - -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon { - display: inline-block; - width: 2em; - height: 2em; - margin-left: 0.25em; - vertical-align: middle; -} - -.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title { - display: inline-block; - font-size: 0.8em; - line-height: 2em; - vertical-align: middle; -} - -.oo-ui-popupToolGroup .oo-ui-tool-accel { - display: none; -} - -.oo-ui-popupTool .oo-ui-popupWidget { - margin-right: 1.25em; - font-size: 0.8em; -} - -.oo-ui-popupTool .oo-ui-popupWidget-popup, -.oo-ui-popupTool .oo-ui-popupWidget-anchor { - z-index: 4; -} - -.oo-ui-iconWidget { - display: inline-block; - width: 1.9em; - height: 1.9em; - line-height: 2.5em; - vertical-align: middle; - background-position: center center; - background-repeat: no-repeat; - opacity: 0.8; -} - -.oo-ui-iconWidget.oo-ui-widget-disabled { - opacity: 0.2; -} - -.oo-ui-indicatorWidget { - display: inline-block; - width: 1.9em; - height: 1.9em; - line-height: 2.5em; - vertical-align: middle; - background-position: center center; - background-repeat: no-repeat; - opacity: 0.8; -} - -.oo-ui-indicatorWidget.oo-ui-widget-disabled { - opacity: 0.2; -} - -.oo-ui-selectWidget { - padding: 0; - margin: 0; - list-style: none; -} - -.oo-ui-optionWidget { - position: relative; - display: block; - margin: 0; - list-style: none; - cursor: pointer; - border: none; -} - -.oo-ui-optionWidget.oo-ui-widget-disabled { - cursor: default; -} - -.oo-ui-optionWidget .oo-ui-labeledElement-label { - display: block; - overflow: hidden; - line-height: 1.5em; - text-overflow: ellipsis; - white-space: nowrap; -} - -.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon, -.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator { - position: absolute; - top: 50%; - width: 2em; - height: 2em; - margin-top: -1em; - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon { - right: 0.5em; -} - -.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator { - left: 0.5em; -} - -.oo-ui-menuWidget { - position: absolute; -} - -.oo-ui-menuWidget input { - position: absolute; - width: 0; - height: 0; - overflow: hidden; - opacity: 0; -} - -.oo-ui-popupWidget-popup { - position: absolute; - z-index: 1; - overflow: hidden; -} - -.oo-ui-popupWidget-anchor { - z-index: 1; - display: none; -} - -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup { - margin-top: 7px; -} - -.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor { - position: absolute; - display: block; - background-repeat: no-repeat; -} - -.oo-ui-popupWidget-head { - height: 2.5em; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-popupWidget-head .oo-ui-buttonWidget { - float: left; - margin: 0.25em; -} - -.oo-ui-popupWidget-head .oo-ui-labeledElement-label { - float: right; - margin: 0.75em 1em; - cursor: default; -} - -.oo-ui-popupWidget-body { - overflow: hidden; - clear: both; -} - -.oo-ui-popupWidget-body-padded { - padding: 0 1em; -} - -.oo-ui-buttonGroupWidget { - border-radius: 0.3em; -} - -.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button { - margin-bottom: -1px; - margin-right: -1px; - border-radius: 0; -} - -.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button { - margin-right: 0; - border-bottom-right-radius: 0.3em; - border-top-right-radius: 0.3em; -} - -.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button { - border-top-left-radius: 0.3em; - border-bottom-left-radius: 0.3em; -} - -.oo-ui-buttonOptionWidget { - display: inline-block; - background-color: transparent; -} - -.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button { - position: relative; - height: 1.9em; -} - -.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon, -.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator { - position: static; - display: inline-block; - height: 1.9em; - margin-top: 0; - vertical-align: middle; -} - -.oo-ui-buttonSelectWidget { - display: inline-block; - white-space: nowrap; -} - -.oo-ui-buttonWidget { - display: inline-block; - vertical-align: middle; -} - -.oo-ui-inlineMenuWidget { - position: relative; - display: inline-block; - min-width: 20em; - margin: 0.25em 0; -} - -.oo-ui-inlineMenuWidget-handle { - display: inline-block; - width: 100%; - height: 2.5em; - cursor: pointer; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator, -.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon { - position: absolute; - top: 0; - width: 2.5em; - height: 2.5em; - background-position: center center; - background-repeat: no-repeat; -} - -.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator { - left: 0; -} - -.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon { - right: 0.25em; -} - -.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label { - margin: 0 0.5em; - line-height: 2.5em; -} - -.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label { - margin-right: 3em; -} - -.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label { - margin-left: 2em; -} - -.oo-ui-inlineMenuWidget .oo-ui-menuWidget { - z-index: 1; - width: 100%; -} - -.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle { - cursor: default; -} - -.oo-ui-menuItemWidget { - position: relative; -} - -.oo-ui-menuItemWidget .oo-ui-iconedElement-icon { - display: none; -} - -.oo-ui-menuItemWidget.oo-ui-optionWidget-selected { - background-color: transparent; -} - -.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon { - display: block; -} - -.oo-ui-menuSectionItemWidget { - cursor: default; -} - -.oo-ui-outlineControlsWidget { - height: 3em; -} - -.oo-ui-outlineControlsWidget-items, -.oo-ui-outlineControlsWidget-movers { - float: right; - height: 2em; - padding: 0; - margin: 0.5em; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon { - float: right; - width: 1.5em; - height: 2em; - margin: 0.5em 0.5em 0.5em 0; - background-position: left center; - background-repeat: no-repeat; -} - -.oo-ui-outlineControlsWidget-items { - float: right; - margin-right: 0; -} - -.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget { - float: right; -} - -.oo-ui-outlineControlsWidget-movers { - float: left; -} - -.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget { - float: left; -} - -.oo-ui-outlineItemWidget { - position: relative; - padding: 0.75em; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-popupButtonWidget { - position: relative; -} - -.oo-ui-popupButtonWidget .oo-ui-popupWidget { - position: absolute; - right: 1em; - cursor: auto; -} - -.oo-ui-searchWidget-query { - position: absolute; - top: 0; - left: 0; - right: 0; - height: 4em; - padding: 0 1em; -} - -.oo-ui-searchWidget-query .oo-ui-textInputWidget { - width: 100%; - margin: 0.75em 0; -} - -.oo-ui-searchWidget-results { - position: absolute; - top: 4em; - left: 0; - bottom: 0; - right: 0; - padding: 1em; - overflow-x: hidden; - overflow-y: auto; - line-height: 0; -} - -.oo-ui-textInputWidget { - position: relative; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-textInputWidget input, -.oo-ui-textInputWidget textarea { - display: inline-block; - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - resize: none; -} - -.oo-ui-textInputWidget-icon { - position: absolute; - top: 0; - right: 0; - height: 100%; - background-position: left center; - background-repeat: no-repeat; -} - -.oo-ui-toggleSwitchWidget { - position: relative; - display: inline-block; - width: 4em; - height: 2em; - overflow: hidden; - vertical-align: middle; - cursor: pointer; - -webkit-transform: translateZ(0); - -moz-transform: translateZ(0); - -ms-transform: translateZ(0); - -o-transform: translateZ(0); - transform: translateZ(0); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled { - cursor: default; -} - -.oo-ui-toggleSwitchWidget-grip { - position: absolute; - top: 0.25em; - right: 0.25em; - display: block; - width: 1.5em; - height: 1.5em; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out; - -moz-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out; - -ms-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out; - -o-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out; - transition: right 200ms ease-in-out, margin-right 200ms ease-in-out; -} - -.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - -webkit-transition: opacity 200ms ease-in-out; - -moz-transition: opacity 200ms ease-in-out; - -ms-transition: opacity 200ms ease-in-out; - -o-transition: opacity 200ms ease-in-out; - transition: opacity 200ms ease-in-out; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-touch-callout: none; -} - -.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip { - right: 2.25em; - margin-right: -2px; -} - -.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip { - right: 0.25em; - margin-right: 0; -} - -.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow { - display: none; -} - -/* Icons */ - -.oo-ui-icon-add-item { - background-image: /* @embed */ url(images/icons/add-item.svg); -} - -.oo-ui-icon-advanced { - background-image: /* @embed */ url(images/icons/advanced.svg); -} - -.oo-ui-icon-alert { - background-image: /* @embed */ url(images/icons/alert.svg); -} - -.oo-ui-icon-check { - background-image: /* @embed */ url(images/icons/check.svg); -} - -.oo-ui-icon-clear { - background-image: /* @embed */ url(images/icons/clear.svg); -} - -.oo-ui-icon-close { - background-image: /* @embed */ url(images/icons/close.svg); -} - -.oo-ui-icon-code { - background-image: /* @embed */ url(images/icons/code.svg); -} - -.oo-ui-icon-collapse { - background-image: /* @embed */ url(images/icons/collapse.svg); -} - -.oo-ui-icon-comment { - background-image: /* @embed */ url(images/icons/comment.svg); -} - -.oo-ui-icon-expand { - background-image: /* @embed */ url(images/icons/expand.svg); -} - -.oo-ui-icon-help { - background-image: /* @embed */ url(images/icons/help.svg); -} - -.oo-ui-icon-info { - background-image: /* @embed */ url(images/icons/info.svg); -} - -.oo-ui-icon-link { - background-image: /* @embed */ url(images/icons/link.svg); -} - -.oo-ui-icon-menu { - background-image: /* @embed */ url(images/icons/menu.svg); -} - -.oo-ui-icon-next { - background-image: /* @embed */ url(images/icons/move-rtl.svg); -} - -.oo-ui-icon-picture { - background-image: /* @embed */ url(images/icons/picture.svg); -} - -.oo-ui-icon-previous { - background-image: /* @embed */ url(images/icons/move-ltr.svg); -} - -.oo-ui-icon-redo { - background-image: /* @embed */ url(images/icons/arched-arrow-rtl.svg); -} - -.oo-ui-icon-remove { - background-image: /* @embed */ url(images/icons/remove.svg); -} - -.oo-ui-icon-search { - background-image: /* @embed */ url(images/icons/search.svg); -} - -.oo-ui-icon-settings { - background-image: /* @embed */ url(images/icons/settings.svg); -} - -.oo-ui-icon-tag { - background-image: /* @embed */ url(images/icons/tag.svg); -} - -.oo-ui-icon-undo { - background-image: /* @embed */ url(images/icons/arched-arrow-ltr.svg); -} - -.oo-ui-icon-window { - background-image: /* @embed */ url(images/icons/window.svg); -} - -/* Indicators */ - -.oo-ui-indicator-alert { - background-image: /* @embed */ url(images/indicators/alert.svg); -} - -.oo-ui-indicator-down { - background-image: /* @embed */ url(images/indicators/arrow-down.svg); -} - -.oo-ui-indicator-next { - background-image: /* @embed */ url(images/indicators/arrow-rtl.svg); -} - -.oo-ui-indicator-previous { - background-image: /* @embed */ url(images/indicators/arrow-ltr.svg); -} - -.oo-ui-indicator-required { - background-image: /* @embed */ url(images/indicators/required.svg); -} - -.oo-ui-indicator-up { - background-image: /* @embed */ url(images/indicators/arrow-up.svg); -} \ No newline at end of file diff --git a/resources/lib/oojs-ui/themes/agora/images/icons/check.svg b/resources/lib/oojs-ui/themes/agora/images/icons/check.svg deleted file mode 100644 index 6a91939f3a..0000000000 --- a/resources/lib/oojs-ui/themes/agora/images/icons/check.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/resources/lib/oojs-ui/themes/minerva/images/icons/check.svg b/resources/lib/oojs-ui/themes/minerva/images/icons/check.svg new file mode 100644 index 0000000000..6a91939f3a --- /dev/null +++ b/resources/lib/oojs-ui/themes/minerva/images/icons/check.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/resources/src/mediawiki.skinning/content.externallinks.css b/resources/src/mediawiki.skinning/content.externallinks.css new file mode 100755 index 0000000000..b03ef3505d --- /dev/null +++ b/resources/src/mediawiki.skinning/content.externallinks.css @@ -0,0 +1,92 @@ +/* +** keep the whitespace in front of the ^=, hides rule from Konqueror +** this is CSS3, the validator doesn't like it when validating as CSS2 +*/ +.mw-body a.external, +.link-https { + /* @embed */ + background: url(images/external-ltr.png) center right no-repeat; + /** + * Sucks to be using Android 2.3 or older. + * See http://css-tricks.com/svg-fallbacks/ for details. + */ + /* @embed */ + background-image: url(images/external-ltr.svg), none; + padding-right: 15px; +} + +.mw-body a.external[href ^="mailto:"], +.link-mailto { + /* @embed */ + background: url(images/mail.png) center right no-repeat; + /* @embed */ + background-image: url(images/mail.svg), none; + padding-right: 15px; +} + +.mw-body a.external[href ^="ftp://"], +.link-ftp { + /* @embed */ + background: url(images/ftp-ltr.png) center right no-repeat; + /* @embed */ + background-image: url(images/ftp-ltr.svg), none; + padding-right: 15px; +} + +.mw-body a.external[href ^="irc://"], +.mw-body a.external[href ^="ircs://"], +.link-irc { + /* @embed */ + background: url(images/chat-ltr.png) center right no-repeat; + /* @embed */ + background-image: url(images/chat-ltr.svg), none; + padding-right: 15px; +} + +.mw-body a.external[href $=".ogg"], .mw-body a.external[href $=".OGG"], +.mw-body a.external[href $=".mid"], .mw-body a.external[href $=".MID"], +.mw-body a.external[href $=".midi"], .mw-body a.external[href $=".MIDI"], +.mw-body a.external[href $=".mp3"], .mw-body a.external[href $=".MP3"], +.mw-body a.external[href $=".wav"], .mw-body a.external[href $=".WAV"], +.mw-body a.external[href $=".wma"], .mw-body a.external[href $=".WMA"], +.link-audio { + /* @embed */ + background: url(images/audio-ltr.png) center right no-repeat; + /* @embed */ + background-image: url(images/audio-ltr.svg), none; + padding-right: 15px; +} + +.mw-body a.external[href $=".ogm"], .mw-body a.external[href $=".OGM"], +.mw-body a.external[href $=".avi"], .mw-body a.external[href $=".AVI"], +.mw-body a.external[href $=".mpeg"], .mw-body a.external[href $=".MPEG"], +.mw-body a.external[href $=".mpg"], .mw-body a.external[href $=".MPG"], +.link-video { + /* @embed */ + background: url(images/video.png) center right no-repeat; + /* @embed */ + background-image: url(images/video.svg), none; + padding-right: 15px; +} + +.mw-body a.external[href $=".pdf"], .mw-body a.external[href $=".PDF"], +.mw-body a.external[href *=".pdf#"], .mw-body a.external[href *=".PDF#"], +.mw-body a.external[href *=".pdf?"], .mw-body a.external[href *=".PDF?"], +.link-document { + /* @embed */ + background: url(images/document-ltr.png) center right no-repeat; + /* @embed */ + background-image: url(images/document-ltr.svg), none; + padding-right: 15px; +} + +/* Interwiki styling */ +.mw-body a.extiw, +.mw-body a.extiw:active { + color: #36b; +} + +/* External link color */ +.mw-body a.external { + color: #36b; +} \ No newline at end of file diff --git a/resources/src/mediawiki.skinning/images/audio-ltr.png b/resources/src/mediawiki.skinning/images/audio-ltr.png new file mode 100644 index 0000000000..8efc4f2d58 Binary files /dev/null and b/resources/src/mediawiki.skinning/images/audio-ltr.png differ diff --git a/resources/src/mediawiki.skinning/images/audio-ltr.svg b/resources/src/mediawiki.skinning/images/audio-ltr.svg new file mode 100644 index 0000000000..e27a5f537c --- /dev/null +++ b/resources/src/mediawiki.skinning/images/audio-ltr.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/src/mediawiki.skinning/images/audio-rtl.png b/resources/src/mediawiki.skinning/images/audio-rtl.png new file mode 100644 index 0000000000..1afdf40438 Binary files /dev/null and b/resources/src/mediawiki.skinning/images/audio-rtl.png differ diff --git a/resources/src/mediawiki.skinning/images/audio-rtl.svg b/resources/src/mediawiki.skinning/images/audio-rtl.svg new file mode 100644 index 0000000000..683bbcd7ec --- /dev/null +++ b/resources/src/mediawiki.skinning/images/audio-rtl.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/src/mediawiki.skinning/images/chat-ltr.png b/resources/src/mediawiki.skinning/images/chat-ltr.png new file mode 100644 index 0000000000..624ecec306 Binary files /dev/null and b/resources/src/mediawiki.skinning/images/chat-ltr.png differ diff --git a/resources/src/mediawiki.skinning/images/chat-ltr.svg b/resources/src/mediawiki.skinning/images/chat-ltr.svg new file mode 100644 index 0000000000..bd5329e024 --- /dev/null +++ b/resources/src/mediawiki.skinning/images/chat-ltr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/src/mediawiki.skinning/images/chat-rtl.png b/resources/src/mediawiki.skinning/images/chat-rtl.png new file mode 100644 index 0000000000..f90fa33a98 Binary files /dev/null and b/resources/src/mediawiki.skinning/images/chat-rtl.png differ diff --git a/resources/src/mediawiki.skinning/images/chat-rtl.svg b/resources/src/mediawiki.skinning/images/chat-rtl.svg new file mode 100644 index 0000000000..b86218f394 --- /dev/null +++ b/resources/src/mediawiki.skinning/images/chat-rtl.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/src/mediawiki.skinning/images/document-ltr.png b/resources/src/mediawiki.skinning/images/document-ltr.png new file mode 100644 index 0000000000..4ea9373f3f Binary files /dev/null and b/resources/src/mediawiki.skinning/images/document-ltr.png differ diff --git a/resources/src/mediawiki.skinning/images/document-ltr.svg b/resources/src/mediawiki.skinning/images/document-ltr.svg new file mode 100644 index 0000000000..43960980f3 --- /dev/null +++ b/resources/src/mediawiki.skinning/images/document-ltr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/src/mediawiki.skinning/images/document-rtl.png b/resources/src/mediawiki.skinning/images/document-rtl.png new file mode 100644 index 0000000000..c281677a57 Binary files /dev/null and b/resources/src/mediawiki.skinning/images/document-rtl.png differ diff --git a/resources/src/mediawiki.skinning/images/document-rtl.svg b/resources/src/mediawiki.skinning/images/document-rtl.svg new file mode 100644 index 0000000000..c37dadca13 --- /dev/null +++ b/resources/src/mediawiki.skinning/images/document-rtl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/src/mediawiki.skinning/images/external link icons.svg b/resources/src/mediawiki.skinning/images/external link icons.svg new file mode 100644 index 0000000000..6a67993dc9 --- /dev/null +++ b/resources/src/mediawiki.skinning/images/external link icons.svg @@ -0,0 +1,697 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/src/mediawiki.skinning/images/external-ltr.png b/resources/src/mediawiki.skinning/images/external-ltr.png new file mode 100644 index 0000000000..75750ef9c9 Binary files /dev/null and b/resources/src/mediawiki.skinning/images/external-ltr.png differ diff --git a/resources/src/mediawiki.skinning/images/external-ltr.svg b/resources/src/mediawiki.skinning/images/external-ltr.svg new file mode 100644 index 0000000000..e914b7daec --- /dev/null +++ b/resources/src/mediawiki.skinning/images/external-ltr.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/src/mediawiki.skinning/images/external-rtl.png b/resources/src/mediawiki.skinning/images/external-rtl.png new file mode 100644 index 0000000000..7b56aaa701 Binary files /dev/null and b/resources/src/mediawiki.skinning/images/external-rtl.png differ diff --git a/resources/src/mediawiki.skinning/images/external-rtl.svg b/resources/src/mediawiki.skinning/images/external-rtl.svg new file mode 100644 index 0000000000..698c61634d --- /dev/null +++ b/resources/src/mediawiki.skinning/images/external-rtl.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/src/mediawiki.skinning/images/ftp-ltr.png b/resources/src/mediawiki.skinning/images/ftp-ltr.png new file mode 100644 index 0000000000..f940b067ae Binary files /dev/null and b/resources/src/mediawiki.skinning/images/ftp-ltr.png differ diff --git a/resources/src/mediawiki.skinning/images/ftp-ltr.svg b/resources/src/mediawiki.skinning/images/ftp-ltr.svg new file mode 100644 index 0000000000..3a90c31195 --- /dev/null +++ b/resources/src/mediawiki.skinning/images/ftp-ltr.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/src/mediawiki.skinning/images/ftp-rtl.png b/resources/src/mediawiki.skinning/images/ftp-rtl.png new file mode 100644 index 0000000000..ff763048f9 Binary files /dev/null and b/resources/src/mediawiki.skinning/images/ftp-rtl.png differ diff --git a/resources/src/mediawiki.skinning/images/ftp-rtl.svg b/resources/src/mediawiki.skinning/images/ftp-rtl.svg new file mode 100644 index 0000000000..29e4b44560 --- /dev/null +++ b/resources/src/mediawiki.skinning/images/ftp-rtl.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/src/mediawiki.skinning/images/mail.png b/resources/src/mediawiki.skinning/images/mail.png new file mode 100644 index 0000000000..5085611c94 Binary files /dev/null and b/resources/src/mediawiki.skinning/images/mail.png differ diff --git a/resources/src/mediawiki.skinning/images/mail.svg b/resources/src/mediawiki.skinning/images/mail.svg new file mode 100644 index 0000000000..5e534fed49 --- /dev/null +++ b/resources/src/mediawiki.skinning/images/mail.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/src/mediawiki.skinning/images/video.png b/resources/src/mediawiki.skinning/images/video.png new file mode 100644 index 0000000000..12f654539b Binary files /dev/null and b/resources/src/mediawiki.skinning/images/video.png differ diff --git a/resources/src/mediawiki.skinning/images/video.svg b/resources/src/mediawiki.skinning/images/video.svg new file mode 100644 index 0000000000..d52d0db1b3 --- /dev/null +++ b/resources/src/mediawiki.skinning/images/video.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/resources/src/mediawiki.ui/components/buttons.less b/resources/src/mediawiki.ui/components/buttons.less index ebf47796c8..7142d4d071 100644 --- a/resources/src/mediawiki.ui/components/buttons.less +++ b/resources/src/mediawiki.ui/components/buttons.less @@ -24,6 +24,8 @@ // // Styleguide 2.1. .mw-ui-button { + // Inherit the font rather than apply user agent stylesheet (bug 70072) + font-family: inherit; font-size: 1em; // Container layout display: inline-block; diff --git a/resources/src/mediawiki/mediawiki.debug.js b/resources/src/mediawiki/mediawiki.debug.js index f56f0d9ea1..505a9be399 100644 --- a/resources/src/mediawiki/mediawiki.debug.js +++ b/resources/src/mediawiki/mediawiki.debug.js @@ -192,7 +192,10 @@ } bitDiv( 'phpversion' ) - .append( $( '' ).text( 'PHP' ) ) + .append( $( this.data.phpEngine === 'HHVM' + ? 'HHVM' + : 'PHP' + ) ) .append( ': ' + this.data.phpVersion ); bitDiv( 'time' ) diff --git a/resources/src/mediawiki/mediawiki.debug.profile.js b/resources/src/mediawiki/mediawiki.debug.profile.js index 64ec6c394a..b4d57732eb 100644 --- a/resources/src/mediawiki/mediawiki.debug.profile.js +++ b/resources/src/mediawiki/mediawiki.debug.profile.js @@ -70,10 +70,10 @@ * @param string tag to create * @return DOMElement */ - createSvgElement: document.createElementNS + createSvgElement: ( document.createElementNS && Function.prototype.bind ) ? document.createElementNS.bind( document, 'http://www.w3.org/2000/svg' ) // throw a error for browsers which does not support document.createElementNS (IE<8) - : function () { throw new Error( 'document.createElementNS not supported' ); }, + : function () { throw new Error( 'An ES5 compatible javascript engine is required for the profile visualization.' ); }, /** * @param DOMElement|undefined diff --git a/resources/src/mediawiki/mediawiki.htmlform.js b/resources/src/mediawiki/mediawiki.htmlform.js index 5027f7a016..594800e15d 100644 --- a/resources/src/mediawiki/mediawiki.htmlform.js +++ b/resources/src/mediawiki/mediawiki.htmlform.js @@ -237,6 +237,7 @@ } ); function enhance( $root ) { + var $matrixTooltips, $autocomplete; /** * @ignore @@ -342,13 +343,30 @@ } ); } - var $matrixTooltips = $root.find( '.mw-htmlform-matrix .mw-htmlform-tooltip' ); + $matrixTooltips = $root.find( '.mw-htmlform-matrix .mw-htmlform-tooltip' ); if ( $matrixTooltips.length ) { mw.loader.using( 'jquery.tipsy', function () { $matrixTooltips.tipsy( { gravity: 's' } ); } ); } + // Set up autocomplete fields + $autocomplete = $root.find( '.mw-htmlform-autocomplete' ); + if ( $autocomplete.length ) { + mw.loader.using( 'jquery.suggestions', function () { + $autocomplete.suggestions( { + fetch: function ( val ) { + var $el = $( this ); + $el.suggestions( 'suggestions', + $.grep( $el.data( 'autocomplete' ), function ( v ) { + return v.indexOf( val ) === 0; + } ) + ); + } + } ); + } ); + } + // Add/remove cloner clones without having to resubmit the form $root.find( '.mw-htmlform-cloner-delete-button' ).click( function ( ev ) { ev.preventDefault(); diff --git a/resources/src/mediawiki/mediawiki.jqueryMsg.js b/resources/src/mediawiki/mediawiki.jqueryMsg.js index 3f778d8463..a81730e514 100644 --- a/resources/src/mediawiki/mediawiki.jqueryMsg.js +++ b/resources/src/mediawiki/mediawiki.jqueryMsg.js @@ -1129,9 +1129,16 @@ * @return {string} selected pluralized form according to current language */ plural: function ( nodes ) { - var forms, count; + var forms, formIndex, node, count; count = parseFloat( this.language.convertNumber( nodes[0], true ) ); forms = nodes.slice( 1 ); + for ( formIndex = 0; formIndex < forms.length; formIndex++ ) { + node = forms[formIndex]; + if ( node.jquery && node.hasClass( 'mediaWiki_htmlEmitter' ) ) { + // This is a nested node, already expanded. + forms[formIndex] = forms[formIndex].html(); + } + } return forms.length ? this.language.convertPlural( count, forms ) : ''; }, diff --git a/resources/src/polyfill-object-create.js b/resources/src/polyfill-object-create.js new file mode 100644 index 0000000000..607faf649f --- /dev/null +++ b/resources/src/polyfill-object-create.js @@ -0,0 +1,62 @@ +/** + * Simplified version of es5-sham#Object-create that also works around a bug + * in the actual es5-sham: https://github.com/es-shims/es5-shim/issues/252 + * + * Does not: + * - Support empty inheritance via `Object.create(null)`. + * - Support getter and setter accessors via `Object.create( .., properties )`. + * - Support custom property descriptor (e.g. writable, configurtable, enumerable). + * - Leave behind an enumerable "__proto__" all over the place. + * + * @author Timo Tijhof, 2014 + */ + +// ES5 15.2.3.5 +// http://es5.github.com/#x15.2.3.5 +if ( !Object.create ) { + ( function () { + var hasOwn = Object.hasOwnProperty, + // https://developer.mozilla.org/en-US/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug + // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation + isEnumBug = !{ valueOf: 0 }.propertyIsEnumerable( 'valueOf' ); + + // Reusable constructor function for Object.create + function Empty() {} + + function defineProperty( object, key, property ) { + if ( hasOwn.call( property, 'value' ) ) { + object[ key ] = property.value; + } else { + object[ key ] = property; + } + } + + Object.create = function create( prototype, properties ) { + var object, key; + + if ( prototype !== Object( prototype ) ) { + throw new TypeError( 'Called on non-object' ); + } + + Empty.prototype = prototype; + object = new Empty(); + + if ( properties !== undefined ) { + if ( !isEnumBug ) { + for ( key in properties ) { + if ( hasOwn.call( properties, key ) ) { + defineProperty( object, key, properties[ key ] ); + } + } + } else { + Object.keys( properties ).forEach( function ( key ) { + defineProperty( object, key, properties[ key ] ); + } ); + } + } + + return object; + }; + + }() ); +} diff --git a/tests/browser/Gemfile.lock b/tests/browser/Gemfile.lock index 92784bf03a..1ea4eb5561 100644 --- a/tests/browser/Gemfile.lock +++ b/tests/browser/Gemfile.lock @@ -4,7 +4,7 @@ GEM builder (3.2.2) childprocess (0.5.3) ffi (~> 1.0, >= 1.0.11) - cucumber (1.3.15) + cucumber (1.3.16) builder (>= 2.1.2) diff-lcs (>= 1.1.3) gherkin (~> 2.12) @@ -14,9 +14,9 @@ GEM faker (>= 1.1.2) yml_reader (>= 0.3) diff-lcs (1.2.5) - domain_name (0.5.19) + domain_name (0.5.20) unf (>= 0.0.5, < 1.0.0) - faker (1.3.0) + faker (1.4.3) i18n (~> 0.5) faraday (0.9.0) multipart-post (>= 1.2, < 3) @@ -29,15 +29,16 @@ GEM headless (1.0.2) http-cookie (1.0.2) domain_name (~> 0.5) - i18n (0.6.9) + i18n (0.6.11) json (1.8.1) - mediawiki_api (0.1.3) + mediawiki_api (0.2.1) faraday (~> 0.9, >= 0.9.0) faraday-cookie_jar (~> 0.0, >= 0.0.6) - mediawiki_selenium (0.2.25) + mediawiki_selenium (0.3.2) cucumber (~> 1.3, >= 1.3.10) headless (~> 1.0, >= 1.0.1) json (~> 1.8, >= 1.8.1) + mediawiki_api (~> 0.2, >= 0.2.1) page-object (~> 1.0) rest-client (~> 1.6, >= 1.6.7) rspec-expectations (~> 2.14, >= 2.14.4) @@ -46,17 +47,19 @@ GEM multi_json (1.10.1) multi_test (0.1.1) multipart-post (2.0.0) - page-object (1.0) + netrc (0.7.7) + page-object (1.0.2) page_navigation (>= 0.9) selenium-webdriver (>= 2.42.0) watir-webdriver (>= 0.6.9) page_navigation (0.9) data_magic (>= 0.14) - rest-client (1.6.7) - mime-types (>= 1.16) - rspec-expectations (2.99.1) + rest-client (1.7.2) + mime-types (>= 1.16, < 3.0) + netrc (~> 0.7) + rspec-expectations (2.99.2) diff-lcs (>= 1.1.3, < 2.0) - rubyzip (1.1.5) + rubyzip (1.1.6) selenium-webdriver (2.42.0) childprocess (>= 0.5.0) multi_json (~> 1.0) diff --git a/tests/parser/parserTest.inc b/tests/parser/parserTest.inc index a342fec56e..a9df6832eb 100644 --- a/tests/parser/parserTest.inc +++ b/tests/parser/parserTest.inc @@ -332,6 +332,7 @@ class ParserTest { * Remove last character if it is a newline * @group utility * @param string $s + * @return string */ public static function chomp( $s ) { if ( substr( $s, -1 ) === "\n" ) { @@ -416,6 +417,7 @@ class ParserTest { /** * Get an input dictionary from a set of parser test files * @param array $filenames + * @return string */ function getFuzzInput( $filenames ) { $dict = ''; @@ -438,6 +440,7 @@ class ParserTest { /** * Get a memory usage breakdown + * @return array */ function getMemoryBreakdown() { $memStats = array(); @@ -625,7 +628,7 @@ class ParserTest { return $this->showSkipped(); } $out = MWTidy::tidy( $out ); - $out = preg_replace( '/\s+$/', '', $out); + $out = preg_replace( '/\s+$/', '', $out ); } if ( isset( $opts['showtitle'] ) ) { @@ -663,6 +666,7 @@ class ParserTest { /** * Refactored in 1.22 to use ParserTestResult * @param ParserTestResult $testResult + * @return bool */ function showTestResult( ParserTestResult $testResult ) { if ( $testResult->isSuccess() ) { @@ -679,6 +683,7 @@ class ParserTest { * @param string $key Name of option val to retrieve * @param array $opts Options array to look in * @param mixed $default Default value returned if not found + * @return mixed */ private static function getOptionValue( $key, $opts, $default ) { $key = strtolower( $key ); @@ -782,6 +787,7 @@ class ParserTest { * Ideally this should replace the global configuration entirely. * @param string $opts * @param string $config + * @return RequestContext */ private function setupGlobals( $opts = '', $config = '' ) { global $IP; @@ -929,6 +935,7 @@ class ParserTest { /** * List of temporary tables to create, without prefix. * Some of these probably aren't necessary. + * @return array */ private function listTables() { $tables = array( 'user', 'user_properties', 'user_former_groups', 'page', 'page_restrictions', diff --git a/tests/phpunit/MediaWikiTestCase.php b/tests/phpunit/MediaWikiTestCase.php index 873d979163..1166817506 100644 --- a/tests/phpunit/MediaWikiTestCase.php +++ b/tests/phpunit/MediaWikiTestCase.php @@ -1120,13 +1120,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase { * @param string $message * @param bool $isHtml */ - public static function assertTag($matcher, $actual, $message = '', $isHtml = true) { + public static function assertTag( $matcher, $actual, $message = '', $isHtml = true ) { //trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED); - $dom = PHPUnit_Util_XML::load($actual, $isHtml); - $tags = PHPUnit_Util_XML::findNodes($dom, $matcher, $isHtml); - $matched = count($tags) > 0 && $tags[0] instanceof DOMNode; + $dom = PHPUnit_Util_XML::load( $actual, $isHtml ); + $tags = PHPUnit_Util_XML::findNodes( $dom, $matcher, $isHtml ); + $matched = count( $tags ) > 0 && $tags[0] instanceof DOMNode; - self::assertTrue($matched, $message); + self::assertTrue( $matched, $message ); } } diff --git a/tests/phpunit/ResourceLoaderTestCase.php b/tests/phpunit/ResourceLoaderTestCase.php index f316f56317..96eedb4940 100644 --- a/tests/phpunit/ResourceLoaderTestCase.php +++ b/tests/phpunit/ResourceLoaderTestCase.php @@ -1,10 +1,10 @@ 'en', + 'lang' => $lang, 'modules' => 'startup', 'only' => 'scripts', 'skin' => 'vector', diff --git a/tests/phpunit/data/css/expected.css b/tests/phpunit/data/css/expected.css new file mode 100644 index 0000000000..74eb21eff3 --- /dev/null +++ b/tests/phpunit/data/css/expected.css @@ -0,0 +1,12 @@ +/* All of the combinations should result in the same output in LTR and RTL mode. */ + +.selector { /*@embed*/ background-image: url(simple-ltr.gif); } + +.selector { /*@embed*/ background-image: url(simple-ltr.gif); } + +/* Doesn't work! */ +/*.selector { /*@noflip* / /*@embed* / background-image: url(simple-ltr.gif); }*/ + +.selector { /*@embed*/ background-image: url(simple-ltr.gif); } + +.selector { /*@embed*/ background-image: url(simple-ltr.gif); } diff --git a/tests/phpunit/data/css/simple-ltr.gif b/tests/phpunit/data/css/simple-ltr.gif new file mode 100644 index 0000000000..13c43e906c Binary files /dev/null and b/tests/phpunit/data/css/simple-ltr.gif differ diff --git a/tests/phpunit/data/css/simple-rtl.gif b/tests/phpunit/data/css/simple-rtl.gif new file mode 100644 index 0000000000..f9e7531658 Binary files /dev/null and b/tests/phpunit/data/css/simple-rtl.gif differ diff --git a/tests/phpunit/data/css/test.css b/tests/phpunit/data/css/test.css new file mode 100644 index 0000000000..bf589ad4d3 --- /dev/null +++ b/tests/phpunit/data/css/test.css @@ -0,0 +1,12 @@ +/* All of the combinations should result in the same output in LTR and RTL mode. */ + +/*@noflip*/ .selector { /*@embed*/ background-image: url(simple-ltr.gif); } + +/*@noflip*/ .selector { background-image: /*@embed*/ url(simple-ltr.gif); } + +/* Doesn't work! */ +/*.selector { /*@noflip* / /*@embed* / background-image: url(simple-ltr.gif); }*/ + +.selector { /*@embed*/ /*@noflip*/ background-image: url(simple-ltr.gif); } + +.selector { /*@noflip*/ background-image: /*@embed*/ url(simple-ltr.gif); } diff --git a/tests/phpunit/includes/EditPageTest.php b/tests/phpunit/includes/EditPageTest.php index 6537364994..27bc2930d3 100644 --- a/tests/phpunit/includes/EditPageTest.php +++ b/tests/phpunit/includes/EditPageTest.php @@ -59,6 +59,9 @@ class EditPageTest extends MediaWikiLangTestCase { * User input text is passed to rtrim() by edit page. This is a simple * wrapper around assertEquals() which calls rrtrim() to normalize the * expected and actual texts. + * @param string $expected + * @param string $actual + * @param string $msg */ protected function assertEditedTextEquals( $expected, $actual, $msg = '' ) { return $this->assertEquals( rtrim( $expected ), rtrim( $actual ), $msg ); diff --git a/tests/phpunit/includes/TitleTest.php b/tests/phpunit/includes/TitleTest.php index d0f418b292..b2b0d34bc0 100644 --- a/tests/phpunit/includes/TitleTest.php +++ b/tests/phpunit/includes/TitleTest.php @@ -222,11 +222,10 @@ class TitleTest extends MediaWikiTestCase { } /** - * @dataProvider provideBug31100 + * @dataProvider provideSpecialNamesWithAndWithoutParameter * @covers Title::fixSpecialName - * @todo give this test a real name explaining what is being tested here */ - public function testBug31100FixSpecialName( $text, $expectedParam ) { + public function testFixSpecialNameRetainsParameter( $text, $expectedParam ) { $title = Title::newFromText( $text ); $fixed = $title->fixSpecialName(); $stuff = explode( '/', $fixed->getDBkey(), 2 ); @@ -242,7 +241,7 @@ class TitleTest extends MediaWikiTestCase { ); } - public static function provideBug31100() { + public static function provideSpecialNamesWithAndWithoutParameter() { return array( array( 'Special:Version', null ), array( 'Special:Version/', '' ), diff --git a/tests/phpunit/includes/debug/MWDebugTest.php b/tests/phpunit/includes/debug/MWDebugTest.php index 17c6224cd9..6e41de7543 100644 --- a/tests/phpunit/includes/debug/MWDebugTest.php +++ b/tests/phpunit/includes/debug/MWDebugTest.php @@ -103,7 +103,7 @@ class MWDebugTest extends MediaWikiTestCase { $this->assertInstanceOf( 'ApiResult', $result ); $data = $result->getData(); - $expectedKeys = array( 'mwVersion', 'phpVersion', 'gitRevision', 'gitBranch', + $expectedKeys = array( 'mwVersion', 'phpEngine', 'phpVersion', 'gitRevision', 'gitBranch', 'gitViewUrl', 'time', 'log', 'debugLog', 'queries', 'request', 'memory', 'memoryPeak', 'includes', 'profile', '_element' ); diff --git a/tests/phpunit/includes/deferred/DeferredUpdatesTest.php b/tests/phpunit/includes/deferred/DeferredUpdatesTest.php index b3d57e796a..5348c85435 100644 --- a/tests/phpunit/includes/deferred/DeferredUpdatesTest.php +++ b/tests/phpunit/includes/deferred/DeferredUpdatesTest.php @@ -3,7 +3,7 @@ class DeferredUpdatesTest extends MediaWikiTestCase { public function testDoUpdates() { - $updates = array ( + $updates = array( '1' => 'deferred update 1', '2' => 'deferred update 2', '3' => 'deferred update 3', @@ -18,7 +18,7 @@ class DeferredUpdatesTest extends MediaWikiTestCase { function () use ( $updates ) { echo $updates['2']; DeferredUpdates::addCallableUpdate( - function() use ( $updates ) { + function () use ( $updates ) { echo $updates['2-1']; } ); diff --git a/tests/phpunit/includes/htmlform/HTMLAutoCompleteSelectFieldTest.php b/tests/phpunit/includes/htmlform/HTMLAutoCompleteSelectFieldTest.php new file mode 100644 index 0000000000..2c7f50c9c4 --- /dev/null +++ b/tests/phpunit/includes/htmlform/HTMLAutoCompleteSelectFieldTest.php @@ -0,0 +1,68 @@ + 'BGR', + 'Burkina Faso' => 'BFA', + 'Burundi' => 'BDI', + ); + + /** + * Verify that attempting to instantiate an HTMLAutoCompleteSelectField + * without providing any autocomplete options causes an exception to be + * thrown. + * + * @expectedException MWException + * @expectedExceptionMessage called without any autocompletions + */ + function testMissingAutocompletions() { + new HTMLAutoCompleteSelectField( array( 'fieldname' => 'Test' ) ); + } + + /** + * Verify that the autocomplete options are correctly encoded as + * the 'data-autocomplete' attribute of the field. + * + * @covers HTMLAutoCompleteSelectField::getAttributes + */ + function testGetAttributes() { + $field = new HTMLAutoCompleteSelectField( array( + 'fieldname' => 'Test', + 'autocomplete' => $this->options, + ) ); + + $attributes = $field->getAttributes( array() ); + $this->assertEquals( array_keys( $this->options ), + FormatJson::decode( $attributes['data-autocomplete'] ), + "The 'data-autocomplete' attribute encodes autocomplete option keys as a JSON array." + ); + } + + /** + * Test that the optional select dropdown is included or excluded based on + * the presence or absence of the 'options' parameter. + */ + function testOptionalSelectElement() { + $params = array( + 'fieldname' => 'Test', + 'autocomplete' => $this->options, + 'options' => $this->options, + ); + + $field = new HTMLAutoCompleteSelectField( $params ); + $html = $field->getInputHTML( false ); + $this->assertRegExp( '/select/', $html, + "When the 'options' parameter is set, the HTML includes a " ); + } +} diff --git a/tests/phpunit/includes/parser/NewParserTest.php b/tests/phpunit/includes/parser/NewParserTest.php index 4e8c11f193..0df52f5e38 100644 --- a/tests/phpunit/includes/parser/NewParserTest.php +++ b/tests/phpunit/includes/parser/NewParserTest.php @@ -353,6 +353,9 @@ class NewParserTest extends MediaWikiTestCase { /** * Set up the global variables for a consistent environment for each test. * Ideally this should replace the global configuration entirely. + * @param array $opts + * @param string $config + * @return RequestContext */ protected function setupGlobals( $opts = array(), $config = '' ) { global $wgFileBackends; @@ -754,7 +757,7 @@ class NewParserTest extends MediaWikiTestCase { $this->markTestSkipped( "SKIPPED: tidy extension is not installed.\n" ); } else { $out = MWTidy::tidy( $out ); - $out = preg_replace( '/\s+$/', '', $out); + $out = preg_replace( '/\s+$/', '', $out ); } } @@ -872,6 +875,7 @@ class NewParserTest extends MediaWikiTestCase { /** * Get an input dictionary from a set of parser test files * @param array $filenames + * @return string */ function getFuzzInput( $filenames ) { $dict = ''; @@ -890,6 +894,7 @@ class NewParserTest extends MediaWikiTestCase { /** * Get a memory usage breakdown + * @return array */ function getMemoryBreakdown() { $memStats = array(); @@ -926,6 +931,7 @@ class NewParserTest extends MediaWikiTestCase { /** * Get a Parser object * @param Preprocessor $preprocessor + * @return Parser */ function getParser( $preprocessor = null ) { global $wgParserConf; @@ -986,6 +992,7 @@ class NewParserTest extends MediaWikiTestCase { /** * Remove last character if it is a newline * @param string $s + * @return string */ public function removeEndingNewline( $s ) { if ( substr( $s, -1 ) === "\n" ) { @@ -1070,6 +1077,7 @@ class NewParserTest extends MediaWikiTestCase { * @param string $key Name of option val to retrieve * @param array $opts Options array to look in * @param mixed $default Default value returned if not found + * @return mixed */ protected static function getOptionValue( $key, $opts, $default ) { $key = strtolower( $key ); diff --git a/tests/phpunit/includes/parser/TidyTest.php b/tests/phpunit/includes/parser/TidyTest.php index 7b2a1da72a..c869258d0e 100644 --- a/tests/phpunit/includes/parser/TidyTest.php +++ b/tests/phpunit/includes/parser/TidyTest.php @@ -58,7 +58,7 @@ MathML; array( 'foo', 'foo', ' should survive tidy' ), array( "\nfoo", 'foo', ' should survive tidy' ), array( "\nfoo", 'foo', ' should survive tidy' ), - array( $testMathML , $testMathML, ' should survive tidy' ), + array( $testMathML, $testMathML, ' should survive tidy' ), ); } } diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php index 6ca4793390..b0edaaf7b7 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php @@ -10,7 +10,7 @@ class ResourceLoaderModuleTest extends ResourceLoaderTestCase { SkinFactory::getDefaultInstance()->register( 'fakeskin', 'FakeSkin', - function(){ + function () { } ); } diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php index bd6b3f2329..12ec9ddde2 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php @@ -90,6 +90,36 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { $this->assertStringEqualsFile( $basePath . '/styles.css', $styles['all'] ); } + /** + * What happens when you mix @embed and @noflip? + * This really is an integration test, but oh well. + */ + public function testMixedCssAnnotations( ) { + $basePath = __DIR__ . '/../../data/css'; + $testModule = new ResourceLoaderFileModule( array( + 'localBasePath' => $basePath, + 'styles' => array( 'test.css' ), + ) ); + $expectedModule = new ResourceLoaderFileModule( array( + 'localBasePath' => $basePath, + 'styles' => array( 'expected.css' ), + ) ); + + $contextLtr = self::getResourceLoaderContext( 'en' ); + $contextRtl = self::getResourceLoaderContext( 'he' ); + + $this->assertEquals( + $expectedModule->getStyles( $contextLtr ), + str_replace( '/*@noflip*/ ', '', $testModule->getStyles( $contextLtr ) ), + "/*@noflip*/ with /*@embed*/ gives correct results in LTR mode" + ); + $this->assertEquals( + $expectedModule->getStyles( $contextLtr ), + str_replace( '/*@noflip*/ ', '', $testModule->getStyles( $contextRtl ) ), + "/*@noflip*/ with /*@embed*/ gives correct results in RTL mode" + ); + } + /** * @dataProvider providePackedModules * @covers ResourceLoader::makePackedModulesString diff --git a/tests/phpunit/includes/skins/SkinFactoryTest.php b/tests/phpunit/includes/skins/SkinFactoryTest.php index 36c56a9bb2..d3663c84ad 100644 --- a/tests/phpunit/includes/skins/SkinFactoryTest.php +++ b/tests/phpunit/includes/skins/SkinFactoryTest.php @@ -56,7 +56,9 @@ class SkinFactoryTest extends MediaWikiTestCase { public function testGetSkinNames() { $factory = new SkinFactory(); // A fake callback we can use that will never be called - $callback = function() {}; + $callback = function () { + // NOP + }; $factory->register( 'skin1', 'Skin1', $callback ); $factory->register( 'skin2', 'Skin2', $callback ); $names = $factory->getSkinNames(); diff --git a/tests/phpunit/includes/upload/UploadFromUrlTest.php b/tests/phpunit/includes/upload/UploadFromUrlTest.php index 7125247e8f..26919441b1 100644 --- a/tests/phpunit/includes/upload/UploadFromUrlTest.php +++ b/tests/phpunit/includes/upload/UploadFromUrlTest.php @@ -270,6 +270,9 @@ class UploadFromUrlTest extends ApiTestCase { * Helper function to perform an async upload, execute the job and fetch * the status * + * @param string $token + * @param bool $ignoreWarnings + * @param bool $leaveMessage * @return array The result of action=upload&statuskey=key */ private function doAsyncUpload( $token, $ignoreWarnings = false, $leaveMessage = false ) { diff --git a/tests/phpunit/includes/utils/StringUtilsTest.php b/tests/phpunit/includes/utils/StringUtilsTest.php index 89759e5c70..0fdb8e1594 100644 --- a/tests/phpunit/includes/utils/StringUtilsTest.php +++ b/tests/phpunit/includes/utils/StringUtilsTest.php @@ -35,7 +35,9 @@ class StringUtilsTest extends MediaWikiTestCase { } /** - * Print high range characters as an hexadecimal + * Print high range characters as a hexadecimal + * @param string $string + * @return string */ function escaped( $string ) { $escaped = ''; diff --git a/tests/phpunit/maintenance/DumpTestCase.php b/tests/phpunit/maintenance/DumpTestCase.php index 45d5ea8c3e..8b6aef53bf 100644 --- a/tests/phpunit/maintenance/DumpTestCase.php +++ b/tests/phpunit/maintenance/DumpTestCase.php @@ -31,7 +31,7 @@ abstract class DumpTestCase extends MediaWikiLangTestCase { * @param Page $page Page to add the revision to * @param string $text Revisions text * @param string $summary Revisions summare - * + * @return array * @throws MWException */ protected function addRevision( Page $page, $text, $summary ) { diff --git a/tests/phpunit/maintenance/fetchTextTest.php b/tests/phpunit/maintenance/fetchTextTest.php index b2141d34d2..4e38418a18 100644 --- a/tests/phpunit/maintenance/fetchTextTest.php +++ b/tests/phpunit/maintenance/fetchTextTest.php @@ -101,7 +101,7 @@ class FetchTextTest extends MediaWikiTestCase { * @param WikiPage $page The page to add the revision to * @param string $text The revisions text * @param string $summary The revisions summare - * + * @return int * @throws MWException */ private function addRevision( $page, $text, $summary ) { diff --git a/tests/phpunit/structure/ResourcesTest.php b/tests/phpunit/structure/ResourcesTest.php index 7576602cd4..2396ea2923 100644 --- a/tests/phpunit/structure/ResourcesTest.php +++ b/tests/phpunit/structure/ResourcesTest.php @@ -106,6 +106,7 @@ class ResourcesTest extends MediaWikiTestCase { /** * Get all registered modules from ResouceLoader. + * @return array */ protected static function getAllModules() { global $wgEnableJavaScriptTest; diff --git a/tests/phpunit/structure/StructureTest.php b/tests/phpunit/structure/StructureTest.php index f5cd8927c6..14461be691 100644 --- a/tests/phpunit/structure/StructureTest.php +++ b/tests/phpunit/structure/StructureTest.php @@ -58,6 +58,8 @@ class StructureTest extends MediaWikiTestCase { /** * Filter to remove testUnitTestFileNamesEndWithTest false positives. + * @param string $filename + * @return bool */ public function filterSuites( $filename ) { return strpos( $filename, __DIR__ . '/../suites/' ) !== 0; diff --git a/tests/phpunit/suites/UploadFromUrlTestSuite.php b/tests/phpunit/suites/UploadFromUrlTestSuite.php index bd82d21921..d4a7bd362a 100644 --- a/tests/phpunit/suites/UploadFromUrlTestSuite.php +++ b/tests/phpunit/suites/UploadFromUrlTestSuite.php @@ -95,6 +95,7 @@ class UploadFromUrlTestSuite extends PHPUnit_Framework_TestSuite { /** * Remove the dummy uploads directory + * @param string $dir */ private function teardownUploadDir( $dir ) { if ( $this->keepUploads ) { diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js index afa57ee375..906fd27f49 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js @@ -40,7 +40,8 @@ 'gender-msg-currentuser': '{{GENDER:|blue|pink|green}}', 'plural-msg': 'Found $1 {{PLURAL:$1|item|items}}', - + // See https://bugzilla.wikimedia.org/69993 + 'plural-msg-explicit-forms-nested': 'Found {{PLURAL:$1|$1 results|0=no results in {{SITENAME}}|1=$1 result}}', // Assume the grammar form grammar_case_foo is not valid in any language 'grammar-msg': 'Przeszukaj {{GRAMMAR:grammar_case_foo|{{SITENAME}}}}', @@ -134,10 +135,13 @@ ); } ); - QUnit.test( 'Plural', 3, function ( assert ) { + QUnit.test( 'Plural', 6, function ( assert ) { assert.equal( formatParse( 'plural-msg', 0 ), 'Found 0 items', 'Plural test for english with zero as count' ); assert.equal( formatParse( 'plural-msg', 1 ), 'Found 1 item', 'Singular test for english' ); assert.equal( formatParse( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' ); + assert.equal( formatParse( 'plural-msg-explicit-forms-nested', 6 ), 'Found 6 results', 'Plural message with explicit plural forms' ); + assert.equal( formatParse( 'plural-msg-explicit-forms-nested', 0 ), 'Found no results in ' + mw.config.get( 'wgSiteName' ), 'Plural message with explicit plural forms, with nested {{SITENAME}}' ); + assert.equal( formatParse( 'plural-msg-explicit-forms-nested', 1 ), 'Found 1 result', 'Plural message with explicit plural forms with placeholder nested' ); } ); QUnit.test( 'Gender', 15, function ( assert ) { diff --git a/tests/testHelpers.inc b/tests/testHelpers.inc index 2f5fa9ea3f..62dccbf0b3 100644 --- a/tests/testHelpers.inc +++ b/tests/testHelpers.inc @@ -36,16 +36,26 @@ */ interface ITestRecorder { - /** Called at beginning of the parser test run */ + /** + * Called at beginning of the parser test run + */ public function start(); - /** Called after each test */ + /** + * Called after each test + * @param string $test + * @param bool $result + */ public function record( $test, $result ); - /** Called before finishing the test run */ + /** + * Called before finishing the test run + */ public function report(); - /** Called at the end of the parser test run */ + /** + * Called at the end of the parser test run + */ public function end(); } @@ -107,6 +117,7 @@ class DbTestPreviewer extends TestRecorder { /** * This should be called before the table prefix is changed + * @param TestRecorder $parent */ function __construct( $parent ) { parent::__construct( $parent ); @@ -220,6 +231,9 @@ class DbTestPreviewer extends TestRecorder { * Returns a string giving information about when a test last had a status change. * Could help to track down when regressions were introduced, as distinct from tests * which have never passed (which are more change requests than regressions). + * @param string $testname + * @param string $after + * @return string */ private function getTestStatusInfo( $testname, $after ) { // If we're looking at a test that has just been removed, then say when it first appeared. @@ -423,7 +437,7 @@ class TestFileIterator implements Iterator { $input = $this->checkSection( array( 'wikitext', 'input' ), false ); $result = $this->checkSection( array( 'html/php', 'html/*', 'html', 'result' ), false ); // some tests have "with tidy" and "without tidy" variants - $tidy = $this->checkSection( array( 'html/php+tidy', 'html+tidy'), false ); + $tidy = $this->checkSection( array( 'html/php+tidy', 'html+tidy' ), false ); if ( $tidy != false ) { if ( $this->nextSubTest == 0 ) { if ( $result != false ) { @@ -475,9 +489,11 @@ class TestFileIterator implements Iterator { function readNextTest() { # Run additional subtests of previous test - while ( $this->nextSubTest > 0 ) - if ( $this->setupCurrentTest() ) + while ( $this->nextSubTest > 0 ) { + if ( $this->setupCurrentTest() ) { return true; + } + } $this->clearSection(); # Reset hooks for the delayed test object @@ -554,8 +570,9 @@ class TestFileIterator implements Iterator { if ( $this->section == 'end' ) { $this->checkSection( 'test' ); do { - if ( $this->setupCurrentTest() ) + if ( $this->setupCurrentTest() ) { return true; + } } while ( $this->nextSubTest > 0 ); # go on to next test (since this was disabled) $this->clearSection(); @@ -600,6 +617,7 @@ class TestFileIterator implements Iterator { * mentioned before closing this section * @param bool $fatal True iff an exception should be thrown if * the section is not found. + * @return bool|string */ private function checkSection( $tokens, $fatal = true ) { if ( is_null( $this->section ) ) { @@ -672,6 +690,7 @@ class DelayedParserTest { * Called whenever we actually want to run the hook. * Should be the case if we found the parserTest is not disabled * @param ParserTest|NewParserTest $parserTest + * @return bool */ public function unleash( &$parserTest ) { if ( !( $parserTest instanceof ParserTest || $parserTest instanceof NewParserTest ) ) {