Merge "Fix setting hooks in ApiQueryTest"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 23 Oct 2014 17:56:57 +0000 (17:56 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 23 Oct 2014 17:56:57 +0000 (17:56 +0000)
488 files changed:
RELEASE-NOTES-1.24
RELEASE-NOTES-1.25
api.php
docs/hooks.txt
docs/mwlogger.txt [new file with mode: 0644]
includes/AutoLoader.php
includes/Block.php
includes/DefaultSettings.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/MagicWord.php
includes/MediaWiki.php
includes/OutputPage.php
includes/Preferences.php
includes/PrefixSearch.php
includes/Revision.php
includes/Setup.php
includes/SiteStats.php
includes/Title.php
includes/User.php
includes/actions/InfoAction.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiClearHasMsg.php
includes/api/ApiComparePages.php
includes/api/ApiCreateAccount.php
includes/api/ApiDelete.php
includes/api/ApiDisabled.php
includes/api/ApiEditPage.php
includes/api/ApiEmailUser.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFeedContributions.php
includes/api/ApiFeedRecentChanges.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFileRevert.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatFeedWrapper.php
includes/api/ApiFormatRaw.php
includes/api/ApiFormatXml.php
includes/api/ApiHelp.php
includes/api/ApiImageRotate.php
includes/api/ApiImport.php
includes/api/ApiLogin.php
includes/api/ApiLogout.php
includes/api/ApiMain.php
includes/api/ApiMove.php
includes/api/ApiOpenSearch.php
includes/api/ApiOptions.php
includes/api/ApiPageSet.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiPatrol.php
includes/api/ApiProtect.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllCategories.php
includes/api/ApiQueryAllImages.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryAllPages.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryBacklinksprop.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryInfo.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryContributors.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryDisabled.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryExternalLinks.php
includes/api/ApiQueryFileRepoInfo.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryIWBacklinks.php
includes/api/ApiQueryIWLinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryImages.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLangBacklinks.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryORM.php
includes/api/ApiQueryPagePropNames.php
includes/api/ApiQueryPageProps.php
includes/api/ApiQueryPagesWithProp.php
includes/api/ApiQueryPrefixSearch.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQueryRandom.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryStashImageInfo.php
includes/api/ApiQueryTags.php
includes/api/ApiQueryTokens.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiQueryWatchlistRaw.php
includes/api/ApiRevisionDelete.php
includes/api/ApiRollback.php
includes/api/ApiRsd.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiTokens.php
includes/api/ApiUnblock.php
includes/api/ApiUndelete.php
includes/api/ApiUpload.php
includes/api/ApiUserrights.php
includes/api/ApiWatch.php
includes/api/i18n/en.json
includes/api/i18n/qqq.json
includes/config/GlobalVarConfig.php
includes/db/Database.php
includes/db/ORMTable.php
includes/debug/logger/Logger.php [new file with mode: 0644]
includes/debug/logger/NullSpi.php [new file with mode: 0644]
includes/debug/logger/Spi.php [new file with mode: 0644]
includes/debug/logger/monolog/Handler.php [new file with mode: 0644]
includes/debug/logger/monolog/Processor.php [new file with mode: 0644]
includes/debug/logger/monolog/Spi.php [new file with mode: 0644]
includes/deferred/SiteStatsUpdate.php
includes/deferred/ViewCountUpdate.php [deleted file]
includes/filerepo/FileRepo.php
includes/filerepo/file/LocalFile.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLSelectNamespace.php [new file with mode: 0644]
includes/htmlform/HTMLTagFilter.php [new file with mode: 0644]
includes/installer/WebInstallerPage.php
includes/installer/i18n/hu.json
includes/installer/i18n/it.json
includes/installer/i18n/mk.json
includes/installer/i18n/nb.json
includes/installer/i18n/tr.json
includes/jobqueue/Job.php
includes/jobqueue/JobQueueRedis.php
includes/jobqueue/JobRunner.php
includes/libs/jsminplus.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/logging/MergeLogFormatter.php [new file with mode: 0644]
includes/objectcache/SqlBagOStuff.php
includes/page/WikiPage.php
includes/parser/CoreParserFunctions.php
includes/parser/CoreTagHooks.php
includes/parser/Parser.php
includes/parser/ParserOutput.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/password/PasswordFactory.php
includes/profiler/ProfilerMwprof.php
includes/skins/BaseTemplate.php
includes/skins/SkinApi.php
includes/skins/SkinApiTemplate.php
includes/skins/SkinTemplate.php
includes/specialpage/QueryPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialAllPages.php
includes/specials/SpecialListfiles.php
includes/specials/SpecialMergeHistory.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialPopularpages.php [deleted file]
includes/specials/SpecialSearch.php
includes/specials/SpecialStatistics.php
languages/Names.php
languages/i18n/bcc.json
languages/i18n/be-tarask.json
languages/i18n/bn.json
languages/i18n/ca.json
languages/i18n/ckb.json
languages/i18n/cs.json
languages/i18n/cy.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/egl.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/he.json
languages/i18n/hu.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/mai.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/ms.json
languages/i18n/mt.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/pa.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/rup.json
languages/i18n/ses.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/ta.json
languages/i18n/tr.json
languages/i18n/uk.json
languages/i18n/uz.json
languages/i18n/vi.json
languages/i18n/yi.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesEn.php
languages/messages/MessagesSes.php [new file with mode: 0644]
maintenance/dictionary/mediawiki.dic
maintenance/eval.php
maintenance/initSiteStats.php
maintenance/showSiteStats.php
maintenance/updateSpecialPages.php
resources/Resources.php
resources/lib/oojs-ui/dist/themes/apex/images/icons/add.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/advanced.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/alert.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/arched-arrow-ltr.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/arched-arrow-rtl.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/check.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/clear.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/close.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/code.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/collapse.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/comment.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/expand.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/help.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/info.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/link.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/menu.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/move-ltr.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/move-rtl.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/picture.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/remove.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/search.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/settings.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/tag.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/icons/window.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/indicators/alert.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-down.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-ltr.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-rtl.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-up.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/indicators/required.png [deleted file]
resources/lib/oojs-ui/dist/themes/apex/images/textures/transparency.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/add-constructive.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/add-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/add.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/advanced-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/advanced.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/alert-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/alert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-ltr.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-rtl.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/check-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/check-primary.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/check.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/clear-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/clear.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/close-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/close.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/code-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/code.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/collapse-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/collapse.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/comment-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/comment.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/expand-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/expand.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/help-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/help.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/info-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/info.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/link-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/link.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/menu-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/menu.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-ltr-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-ltr.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-rtl-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-rtl.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/picture-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/picture.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/remove-destructive.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/remove-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/remove.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/search-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/search.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/settings-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/settings.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/tag-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/tag.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/window-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/window.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/alert-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/alert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-down-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-down.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-ltr-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-ltr.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-rtl-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-rtl.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-up-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-up.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/required-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/required.png [deleted file]
resources/lib/oojs-ui/dist/themes/mediawiki/images/textures/transparency.png [deleted file]
resources/lib/oojs-ui/dist/themes/minerva/images/icons/check-invert.png [deleted file]
resources/lib/oojs-ui/dist/themes/minerva/images/icons/check.png [deleted file]
resources/lib/oojs-ui/i18n/bcc.json [new file with mode: 0644]
resources/lib/oojs-ui/i18n/de.json
resources/lib/oojs-ui/i18n/en.json
resources/lib/oojs-ui/i18n/es.json
resources/lib/oojs-ui/i18n/et.json
resources/lib/oojs-ui/i18n/fr.json
resources/lib/oojs-ui/i18n/ja.json
resources/lib/oojs-ui/i18n/lb.json
resources/lib/oojs-ui/i18n/mk.json
resources/lib/oojs-ui/i18n/pt.json
resources/lib/oojs-ui/i18n/qqq.json
resources/lib/oojs-ui/i18n/ro.json
resources/lib/oojs-ui/i18n/ru.json
resources/lib/oojs-ui/i18n/sk.json
resources/lib/oojs-ui/i18n/sv.json
resources/lib/oojs-ui/i18n/zh-hans.json
resources/lib/oojs-ui/i18n/zh-hant.json
resources/lib/oojs-ui/oojs-ui-apex.css
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-apex.rtl.css [deleted file]
resources/lib/oojs-ui/oojs-ui-apex.svg.css
resources/lib/oojs-ui/oojs-ui-apex.svg.rtl.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui-mediawiki.rtl.css [deleted file]
resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css
resources/lib/oojs-ui/oojs-ui-mediawiki.svg.rtl.css [deleted file]
resources/lib/oojs-ui/oojs-ui-minerva.css [deleted file]
resources/lib/oojs-ui/oojs-ui-minerva.js [deleted file]
resources/lib/oojs-ui/oojs-ui-minerva.rtl.css [deleted file]
resources/lib/oojs-ui/oojs-ui-minerva.svg.css [deleted file]
resources/lib/oojs-ui/oojs-ui-minerva.svg.rtl.css [deleted file]
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/oojs-ui.rtl.css [deleted file]
resources/lib/oojs-ui/oojs-ui.svg.rtl.css [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/add.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/advanced.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/alert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/check.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/clear.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/close.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/code.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/collapse.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/comment.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/expand.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/help.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/info.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/link.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/menu.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/picture.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/remove.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/search.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/settings.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/tag.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/window.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/alert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/indicators/required.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/textures/transparency.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check-primary.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/help.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/link.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/minerva/images/icons/check-invert.svg [deleted file]
resources/lib/oojs-ui/themes/minerva/images/icons/check.svg [deleted file]
resources/src/jquery/jquery.textSelection.js
resources/src/mediawiki.legacy/commonPrint.css
resources/src/mediawiki.ui/components/buttons.less
resources/src/mediawiki.ui/components/icons.less
resources/src/mediawiki/mediawiki.hlist.js
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/PrefixSearchTest.php
tests/phpunit/includes/TestUser.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/UserTest.php
tests/phpunit/includes/api/ApiOptionsTest.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php
tests/phpunit/includes/api/query/ApiQueryTestBase.php
tests/phpunit/includes/cache/LocalisationCacheTest.php
tests/phpunit/includes/changes/RecentChangeTest.php
tests/phpunit/includes/config/GlobalVarConfigTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php [new file with mode: 0644]
tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php
tests/phpunit/structure/AutoLoaderTest.php
tests/phpunit/suites/ExtensionsTestSuite.php

index 2b5136e..03cf277 100644 (file)
@@ -505,6 +505,9 @@ changes to languages because of Bugzilla reports.
 * Removed maintenance/purgeOldText.inc and the PurgeRedundantText() function
   it contained (superseded by Maintenance::purgeRedundantText() in 1.16).
   The purgeOldText.php maintenance script has been retained.
+* PHPUnit tests can be found by directory discovery, by adding the directory
+  path from your UnitTestsList callback. Older versions of MediaWiki core will
+  barf at this usage.
 
 ==== Renamed classes ====
 * CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
index 2d5e7f4..029b36b 100644 (file)
@@ -12,6 +12,10 @@ production.
 * $wgPageShowWatchingUsers was removed.
 * $wgLocalVirtualHosts has been added to replace $wgConf->localVHosts.
 * $wgAntiLockFlags was removed.
+* Edit tokens returned from User::getEditToken may change on every call. Token
+  validity must be checked by passing the user-supplied token to
+  User::matchEditToken rather than by testing for equality with a
+  newly-generated token.
 
 === New features in 1.25 ===
 * (bug 58139) ResourceLoaderFileModule now supports language fallback
@@ -25,6 +29,16 @@ production.
   in CSS. This results in slight size increase before gzip compression (due to
   percent-encoding), but up to 20% decrease after it.
 * Upgrade jStorage to v0.4.12.
+* MediaWiki now natively supports page status indicators: icons (or short text
+  snippets) usually displayed in the top-right corner of the page. They have
+  been in use on Wikipedia for a long time, implemented using templates and CSS
+  absolute positioning.
+  - Basic wikitext syntax: <indicator name="foo">[[File:Foo.svg|20px]]</indicator>
+  - Usage instructions: https://www.mediawiki.org/wiki/Help:Page_status_indicators
+  - Adjusting custom skins to support indicators:
+    https://www.mediawiki.org/wiki/Manual:Skinning#Page_status_indicators
+* Edit tokens may now be time-limited: passing a maximum age to
+  User::matchEditToken will reject any older tokens.
 
 === Bug fixes in 1.25 ===
 * (bug 71003) No additional code will be generated to try to load CSS-embedded
@@ -94,6 +108,7 @@ production.
   * ApiMain::setHelp
   * ApiMain::reallyMakeHelpMsg
   * ApiMain::makeHelpMsgHeader
+  * ApiQueryImageInfo::getPropertyDescriptions
 
 === Languages updated in 1.25 ===
 
@@ -122,6 +137,10 @@ changes to languages because of Bugzilla reports.
 * Deprecated OutputPage::readOnlyPage() and OutputPage::rateLimited().
   Also, the former will now throw an MWException if called with one or more
   arguments.
+* Removed hitcounters and associated code.
+* The "temp" zone of the upload respository is now considered private. If it
+  already exists (such as under the images/ directory), please make sure that
+  the directory is not web readable (e.g. via a .htaccess file).
 
 == Compatibility ==
 
diff --git a/api.php b/api.php
index 2a6a095..7974f15 100644 (file)
--- a/api.php
+++ b/api.php
@@ -62,14 +62,14 @@ if ( !$wgEnableAPI ) {
 // In a perfect world this wouldn't be necessary
 $wgTitle = Title::makeTitle( NS_MAIN, 'API' );
 
-/* Construct an ApiMain with the arguments passed via the URL. What we get back
- * is some form of an ApiMain, possibly even one that produces an error message,
- * but we don't care here, as that is handled by the ctor.
- */
-$processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI );
-
-// Last chance hook before executing the API
 try {
+       /* Construct an ApiMain with the arguments passed via the URL. What we get back
+        * is some form of an ApiMain, possibly even one that produces an error message,
+        * but we don't care here, as that is handled by the ctor.
+        */
+       $processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI );
+
+       // Last chance hook before executing the API
        wfRunHooks( 'ApiBeforeMain', array( &$processor ) );
        if ( !$processor instanceof ApiMain ) {
                throw new MWException( 'ApiBeforMain hook set $processor to a non-ApiMain class' );
index c60cc76..b71c347 100644 (file)
@@ -2139,6 +2139,13 @@ $search : search term (not guaranteed to be conveniently normalized)
 $limit : maximum number of results to return
 &$results : out param: array of page names (strings)
 
+'PrefixSearchExtractNamespace': Called if core was not able to extract a
+namespace from the search string so that extensions can attempt it.
+$namespaces : array of int namespace keys to search in (change this if you can
+extract namespaces)
+$search : search term (replace this with term without the namespace if you can
+extract one)
+
 'PrefsEmailAudit': Called when user changes their email address.
 $user: User (object) changing his email address
 $oldaddr: old email address (string)
@@ -2729,8 +2736,10 @@ actions).
 $action: action name
 $article: article "acted on"
 
-'UnitTestsList': Called when building a list of files with PHPUnit tests.
-&$files: list of files
+'UnitTestsList': Called when building a list of paths containing PHPUnit tests.
+Since 1.24: Paths pointing to a directory will be recursively scanned for
+test case files matching the suffix "Test.php".
+&$paths: list of test cases and directories to search.
 
 'UnwatchArticle': Before a watch is removed from an article.
 $user: user watching
diff --git a/docs/mwlogger.txt b/docs/mwlogger.txt
new file mode 100644 (file)
index 0000000..9964e8b
--- /dev/null
@@ -0,0 +1,59 @@
+MWLogger implements a PSR-3 [0] compatible message logging system.
+
+The MWLogger class is actually a thin wrapper around any PSR-3 LoggerInterface
+implementation. Named MWLogger instances can be obtained from the
+MWLogger::getInstance() static method. MWLogger expects a class implementing
+the MWLoggerSpi interface to act as a factory for new MWLogger instances.
+
+The "Spi" in MWLoggerSpi stands for "service provider interface". An SPI is
+a API intended to be implemented or extended by a third party. This software
+design pattern is intended to enable framework extension and replaceable
+components. It is specifically used in the MWLogger service to allow alternate
+PSR-3 logging implementations to be easily integrated with MediaWiki.
+
+The MWLogger::getInstance() static method is the means by which most code
+acquires an MWLogger instance. This in turn delegates creation of MWLogger
+instances to a class implementing the MWLoggerSpi service provider interface.
+
+The service provider interface allows the backend logging library to be
+implemented in multiple ways. The $wgMWLoggerDefaultSpi global provides the
+classname of the default MWLoggerSpi implementation to be loaded at runtime.
+This can either be the name of a class implementing the MWLoggerSpi with
+a zero argument constructor or a callable that will return an MWLoggerSpi
+instance. Alternately the MWLogger::registerProvider method can be called
+to inject an MWLoggerSpi instance into MWLogger and bypass the use of this
+configuration variable.
+
+The MWLoggerMonologSpi class implements a service provider to generate
+MWLogger instances that use the Monolog [1] logging library. See the PHP docs
+(or source) for MWLoggerMonologSpi for details on the configuration of this
+provider. The default configuration installs a null handler that will silently
+discard all logging events. The documentation provided by the class describes
+a more feature rich logging configuration.
+
+== Classes ==
+; MWLogger
+: PSR-3 compatible logger that wraps any \Psr\Log\LoggerInterface
+  implementation
+; MWLoggerSpi
+: Service provider interface for MWLogger factories
+; MWLoggerNullSpi
+: MWLoggerSpi for creating instances that discard all log events
+; MWLoggerMonologSpi
+: MWLoggerSpi for creating instances backed by the monolog logging library
+; MwLoggerMonologHandler
+: Monolog handler that replicates the udp2log and file logging
+  functionality of wfErrorLog()
+; MwLoggerMonologProcessor
+: Monolog log processer that adds host: wfHostname() and wiki: wfWikiID()
+  to all records
+
+== Globals ==
+; $wgMWLoggerDefaultSpi
+: Default service provider interface to use with MWLogger
+; $wgMWLoggerMonologSpiConfig
+: Configuration for MWLoggerMonologSpi describing how to configure the
+  Monolog logger instances.
+
+[0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
+[1]: https://github.com/Seldaek/monolog
index cd6a8ca..99b2d84 100644 (file)
@@ -39,7 +39,6 @@ $wgAutoloadLocalClasses = array(
        'BloomCache' => 'includes/cache/bloom/BloomCache.php',
        'BloomCacheRedis' => 'includes/cache/bloom/BloomCacheRedis.php',
        'BloomFilterTitleHasLogs' => 'includes/cache/bloom/BloomFilters.php',
-       'CacheHelper' => 'includes/CacheHelper.php',
        'Category' => 'includes/Category.php',
        'CategoryFinder' => 'includes/CategoryFinder.php',
        'CategoryViewer' => 'includes/CategoryViewer.php',
@@ -106,6 +105,8 @@ $wgAutoloadLocalClasses = array(
        'HTMLSelectField' => 'includes/htmlform/HTMLSelectField.php',
        'HTMLSelectLimitField' => 'includes/htmlform/HTMLSelectLimitField.php',
        'HTMLSelectOrOtherField' => 'includes/htmlform/HTMLSelectOrOtherField.php',
+       'HTMLSelectNamespace' => 'includes/htmlform/HTMLSelectNamespace.php',
+       'HTMLTagFilter' => 'includes/htmlform/HTMLTagFilter.php',
        'HTMLSubmitField' => 'includes/htmlform/HTMLSubmitField.php',
        'HTMLTextAreaField' => 'includes/htmlform/HTMLTextAreaField.php',
        'HTMLTextField' => 'includes/htmlform/HTMLTextField.php',
@@ -461,6 +462,12 @@ $wgAutoloadLocalClasses = array(
 
        # includes/debug
        'MWDebug' => 'includes/debug/MWDebug.php',
+       'MWLogger' => 'includes/debug/logger/Logger.php',
+       'MWLoggerMonologHandler' => 'includes/debug/logger/monolog/Handler.php',
+       'MWLoggerMonologProcessor' => 'includes/debug/logger/monolog/Processor.php',
+       'MWLoggerMonologSpi' => 'includes/debug/logger/monolog/Spi.php',
+       'MWLoggerNullSpi' => 'includes/debug/logger/NullSpi.php',
+       'MWLoggerSpi' => 'includes/debug/logger/Spi.php',
 
        # includes/deferred
        'DataUpdate' => 'includes/deferred/DataUpdate.php',
@@ -474,7 +481,6 @@ $wgAutoloadLocalClasses = array(
        'SiteStatsUpdate' => 'includes/deferred/SiteStatsUpdate.php',
        'SqlDataUpdate' => 'includes/deferred/SqlDataUpdate.php',
        'SquidUpdate' => 'includes/deferred/SquidUpdate.php',
-       'ViewCountUpdate' => 'includes/deferred/ViewCountUpdate.php',
 
        # includes/diff
        'DiffEngine' => 'includes/diff/DairikiDiff.php',
@@ -709,6 +715,7 @@ $wgAutoloadLocalClasses = array(
        'LogPage' => 'includes/logging/LogPage.php',
        'LogPager' => 'includes/logging/LogPager.php',
        'ManualLogEntry' => 'includes/logging/LogEntry.php',
+       'MergeLogFormatter' => 'includes/logging/MergeLogFormatter.php',
        'MoveLogFormatter' => 'includes/logging/MoveLogFormatter.php',
        'NewUsersLogFormatter' => 'includes/logging/NewUsersLogFormatter.php',
        'PageLangLogFormatter' => 'includes/logging/PageLangLogFormatter.php',
@@ -1014,7 +1021,6 @@ $wgAutoloadLocalClasses = array(
        'NewFilesPager' => 'includes/specials/SpecialNewimages.php',
        'NewPagesPager' => 'includes/specials/SpecialNewpages.php',
        'PageArchive' => 'includes/specials/SpecialUndelete.php',
-       'PopularPagesPage' => 'includes/specials/SpecialPopularpages.php',
        'ProtectedPagesPager' => 'includes/specials/SpecialProtectedpages.php',
        'ProtectedTitlesPager' => 'includes/specials/SpecialProtectedtitles.php',
        'RandomPage' => 'includes/specials/SpecialRandompage.php',
index 8e52bf0..134ee6b 100644 (file)
@@ -1114,6 +1114,7 @@ class Block {
 
        /**
         * From a list of multiple blocks, find the most exact and strongest Block.
+        *
         * The logic for finding the "best" block is:
         *  - Blocks that match the block's target IP are preferred over ones in a range
         *  - Hardblocks are chosen over softblocks that prevent account creation
@@ -1121,8 +1122,10 @@ class Block {
         *  - Other softblocks are chosen over autoblocks
         *  - If there are multiple exact or range blocks at the same level, the one chosen
         *    is random
+        * This should be used when $blocks where retrieved from the user's IP address
+        * and $ipChain is populated from the same IP address information.
         *
-        * @param array $blocks Array of blocks
+        * @param array $blocks Array of Block objects
         * @param array $ipChain List of IPs (strings). This is used to determine how "close"
         *        a block is to the server, and if a block matches exactly, or is in a range.
         *        The order is furthest from the server to nearest e.g., (Browser, proxy1, proxy2,
index de29f0d..af36a64 100644 (file)
@@ -3797,6 +3797,7 @@ $wgNamespacesWithSubpages = array(
 $wgTrackingCategories = array(
        'index-category',
        'noindex-category',
+       'duplicate-args-category',
        'expensive-parserfunction-category',
        'post-expand-template-argument-category',
        'post-expand-template-inclusion-category',
@@ -4115,15 +4116,6 @@ $wgTranscludeCacheExpiry = 3600;
  */
 $wgArticleCountMethod = 'link';
 
-/**
- * wgHitcounterUpdateFreq sets how often page counters should be updated, higher
- * values are easier on the database. A value of 1 causes the counters to be
- * updated on every hit, any higher value n cause them to update *on average*
- * every n hits. Should be set to either 1 or something largish, eg 1000, for
- * maximum efficiency.
- */
-$wgHitcounterUpdateFreq = 1;
-
 /**
  * How many days user must be idle before he is considered inactive. Will affect
  * the number shown on Special:Statistics, Special:ActiveUsers, and the
@@ -5223,6 +5215,43 @@ $wgDebugDumpSqlLength = 500;
  */
 $wgDebugLogGroups = array();
 
+/**
+ * Default service provider for creating MWLogger instances.
+ *
+ * This can either be the name of a class implementing the MWLoggerSpi
+ * interface with a zero argument constructor or a callable that will return
+ * an MWLoggerSpi instance. Alternately the MWLogger::registerProvider method
+ * can be called to inject an MWLoggerSpi instance into MWLogger and bypass
+ * the use of this configuration variable.
+ *
+ * @since 1.25
+ * @var $wgMWLoggerDefaultSpi string|callable
+ * @see MwLogger
+ */
+$wgMWLoggerDefaultSpi = 'MWLoggerNullSpi';
+
+/**
+ * Configuration for MWLoggerMonologSpi logger factory.
+ *
+ * Default configuration installs a null handler that will silently discard
+ * all logging events.
+ *
+ * @since 1.25
+ * @see MWLoggerMonologSpi
+ */
+$wgMWLoggerMonologSpiConfig = array(
+       'loggers' => array(
+               '@default' => array(
+                       'handlers' => array( 'null' ),
+               ),
+       ),
+       'handlers' => array(
+               'null' => array(
+                       'class' => '\\Monolog\\Logger\\NullHandler',
+               ),
+       ),
+);
+
 /**
  * Display debug data at the bottom of the main content area.
  *
@@ -5384,12 +5413,6 @@ $wgAggregateStatsID = false;
  */
 $wgStatsFormatString = "stats/%s - %s 1 1 1 1 %s\n";
 
-/**
- * Whereas to count the number of time an article is viewed.
- * Does not work if pages are cached (for example with squid).
- */
-$wgDisableCounters = false;
-
 /**
  * InfoAction retrieves a list of transclusion links (both to and from).
  * This number puts a limit on that query in the case of highly transcluded
@@ -6590,7 +6613,6 @@ $wgLogActions = array(
        'protect/move_prot' => 'movedarticleprotection',
        'import/upload' => 'import-logentry-upload',
        'import/interwiki' => 'import-logentry-interwiki',
-       'merge/merge' => 'pagemerge-logentry',
        'suppress/block' => 'blocklogentry',
        'suppress/reblock' => 'reblock-logentry',
 );
@@ -6617,6 +6639,7 @@ $wgLogActionsHandlers = array(
        'upload/upload' => 'LogFormatter',
        'upload/overwrite' => 'LogFormatter',
        'upload/revert' => 'LogFormatter',
+       'merge/merge' => 'MergeLogFormatter',
 );
 
 /**
index ca28c07..764f413 100644 (file)
@@ -2107,6 +2107,17 @@ class EditPage {
                if ( $namespace == NS_MEDIAWIKI ) {
                        # Show a warning if editing an interface message
                        $wgOut->wrapWikiMsg( "<div class='mw-editinginterface'>\n$1\n</div>", 'editinginterface' );
+                       # If this is a default message (but not css or js),
+                       # show a hint that it is translatable on translatewiki.net
+                       if ( !$this->mTitle->hasContentModel( CONTENT_MODEL_CSS )
+                               && !$this->mTitle->hasContentModel( CONTENT_MODEL_JAVASCRIPT )
+                       ) {
+                               $defaultMessageText = $this->mTitle->getDefaultMessageText();
+                               if ( $defaultMessageText !== false ) {
+                                       $wgOut->wrapWikiMsg( "<div class='mw-translateinterface'>\n$1\n</div>",
+                                               'translateinterface' );
+                               }
+                       }
                } elseif ( $namespace == NS_FILE ) {
                        # Show a hint to shared repo
                        $file = wfFindFile( $this->mTitle );
index 2c26fef..11388e8 100644 (file)
@@ -3765,11 +3765,19 @@ function wfGetNull() {
 }
 
 /**
- * Modern version of wfWaitForSlaves(). Instead of looking at replication lag
- * and waiting for it to go down, this waits for the slaves to catch up to the
- * master position. Use this when updating very large numbers of rows, as
- * in maintenance scripts, to avoid causing too much lag.  Of course, this is
- * a no-op if there are no slaves.
+ * Waits for the slaves to catch up to the master position
+ *
+ * Use this when updating very large numbers of rows, as in maintenance scripts,
+ * to avoid causing too much lag. Of course, this is a no-op if there are no slaves.
+ *
+ * By default this waits on the main DB cluster of the current wiki.
+ * If $cluster is set to "*" it will wait on all DB clusters, including
+ * external ones. If the lag being waiting on is caused by the code that
+ * does this check, it makes since to use $ifWritesSince, particularly if
+ * cluster is "*", to avoid excess overhead.
+ *
+ * Never call this function after a big DB write that is still in a transaction.
+ * This only makes sense after the possible lag inducing changes were committed.
  *
  * @param float|null $ifWritesSince Only wait if writes were done since this UNIX timestamp
  * @param string|bool $wiki Wiki identifier accepted by wfGetLB
@@ -3787,31 +3795,47 @@ function wfWaitForSlaves(
                $timeout = ( PHP_SAPI === 'cli' ) ? 86400 : 10;
        }
 
-       if ( $cluster !== false ) {
-               $lb = wfGetLBFactory()->getExternalLB( $cluster );
+       // Figure out which clusters need to be checked
+       $lbs = array();
+       if ( $cluster === '*' ) {
+               wfGetLBFactory()->forEachLB( function( LoadBalancer $lb ) use ( &$lbs ) {
+                       $lbs[] = $lb;
+               } );
+       } elseif ( $cluster !== false ) {
+               $lbs[] = wfGetLBFactory()->getExternalLB( $cluster );
        } else {
-               $lb = wfGetLB( $wiki );
+               $lbs[] = wfGetLB( $wiki );
+       }
+
+       // Get all the master positions of applicable DBs right now.
+       // This can be faster since waiting on one cluster reduces the
+       // time needed to wait on the next clusters.
+       $masterPositions = array_fill( 0, count( $lbs ), false );
+       foreach ( $lbs as $i => $lb ) {
+               // bug 27975 - Don't try to wait for slaves if there are none
+               // Prevents permission error when getting master position
+               if ( $lb->getServerCount() > 1 ) {
+                       if ( $ifWritesSince && !$lb->hasMasterConnection() ) {
+                               continue; // assume no writes done
+                       }
+                       $dbw = $lb->getConnection( DB_MASTER, array(), $wiki );
+                       if ( $ifWritesSince && $dbw->lastDoneWrites() < $ifWritesSince ) {
+                               continue; // no writes since the last wait
+                       }
+                       $masterPositions[$i] = $dbw->getMasterPos();
+               }
        }
 
-       // bug 27975 - Don't try to wait for slaves if there are none
-       // Prevents permission error when getting master position
-       if ( $lb->getServerCount() > 1 ) {
-               if ( $ifWritesSince && !$lb->hasMasterConnection() ) {
-                       return true; // assume no writes done
-               }
-               $dbw = $lb->getConnection( DB_MASTER, array(), $wiki );
-               if ( $ifWritesSince && $dbw->lastDoneWrites() < $ifWritesSince ) {
-                       return true; // no writes since the last wait
-               }
-               $pos = $dbw->getMasterPos();
-               // The DBMS may not support getMasterPos() or the whole
-               // load balancer might be fake (e.g. $wgAllDBsAreLocalhost).
-               if ( $pos !== false ) {
-                       return $lb->waitForAll( $pos, $timeout );
+       $ok = true;
+       foreach ( $lbs as $i => $lb ) {
+               if ( $masterPositions[$i] ) {
+                       // The DBMS may not support getMasterPos() or the whole
+                       // load balancer might be fake (e.g. $wgAllDBsAreLocalhost).
+                       $ok = $lb->waitForAll( $masterPositions[$i], $timeout ) && $ok;
                }
        }
 
-       return true;
+       return $ok;
 }
 
 /**
index 4d17298..d281555 100644 (file)
@@ -172,7 +172,6 @@ class MagicWord {
                'directionmark',
                'contentlanguage',
                'numberofadmins',
-               'numberofviews',
                'cascadingsources',
        );
 
@@ -215,7 +214,6 @@ class MagicWord {
                'localtimestamp' => 3600,
                'pagesinnamespace' => 3600,
                'numberofadmins' => 3600,
-               'numberofviews' => 3600,
                'numberingroup' => 3600,
        );
 
index 87468bd..9585c5f 100644 (file)
@@ -682,7 +682,7 @@ class MediaWiki {
                }
 
                $url = wfAppendQuery( wfScript( 'index' ), $query );
-               $req = "POST $url HTTP/1.1\r\nHost: {$info['host']}\r\nConnection: Close\r\n\r\n";
+               $req = "POST $url HTTP/1.1\r\nHost: {$info['host']}\r\nConnection: Close\r\nContent-Length: 0\r\n\r\n";
 
                wfDebugLog( 'runJobs', "Running $n job(s) via '$url'\n" );
                // Send a cron API request to be performed in the background.
index 084f714..3bb2175 100644 (file)
@@ -122,6 +122,9 @@ class OutputPage extends ContextSource {
        /** @var array */
        protected $mCategories = array();
 
+       /** @var array */
+       protected $mIndicators = array();
+
        /** @var array Array of Interwiki Prefixed (non DB key) Titles (e.g. 'fr:Test page') */
        private $mLanguageLinks = array();
 
@@ -1329,6 +1332,32 @@ class OutputPage extends ContextSource {
                return $this->mCategories;
        }
 
+       /**
+        * Add an array of indicators, with their identifiers as array keys and HTML contents as values.
+        *
+        * In case of duplicate keys, existing values are overwritten.
+        *
+        * @param array $indicators
+        * @since 1.25
+        */
+       public function setIndicators( array $indicators ) {
+               $this->mIndicators = $indicators + $this->mIndicators;
+               // Keep ordered by key
+               ksort( $this->mIndicators );
+       }
+
+       /**
+        * Get the indicators associated with this page.
+        *
+        * The array will be internally ordered by item keys.
+        *
+        * @return array Keys: identifiers, values: HTML contents
+        * @since 1.25
+        */
+       public function getIndicators() {
+               return $this->mIndicators;
+       }
+
        /**
         * Restrict the page to loading modules bundled the software.
         *
@@ -1641,6 +1670,7 @@ class OutputPage extends ContextSource {
        public function addParserOutputMetadata( $parserOutput ) {
                $this->mLanguageLinks += $parserOutput->getLanguageLinks();
                $this->addCategoryLinks( $parserOutput->getCategories() );
+               $this->setIndicators( $parserOutput->getIndicators() );
                $this->mNewSectionLink = $parserOutput->getNewSection();
                $this->mHideNewSectionLink = $parserOutput->getHideNewSection();
 
index 582a4a5..93844f6 100644 (file)
@@ -706,7 +706,6 @@ class Preferences {
                        'options' => $tzOptions,
                        'default' => $tzSetting,
                        'size' => 20,
-                       'maxlength' => 6,
                        'section' => 'rendering/timeoffset',
                );
        }
index fe78e23..839fedc 100644 (file)
@@ -60,10 +60,12 @@ abstract class PrefixSearch {
                $title = Title::newFromText( $search );
                if ( $title && !$title->isExternal() ) {
                        $ns = array( $title->getNamespace() );
+                       $search = $title->getText();
                        if ( $ns[0] == NS_MAIN ) {
                                $ns = $namespaces; // no explicit prefix, use default namespaces
+                               wfRunHooks( 'PrefixSearchExtractNamespace', array( &$ns, &$search ) );
                        }
-                       return $this->searchBackend( $ns, $title->getText(), $limit );
+                       return $this->searchBackend( $ns, $search, $limit );
                }
 
                // Is this a namespace prefix?
@@ -74,6 +76,8 @@ abstract class PrefixSearch {
                {
                        $namespaces = array( $title->getNamespace() );
                        $search = '';
+               } else {
+                       wfRunHooks( 'PrefixSearchExtractNamespace', array( &$namespaces, &$search ) );
                }
 
                return $this->searchBackend( $namespaces, $search, $limit );
@@ -159,19 +163,21 @@ abstract class PrefixSearch {
                        // Pick namespace (based on PrefixSearch::defaultSearchBackend)
                        $ns = in_array( NS_MAIN, $namespaces ) ? NS_MAIN : $namespaces[0];
                        $t = Title::newFromText( $search, $ns );
-                       $string = $t->getPrefixedText();
-
-                       $key = array_search( $string, $srchres );
-                       if ( $key !== false ) {
-                               // Move it to the front
-                               $cut = array_splice( $srchres, $key, 1 );
-                               array_unshift( $srchres, $cut[0] );
-                       } elseif ( $t->exists() ) {
-                               // Add it in front
-                               array_unshift( $srchres, $string );
-
-                               if ( count( $srchres ) > $limit ) {
-                                       array_pop( $srchres );
+                       if ( $t ) {
+                               // If text is a valid title and is in the search results
+                               $string = $t->getPrefixedText();
+                               $key = array_search( $string, $srchres );
+                               if ( $key !== false ) {
+                                       // Move it to the front
+                                       $cut = array_splice( $srchres, $key, 1 );
+                                       array_unshift( $srchres, $cut[0] );
+                               } elseif ( $t->exists() ) {
+                                       // Add it in front
+                                       array_unshift( $srchres, $string );
+
+                                       if ( count( $srchres ) > $limit ) {
+                                               array_pop( $srchres );
+                                       }
                                }
                        }
                }
index 5b39a41..e81ed75 100644 (file)
@@ -1060,8 +1060,6 @@ class Revision implements IDBAccessObject {
                                $format = $this->getContentFormat();
 
                                $this->mContent = $handler->unserializeContent( $this->mText, $format );
-                       } else {
-                               $this->mContent = false; // negative caching!
                        }
                }
 
index 743936e..2faf196 100644 (file)
@@ -517,6 +517,10 @@ if ( $wgTmpDirectory === false ) {
        wfProfileOut( $fname . '-tempDir' );
 }
 
+// We don't use counters anymore. Left here for extensions still
+// expecting this to exist. Should be removed sometime 1.26 or later.
+$wgDisableCounters = true;
+
 wfProfileOut( $fname . '-defaults2' );
 wfProfileIn( $fname . '-misc1' );
 
index 3dc1793..32c6761 100644 (file)
@@ -102,7 +102,6 @@ class SiteStats {
        static function doLoad( $db ) {
                return $db->selectRow( 'site_stats', array(
                                'ss_row_id',
-                               'ss_total_views',
                                'ss_total_edits',
                                'ss_good_articles',
                                'ss_total_pages',
@@ -113,11 +112,16 @@ class SiteStats {
        }
 
        /**
+        * Return the total number of page views. Except we don't track those anymore.
+        * Stop calling this function, it will be removed some time in the future. It's
+        * kept here simply to prevent fatal errors.
+        *
+        * @deprecated since 1.25
         * @return int
         */
        static function views() {
-               self::load();
-               return self::$row->ss_total_views;
+               wfDeprecated( __METHOD__, '1.25' );
+               return 0;
        }
 
        /**
@@ -249,7 +253,6 @@ class SiteStats {
                }
                // Now check for underflow/overflow
                foreach ( array(
-                       'ss_total_views',
                        'ss_total_edits',
                        'ss_good_articles',
                        'ss_total_pages',
@@ -274,7 +277,7 @@ class SiteStatsInit {
 
        // Various stats
        private $mEdits = null, $mArticles = null, $mPages = null;
-       private $mUsers = null, $mViews = null, $mFiles = null;
+       private $mUsers = null, $mFiles = null;
 
        /**
         * Constructor
@@ -348,15 +351,6 @@ class SiteStatsInit {
                return $this->mUsers;
        }
 
-       /**
-        * Count views
-        * @return int
-        */
-       public function views() {
-               $this->mViews = $this->db->selectField( 'page', 'SUM(page_counter)', '', __METHOD__ );
-               return $this->mViews;
-       }
-
        /**
         * Count total files
         * @return int
@@ -374,11 +368,10 @@ class SiteStatsInit {
         * - Boolean: whether to use the master DB
         * - DatabaseBase: database connection to use
         * @param array $options Array of options, may contain the following values
-        * - views Boolean: when true, do not update the number of page views (default: true)
         * - activeUsers Boolean: whether to update the number of active users (default: false)
         */
        public static function doAllAndCommit( $database, array $options = array() ) {
-               $options += array( 'update' => false, 'views' => true, 'activeUsers' => false );
+               $options += array( 'update' => false, 'activeUsers' => false );
 
                // Grab the object and count everything
                $counter = new SiteStatsInit( $database );
@@ -389,11 +382,6 @@ class SiteStatsInit {
                $counter->users();
                $counter->files();
 
-               // Only do views if we don't want to not count them
-               if ( $options['views'] ) {
-                       $counter->views();
-               }
-
                $counter->refresh();
 
                // Count active users if need be
@@ -403,8 +391,7 @@ class SiteStatsInit {
        }
 
        /**
-        * Refresh site_stats. If you want ss_total_views to be updated, be sure to
-        * call views() first.
+        * Refresh site_stats
         */
        public function refresh() {
                $values = array(
@@ -414,8 +401,6 @@ class SiteStatsInit {
                        'ss_total_pages' => ( $this->mPages === null ? $this->pages() : $this->mPages ),
                        'ss_users' => ( $this->mUsers === null ? $this->users() : $this->mUsers ),
                        'ss_images' => ( $this->mFiles === null ? $this->files() : $this->mFiles ),
-               ) + (
-                       $this->mViews ? array( 'ss_total_views' => $this->mViews ) : array()
                );
 
                $dbw = wfGetDB( DB_MASTER );
index e8cda85..c570633 100644 (file)
@@ -795,7 +795,8 @@ class Title {
 
        /**
         * Determine whether the object refers to a page within
-        * this project.
+        * this project (either this wiki or a wiki with a local
+        * interwiki, see https://www.mediawiki.org/wiki/Manual:Interwiki_table#iw_local )
         *
         * @return bool True if this is an in-project interwiki link or a wikilink, false otherwise
         */
index e6425f8..90d33fb 100644 (file)
@@ -3817,7 +3817,6 @@ class User implements IDBAccessObject {
                        return false;
                }
 
-               $passwordFactory = self::getPasswordFactory();
                if ( !$this->mPassword->equals( $password ) ) {
                        if ( $wgLegacyEncoding ) {
                                // Some wikis were converted from ISO 8859-1 to UTF-8, the passwords can't be converted
@@ -3831,6 +3830,7 @@ class User implements IDBAccessObject {
                        }
                }
 
+               $passwordFactory = self::getPasswordFactory();
                if ( $passwordFactory->needsUpdate( $this->mPassword ) ) {
                        $this->mPassword = $passwordFactory->newFromPlaintext( $password );
                        $this->saveSettings();
@@ -3877,22 +3877,15 @@ class User implements IDBAccessObject {
        }
 
        /**
-        * Initialize (if necessary) and return a session token value
-        * which can be used in edit forms to show that the user's
-        * login credentials aren't being hijacked with a foreign form
-        * submission.
+        * Internal implementation for self::getEditToken() and
+        * self::matchEditToken().
         *
-        * @since 1.19
-        *
-        * @param string|array $salt Array of Strings Optional function-specific data for hashing
-        * @param WebRequest|null $request WebRequest object to use or null to use $wgRequest
-        * @return string The new edit token
+        * @param string|array $salt
+        * @param WebRequest $request
+        * @param string|int $timestamp
+        * @return string
         */
-       public function getEditToken( $salt = '', $request = null ) {
-               if ( $request == null ) {
-                       $request = $this->getRequest();
-               }
-
+       private function getEditTokenAtTimestamp( $salt, $request, $timestamp ) {
                if ( $this->isAnon() ) {
                        return self::EDIT_TOKEN_SUFFIX;
                } else {
@@ -3904,10 +3897,30 @@ class User implements IDBAccessObject {
                        if ( is_array( $salt ) ) {
                                $salt = implode( '|', $salt );
                        }
-                       return md5( $token . $salt ) . self::EDIT_TOKEN_SUFFIX;
+                       return hash_hmac( 'md5', $timestamp . $salt, $token, false ) .
+                               dechex( $timestamp ) .
+                               self::EDIT_TOKEN_SUFFIX;
                }
        }
 
+       /**
+        * Initialize (if necessary) and return a session token value
+        * which can be used in edit forms to show that the user's
+        * login credentials aren't being hijacked with a foreign form
+        * submission.
+        *
+        * @since 1.19
+        *
+        * @param string|array $salt Array of Strings Optional function-specific data for hashing
+        * @param WebRequest|null $request WebRequest object to use or null to use $wgRequest
+        * @return string The new edit token
+        */
+       public function getEditToken( $salt = '', $request = null ) {
+               return $this->getEditTokenAtTimestamp(
+                       $salt, $request ?: $this->getRequest(), wfTimestamp()
+               );
+       }
+
        /**
         * Generate a looking random token for various uses.
         *
@@ -3928,15 +3941,34 @@ class User implements IDBAccessObject {
         * @param string $val Input value to compare
         * @param string $salt Optional function-specific data for hashing
         * @param WebRequest|null $request Object to use or null to use $wgRequest
+        * @param int $maxage Fail tokens older than this, in seconds
         * @return bool Whether the token matches
         */
-       public function matchEditToken( $val, $salt = '', $request = null ) {
-               $sessionToken = $this->getEditToken( $salt, $request );
+       public function matchEditToken( $val, $salt = '', $request = null, $maxage = null ) {
+               if ( $this->isAnon() ) {
+                       return $val === self::EDIT_TOKEN_SUFFIX;
+               }
+
+               $suffixLen = strlen( self::EDIT_TOKEN_SUFFIX );
+               if ( strlen( $val ) <= 32 + $suffixLen ) {
+                       return false;
+               }
+
+               $timestamp = hexdec( substr( $val, 32, -$suffixLen ) );
+               if ( $maxage !== null && $timestamp < wfTimestamp() - $maxage ) {
+                       // Expired token
+                       return false;
+               }
+
+               $sessionToken = $this->getEditTokenAtTimestamp(
+                       $salt, $request ?: $this->getRequest(), $timestamp
+               );
+
                if ( $val != $sessionToken ) {
                        wfDebug( "User::matchEditToken: broken session data\n" );
                }
 
-               return $val == $sessionToken;
+               return hash_equals( $sessionToken, $val );
        }
 
        /**
@@ -3946,11 +3978,12 @@ class User implements IDBAccessObject {
         * @param string $val Input value to compare
         * @param string $salt Optional function-specific data for hashing
         * @param WebRequest|null $request Object to use or null to use $wgRequest
+        * @param int $maxage Fail tokens older than this, in seconds
         * @return bool Whether the token matches
         */
-       public function matchEditTokenNoSuffix( $val, $salt = '', $request = null ) {
-               $sessionToken = $this->getEditToken( $salt, $request );
-               return substr( $sessionToken, 0, 32 ) == substr( $val, 0, 32 );
+       public function matchEditTokenNoSuffix( $val, $salt = '', $request = null, $maxage = null ) {
+               $val = substr( $val, 0, strspn( $val, '0123456789abcdef' ) ) . self::EDIT_TOKEN_SUFFIX;
+               return $this->matchEditToken( $val, $salt, $request, $maxage );
        }
 
        /**
index f932a40..e7455f6 100644 (file)
@@ -290,7 +290,7 @@ class InfoAction extends FormlessAction {
 
                $pageInfo['header-basic'][] = array( $langDisp,
                        Language::fetchLanguageName( $pageLang, $lang->getCode() )
-                       . ' ' . $this->msg( 'parentheses', $pageLang ) );
+                       . ' ' . $this->msg( 'parentheses', $pageLang )->escaped() );
 
                // Content model of the page
                $pageInfo['header-basic'][] = array(
@@ -314,13 +314,6 @@ class InfoAction extends FormlessAction {
                        $this->msg( 'pageinfo-robot-policy' ), $this->msg( "pageinfo-robot-${policy['index']}" )
                );
 
-               if ( isset( $pageCounts['views'] ) ) {
-                       // Number of views
-                       $pageInfo['header-basic'][] = array(
-                               $this->msg( 'pageinfo-views' ), $lang->formatNum( $pageCounts['views'] )
-                       );
-               }
-
                $unwatchedPageThreshold = $config->get( 'UnwatchedPageThreshold' );
                if (
                        $user->isAllowed( 'unwatchedpages' ) ||
@@ -644,17 +637,6 @@ class InfoAction extends FormlessAction {
                $dbr = wfGetDB( DB_SLAVE );
                $result = array();
 
-               if ( !$config->get( 'DisableCounters' ) ) {
-                       // Number of views
-                       $views = (int)$dbr->selectField(
-                               'page',
-                               'page_counter',
-                               array( 'page_id' => $id ),
-                               __METHOD__
-                       );
-                       $result['views'] = $views;
-               }
-
                // Number of page watchers
                $watchers = (int)$dbr->selectField(
                        'watchlist',
index a214f2e..58bd68d 100644 (file)
@@ -74,6 +74,17 @@ abstract class ApiBase extends ContextSource {
        // is an array of any of strings giving the message key, arrays giving key and
        // parameters, or Message objects.
        const PARAM_HELP_MSG_APPEND = 11;
+       /// @since 1.25
+       // Specify additional information tags for the parameter. Value is an array
+       // of arrays, with the first member being the 'tag' for the info and the
+       // remaining members being the values. In the help, this is formatted using
+       // apihelp-{$path}-paraminfo-{$tag}, which is passed $1 = count, $2 =
+       // comma-joined list of values.
+       const PARAM_HELP_MSG_INFO = 12;
+       /// @since 1.25
+       // When PARAM_DFLT is an array, this may be an array mapping those values
+       // to page titles which will be linked in the help.
+       const PARAM_VALUE_LINKS = 13;
 
        const LIMIT_BIG1 = 500; // Fast query, std user limit
        const LIMIT_BIG2 = 5000; // Fast query, bot/sysop limit
@@ -1923,6 +1934,15 @@ abstract class ApiBase extends ContextSource {
         * @{
         */
 
+       /**
+        * Return the description message.
+        *
+        * @return string|array|Message
+        */
+       protected function getDescriptionMessage() {
+               return "apihelp-{$this->getModulePath()}-description";
+       }
+
        /**
         * Get final module description, after hooks have had a chance to tweak it as
         * needed.
@@ -1940,7 +1960,7 @@ abstract class ApiBase extends ContextSource {
                        $desc = (string)$desc;
                }
 
-               $msg = $this->msg( "apihelp-{$this->getModulePath()}-description", array(
+               $msg = ApiBase::makeMessage( $this->getDescriptionMessage(), $this->getContext(), array(
                        $this->getModulePrefix(),
                        $this->getModuleName(),
                        $this->getModulePath(),
@@ -2424,7 +2444,7 @@ abstract class ApiBase extends ContextSource {
         * @return array|bool False on no parameter descriptions
         */
        protected function getParamDescription() {
-               return false;
+               return array();
        }
 
        /**
index 07f62c6..44565a8 100644 (file)
@@ -165,38 +165,16 @@ class ApiBlock extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'user' => 'Username, IP address or IP range you want to block',
-                       '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',
-                       'anononly' => 'Block anonymous users only (i.e. disable anonymous edits for this IP)',
-                       'nocreate' => 'Prevent account creation',
-                       'autoblock' => 'Automatically block the last used IP address, and ' .
-                               'any subsequent IP addresses they try to login from',
-                       'noemail'
-                               => 'Prevent user from sending email through the wiki. (Requires the "blockemail" right.)',
-                       'hidename' => 'Hide the username from the block log. (Requires the "hideuser" right.)',
-                       'allowusertalk'
-                               => 'Allow the user to edit their own talk page (depends on $wgBlockAllowsUTEdit)',
-                       'reblock' => 'If the user is already blocked, overwrite the existing block',
-                       'watchuser' => 'Watch the user/IP\'s user and talk pages',
-               );
-       }
-
-       public function getDescription() {
-               return 'Block a user.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       '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'
+                       'action=block&user=192.0.2.5&expiry=3%20days&reason=First%20strike&token=123ABC'
+                               => 'apihelp-block-example-ip-simple',
+                       'action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail=&token=123ABC'
+                               => 'apihelp-block-example-user-complex',
                );
        }
 
index 32e20e8..8667a67 100644 (file)
@@ -42,13 +42,10 @@ class ApiClearHasMsg extends ApiBase {
                return false;
        }
 
-       public function getDescription() {
-               return array( 'Clears the hasmsg flag for current user.' );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=clearhasmsg' => 'Clears the hasmsg flag for current user',
+                       'action=clearhasmsg'
+                               => 'apihelp-clearhasmsg-example-1',
                );
        }
 
index 4855926..a2f33ea 100644 (file)
@@ -126,27 +126,10 @@ class ApiComparePages extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'fromtitle' => 'First title to compare',
-                       'fromid' => 'First page ID to compare',
-                       'fromrev' => 'First revision to compare',
-                       'totitle' => 'Second title to compare',
-                       'toid' => 'Second page ID to compare',
-                       'torev' => 'Second revision to compare',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Get the difference between 2 pages.',
-                       'You must pass a revision number or a page title or a page ID id for each part (1 and 2).'
-               );
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=compare&fromrev=1&torev=2' => 'Create a diff between revision 1 and 2',
+                       'action=compare&fromrev=1&torev=2'
+                               => 'apihelp-compare-example-1',
                );
        }
 }
index 2ce532b..cfb6dab 100644 (file)
@@ -165,10 +165,6 @@ class ApiCreateAccount extends ApiBase {
                $apiResult->addValue( null, 'createaccount', $result );
        }
 
-       public function getDescription() {
-               return 'Create a new user account.';
-       }
-
        public function mustBePosted() {
                return true;
        }
@@ -204,27 +200,12 @@ class ApiCreateAccount extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'name' => 'Username',
-                       'password' => "Password (ignored if {$p}mailpassword is set)",
-                       'domain' => 'Domain for external authentication (optional)',
-                       'token' => 'Account creation token obtained in first request',
-                       'email' => 'Email address of user (optional)',
-                       'realname' => 'Real name of user (optional)',
-                       'mailpassword' => 'If set to any value, a random password will be emailed to the user',
-                       'reason' => 'Optional reason for creating the account to be put in the logs',
-                       'language'
-                               => 'Language code to set as default for the user (optional, defaults to content language)'
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=createaccount&name=testuser&password=test123',
-                       'api.php?action=createaccount&name=testmailuser&mailpassword=true&reason=MyReason',
+                       'action=createaccount&name=testuser&password=test123'
+                               => 'apihelp-createaccount-example-pass',
+                       'action=createaccount&name=testmailuser&mailpassword=true&reason=MyReason'
+                               => 'apihelp-createaccount-example-mail',
                );
        }
 
index abca824..e455f71 100644 (file)
@@ -210,35 +210,16 @@ class ApiDelete extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               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",
-                       'reason'
-                               => 'Reason for the deletion. If not set, an automatically generated reason will be used',
-                       'watch' => 'Add the page to your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-                       'unwatch' => 'Remove the page from your watchlist',
-                       'oldimage' => 'The name of the old image to delete as provided by iiprop=archivename'
-               );
-       }
-
-       public function getDescription() {
-               return 'Delete a page.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=delete&title=Main%20Page&token=123ABC' => 'Delete the Main Page',
-                       'api.php?action=delete&title=Main%20Page&token=123ABC&reason=Preparing%20for%20move'
-                               => 'Delete the Main Page with the reason "Preparing for move"',
+                       'action=delete&title=Main%20Page&token=123ABC'
+                               => 'apihelp-delete-example-simple',
+                       'action=delete&title=Main%20Page&token=123ABC&reason=Preparing%20for%20move'
+                               => 'apihelp-delete-example-reason',
                );
        }
 
index 6ea5d20..fc97522 100644 (file)
@@ -44,19 +44,7 @@ class ApiDisabled extends ApiBase {
                return false;
        }
 
-       public function getAllowedParams() {
-               return array();
-       }
-
-       public function getParamDescription() {
-               return array();
-       }
-
-       public function getDescription() {
-               return 'This module has been disabled.';
-       }
-
-       public function getExamples() {
-               return array();
+       protected function getDescriptionMessage() {
+               return 'apihelp-disabled-description';
        }
 }
index 8a76271..f2bb273 100644 (file)
@@ -496,10 +496,6 @@ class ApiEditPage extends ApiBase {
                return true;
        }
 
-       public function getDescription() {
-               return 'Create and edit pages.';
-       }
-
        public function getAllowedParams() {
                return array(
                        'title' => array(
@@ -557,58 +553,11 @@ class ApiEditPage extends ApiBase {
                        ),
                        'contentmodel' => array(
                                ApiBase::PARAM_TYPE => ContentHandler::getContentModels(),
-                       )
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'title' => "Title of the page you want to edit. Cannot be used together with {$p}pageid",
-                       'pageid' => "Page ID of the page you want to edit. Cannot be used together with {$p}title",
-                       'section' => 'Section number. 0 for the top section, \'new\' for a new section',
-                       'sectiontitle' => 'The title for a new section',
-                       'text' => 'Page content',
-                       'token' => array(
-                               /* Standard description is automatically prepended */
-                               'The token should always be sent as the last parameter, or at ' .
-                                       "least, after the {$p}text parameter"
-                       ),
-                       'summary'
-                               => "Edit summary. Also section title when {$p}section=new and {$p}sectiontitle is not set",
-                       'minor' => 'Minor edit',
-                       'notminor' => 'Non-minor edit',
-                       'bot' => 'Mark this edit as bot',
-                       'basetimestamp' => array(
-                               'Timestamp of the base revision (obtained through prop=revisions&rvprop=timestamp).',
-                               'Used to detect edit conflicts; leave unset to ignore conflicts'
                        ),
-                       'starttimestamp' => array(
-                               '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',
-                       'createonly' => 'Don\'t edit the page if it exists already',
-                       'nocreate' => 'Throw an error if the page doesn\'t exist',
-                       'watch' => 'Add the page to your watchlist',
-                       'unwatch' => 'Remove the page from your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-                       'md5' => array(
-                               "The MD5 hash of the {$p}text parameter, or the {$p}prependtext " .
-                                       "and {$p}appendtext parameters concatenated.",
-                               'If set, the edit won\'t be done unless the hash is correct'
+                       'token' => array(
+                               // Standard definition automatically inserted
+                               ApiBase::PARAM_HELP_MSG_APPEND => array( 'apihelp-edit-param-token' ),
                        ),
-                       'prependtext' => "Add this text to the beginning of the page. Overrides {$p}text",
-                       'appendtext' => array( "Add this text to the end of the page. Overrides {$p}text.",
-                               "Use {$p}section=new to append a new section" ),
-                       'undo' => "Undo this revision. Overrides {$p}text, {$p}prependtext and {$p}appendtext",
-                       'undoafter' => 'Undo all revisions from undo to this one. If not set, just undo one revision',
-                       'redirect' => 'Automatically resolve redirects',
-                       'contentformat' => 'Content serialization format used for the input text',
-                       'contentmodel' => 'Content model of the new content',
                );
        }
 
@@ -616,17 +565,17 @@ class ApiEditPage extends ApiBase {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=edit&title=Test&summary=test%20summary&' .
-                       'text=article%20content&basetimestamp=20070824123454&token=%2B\\'
-                               => 'Edit a page (anonymous user)',
-                       'api.php?action=edit&title=Test&summary=NOTOC&minor=&' .
-                               'prependtext=__NOTOC__%0A&basetimestamp=20070824123454&token=%2B\\'
-                               => 'Prepend __NOTOC__ to a page (anonymous user)',
-                       'api.php?action=edit&title=Test&undo=13585&undoafter=13579&' .
-                               'basetimestamp=20070824123454&token=%2B\\'
-                               => 'Undo r13579 through r13585 with autosummary (anonymous user)',
+                       'action=edit&title=Test&summary=test%20summary&' .
+                               'text=article%20content&basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+                               => 'apihelp-edit-example-edit',
+                       'action=edit&title=Test&summary=NOTOC&minor=&' .
+                               'prependtext=__NOTOC__%0A&basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+                               => 'apihelp-edit-example-prepend',
+                       'action=edit&title=Test&undo=13585&undoafter=13579&' .
+                               'basetimestamp=2007-08-24T12:34:54Z&token=123ABC'
+                               => 'apihelp-edit-example-undo',
                );
        }
 
index 9870b2d..911f454 100644 (file)
@@ -102,27 +102,14 @@ class ApiEmailUser extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'target' => 'User to send email to',
-                       'subject' => 'Subject header',
-                       'text' => 'Mail body',
-                       'ccme' => 'Send a copy of this mail to me',
-               );
-       }
-
-       public function getDescription() {
-               return 'Email a user.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=emailuser&target=WikiSysop&text=Content&token=123ABC'
-                               => 'Send an email to the User "WikiSysop" with the text "Content"',
+                       'action=emailuser&target=WikiSysop&text=Content&token=123ABC'
+                               => 'apihelp-emailuser-example-email',
                );
        }
 
index 8a3b534..93903b5 100644 (file)
@@ -159,35 +159,10 @@ class ApiExpandTemplates extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'text' => 'Wikitext to convert',
-                       'title' => 'Title of page',
-                       'prop' => array(
-                               'Which pieces of information to get',
-                               ' wikitext   - The expanded wikitext',
-                               ' categories - Any categories present in the input that are not represented in ' .
-                                       'the wikitext output',
-                               ' volatile   - Whether the output is volatile and should not be reused ' .
-                                       'elsewhere within the page',
-                               ' ttl        - The maximum time after which caches of the result should be ' .
-                                       'invalidated',
-                               ' parsetree  - The XML parse tree of the input',
-                               'Note that if no values are selected, the result will contain the wikitext,',
-                               'but the output will be in a deprecated format.',
-                       ),
-                       'includecomments' => 'Whether to include HTML comments in the output',
-                       'generatexml' => 'Generate XML parse tree (replaced by prop=parsetree)',
-               );
-       }
-
-       public function getDescription() {
-               return 'Expands all templates in wikitext.';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=expandtemplates&text={{Project:Sandbox}}'
+                       'action=expandtemplates&text={{Project:Sandbox}}'
+                               => 'apihelp-expandtemplates-example-simple',
                );
        }
 
index 374203e..20f4d3d 100644 (file)
@@ -161,7 +161,7 @@ class ApiFeedContributions extends ApiBase {
        public function getAllowedParams() {
                $feedFormatNames = array_keys( $this->getConfig()->get( 'FeedClasses' ) );
 
-               return array(
+               $ret = array(
                        'feedformat' => array(
                                ApiBase::PARAM_DFLT => 'rss',
                                ApiBase::PARAM_TYPE => $feedFormatNames
@@ -187,32 +187,22 @@ class ApiFeedContributions extends ApiBase {
                        'deletedonly' => false,
                        'toponly' => false,
                        'newonly' => false,
-                       'showsizediff' => false,
+                       'showsizediff' => array(
+                               ApiBase::PARAM_DFLT => false,
+                       ),
                );
-       }
 
-       public function getParamDescription() {
-               return array(
-                       'feedformat' => 'The format of the feed',
-                       'user' => 'What users to get the contributions for',
-                       'namespace' => 'What namespace to filter the contributions by',
-                       'year' => 'From year (and earlier)',
-                       'month' => 'From month (and earlier)',
-                       'tagfilter' => 'Filter contributions that have these tags',
-                       'deletedonly' => 'Show only deleted contributions',
-                       'toponly' => 'Only show edits that are latest revisions',
-                       'newonly' => 'Only show edits that are page creations',
-                       'showsizediff' => 'Show the size difference between revisions. Disabled in Miser Mode',
-               );
-       }
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
+                       $ret['showsizediff'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+               }
 
-       public function getDescription() {
-               return 'Returns a user contributions feed.';
+               return $ret;
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=feedcontributions&user=Reedy',
+                       'action=feedcontributions&user=Example'
+                               => 'apihelp-feedcontributions-example-simple',
                );
        }
 }
index 7239a29..0d2fca6 100644 (file)
@@ -171,37 +171,12 @@ class ApiFeedRecentChanges extends ApiBase {
                return $ret;
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'feedformat' => 'The format of the feed',
-                       'namespace' => 'Namespace to limit the results to',
-                       'invert' => 'All namespaces but the selected one',
-                       'associated' => 'Include associated (talk or main) namespace',
-                       'days' => 'Days to limit the results to',
-                       'limit' => 'Maximum number of results to return',
-                       'from' => 'Show changes since then',
-                       'hideminor' => 'Hide minor changes',
-                       'hidebots' => 'Hide changes made by bots',
-                       'hideanons' => 'Hide changes made by anonymous users',
-                       'hideliu' => 'Hide changes made by registered users',
-                       'hidepatrolled' => 'Hide patrolled changes',
-                       'hidemyself' => 'Hide changes made by yourself',
-                       'tagfilter' => 'Filter by tag',
-                       'target' => 'Show only changes on pages linked from this page',
-                       'showlinkedto' => 'Show changes on pages linked to the selected page instead',
-                       'categories' => 'Show only changes on pages in all of these categories',
-                       'categories_any' => 'Show only changes on pages in any of the categories instead',
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns a recent changes feed';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=feedrecentchanges',
-                       'api.php?action=feedrecentchanges&days=30'
+                       'action=feedrecentchanges'
+                               => 'apihelp-feedrecentchanges-example-simple',
+                       'action=feedrecentchanges&days=30'
+                               => 'apihelp-feedrecentchanges-example-30days',
                );
        }
 }
index 6aef8fc..84ee228 100644 (file)
@@ -219,50 +219,42 @@ class ApiFeedWatchlist extends ApiBase {
                        ),
                        'linktosections' => false,
                );
+
+               $copyParams = array(
+                       'allrev' => 'allrev',
+                       'owner' => 'wlowner',
+                       'token' => 'wltoken',
+                       'show' => 'wlshow',
+                       'type' => 'wltype',
+                       'excludeuser' => 'wlexcludeuser',
+               );
                if ( $flags ) {
                        $wlparams = $this->getWatchlistModule()->getAllowedParams( $flags );
-                       $ret['allrev'] = $wlparams['allrev'];
-                       $ret['wlowner'] = $wlparams['owner'];
-                       $ret['wltoken'] = $wlparams['token'];
-                       $ret['wlshow'] = $wlparams['show'];
-                       $ret['wltype'] = $wlparams['type'];
-                       $ret['wlexcludeuser'] = $wlparams['excludeuser'];
+                       foreach ( $copyParams as $from => $to ) {
+                               $p = $wlparams[$from];
+                               if ( !is_array( $p ) ) {
+                                       $p = array( ApiBase::PARAM_DFLT => $p );
+                               }
+                               if ( !isset( $p[ApiBase::PARAM_HELP_MSG] ) ) {
+                                       $p[ApiBase::PARAM_HELP_MSG] = "apihelp-query+watchlist-param-$from";
+                               }
+                               $ret[$to] = $p;
+                       }
                } else {
-                       $ret['allrev'] = null;
-                       $ret['wlowner'] = null;
-                       $ret['wltoken'] = null;
-                       $ret['wlshow'] = null;
-                       $ret['wltype'] = null;
-                       $ret['wlexcludeuser'] = null;
+                       foreach ( $copyParams as $from => $to ) {
+                               $ret[$to] = null;
+                       }
                }
 
                return $ret;
        }
 
-       public function getParamDescription() {
-               $wldescr = $this->getWatchlistModule()->getParamDescription();
-
-               return array(
-                       'feedformat' => 'The format of the feed',
-                       'hours' => 'List pages modified within this many hours from now',
-                       'linktosections' => 'Link directly to changed sections if possible',
-                       'allrev' => $wldescr['allrev'],
-                       'wlowner' => $wldescr['owner'],
-                       'wltoken' => $wldescr['token'],
-                       'wlshow' => $wldescr['show'],
-                       'wltype' => $wldescr['type'],
-                       'wlexcludeuser' => $wldescr['excludeuser'],
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns a watchlist feed.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=feedwatchlist',
-                       'api.php?action=feedwatchlist&allrev=&hours=6'
+                       'action=feedwatchlist'
+                               => 'apihelp-feedwatchlist-example-default',
+                       'action=feedwatchlist&allrev=&hours=6'
+                               => 'apihelp-feedwatchlist-example-all6hrs',
                );
        }
 
index f518e17..02147fa 100644 (file)
@@ -135,29 +135,15 @@ class ApiFileRevert extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'filename' => 'Target filename without the File: prefix',
-                       'comment' => 'Upload comment',
-                       'archivename' => 'Archive name of the revision to revert to',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Revert a file to an old version.'
-               );
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=filerevert&filename=Wiki.png&comment=Revert&' .
+                       'action=filerevert&filename=Wiki.png&comment=Revert&' .
                                'archivename=20110305152740!Wiki.png&token=123ABC'
-                               => 'Revert Wiki.png to the version of 20110305152740',
+                               => 'apihelp-filerevert-example-revert',
                );
        }
 }
index 7a08ed7..f0037bb 100644 (file)
@@ -155,12 +155,13 @@ abstract class ApiFormatBase extends ApiBase {
                        $result = $this->getBuffer();
 
                        $context = new DerivativeContext( $this->getMain() );
-                       $context->setUser( new User ); // anon to avoid caching issues
                        $context->setSkin( SkinFactory::getDefaultInstance()->makeSkin( 'apioutput' ) );
+                       $context->setTitle( SpecialPage::getTitleFor( 'ApiHelp' ) );
                        $out = new OutputPage( $context );
+                       $context->setOutput( $out );
+
                        $out->addModules( 'mediawiki.apipretty' );
                        $out->setPageTitle( $context->msg( 'api-format-title' ) );
-                       $context->setOutput( $out );
 
                        $header = $context->msg( 'api-format-prettyprint-header' )
                           ->params( $format, strtolower( $format ) )
index 9260006..3f53ed4 100644 (file)
@@ -77,6 +77,27 @@ class ApiFormatFeedWrapper extends ApiFormatBase {
                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 initPrinter( $unused = false ) {
+               parent::initPrinter( $unused );
+
+               if ( $this->isDisabled() ) {
+                       return;
+               }
+
+               $data = $this->getResultData();
+               if ( isset( $data['_feed'] ) && isset( $data['_feeditems'] ) ) {
+                       $data['_feed']->httpHeaders();
+               } else {
+                       // Error has occurred, print something useful
+                       ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );
+               }
+       }
+
        /**
         * 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
@@ -88,11 +109,14 @@ class ApiFormatFeedWrapper extends ApiFormatBase {
                        $feed = $data['_feed'];
                        $items = $data['_feeditems'];
 
+                       // execute() needs to pass strings to $this->printText, not produce output itself.
+                       ob_start();
                        $feed->outHeader();
                        foreach ( $items as & $item ) {
                                $feed->outItem( $item );
                        }
                        $feed->outFooter();
+                       $this->printText( ob_get_clean() );
                } else {
                        // Error has occurred, print something useful
                        ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );
index 235fca1..81d2f4f 100644 (file)
@@ -55,7 +55,7 @@ class ApiFormatRaw extends ApiFormatBase {
                return $data['mime'];
        }
 
-       public function initPrinter( $unused ) {
+       public function initPrinter( $unused = false ) {
                $data = $this->getResultData();
                if ( isset( $data['error'] ) ) {
                        $this->errorFallback->initPrinter( $unused );
index 4ed4944..7010dd6 100644 (file)
@@ -238,11 +238,11 @@ class ApiFormatXml extends ApiFormatBase {
        public function getAllowedParams() {
                return array(
                        'xslt' => array(
-                               ApiBase::PARAM_HELP_MSG => 'apihelp-json-param-callback',
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-xml-param-xslt',
                        ),
                        'includexmlnamespace' => array(
                                ApiBase::PARAM_DFLT => false,
-                               ApiBase::PARAM_HELP_MSG => 'apihelp-json-param-callback',
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-xml-param-includexmlnamespace',
                        ),
                );
        }
index 0c962d0..9be2d92 100644 (file)
@@ -43,9 +43,9 @@ class ApiHelp extends ApiBase {
 
                // Get the help
                $context = new DerivativeContext( $this->getMain()->getContext() );
-               $context->setUser( new User ); // anon to avoid caching issues
                $context->setSkin( SkinFactory::getDefaultInstance()->makeSkin( 'apioutput' ) );
                $context->setLanguage( $this->getMain()->getLanguage() );
+               $context->setTitle( SpecialPage::getTitleFor( 'ApiHelp' ) );
                $out = new OutputPage( $context );
                $context->setOutput( $out );
 
@@ -369,6 +369,17 @@ class ApiHelp extends ApiBase {
                                                $info[] = $context->msg( 'api-help-param-required' )->parse();
                                        }
 
+                                       // Custom info?
+                                       if ( !empty( $settings[ApiBase::PARAM_HELP_MSG_INFO] ) ) {
+                                               foreach ( $settings[ApiBase::PARAM_HELP_MSG_INFO] as $i ) {
+                                                       $tag = array_shift( $i );
+                                                       $info[] = $context->msg( "apihelp-{$path}-paraminfo-{$tag}" )
+                                                               ->numParams( count( $i ) )
+                                                               ->params( $context->getLanguage()->commaList( $i ) )
+                                                               ->parse();
+                                               }
+                                       }
+
                                        // Type documentation
                                        if ( !isset( $settings[ApiBase::PARAM_TYPE] ) ) {
                                                $dflt = isset( $settings[ApiBase::PARAM_DFLT] )
@@ -390,7 +401,16 @@ class ApiHelp extends ApiBase {
 
                                                if ( is_array( $type ) ) {
                                                        $count = count( $type );
-                                                       $type = array_map( 'wfEscapeWikiText', $type );
+                                                       $links = isset( $settings[ApiBase::PARAM_VALUE_LINKS] )
+                                                               ? $settings[ApiBase::PARAM_VALUE_LINKS]
+                                                               : array();
+                                                       $type = array_map( function ( $v ) use ( $links ) {
+                                                               $ret = wfEscapeWikiText( $v );
+                                                               if ( isset( $links[$v] ) ) {
+                                                                       $ret = "[[{$links[$v]}|$ret]]";
+                                                               }
+                                                               return $ret;
+                                                       }, $type );
                                                        $i = array_search( '', $type, true );
                                                        if ( $i === false ) {
                                                                $type = $context->getLanguage()->commaList( $type );
@@ -632,10 +652,14 @@ class ApiHelp extends ApiBase {
 
        public function getExamplesMessages() {
                return array(
-                       'action=help' => 'apihelp-help-example-main',
-                       'action=help&recursivesubmodules=1' => 'apihelp-help-example-recursive',
-                       'action=help&modules=help' => 'apihelp-help-example-help',
-                       'action=help&modules=query+info|query+categorymembers' => 'apihelp-help-example-query',
+                       'action=help'
+                               => 'apihelp-help-example-main',
+                       'action=help&recursivesubmodules=1'
+                               => 'apihelp-help-example-recursive',
+                       'action=help&modules=help'
+                               => 'apihelp-help-example-help',
+                       'action=help&modules=query+info|query+categorymembers'
+                               => 'apihelp-help-example-query',
                );
        }
 
index 20396dd..6aa9c22 100644 (file)
@@ -184,7 +184,9 @@ class ApiImageRotate extends ApiBase {
                                ApiBase::PARAM_TYPE => array( '90', '180', '270' ),
                                ApiBase::PARAM_REQUIRED => true
                        ),
-                       'continue' => '',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -193,26 +195,17 @@ class ApiImageRotate extends ApiBase {
                return $result;
        }
 
-       public function getParamDescription() {
-               $pageSet = $this->getPageSet();
-
-               return $pageSet->getFinalParamDescription() + array(
-                       'rotation' => 'Degrees to rotate image clockwise',
-                       'continue' => 'When more results are available, use this to continue',
-               );
-       }
-
-       public function getDescription() {
-               return 'Rotate one or more images.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=imagerotate&titles=Example.jpg&rotation=90&token=123ABC',
+                       'action=imagerotate&titles=File:Example.jpg&rotation=90&token=123ABC'
+                               => 'apihelp-imagerotate-example-simple',
+                       'action=imagerotate&generator=categorymembers&gcmtitle=Category:Flip&gcmtype=file&' .
+                               'rotation=180&token=123ABC'
+                               => 'apihelp-imagerotate-example-generator',
                );
        }
 }
index b11348e..8b7802c 100644 (file)
@@ -116,36 +116,15 @@ class ApiImport extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'summary' => 'Import summary',
-                       'xml' => 'Uploaded XML file',
-                       'interwikisource' => 'For interwiki imports: wiki to import from',
-                       'interwikipage' => 'For interwiki imports: page to import',
-                       'fullhistory' => 'For interwiki imports: import the full history, not just the current version',
-                       'templates' => 'For interwiki imports: import all included templates as well',
-                       'namespace' => 'For interwiki imports: import to this namespace',
-                       'rootpage' => 'Import as subpage of this page',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Import a page from another wiki, or an XML file.',
-                       'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when',
-                       'sending a file for the "xml" parameter.'
-               );
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&' .
+                       'action=import&interwikisource=meta&interwikipage=Help:ParserFunctions&' .
                                'namespace=100&fullhistory=&token=123ABC'
-                               => 'Import [[meta:Help:Parserfunctions]] to namespace 100 with full history',
+                               => 'apihelp-import-example-import',
                );
        }
 
index 976f4c1..eae8ebc 100644 (file)
@@ -184,28 +184,12 @@ class ApiLogin extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'name' => 'User Name',
-                       'password' => 'Password',
-                       'domain' => 'Domain (optional)',
-                       'token' => 'Login token obtained in first request',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Log in and get the authentication tokens.',
-                       'In the event of a successful log-in, a cookie will be attached to your session.',
-                       'In the event of a failed log-in, you will not be able to attempt another log-in',
-                       'through this method for 5 seconds. This is to prevent password guessing by',
-                       'automated password crackers.'
-               );
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=login&lgname=user&lgpassword=password'
+                       'action=login&lgname=user&lgpassword=password'
+                               => 'apihelp-login-example-gettoken',
+                       'action=login&lgname=user&lgpassword=password&lgtoken=123ABC'
+                               => 'apihelp-login-example-login',
                );
        }
 
index 324f4b2..bfdad34 100644 (file)
@@ -46,21 +46,10 @@ class ApiLogout extends ApiBase {
                return false;
        }
 
-       public function getAllowedParams() {
-               return array();
-       }
-
-       public function getParamDescription() {
-               return array();
-       }
-
-       public function getDescription() {
-               return 'Log out and clear session data.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=logout' => 'Log the current user out',
+                       'action=logout'
+                               => 'apihelp-logout-example-logout',
                );
        }
 
index a759c11..bf26eee 100644 (file)
@@ -197,7 +197,8 @@ class ApiMain extends ApiBase {
                $this->getContext()->setLanguage( $code );
                if ( !$this->mInternalMode ) {
                        global $wgLang;
-                       $wgLang = RequestContext::getMain()->getLanguage();
+                       $wgLang = $this->getContext()->getLanguage();
+                       RequestContext::getMain()->setLanguage( $wgLang );
                }
 
                $config = $this->getConfig();
@@ -1158,8 +1159,10 @@ class ApiMain extends ApiBase {
        /** @see ApiBase::getExamplesMessages() */
        public function getExamplesMessages() {
                return array(
-                       'action=help' => 'apihelp-help-example-main',
-                       'action=help&recursivesubmodules=1' => 'apihelp-help-example-recursive',
+                       'action=help'
+                               => 'apihelp-help-example-main',
+                       'action=help&recursivesubmodules=1'
+                               => 'apihelp-help-example-recursive',
                );
        }
 
@@ -1243,87 +1246,6 @@ class ApiMain extends ApiBase {
         * @{
         */
 
-       /**
-        * @deprecated since 1.25
-        * @return array
-        */
-       public function getParamDescription() {
-               return array(
-                       'format' => 'The format of the output',
-                       'action' => 'What action you would like to perform. See below for module help',
-                       'maxlag' => array(
-                               'Maximum lag can be used when MediaWiki is installed on a database replicated cluster.',
-                               'To save actions causing any more site replication lag, this parameter can make the client',
-                               'wait until the replication lag is less than the specified value.',
-                               'In case of a replag error, error code "maxlag" is returned, with the message like',
-                               '"Waiting for $host: $lag seconds lagged\n".',
-                               'See https://www.mediawiki.org/wiki/Manual:Maxlag_parameter for more information',
-                       ),
-                       'smaxage' => 'Set the s-maxage header to this many seconds. Errors are never cached',
-                       'maxage' => 'Set the max-age header to this many seconds. Errors are never cached',
-                       'assert' => 'Verify the user is logged in if set to "user", or has the bot userright if "bot"',
-                       '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',
-                               'therefore must be part of the request URI (not the POST body). This must match',
-                               'one of the origins in the Origin: header exactly, so it has to be set to ',
-                               'something like http://en.wikipedia.org or https://meta.wikimedia.org . If this',
-                               'parameter does not match the Origin: header, a 403 response will be returned. If',
-                               'this parameter matches the Origin: header and the origin is whitelisted, an',
-                               'Access-Control-Allow-Origin header will be set.',
-                       ),
-               );
-       }
-
-       /**
-        * @deprecated since 1.25
-        * @return array
-        */
-       public function getDescription() {
-               return array(
-                       '',
-                       '',
-                       '**********************************************************************************************',
-                       '**                                                                                          **',
-                       '**                This is an auto-generated MediaWiki API documentation page                **',
-                       '**                                                                                          **',
-                       '**                               Documentation and Examples:                                **',
-                       '**                            https://www.mediawiki.org/wiki/API                            **',
-                       '**                                                                                          **',
-                       '**********************************************************************************************',
-                       '',
-                       'Status:                All features shown on this page should be working, but the API',
-                       '                       is still in active development, and may change at any time.',
-                       '                       Make sure to monitor our mailing list for any updates.',
-                       '',
-                       'Erroneous requests:    When erroneous requests are sent to the API, a HTTP header will be sent',
-                       '                       with the key "MediaWiki-API-Error" and then both the value of the',
-                       '                       header and the error code sent back will be set to the same value.',
-                       '',
-                       '                       In the case of an invalid action being passed, these will have a value',
-                       '                       of "unknown_action".',
-                       '',
-                       '                       For more information see https://www.mediawiki.org' .
-                               '/wiki/API:Errors_and_warnings',
-                       '',
-                       'Documentation:         https://www.mediawiki.org/wiki/API:Main_page',
-                       'FAQ                    https://www.mediawiki.org/wiki/API:FAQ',
-                       'Mailing list:          https://lists.wikimedia.org/mailman/listinfo/mediawiki-api',
-                       'Api Announcements:     https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce',
-                       'Bugs & Requests:       https://bugzilla.wikimedia.org/buglist.cgi?component=API&' .
-                               'bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&order=bugs.delta_ts',
-                       '',
-                       '',
-                       '',
-                       '',
-                       '',
-               );
-       }
-
        /**
         * Sets whether the pretty-printer should format *bold* and $italics$
         *
index 04e931d..db0fde3 100644 (file)
@@ -220,37 +220,15 @@ class ApiMove extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       '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',
-                       'reason' => 'Reason for the move',
-                       'movetalk' => 'Move the talk page, if it exists',
-                       'movesubpages' => 'Move subpages, if applicable',
-                       'noredirect' => 'Don\'t create a redirect',
-                       'watch' => 'Add the page and the redirect to your watchlist',
-                       'unwatch' => 'Remove the page and the redirect from your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-                       'ignorewarnings' => 'Ignore any warnings'
-               );
-       }
-
-       public function getDescription() {
-               return 'Move a page.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=move&from=Badtitle&to=Goodtitle&token=123ABC&' .
+                       'action=move&from=Badtitle&to=Goodtitle&token=123ABC&' .
                                'reason=Misspelled%20title&movetalk=&noredirect='
+                               => 'apihelp-move-example-move',
                );
        }
 
index 7fb045e..4c72677 100644 (file)
@@ -91,23 +91,10 @@ class ApiOpenSearch extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'search' => 'Search string',
-                       'limit' => 'Maximum amount of results to return',
-                       'namespace' => 'Namespaces to search',
-                       'suggest' => 'Do nothing if $wgEnableOpenSearchSuggest is false',
-                       'format' => 'The format of the output',
-               );
-       }
-
-       public function getDescription() {
-               return 'Search the wiki using the OpenSearch protocol.';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=opensearch&search=Te'
+                       'action=opensearch&search=Te'
+                               => 'apihelp-opensearch-example-te',
                );
        }
 
index b01dc3e..c804563 100644 (file)
@@ -153,30 +153,6 @@ class ApiOptions extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       '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), ' .
-                               'value cannot contain pipe characters. If no value is given (not ',
-                               'even an equals sign), e.g., optionname|otheroption|..., the ' .
-                               'option will be reset to its default value'
-                       ),
-                       'optionname' => 'A name of a option which should have an optionvalue set',
-                       'optionvalue' => 'A value of the option specified by the optionname, ' .
-                               'can contain pipe characters',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Change preferences of the current user.',
-                       'Only options which are registered in core or in one of installed extensions,',
-                       'or as options with keys prefixed with \'userjs-\' (intended to be used by user',
-                       'scripts), can be set.'
-               );
-       }
-
        public function needsToken() {
                return 'csrf';
        }
@@ -185,12 +161,15 @@ class ApiOptions extends ApiBase {
                return 'https://www.mediawiki.org/wiki/API:Options';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=options&reset=&token=123ABC',
-                       'api.php?action=options&change=skin=vector|hideminor=1&token=123ABC',
-                       'api.php?action=options&reset=&change=skin=monobook&optionname=nickname&' .
-                               'optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC',
+                       'action=options&reset=&token=123ABC'
+                               => 'apihelp-options-example-reset',
+                       'action=options&change=skin=vector|hideminor=1&token=123ABC'
+                               => 'apihelp-options-example-change',
+                       'action=options&reset=&change=skin=monobook&optionname=nickname&' .
+                               'optionvalue=[[User:Beau|Beau]]%20([[User_talk:Beau|talk]])&token=123ABC'
+                               => 'apihelp-options-example-complex',
                );
        }
 }
index 3bdecaa..ab705b2 100644 (file)
@@ -1135,26 +1135,46 @@ class ApiPageSet extends ApiBase {
        public function getAllowedParams( $flags = 0 ) {
                $result = array(
                        'titles' => array(
-                               ApiBase::PARAM_ISMULTI => true
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG => 'api-pageset-param-titles',
                        ),
                        'pageids' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_ISMULTI => true
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG => 'api-pageset-param-pageids',
                        ),
                        'revids' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_ISMULTI => true
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_HELP_MSG => 'api-pageset-param-revids',
+                       ),
+                       'generator' => array(
+                               ApiBase::PARAM_TYPE => null,
+                               ApiBase::PARAM_VALUE_LINKS => array(),
+                               ApiBase::PARAM_HELP_MSG => 'api-pageset-param-generator',
+                       ),
+                       'redirects' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => $this->mAllowGenerator
+                                       ? 'api-pageset-param-redirects-generator'
+                                       : 'api-pageset-param-redirects-nogenerator',
+                       ),
+                       'converttitles' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'api-pageset-param-converttitles',
+                                       $this->getLanguage()->commaList( LanguageConverter::$languagesWithVariants ),
+                               ),
                        ),
-                       'redirects' => false,
-                       'converttitles' => false,
                );
-               if ( $this->mAllowGenerator ) {
-                       if ( $flags & ApiBase::GET_VALUES_FOR_HELP ) {
-                               $result['generator'] = array(
-                                       ApiBase::PARAM_TYPE => $this->getGenerators()
-                               );
-                       } else {
-                               $result['generator'] = null;
+
+               if ( !$this->mAllowGenerator ) {
+                       unset( $result['generator'] );
+               } elseif ( $flags & ApiBase::GET_VALUES_FOR_HELP ) {
+                       $result['generator'][ApiBase::PARAM_TYPE] = $this->getGenerators();
+                       foreach ( $result['generator'][ApiBase::PARAM_TYPE] as $g ) {
+                               $result['generator'][ApiBase::PARAM_TYPE][] = $g;
+                               $result['generator'][ApiBase::PARAM_VALUE_LINKS][$g] = "Special:ApiHelp/query+$g";
                        }
                }
 
@@ -1188,23 +1208,4 @@ class ApiPageSet extends ApiBase {
 
                return self::$generators;
        }
-
-       public function getParamDescription() {
-               return array(
-                       'titles' => 'A list of titles to work on',
-                       'pageids' => 'A list of page IDs to work on',
-                       'revids' => 'A list of revision IDs to work on',
-                       'generator' => array(
-                               'Get the list of pages to work on by executing the specified query module.',
-                               'NOTE: generator parameter names must be prefixed with a \'g\', see examples'
-                       ),
-                       'redirects' => 'Automatically resolve redirects',
-                       'converttitles' => array(
-                               'Convert titles to other variants if necessary. Only works if ' .
-                                       'the wiki\'s content language supports variant conversion.',
-                               'Languages that support variant conversion include ' .
-                                       implode( ', ', LanguageConverter::$languagesWithVariants )
-                       ),
-               );
-       }
 }
index 5965a46..d07907f 100644 (file)
@@ -173,10 +173,11 @@ class ApiParamInfo extends ApiBase {
        private function getModuleInfo( $module ) {
                $result = $this->getResult();
                $ret = array();
+               $path = $module->getModulePath();
 
                $ret['name'] = $module->getModuleName();
                $ret['classname'] = get_class( $module );
-               $ret['path'] = $module->getModulePath();
+               $ret['path'] = $path;
                if ( !$module->isMain() ) {
                        $ret['group'] = $module->getParent()->getModuleManager()->getModuleGroup(
                                $module->getModuleName()
@@ -314,6 +315,29 @@ class ApiParamInfo extends ApiBase {
                        if ( isset( $settings[ApiBase::PARAM_MIN] ) ) {
                                $item['min'] = $settings[ApiBase::PARAM_MIN];
                        }
+
+                       if ( !empty( $settings[ApiBase::PARAM_HELP_MSG_INFO] ) ) {
+                               $item['info'] = array();
+                               foreach ( $settings[ApiBase::PARAM_HELP_MSG_INFO] as $i ) {
+                                       $tag = array_shift( $i );
+                                       $info = array(
+                                               'name' => $tag,
+                                       );
+                                       if ( count( $i ) ) {
+                                               $info['values'] = $i;
+                                               $result->setIndexedTagName( $info['values'], 'v' );
+                                       }
+                                       $this->formatHelpMessages( $info, 'text', array(
+                                               $this->context->msg( "apihelp-{$path}-paraminfo-{$tag}" )
+                                                       ->numParams( count( $i ) )
+                                                       ->params( $this->context->getLanguage()->commaList( $i ) )
+                                       ) );
+                                       $result->setSubelements( $info, 'text' );
+                                       $item['info'][] = $info;
+                               }
+                               $result->setIndexedTagName( $item['info'], 'i' );
+                       }
+
                        $ret['parameters'][] = $item;
                }
                $result->setIndexedTagName( $ret['parameters'], 'param' );
@@ -361,26 +385,10 @@ class ApiParamInfo extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'modules' => 'List of module names (values of the action= and format= parameters, or "main"). Can specify submodules with a \'+\'',
-                       'helpformat' => 'Format of help strings',
-
-                       'querymodules' => 'List of query module names (value of prop=, meta= or list= parameter)',
-                       'mainmodule' => 'Get information about the main (top-level) module as well',
-                       'pagesetmodule' => 'Get information about the pageset module ' .
-                               '(providing titles= and friends) as well',
-                       'formatmodules' => 'List of format module names (value of format= parameter)',
-               );
-       }
-
-       public function getDescription() {
-               return 'Obtain information about certain API parameters and errors.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=paraminfo&modules=parse|phpfm|query+allpages|query+siteinfo'
+                       'action=paraminfo&modules=parse|phpfm|query+allpages|query+siteinfo'
+                               => 'apihelp-paraminfo-example-1',
                );
        }
 
index 0b1f4db..d25c87a 100644 (file)
@@ -337,6 +337,14 @@ class ApiParse extends ApiBase {
                        $result_array['modulemessages'] = array_values( array_unique( $p_result->getModuleMessages() ) );
                }
 
+               if ( isset( $prop['indicators'] ) ) {
+                       foreach ( $p_result->getIndicators() as $name => $content ) {
+                               $indicator = array( 'name' => $name );
+                               ApiResult::setContent( $indicator, $content );
+                               $result_array['indicators'][] = $indicator;
+                       }
+               }
+
                if ( isset( $prop['iwlinks'] ) ) {
                        $result_array['iwlinks'] = $this->formatIWLinks( $p_result->getInterwikiLinks() );
                }
@@ -391,6 +399,7 @@ class ApiParse extends ApiBase {
                        'sections' => 's',
                        'headitems' => 'hi',
                        'modules' => 'm',
+                       'indicators' => 'ind',
                        'modulescripts' => 'm',
                        'modulestyles' => 'm',
                        'modulemessages' => 'm',
@@ -680,6 +689,7 @@ class ApiParse extends ApiBase {
                                        'headitems',
                                        'headhtml',
                                        'modules',
+                                       'indicators',
                                        'iwlinks',
                                        'wikitext',
                                        'properties',
@@ -693,7 +703,12 @@ class ApiParse extends ApiBase {
                        'section' => null,
                        'disablepp' => false,
                        'disableeditsection' => false,
-                       'generatexml' => false,
+                       'generatexml' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-parse-param-generatexml', CONTENT_MODEL_WIKITEXT
+                               ),
+                       ),
                        'preview' => false,
                        'sectionpreview' => false,
                        'disabletoc' => false,
@@ -706,96 +721,16 @@ class ApiParse extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $wikitext = CONTENT_MODEL_WIKITEXT;
-
-               return array(
-                       'text' => "Text to parse. Use {$p}title or {$p}contentmodel to control the content model",
-                       'summary' => 'Summary to parse',
-                       'redirects' => "If the {$p}page or the {$p}pageid parameter is set to a redirect, resolve it",
-                       'title' => "Title of page the text belongs to. " .
-                               "If omitted, {$p}contentmodel must be specified, and \"API\" will be used as the title",
-                       'page' => "Parse the content of this page. Cannot be used together with {$p}text and {$p}title",
-                       'pageid' => "Parse the content of this page. Overrides {$p}page",
-                       'oldid' => "Parse the content of this revision. Overrides {$p}page and {$p}pageid",
-                       'prop' => array(
-                               'Which pieces of information to get',
-                               ' text           - Gives the parsed text of the wikitext',
-                               ' langlinks      - Gives the language links in the parsed wikitext',
-                               ' categories     - Gives the categories in the parsed wikitext',
-                               ' categorieshtml - Gives the HTML version of the categories',
-                               ' links          - Gives the internal links in the parsed wikitext',
-                               ' templates      - Gives the templates in the parsed wikitext',
-                               ' images         - Gives the images in the parsed wikitext',
-                               ' externallinks  - Gives the external links in the parsed wikitext',
-                               ' sections       - Gives the sections in the parsed wikitext',
-                               ' revid          - Adds the revision ID of the parsed page',
-                               ' displaytitle   - Adds the title of the parsed wikitext',
-                               ' headitems      - Gives items to put in the <head> of the page',
-                               ' headhtml       - Gives parsed <head> of the page',
-                               ' modules        - Gives the ResourceLoader modules used on the page',
-                               ' iwlinks        - Gives interwiki links in the parsed wikitext',
-                               ' wikitext       - Gives the original wikitext that was parsed',
-                               ' properties     - Gives various properties defined in the parsed wikitext',
-                               ' limitreportdata - Gives the limit report in a structured way.',
-                               "                   Gives no data, when {$p}disablepp is set.",
-                               ' limitreporthtml - Gives the HTML version of the limit report.',
-                               "                   Gives no data, when {$p}disablepp is set.",
-                       ),
-                       'effectivelanglinks' => array(
-                               'Includes language links supplied by extensions',
-                               '(for use with prop=langlinks)',
-                       ),
-                       'pst' => array(
-                               'Do a pre-save transform on the input before parsing it',
-                               "Only valid when used with {$p}text",
-                       ),
-                       'onlypst' => array(
-                               'Do a pre-save transform (PST) on the input, but don\'t parse it',
-                               'Returns the same wikitext, after a PST has been applied.',
-                               "Only valid when used with {$p}text",
-                       ),
-                       'section' => 'Only retrieve the content of this section number',
-                       'disablepp' => 'Disable the PP Report from the parser output',
-                       'disableeditsection' => 'Disable edit section links from the parser output',
-                       'generatexml' => "Generate XML parse tree (requires contentmodel=$wikitext)",
-                       'preview' => 'Parse in preview mode',
-                       'sectionpreview' => 'Parse in section preview mode (enables preview mode too)',
-                       'disabletoc' => 'Disable table of contents in output',
-                       'contentformat' => array(
-                               'Content serialization format used for the input text',
-                               "Only valid when used with {$p}text",
-                       ),
-                       'contentmodel' => array(
-                               "Content model of the input text. If omitted, ${p}title must be specified, " .
-                                       "and default will be the model of the specified ${p}title",
-                               "Only valid when used with {$p}text",
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'Parses content and returns parser output.',
-                       'See the various prop-Modules of action=query to get information from the current' .
-                               'version of a page.',
-                       'There are several ways to specify the text to parse:',
-                       "1) Specify a page or revision, using {$p}page, {$p}pageid, or {$p}oldid.",
-                       "2) Specify content explicitly, using {$p}text, {$p}title, and {$p}contentmodel.",
-                       "3) Specify only a summary to parse. {$p}prop should be given an empty value.",
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=parse&page=Project:Sandbox' => 'Parse a page',
-                       'api.php?action=parse&text={{Project:Sandbox}}&contentmodel=wikitext' => 'Parse wikitext',
-                       'api.php?action=parse&text={{PAGENAME}}&title=Test'
-                               => 'Parse wikitext, specifying the page title',
-                       'api.php?action=parse&summary=Some+[[link]]&prop=' => 'Parse a summary',
+                       'action=parse&page=Project:Sandbox'
+                               => 'apihelp-parse-example-page',
+                       'action=parse&text={{Project:Sandbox}}&contentmodel=wikitext'
+                               => 'apihelp-parse-example-text',
+                       'action=parse&text={{PAGENAME}}&title=Test'
+                               => 'apihelp-parse-example-texttitle',
+                       'action=parse&summary=Some+[[link]]&prop='
+                               => 'apihelp-parse-example-summary',
                );
        }
 
index 8b66781..01bc568 100644 (file)
@@ -86,25 +86,16 @@ class ApiPatrol extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'rcid' => 'Recentchanges ID to patrol',
-                       'revid' => 'Revision ID to patrol',
-               );
-       }
-
-       public function getDescription() {
-               return 'Patrol a page or revision.';
-       }
-
        public function needsToken() {
                return 'patrol';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=patrol&token=123ABC&rcid=230672766',
-                       'api.php?action=patrol&token=123ABC&revid=230672766'
+                       'action=patrol&token=123ABC&rcid=230672766'
+                               => 'apihelp-patrol-example-rcid',
+                       'action=patrol&token=123ABC&revid=230672766'
+                               => 'apihelp-patrol-example-revid',
                );
        }
 
index a3d12b7..f5786e8 100644 (file)
@@ -175,43 +175,21 @@ class ApiProtect extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               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",
-                       'protections' => 'List of protection levels, formatted action=group (e.g. edit=sysop)',
-                       'expiry' => array(
-                               'Expiry timestamps. If only one timestamp is ' .
-                                       'set, it\'ll be used for all protections.',
-                               'Use \'infinite\', \'indefinite\', \'infinity\' or \'never\', for a never-expiring protection.'
-                       ),
-                       'reason' => 'Reason for (un)protecting',
-                       'cascade' => array(
-                               'Enable cascading protection (i.e. protect pages included in this page)',
-                               'Ignored if not all protection levels are \'sysop\' or \'protect\''
-                       ),
-                       'watch' => 'If set, add the page being (un)protected to your watchlist',
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-               );
-       }
-
-       public function getDescription() {
-               return 'Change the protection level of a page.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=protect&title=Main%20Page&token=123ABC&' .
-                               'protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never',
-                       'api.php?action=protect&title=Main%20Page&token=123ABC&' .
+                       'action=protect&title=Main%20Page&token=123ABC&' .
+                               'protections=edit=sysop|move=sysop&cascade=&expiry=20070901163000|never'
+                               => 'apihelp-protect-example-protect',
+                       'action=protect&title=Main%20Page&token=123ABC&' .
                                'protections=edit=all|move=all&reason=Lifting%20restrictions'
+                               => 'apihelp-protect-example-unprotect',
+                       'action=protect&title=Main%20Page&token=123ABC&' .
+                               'protections=&reason=Lifting%20restrictions'
+                               => 'apihelp-protect-example-unprotect2',
                );
        }
 
index 7667b23..a69a0d5 100644 (file)
@@ -133,7 +133,9 @@ class ApiPurge extends ApiBase {
                $result = array(
                        'forcelinkupdate' => false,
                        'forcerecursivelinkupdate' => false,
-                       'continue' => '',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -142,25 +144,12 @@ class ApiPurge extends ApiBase {
                return $result;
        }
 
-       public function getParamDescription() {
-               return $this->getPageSet()->getFinalParamDescription()
-                       + array(
-                               'forcelinkupdate' => 'Update the links tables',
-                               'forcerecursivelinkupdate' => 'Update the links table, and update ' .
-                                       'the links tables for any page that uses this page as a template',
-                               'continue' => 'When more results are available, use this to continue',
-                       );
-       }
-
-       public function getDescription() {
-               return array( 'Purge the cache for the given titles.',
-                       'Requires a POST request if the user is not logged in.'
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=purge&titles=Main_Page|API' => 'Purge the "Main Page" and the "API" page',
+                       'action=purge&titles=Main_Page|API'
+                               => 'apihelp-purge-example-simple',
+                       'action=purge&generator=allpages&gapnamespace=0&gaplimit=10'
+                               => 'apihelp-purge-example-generator',
                );
        }
 
index a8e20dc..cf63a7d 100644 (file)
@@ -247,6 +247,16 @@ class ApiQuery extends ApiBase {
        public function execute() {
                $this->mParams = $this->extractRequestParams();
 
+               if ( $this->mParams['continue'] === null && !$this->mParams['rawcontinue'] ) {
+                       $this->logFeatureUsage( 'action=query&!rawcontinue&!continue' );
+                       $this->setWarning(
+                               'Formatting of continuation data will be changing soon. ' .
+                               'To continue using the current formatting, use the \'rawcontinue\' parameter. ' .
+                               'To begin using the new format, pass an empty string for \'continue\' ' .
+                               'in the initial query.'
+                       );
+               }
+
                // Instantiate requested modules
                $allModules = array();
                $this->instantiateModules( $allModules, 'prop' );
@@ -597,44 +607,13 @@ class ApiQuery extends ApiBase {
                return true;
        }
 
-       public function getParamDescription() {
-               return $this->getPageSet()->getFinalParamDescription() + array(
-                       'prop' => 'Which properties to get for the titles/revisions/pageids. ' .
-                               'Module help is available below',
-                       'list' => 'Which lists to get. Module help is available below',
-                       'meta' => 'Which metadata to get about the site. Module help is available below',
-                       'indexpageids' => 'Include an additional pageids section listing all returned page IDs',
-                       'export' => 'Export the current revisions of all given or generated pages',
-                       'exportnowrap' => 'Return the export XML without wrapping it in an ' .
-                               'XML result (same format as Special:Export). Can only be used with export',
-                       'iwurl' => 'Whether to get the full URL if the title is an interwiki link',
-                       'continue' => array(
-                               'When present, formats query-continue as key-value pairs that ' .
-                                       'should simply be merged into the original request.',
-                               'This parameter must be set to an empty string in the initial query.',
-                               'This parameter is recommended for all new development, and ' .
-                                       'will be made default in the next API version.'
-                       ),
-                       'rawcontinue' => 'Currently ignored. In the future, \'continue=\' will become the ' .
-                               'default and this will be needed to receive the raw query-continue data.',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Query API module allows applications to get needed pieces of data ' .
-                               'from the MediaWiki databases,',
-                       'and is loosely based on the old query.php interface.',
-                       'All data modifications will first have to use query to acquire a ' .
-                               'token to prevent abuse from malicious sites.'
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=revisions&meta=siteinfo&' .
-                               'titles=Main%20Page&rvprop=user|comment&continue=',
-                       'api.php?action=query&generator=allpages&gapprefix=API/&prop=revisions&continue=',
+                       'action=query&prop=revisions&meta=siteinfo&' .
+                               'titles=Main%20Page&rvprop=user|comment&continue='
+                               => 'apihelp-query-example-revisions',
+                       'action=query&generator=allpages&gapprefix=API/&prop=revisions&continue='
+                               => 'apihelp-query-example-allpages',
                );
        }
 
index 79fab72..36c2088 100644 (file)
@@ -156,7 +156,9 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
        public function getAllowedParams() {
                return array(
                        'from' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'to' => null,
                        'prefix' => null,
                        'dir' => array(
@@ -189,32 +191,12 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'from' => 'The category to start enumerating from',
-                       'continue' => 'When more results are available, use this to continue',
-                       'to' => 'The category to stop enumerating at',
-                       'prefix' => 'Search for all category titles that begin with this value',
-                       'dir' => 'Direction to sort in',
-                       'min' => 'Minimum number of category members',
-                       'max' => 'Maximum number of category members',
-                       'limit' => 'How many categories to return',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' size    - Adds number of pages in the category',
-                               ' hidden  - Tags categories that are hidden with __HIDDENCAT__',
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               return 'Enumerate all categories.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=allcategories&acprop=size',
-                       'api.php?action=query&generator=allcategories&gacprefix=List&prop=info',
+                       'action=query&list=allcategories&acprop=size'
+                               => 'apihelp-query+allcategories-example-size',
+                       'action=query&generator=allcategories&gacprefix=List&prop=info'
+                               => 'apihelp-query+allcategories-example-generator',
                );
        }
 
index 9dc5f69..95ad6ef 100644 (file)
@@ -300,7 +300,7 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               return array(
+               $ret = array(
                        'sort' => array(
                                ApiBase::PARAM_DFLT => 'name',
                                ApiBase::PARAM_TYPE => array(
@@ -321,7 +321,9 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                        ),
                        'from' => null,
                        'to' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'start' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
                        ),
@@ -353,7 +355,9 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                                        'nobots'
                                )
                        ),
-                       'mime' => null,
+                       'mime' => array(
+                               ApiBase::PARAM_DFLT => null,
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -362,57 +366,26 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
                );
-       }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
+                       $ret['mime'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+               }
 
-               return array(
-                       'sort' => 'Property to sort by',
-                       'dir' => 'The direction in which to list',
-                       'from' => "The image title to start enumerating from. Can only be used with {$p}sort=name",
-                       'to' => "The image title to stop enumerating at. Can only be used with {$p}sort=name",
-                       'continue' => 'When more results are available, use this to continue',
-                       'start' => "The timestamp to start enumerating from. Can only be used with {$p}sort=timestamp",
-                       'end' => "The timestamp to end enumerating. Can only be used with {$p}sort=timestamp",
-                       'prop' => ApiQueryImageInfo::getPropertyDescriptions( $this->propertyFilter ),
-                       'prefix' => "Search for all image titles that begin with this " .
-                               "value. Can only be used with {$p}sort=name",
-                       'minsize' => 'Limit to images with at least this many bytes',
-                       'maxsize' => 'Limit to images with at most this many bytes',
-                       'sha1' => "SHA1 hash of image. Overrides {$p}sha1base36",
-                       'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
-                       'user' => "Only return files uploaded by this user. Can only be used " .
-                               "with {$p}sort=timestamp. Cannot be used together with {$p}filterbots",
-                       'filterbots' => "How to filter files uploaded by bots. Can only be " .
-                               "used with {$p}sort=timestamp. Cannot be used together with {$p}user",
-                       'mime' => 'What MIME type to search for. e.g. image/jpeg. Disabled in Miser Mode',
-                       'limit' => 'How many images in total to return',
-               );
+               return $ret;
        }
 
        private $propertyFilter = array( 'archivename', 'thumbmime', 'uploadwarning' );
 
-       public function getDescription() {
-               return 'Enumerate all images sequentially.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=allimages&aifrom=B' => array(
-                               'Simple Use',
-                               'Show a list of files starting at the letter "B"',
-                       ),
-                       'api.php?action=query&list=allimages&aiprop=user|timestamp|url&' .
-                               'aisort=timestamp&aidir=older' => array(
-                               'Simple Use',
-                               'Show a list of recently uploaded files similar to Special:NewFiles',
-                       ),
-                       'api.php?action=query&generator=allimages&gailimit=4&' .
-                               'gaifrom=T&prop=imageinfo' => array(
-                               'Using as Generator',
-                               'Show info about 4 files starting at the letter "T"',
-                       ),
+                       'action=query&list=allimages&aifrom=B'
+                               => 'apihelp-query+allimages-example-B',
+                       'action=query&list=allimages&aiprop=user|timestamp|url&' .
+                               'aisort=timestamp&aidir=older'
+                               => 'apihelp-query+allimages-example-recent',
+                       'action=query&generator=allimages&gailimit=4&' .
+                               'gaifrom=T&prop=imageinfo'
+                               => 'apihelp-query+allimages-example-generator',
                );
        }
 
index 903dee4..075d199 100644 (file)
  */
 class ApiQueryAllLinks extends ApiQueryGeneratorBase {
 
-       private $table, $tablePrefix, $indexTag,
-               $description, $descriptionWhat, $descriptionTargets, $descriptionLinking;
+       private $table, $tablePrefix, $indexTag;
        private $fieldTitle = 'title';
        private $dfltNamespace = NS_MAIN;
        private $hasNamespace = true;
        private $useIndex = null;
-       private $props = array(), $propHelp = array();
+       private $props = array();
 
        public function __construct( ApiQuery $query, $moduleName ) {
                switch ( $moduleName ) {
@@ -47,10 +46,6 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $this->tablePrefix = 'pl_';
                                $this->useIndex = 'pl_namespace';
                                $this->indexTag = 'l';
-                               $this->description = 'Enumerate all links that point to a given namespace';
-                               $this->descriptionWhat = 'link';
-                               $this->descriptionTargets = 'linked titles';
-                               $this->descriptionLinking = 'linking';
                                break;
                        case 'alltransclusions':
                                $prefix = 'at';
@@ -59,11 +54,6 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $this->dfltNamespace = NS_TEMPLATE;
                                $this->useIndex = 'tl_namespace';
                                $this->indexTag = 't';
-                               $this->description =
-                                       'List all transclusions (pages embedded using {{x}}), including non-existing';
-                               $this->descriptionWhat = 'transclusion';
-                               $this->descriptionTargets = 'transcluded titles';
-                               $this->descriptionLinking = 'transcluding';
                                break;
                        case 'allfileusages':
                                $prefix = 'af';
@@ -73,28 +63,16 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                $this->dfltNamespace = NS_FILE;
                                $this->hasNamespace = false;
                                $this->indexTag = 'f';
-                               $this->description = 'List all file usages, including non-existing';
-                               $this->descriptionWhat = 'file';
-                               $this->descriptionTargets = 'file titles';
-                               $this->descriptionLinking = 'using';
                                break;
                        case 'allredirects':
                                $prefix = 'ar';
                                $this->table = 'redirect';
                                $this->tablePrefix = 'rd_';
                                $this->indexTag = 'r';
-                               $this->description = 'List all redirects to a namespace';
-                               $this->descriptionWhat = 'redirect';
-                               $this->descriptionTargets = 'target pages';
-                               $this->descriptionLinking = 'redirecting';
                                $this->props = array(
                                        'fragment' => 'rd_fragment',
                                        'interwiki' => 'rd_interwiki',
                                );
-                               $this->propHelp = array(
-                                       ' fragment - Adds the fragment from the redirect, if any',
-                                       ' interwiki - Adds the interwiki prefix from the redirect, if any',
-                               );
                                break;
                        default:
                                ApiBase::dieDebug( __METHOD__, 'Unknown module name' );
@@ -262,7 +240,9 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
 
        public function getAllowedParams() {
                $allowedParams = array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'from' => null,
                        'to' => null,
                        'prefix' => null,
@@ -300,59 +280,20 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                return $allowedParams;
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $what = $this->descriptionWhat;
-               $targets = $this->descriptionTargets;
-               $linking = $this->descriptionLinking;
-               $paramDescription = array(
-                       'from' => "The title of the $what to start enumerating from",
-                       'to' => "The title of the $what to stop enumerating at",
-                       'prefix' => "Search for all $targets that begin with this value",
-                       'unique' => array(
-                               "Only show distinct $targets. Cannot be used with {$p}prop=" .
-                                       join( '|', array_keys( array( 'ids' => 1 ) + $this->props ) ) . '.',
-                               'When used as a generator, yields target pages instead of source pages.',
-                       ),
-                       'prop' => array(
-                               'What pieces of information to include',
-                               " ids      - Adds the pageid of the $linking page (Cannot be used with {$p}unique)",
-                               " title    - Adds the title of the $what",
-                       ),
-                       'namespace' => 'The namespace to enumerate',
-                       'limit' => 'How many total items to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'dir' => 'The direction in which to list',
-               );
-               foreach ( $this->propHelp as $help ) {
-                       $paramDescription['prop'][] = "$help (Cannot be used with {$p}unique)";
-               }
-               if ( !$this->hasNamespace ) {
-                       unset( $paramDescription['namespace'] );
-               }
-
-               return $paramDescription;
-       }
-
-       public function getDescription() {
-               return $this->description;
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                $p = $this->getModulePrefix();
                $name = $this->getModuleName();
-               $what = $this->descriptionWhat;
-               $targets = $this->descriptionTargets;
+               $path = $this->getModulePath();
 
                return array(
-                       "api.php?action=query&list={$name}&{$p}from=B&{$p}prop=ids|title"
-                               => "List $targets with page ids they are from, including missing ones. Start at B",
-                       "api.php?action=query&list={$name}&{$p}unique=&{$p}from=B"
-                               => "List unique $targets",
-                       "api.php?action=query&generator={$name}&g{$p}unique=&g{$p}from=B"
-                               => "Gets all $targets, marking the missing ones",
-                       "api.php?action=query&generator={$name}&g{$p}from=B"
-                               => "Gets pages containing the {$what}s",
+                       "action=query&list={$name}&{$p}from=B&{$p}prop=ids|title"
+                               => "apihelp-$path-example-B",
+                       "action=query&list={$name}&{$p}unique=&{$p}from=B"
+                               => "apihelp-$path-example-unique",
+                       "action=query&generator={$name}&g{$p}unique=&g{$p}from=B"
+                               => "apihelp-$path-example-unique-generator",
+                       "action=query&generator={$name}&g{$p}from=B"
+                               => "apihelp-$path-example-generator",
                );
        }
 
index a75a16f..7e0ceff 100644 (file)
@@ -235,35 +235,12 @@ class ApiQueryAllMessages extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'messages' => 'Which messages to output. "*" (default) means all messages',
-                       'prop' => 'Which properties to get',
-                       'enableparser' => array( 'Set to enable parser, will preprocess the wikitext of message',
-                               'Will substitute magic words, handle templates etc.' ),
-                       'nocontent' => 'If set, do not include the content of the messages in the output.',
-                       'includelocal' => array( "Also include local messages, i.e. messages that don't exist in the software but do exist as a MediaWiki: page.",
-                               "This lists all MediaWiki: pages, so it will also list those that aren't 'really' messages such as Common.js",
-                       ),
-                       'title' => 'Page name to use as context when parsing message (for enableparser option)',
-                       'args' => 'Arguments to be substituted into message',
-                       'prefix' => 'Return messages with this prefix',
-                       'filter' => 'Return only messages with names that contain this string',
-                       'customised' => 'Return only messages in this customisation state',
-                       'lang' => 'Return messages in this language',
-                       'from' => 'Return messages starting at this message',
-                       'to' => 'Return messages ending at this message',
-               );
-       }
-
-       public function getDescription() {
-               return 'Return messages from this site.';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=query&meta=allmessages&amprefix=ipb-',
-                       'api.php?action=query&meta=allmessages&ammessages=august|mainpage&amlang=de',
+                       'action=query&meta=allmessages&amprefix=ipb-'
+                               => 'apihelp-query+allmessages-example-ipb',
+                       'action=query&meta=allmessages&ammessages=august|mainpage&amlang=de'
+                               => 'apihelp-query+allmessages-example-de',
                );
        }
 
index b7bd65a..d7d71b3 100644 (file)
@@ -227,7 +227,9 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
        public function getAllowedParams() {
                return array(
                        'from' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'to' => null,
                        'prefix' => null,
                        'namespace' => array(
@@ -297,54 +299,15 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'from' => 'The page title to start enumerating from',
-                       'continue' => 'When more results are available, use this to continue',
-                       'to' => 'The page title to stop enumerating at',
-                       'prefix' => 'Search for all page titles that begin with this value',
-                       'namespace' => 'The namespace to enumerate',
-                       'filterredir' => 'Which pages to list',
-                       'dir' => 'The direction in which to list',
-                       'minsize' => 'Limit to pages with at least this many bytes',
-                       'maxsize' => 'Limit to pages with at most this many bytes',
-                       'prtype' => 'Limit to protected pages only',
-                       'prlevel' => "The protection level (must be used with {$p}prtype= parameter)",
-                       'prfiltercascade'
-                               => "Filter protections based on cascadingness (ignored when {$p}prtype isn't set)",
-                       'filterlanglinks' => array(
-                               'Filter based on whether a page has langlinks',
-                               'Note that this may not consider langlinks added by extensions.',
-                       ),
-                       'limit' => 'How many total pages to return.',
-                       'prexpiry' => array(
-                               'Which protection expiry to filter the page on',
-                               ' indefinite - Get only pages with indefinite protection expiry',
-                               ' definite - Get only pages with a definite (specific) protection expiry',
-                               ' all - Get pages with any protections expiry'
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               return 'Enumerate all pages sequentially in a given namespace.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=allpages&apfrom=B' => array(
-                               'Simple Use',
-                               'Show a list of pages starting at the letter "B"',
-                       ),
-                       'api.php?action=query&generator=allpages&gaplimit=4&gapfrom=T&prop=info' => array(
-                               'Using as Generator',
-                               'Show info about 4 pages starting at the letter "T"',
-                       ),
-                       'api.php?action=query&generator=allpages&gaplimit=2&' .
+                       'action=query&list=allpages&apfrom=B'
+                               => 'apihelp-query+allpages-example-B',
+                       'action=query&generator=allpages&gaplimit=4&gapfrom=T&prop=info'
+                               => 'apihelp-query+allpages-example-generator',
+                       'action=query&generator=allpages&gaplimit=2&' .
                                'gapfilterredir=nonredirects&gapfrom=Re&prop=revisions&rvprop=content'
-                               => array( 'Show content of first 2 non-redirect pages beginning at "Re"' )
+                               => 'apihelp-query+allpages-example-generator-revisions',
                );
        }
 
index e1cc75a..d9a173d 100644 (file)
@@ -352,43 +352,20 @@ class ApiQueryAllUsers extends ApiQueryBase {
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
                        'witheditsonly' => false,
-                       'activeusers' => false,
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'from' => 'The user name to start enumerating from',
-                       'to' => 'The user name to stop enumerating at',
-                       'prefix' => 'Search for all users that begin with this value',
-                       'dir' => 'Direction to sort in',
-                       'group' => 'Limit users to given group name(s)',
-                       'excludegroup' => 'Exclude users in given group name(s)',
-                       'rights' => 'Limit users to given right(s) (does not include rights ' .
-                               'granted by implicit or auto-promoted groups like *, user, or autoconfirmed)',
-                       'prop' => array(
-                               'What pieces of information to include.',
-                               ' blockinfo      - Adds the information about a current block on the user',
-                               ' groups         - Lists groups that the user is in. This uses ' .
-                                       'more server resources and may return fewer results than the limit',
-                               ' implicitgroups - Lists all the groups the user is automatically in',
-                               ' rights         - Lists rights that the user has',
-                               ' editcount      - Adds the edit count of the user',
-                               ' registration   - Adds the timestamp of when the user registered if available (may be blank)',
+                       'activeusers' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+allusers-param-activeusers',
+                                       $this->getConfig()->get( 'ActiveUserDays' )
+                               ),
                        ),
-                       'limit' => 'How many total user names to return',
-                       'witheditsonly' => 'Only list users who have made edits',
-                       'activeusers' => "Only list users active in the last {$this->getConfig()->get( 'ActiveUserDays' )} days(s)"
                );
        }
 
-       public function getDescription() {
-               return 'Enumerate all registered users.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=allusers&aufrom=Y',
+                       'action=query&list=allusers&aufrom=Y'
+                               => 'apihelp-query+allusers-example-Y',
                );
        }
 
index f00a6e7..a0786b0 100644 (file)
@@ -512,7 +512,9 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        'pageid' => array(
                                ApiBase::PARAM_TYPE => 'integer',
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => 'namespace'
@@ -548,59 +550,25 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                return $retval;
        }
 
-       public function getParamDescription() {
-               $retval = array(
-                       'title' => "Title to search. Cannot be used together with {$this->bl_code}pageid",
-                       'pageid' => "Pageid to search. Cannot be used together with {$this->bl_code}title",
-                       'continue' => 'When more results are available, use this to continue',
-                       'namespace' => 'The namespace to enumerate',
-                       'dir' => 'The direction in which to list',
-               );
-               if ( $this->getModuleName() != 'embeddedin' ) {
-                       return array_merge( $retval, array(
-                               'redirect' => 'If linking page is a redirect, find all pages ' .
-                                       'that link to that redirect as well. Maximum limit is halved.',
-                               'filterredir' => 'How to filter for redirects. If set to ' .
-                                       "nonredirects when {$this->bl_code}redirect is enabled, " .
-                                       'this is only applied to the second level',
-                               'limit' => 'How many total pages to return. If ' .
-                                       "{$this->bl_code}redirect is enabled, limit applies to each " .
-                                       'level separately (which means you may get up to 2 * limit results).'
-                       ) );
-               }
-
-               return array_merge( $retval, array(
-                       'filterredir' => 'How to filter for redirects',
-                       'limit' => 'How many total pages to return'
-               ) );
-       }
-
-       public function getDescription() {
-               switch ( $this->getModuleName() ) {
-                       case 'backlinks':
-                               return 'Find all pages that link to the given page.';
-                       case 'embeddedin':
-                               return 'Find all pages that embed (transclude) the given title.';
-                       case 'imageusage':
-                               return 'Find all pages that use the given image title.';
-                       default:
-                               ApiBase::dieDebug( __METHOD__, 'Unknown module name.' );
-               }
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                static $examples = array(
                        'backlinks' => array(
-                               'api.php?action=query&list=backlinks&bltitle=Main%20Page',
-                               'api.php?action=query&generator=backlinks&gbltitle=Main%20Page&prop=info'
+                               'action=query&list=backlinks&bltitle=Main%20Page'
+                                       => 'apihelp-query+backlinks-example-simple',
+                               'action=query&generator=backlinks&gbltitle=Main%20Page&prop=info'
+                                       => 'apihelp-query+backlinks-example-generator',
                        ),
                        'embeddedin' => array(
-                               'api.php?action=query&list=embeddedin&eititle=Template:Stub',
-                               'api.php?action=query&generator=embeddedin&geititle=Template:Stub&prop=info'
+                               'action=query&list=embeddedin&eititle=Template:Stub'
+                                       => 'apihelp-query+embeddedin-example-simple',
+                               'action=query&generator=embeddedin&geititle=Template:Stub&prop=info'
+                                       => 'apihelp-query+embeddedin-example-generator',
                        ),
                        'imageusage' => array(
-                               'api.php?action=query&list=imageusage&iutitle=File:Albert%20Einstein%20Head.jpg',
-                               'api.php?action=query&generator=imageusage&giutitle=File:Albert%20Einstein%20Head.jpg&prop=info'
+                               'action=query&list=imageusage&iutitle=File:Albert%20Einstein%20Head.jpg'
+                                       => 'apihelp-query+imageusage-example-simple',
+                               'action=query&generator=imageusage&giutitle=File:Albert%20Einstein%20Head.jpg&prop=info'
+                                       => 'apihelp-query+imageusage-example-generator',
                        )
                );
 
index 2458a26..7804dbf 100644 (file)
@@ -40,15 +40,13 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                        'code' => 'rd',
                        'prefix' => 'rd',
                        'linktable' => 'redirect',
-                       'what' => 'redirects to',
-                       'description' => 'Returns all redirects to the given pages.',
                        'props' => array(
-                               'fragment' => 'Fragment of each redirect, if any',
+                               'fragment',
                        ),
                        'showredirects' => false,
                        'show' => array(
-                               'fragment' => 'Only show redirects with a fragment',
-                               '!fragment' => 'Only show redirects without a fragment',
+                               'fragment',
+                               '!fragment',
                        ),
                ),
                'linkshere' => array(
@@ -56,8 +54,6 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                        'prefix' => 'pl',
                        'linktable' => 'pagelinks',
                        'from_namespace' => true,
-                       'what' => 'pages linking to',
-                       'description' => 'Find all pages that link to the given pages.',
                        'showredirects' => true,
                ),
                'transcludedin' => array(
@@ -65,8 +61,6 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                        'prefix' => 'tl',
                        'linktable' => 'templatelinks',
                        'from_namespace' => true,
-                       'what' => 'pages transcluding',
-                       'description' => 'Find all pages that transclude the given pages.',
                        'showredirects' => true,
                ),
                'fileusage' => array(
@@ -75,9 +69,7 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                        'linktable' => 'imagelinks',
                        'from_namespace' => true,
                        'to_namespace' => NS_FILE,
-                       'what' => 'pages using',
                        'exampletitle' => 'File:Example.jpg',
-                       'description' => 'Find all pages that use the given files.',
                        'showredirects' => true,
                ),
        );
@@ -348,6 +340,7 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => 'namespace',
                        ),
+                       'show' => null, // Will be filled/removed below
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -355,16 +348,24 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
 
+               if ( empty( $settings['from_namespace'] ) && $this->getConfig()->get( 'MiserMode' ) ) {
+                       $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+                               'api-help-param-limited-in-miser-mode',
+                       );
+               }
+
                if ( !empty( $settings['showredirects'] ) ) {
                        $ret['prop'][ApiBase::PARAM_TYPE][] = 'redirect';
                        $ret['prop'][ApiBase::PARAM_DFLT] .= '|redirect';
                }
                if ( isset( $settings['props'] ) ) {
                        $ret['prop'][ApiBase::PARAM_TYPE] = array_merge(
-                               $ret['prop'][ApiBase::PARAM_TYPE], array_keys( $settings['props'] )
+                               $ret['prop'][ApiBase::PARAM_TYPE], $settings['props']
                        );
                }
 
@@ -374,93 +375,32 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                        $show[] = '!redirect';
                }
                if ( isset( $settings['show'] ) ) {
-                       $show = array_merge( $show, array_keys( $settings['show'] ) );
+                       $show = array_merge( $show, $settings['show'] );
                }
                if ( $show ) {
                        $ret['show'] = array(
                                ApiBase::PARAM_TYPE => $show,
                                ApiBase::PARAM_ISMULTI => true,
                        );
+               } else {
+                       unset( $ret['show'] );
                }
 
                return $ret;
        }
 
-       public function getParamDescription() {
-               $settings = self::$settings[$this->getModuleName()];
-               $p = $this->getModulePrefix();
-
-               $ret = array(
-                       'prop' => array(
-                               'Which properties to get:',
-                       ),
-                       'show' => array(
-                               'Show only items that meet this criteria.',
-                       ),
-                       'namespace' => 'Only include pages in these namespaces',
-                       'limit' => 'How many to return',
-                       'continue' => 'When more results are available, use this to continue',
-               );
-
-               if ( empty( $settings['from_namespace'] ) && $this->getConfig()->get( 'MiserMode' ) ) {
-                       $ret['namespace'] = array(
-                               $ret['namespace'],
-                               "NOTE: Due to \$wgMiserMode, using this may result in fewer than \"{$p}limit\" results",
-                               'returned before continuing; in extreme cases, zero results may be returned.',
-                       );
-                       if ( isset( $ret['type'] ) ) {
-                               $ret['namespace'][] = "Note that you can use {$p}type=subcat or {$p}type=file " .
-                                       "instead of {$p}namespace=14 or 6.";
-                       }
-               }
-
-               $props = array(
-                       'pageid' => 'Adds the ID of page',
-                       'title' => 'Adds the title and namespace ID of the page',
-               );
-               if ( !empty( $settings['showredirects'] ) ) {
-                       $props['redirect'] = 'Indicate if the page is a redirect';
-               }
-               if ( isset( $settings['props'] ) ) {
-                       $props += $settings['props'];
-               }
-               foreach ( $props as $k => $v ) {
-                       $ret['props'][] = sprintf( "%-9s - %s", $k, $v );
-               }
-
-               $show = array();
-               if ( !empty( $settings['showredirects'] ) ) {
-                       $show += array(
-                               'redirect' => 'Only show redirects',
-                               '!redirect' => 'Only show non-redirects',
-                       );
-               }
-               if ( isset( $settings['show'] ) ) {
-                       $show += $settings['show'];
-               }
-               foreach ( $show as $k => $v ) {
-                       $ret['show'][] = sprintf( "%-9s - %s", $k, $v );
-               }
-
-               return $ret;
-       }
-
-       public function getDescription() {
-               return self::$settings[$this->getModuleName()]['description'];
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                $settings = self::$settings[$this->getModuleName()];
                $name = $this->getModuleName();
-               $what = $settings['what'];
+               $path = $this->getModulePath();
                $title = isset( $settings['exampletitle'] ) ? $settings['exampletitle'] : 'Main Page';
                $etitle = rawurlencode( $title );
 
                return array(
-                       "api.php?action=query&prop={$name}&titles={$etitle}"
-                               => "Get a list of $what [[$title]]",
-                       "api.php?action=query&generator={$name}&titles={$etitle}&prop=info"
-                               => "Get information about $what [[$title]]",
+                       "action=query&prop={$name}&titles={$etitle}"
+                               => "apihelp-$path-example-simple",
+                       "action=query&generator={$name}&titles={$etitle}&prop=info"
+                               => "apihelp-$path-example-generator",
                );
        }
 
index 33b25fd..159b1c8 100644 (file)
@@ -268,6 +268,8 @@ class ApiQueryBlocks extends ApiQueryBase {
        }
 
        public function getAllowedParams() {
+               $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
+
                return array(
                        'start' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
@@ -280,7 +282,8 @@ class ApiQueryBlocks extends ApiQueryBase {
                                        'newer',
                                        'older'
                                ),
-                               ApiBase::PARAM_DFLT => 'older'
+                               ApiBase::PARAM_DFLT => 'older',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'ids' => array(
                                ApiBase::PARAM_TYPE => 'integer',
@@ -289,7 +292,13 @@ class ApiQueryBlocks extends ApiQueryBase {
                        'users' => array(
                                ApiBase::PARAM_ISMULTI => true
                        ),
-                       'ip' => null,
+                       'ip' => array(
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+blocks-param-ip',
+                                       $blockCIDRLimit['IPv4'],
+                                       $blockCIDRLimit['IPv6'],
+                               ),
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -326,56 +335,18 @@ class ApiQueryBlocks extends ApiQueryBase {
                                ),
                                ApiBase::PARAM_ISMULTI => true
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'start' => 'The timestamp to start enumerating from',
-                       'end' => 'The timestamp to stop enumerating at',
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'ids' => 'List of block IDs to list (optional)',
-                       'users' => 'List of users to search for (optional)',
-                       'ip' => array(
-                               'Get all blocks applying to this IP or CIDR range, including range blocks.',
-                               "Cannot be used together with bkusers. CIDR ranges broader than " .
-                                       "IPv4/{$blockCIDRLimit['IPv4']} or IPv6/{$blockCIDRLimit['IPv6']} " .
-                                       "are not accepted"
-                       ),
-                       'limit' => 'The maximum amount of blocks to list',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' id         - Adds the ID of the block',
-                               ' user       - Adds the username of the blocked user',
-                               ' userid     - Adds the user ID of the blocked user',
-                               ' by         - Adds the username of the blocking user',
-                               ' byid       - Adds the user ID of the blocking user',
-                               ' timestamp  - Adds the timestamp of when the block was given',
-                               ' expiry     - Adds the timestamp of when the block expires',
-                               ' reason     - Adds the reason given for the block',
-                               ' range      - Adds the range of IPs affected by the block',
-                               ' flags      - Tags the ban with (autoblock, anononly, etc)',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'show' => array(
-                               'Show only items that meet this criteria.',
-                               "For example, to see only indefinite blocks on IPs, set {$p}show=ip|!temp"
-                       ),
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'List all blocked users and IP addresses.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=blocks',
-                       'api.php?action=query&list=blocks&bkusers=Alice|Bob'
+                       'action=query&list=blocks'
+                               => 'apihelp-query+blocks-example-simple',
+                       'action=query&list=blocks&bkusers=Alice|Bob'
+                               => 'apihelp-query+blocks-example-users',
                );
        }
 
index 1926dd0..7518dad 100644 (file)
@@ -202,7 +202,9 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'categories' => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
@@ -216,34 +218,12 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'prop' => array(
-                               'Which additional properties to get for each category',
-                               ' sortkey    - Adds the sortkey (hexadecimal string) and sortkey prefix',
-                               '              (human-readable part) for the category',
-                               ' timestamp  - Adds timestamp of when the category was added',
-                               ' hidden     - Tags categories that are hidden with __HIDDENCAT__',
-                       ),
-                       'limit' => 'How many categories to return',
-                       'show' => 'Which kind of categories to show',
-                       'continue' => 'When more results are available, use this to continue',
-                       'categories' => 'Only list these categories. Useful for checking ' .
-                               'whether a certain page is in a certain category',
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return 'List all categories the page(s) belong to.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=categories&titles=Albert%20Einstein'
-                               => 'Get a list of categories [[Albert Einstein]] belongs to',
-                       'api.php?action=query&generator=categories&titles=Albert%20Einstein&prop=info'
-                               => 'Get information about all categories used in the [[Albert Einstein]]',
+                       'action=query&prop=categories&titles=Albert%20Einstein'
+                               => 'apihelp-query+categories-example-simple',
+                       'action=query&generator=categories&titles=Albert%20Einstein&prop=info'
+                               => 'apihelp-query+categories-example-generator',
                );
        }
 
index 3dd4c65..8f9b229 100644 (file)
@@ -103,24 +103,19 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'continue' => 'When more results are available, use this to continue',
+                       'action=query&prop=categoryinfo&titles=Category:Foo|Category:Bar'
+                               => 'apihelp-query+categoryinfo-example-simple',
                );
        }
 
-       public function getDescription() {
-               return 'Returns information about the given categories.';
-       }
-
-       public function getExamples() {
-               return 'api.php?action=query&prop=categoryinfo&titles=Category:Foo|Category:Bar';
-       }
-
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Properties#categoryinfo_.2F_ci';
        }
index a88a9cb..5b4a766 100644 (file)
@@ -275,7 +275,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               return array(
+               $ret = array(
                        'title' => array(
                                ApiBase::PARAM_TYPE => 'string',
                        ),
@@ -307,7 +307,9 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                        'file'
                                )
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_DFLT => 10,
@@ -351,67 +353,22 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_DEPRECATED => true,
                        ),
                );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $desc = array(
-                       'title' => "Which category to enumerate (required). Must include " .
-                               "'Category:' prefix. Cannot be used together with {$p}pageid",
-                       'pageid' => "Page ID of the category to enumerate. Cannot be used together with {$p}title",
-                       'prop' => array(
-                               'What pieces of information to include',
-                               ' ids           - Adds the page ID',
-                               ' title         - Adds the title and namespace ID of the page',
-                               ' sortkey       - Adds the sortkey used for sorting in the category (hexadecimal string)',
-                               ' sortkeyprefix - Adds the sortkey prefix used for sorting in the ' .
-                                       'category (human-readable part of the sortkey)',
-                               ' type          - Adds the type that the page has been categorised as (page, subcat or file)',
-                               ' timestamp     - Adds the timestamp of when the page was included',
-                       ),
-                       'namespace' => 'Only include pages in these namespaces',
-                       'type' => "What type of category members to include. Ignored when {$p}sort=timestamp is set",
-                       'sort' => 'Property to sort by',
-                       'dir' => 'In which direction to sort',
-                       'start' => "Timestamp to start listing from. Can only be used with {$p}sort=timestamp",
-                       'end' => "Timestamp to end listing at. Can only be used with {$p}sort=timestamp",
-                       'starthexsortkey' => "Sortkey to start listing from, as returned by prop=sortkey. " .
-                               "Can only be used with {$p}sort=sortkey",
-                       'endhexsortkey' => "Sortkey to end listing from, as returned by prop=sortkey. " .
-                               "Can only be used with {$p}sort=sortkey",
-                       'startsortkeyprefix' => "Sortkey prefix to start listing from. Can " .
-                               "only be used with {$p}sort=sortkey. Overrides {$p}starthexsortkey",
-                       'endsortkeyprefix' => "Sortkey prefix to end listing BEFORE (not at, " .
-                               "if this value occurs it will not be included!). Can only be used with " .
-                               "{$p}sort=sortkey. Overrides {$p}endhexsortkey",
-                       'startsortkey' => "Use starthexsortkey instead",
-                       'endsortkey' => "Use endhexsortkey instead",
-                       'continue' => 'For large categories, give the value returned from previous query',
-                       'limit' => 'The maximum number of pages to return.',
-               );
 
                if ( $this->getConfig()->get( 'MiserMode' ) ) {
-                       $desc['namespace'] = array(
-                               $desc['namespace'],
-                               "NOTE: Due to \$wgMiserMode, using this may result in fewer than \"{$p}limit\" results",
-                               'returned before continuing; in extreme cases, zero results may be returned.',
-                               "Note that you can use {$p}type=subcat or {$p}type=file instead of {$p}namespace=14 or 6.",
+                       $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+                               'api-help-param-limited-in-miser-mode',
                        );
                }
 
-               return $desc;
-       }
-
-       public function getDescription() {
-               return 'List all pages in a given category.';
+               return $ret;
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=categorymembers&cmtitle=Category:Physics'
-                               => 'Get first 10 pages in [[Category:Physics]]',
-                       'api.php?action=query&generator=categorymembers&gcmtitle=Category:Physics&prop=info'
-                               => 'Get page info about first 10 pages in [[Category:Physics]]',
+                       'action=query&list=categorymembers&cmtitle=Category:Physics'
+                               => 'apihelp-query+categorymembers-example-simple',
+                       'action=query&generator=categorymembers&gcmtitle=Category:Physics&prop=info'
+                               => 'apihelp-query+categorymembers-example-generator',
                );
        }
 
index 55ea470..b31b14b 100644 (file)
@@ -236,43 +236,16 @@ class ApiQueryContributors extends ApiQueryBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'group' => array(
-                               'Limit users to given group name(s)',
-                               'Does not include implicit or auto-promoted groups like *, user, or autoconfirmed'
-                       ),
-                       'excludegroup' => array(
-                               'Exclude users in given group name(s)',
-                               'Does not include implicit or auto-promoted groups like *, user, or autoconfirmed'
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'rights' => array(
-                               'Limit users to those having given right(s)',
-                               'Does not include rights granted by implicit or auto-promoted groups ' .
-                                       'like *, user, or autoconfirmed'
-                       ),
-                       'excluderights' => array(
-                               'Limit users to those not having given right(s)',
-                               'Does not include rights granted by implicit or auto-promoted groups ' .
-                                       'like *, user, or autoconfirmed'
-                       ),
-                       'limit' => 'How many contributors to return',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'Get the list of logged-in contributors and ' .
-                       'the count of anonymous contributors to a page.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=contributors&titles=Main_Page',
+                       'action=query&prop=contributors&titles=Main_Page'
+                               => 'apihelp-query+contributors-example-simple',
                );
        }
 
index 9042696..9d34724 100644 (file)
@@ -423,40 +423,46 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
        public function getAllowedParams() {
                return array(
                        'start' => array(
-                               ApiBase::PARAM_TYPE => 'timestamp'
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 1, 2 ) ),
                        ),
                        'end' => array(
                                ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 1, 2 ) ),
                        ),
                        'dir' => array(
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
                                ),
-                               ApiBase::PARAM_DFLT => 'older'
+                               ApiBase::PARAM_DFLT => 'older',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 1, 3 ) ),
                        ),
-                       'from' => null,
-                       'to' => null,
-                       'prefix' => null,
-                       'continue' => null,
-                       'unique' => false,
-                       'tag' => null,
-                       'user' => array(
-                               ApiBase::PARAM_TYPE => 'user'
+                       'from' => array(
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
                        ),
-                       'excludeuser' => array(
-                               ApiBase::PARAM_TYPE => 'user'
+                       'to' => array(
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
+                       ),
+                       'prefix' => array(
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
+                       ),
+                       'unique' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_TYPE => 'namespace',
                                ApiBase::PARAM_DFLT => NS_MAIN,
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'modes', 3 ) ),
                        ),
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       'tag' => null,
+                       'user' => array(
+                               ApiBase::PARAM_TYPE => 'user'
+                       ),
+                       'excludeuser' => array(
+                               ApiBase::PARAM_TYPE => 'user'
                        ),
                        'prop' => array(
                                ApiBase::PARAM_DFLT => 'user|comment',
@@ -476,68 +482,30 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                                ),
                                ApiBase::PARAM_ISMULTI => true
                        ),
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'start' => 'The timestamp to start enumerating from (1, 2)',
-                       'end' => 'The timestamp to stop enumerating at (1, 2)',
-                       'dir' => $this->getDirectionDescription( $this->getModulePrefix(), ' (1, 3)' ),
-                       'from' => 'Start listing at this title (3)',
-                       'to' => 'Stop listing at this title (3)',
-                       'prefix' => 'Search for all page titles that begin with this value (3)',
-                       'limit' => 'The maximum amount of revisions to list',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' revid          - Adds the revision ID of the deleted revision',
-                               ' parentid       - Adds the revision ID of the previous revision to the page',
-                               ' user           - Adds the user who made the revision',
-                               ' userid         - Adds the user ID whom made the revision',
-                               ' comment        - Adds the comment of the revision',
-                               ' parsedcomment  - Adds the parsed comment of the revision',
-                               ' minor          - Tags if the revision is minor',
-                               ' 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          - DEPRECATED! Gives the edit token',
-                               ' tags           - Tags for the revision',
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'namespace' => 'Only list pages in this namespace (3)',
-                       'user' => 'Only list revisions by this user',
-                       'excludeuser' => 'Don\'t list revisions by this user',
-                       'continue' => 'When more results are available, use this to continue',
-                       'unique' => 'List only one revision for each page (3)',
-                       'tag' => 'Only list revisions tagged with this tag',
-               );
-       }
-
-       public function getDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'List deleted revisions.',
-                       'Operates in three modes:',
-                       ' 1) List deleted revisions for the given title(s), sorted by timestamp.',
-                       ' 2) List deleted contributions for the given user, sorted by timestamp (no titles specified).',
-                       ' 3) List all deleted revisions in the given namespace, sorted by title and timestamp',
-                       "    (no titles specified, {$p}user not set).",
-                       'Certain parameters only apply to some modes and are ignored in others.',
-                       'For instance, a parameter marked (1) only applies to mode 1 and is ignored in modes 2 and 3.',
                );
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&' .
+                       'action=query&list=deletedrevs&titles=Main%20Page|Talk:Main%20Page&' .
                                'drprop=user|comment|content'
-                               => 'List the last deleted revisions of Main Page and Talk:Main Page, with content (mode 1)',
-                       'api.php?action=query&list=deletedrevs&druser=Bob&drlimit=50'
-                               => 'List the last 50 deleted contributions by Bob (mode 2)',
-                       'api.php?action=query&list=deletedrevs&drdir=newer&drlimit=50'
-                               => 'List the first 50 deleted revisions in the main namespace (mode 3)',
-                       'api.php?action=query&list=deletedrevs&drdir=newer&drlimit=50&drnamespace=1&drunique='
-                               => 'List the first 50 deleted pages in the Talk namespace (mode 3):',
+                               => 'apihelp-query+deletedrevs-example-mode1',
+                       'action=query&list=deletedrevs&druser=Bob&drlimit=50'
+                               => 'apihelp-query+deletedrevs-example-mode2',
+                       'action=query&list=deletedrevs&drdir=newer&drlimit=50'
+                               => 'apihelp-query+deletedrevs-example-mode3-main',
+                       'action=query&list=deletedrevs&drdir=newer&drlimit=50&drnamespace=1&drunique='
+                               => 'apihelp-query+deletedrevs-example-mode3-talk',
                );
        }
 
index cf0d841..a6509d4 100644 (file)
@@ -44,17 +44,7 @@ class ApiQueryDisabled extends ApiQueryBase {
                return array();
        }
 
-       public function getParamDescription() {
-               return array();
-       }
-
-       public function getDescription() {
-               return array(
-                       'This module has been disabled.'
-               );
-       }
-
-       public function getExamples() {
-               return array();
+       public function getDescriptionMessage() {
+               return 'apihelp-query+disabled-description';
        }
 }
index 2212957..763c306 100644 (file)
@@ -167,7 +167,9 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'dir' => array(
                                ApiBase::PARAM_DFLT => 'ascending',
                                ApiBase::PARAM_TYPE => array(
@@ -179,23 +181,12 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'limit' => 'How many duplicate files to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'dir' => 'The direction in which to list',
-                       'localonly' => 'Look only for files in the local repository',
-               );
-       }
-
-       public function getDescription() {
-               return 'List all files that are duplicates of the given file(s) based on hash values.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&titles=File:Albert_Einstein_Head.jpg&prop=duplicatefiles',
-                       'api.php?action=query&generator=allimages&prop=duplicatefiles',
+                       'action=query&titles=File:Albert_Einstein_Head.jpg&prop=duplicatefiles'
+                               => 'apihelp-query+duplicatefiles-example-simple',
+                       'action=query&generator=allimages&prop=duplicatefiles'
+                               => 'apihelp-query+duplicatefiles-example-generated',
                );
        }
 
index faabb92..9836352 100644 (file)
@@ -145,7 +145,7 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               return array(
+               $ret = array(
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_DFLT => 'ids|title|url',
@@ -156,7 +156,8 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                                )
                        ),
                        'offset' => array(
-                               ApiBase::PARAM_TYPE => 'integer'
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
                        'protocol' => array(
                                ApiBase::PARAM_TYPE => self::prepareProtocols(),
@@ -176,6 +177,14 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                        ),
                        'expandurl' => false,
                );
+
+               if ( $this->getConfig()->get( 'MiserMode' ) ) {
+                       $ret['namespace'][ApiBase::PARAM_HELP_MSG_APPEND] = array(
+                               'api-help-param-limited-in-miser-mode',
+                       );
+               }
+
+               return $ret;
        }
 
        public static function prepareProtocols() {
@@ -207,45 +216,10 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                }
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $desc = array(
-                       'prop' => array(
-                               'What pieces of information to include',
-                               ' ids    - Adds the ID of page',
-                               ' title  - Adds the title and namespace ID of the page',
-                               ' url    - Adds the URL used in the page',
-                       ),
-                       'offset' => 'Used for paging. Use the value returned for "continue"',
-                       'protocol' => array(
-                               "Protocol of the URL. If empty and {$p}query set, the protocol is http.",
-                               "Leave both this and {$p}query empty to list all external links"
-                       ),
-                       'query' => 'Search string without protocol. See [[Special:LinkSearch]]. ' .
-                               'Leave empty to list all external links',
-                       'namespace' => 'The page namespace(s) to enumerate.',
-                       'limit' => 'How many pages to return.',
-                       'expandurl' => 'Expand protocol-relative URLs with the canonical protocol',
-               );
-
-               if ( $this->getConfig()->get( 'MiserMode' ) ) {
-                       $desc['namespace'] = array(
-                               $desc['namespace'],
-                               "NOTE: Due to \$wgMiserMode, using this may result in fewer than \"{$p}limit\" results",
-                               'returned before continuing; in extreme cases, zero results may be returned',
-                       );
-               }
-
-               return $desc;
-       }
-
-       public function getDescription() {
-               return 'Enumerate pages that contain a given URL.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=exturlusage&euquery=www.mediawiki.org'
+                       'action=query&list=exturlusage&euquery=www.mediawiki.org'
+                               => 'apihelp-query+exturlusage-example-simple',
                );
        }
 
index 9566635..b9a4263 100644 (file)
@@ -114,7 +114,8 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
                        'offset' => array(
-                               ApiBase::PARAM_TYPE => 'integer'
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
                        'protocol' => array(
                                ApiBase::PARAM_TYPE => ApiQueryExtLinksUsage::prepareProtocols(),
@@ -125,30 +126,10 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'limit' => 'How many links to return',
-                       'offset' => 'When more results are available, use this to continue',
-                       'protocol' => array(
-                               "Protocol of the URL. If empty and {$p}query set, the protocol is http.",
-                               "Leave both this and {$p}query empty to list all external links"
-                       ),
-                       'query' => 'Search string without protocol. Useful for checking ' .
-                               'whether a certain page contains a certain external url',
-                       'expandurl' => 'Expand protocol-relative URLs with the canonical protocol',
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns all external URLs (not interwikis) from the given page(s).';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=extlinks&titles=Main%20Page'
-                               => 'Get a list of external links on the [[Main Page]]',
+                       'action=query&prop=extlinks&titles=Main%20Page'
+                               => 'apihelp-query+extlinks-example-simple',
                );
        }
 
index d1600ef..cb5af2f 100644 (file)
@@ -89,27 +89,10 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
                ) ) );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'prop' => array(
-                               'Which repository properties to get (there may be more available on some wikis):',
-                               ' apiurl      - URL to the repository API - helpful for getting image info from the host.',
-                               ' name        - The key of the repository - used in e.g. ' .
-                                       '$wgForeignFileRepos and imageinfo return values.',
-                               ' displayname - The human-readable name of the repository wiki.',
-                               ' rooturl     - Root URL for image paths.',
-                               ' local       - Whether that repository is the local one or not.',
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               return 'Return meta information about image repositories configured on the wiki.';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=query&meta=filerepoinfo&friprop=apiurl|name|displayname',
+                       'action=query&meta=filerepoinfo&friprop=apiurl|name|displayname'
+                               => 'apihelp-query+filerepoinfo-example-simple',
                );
        }
 }
index f047d8d..415cb3d 100644 (file)
@@ -193,7 +193,7 @@ class ApiQueryFilearchive extends ApiQueryBase {
 
                                $pageCount = ArchivedFile::newFromRow( $row )->pageCount();
                                if ( $pageCount !== false ) {
-                                       $vals['pagecount'] = $pageCount;
+                                       $file['pagecount'] = $pageCount;
                                }
 
                                $file['height'] = $row->fa_height;
@@ -246,16 +246,8 @@ class ApiQueryFilearchive extends ApiQueryBase {
        public function getAllowedParams() {
                return array(
                        'from' => null,
-                       'continue' => null,
                        'to' => null,
                        'prefix' => null,
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       ),
                        'dir' => array(
                                ApiBase::PARAM_DFLT => 'ascending',
                                ApiBase::PARAM_TYPE => array(
@@ -283,48 +275,23 @@ class ApiQueryFilearchive extends ApiQueryBase {
                                        'archivename',
                                ),
                        ),
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'from' => 'The image title to start enumerating from',
-                       'continue' => 'When more results are available, use this to continue',
-                       'to' => 'The image title to stop enumerating at',
-                       'prefix' => 'Search for all image titles that begin with this value',
-                       'dir' => 'The direction in which to list',
-                       'limit' => 'How many images to return in total',
-                       'sha1' => "SHA1 hash of image. Overrides {$this->getModulePrefix()}sha1base36",
-                       'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
-                       'prop' => array(
-                               'What image information to get:',
-                               ' sha1              - Adds SHA-1 hash for the image',
-                               ' timestamp         - Adds timestamp for the uploaded version',
-                               ' user              - Adds user who uploaded the image version',
-                               ' size              - Adds the size of the image in bytes and the height, ' .
-                                       'width and page count (if applicable)',
-                               ' dimensions        - Alias for size',
-                               ' description       - Adds description the image version',
-                               ' parseddescription - Parse the description on the version',
-                               ' mime              - Adds MIME of the image',
-                               ' mediatype         - Adds the media type of the image',
-                               ' metadata          - Lists Exif metadata for the version of the image',
-                               ' bitdepth          - Adds the bit depth of the version',
-                               ' archivename       - Adds the file name of the archive version for non-latest versions'
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
                );
        }
 
-       public function getDescription() {
-               return 'Enumerate all deleted files sequentially.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=filearchive' => array(
-                               'Simple Use',
-                               'Show a list of all deleted files',
-                       ),
+                       'action=query&list=filearchive'
+                               => 'apihelp-query+filearchive-example-simple',
                );
        }
 
index b5aa45b..23f6477 100644 (file)
@@ -169,7 +169,9 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                return array(
                        'prefix' => null,
                        'title' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -195,33 +197,12 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'prefix' => 'Prefix for the interwiki',
-                       'title' => "Interwiki link to search for. Must be used with {$this->getModulePrefix()}prefix",
-                       'continue' => 'When more results are available, use this to continue',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' iwprefix       - Adds the prefix of the interwiki',
-                               ' iwtitle        - Adds the title of the interwiki',
-                       ),
-                       'limit' => 'How many total pages to return',
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return array( 'Find all pages that link to the given interwiki link.',
-                       'Can be used to find all links with a prefix, or',
-                       'all links to a title (with a given prefix).',
-                       'Using neither parameter is effectively "All IW Links".',
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=iwbacklinks&iwbltitle=Test&iwblprefix=wikibooks',
-                       'api.php?action=query&generator=iwbacklinks&giwbltitle=Test&giwblprefix=wikibooks&prop=info'
+                       'action=query&list=iwbacklinks&iwbltitle=Test&iwblprefix=wikibooks'
+                               => 'apihelp-query+iwbacklinks-example-simple',
+                       'action=query&generator=iwbacklinks&giwbltitle=Test&giwblprefix=wikibooks&prop=info'
+                               => 'apihelp-query+iwbacklinks-example-generator',
                );
        }
 
index a185ee2..fb398dd 100644 (file)
@@ -147,24 +147,12 @@ class ApiQueryIWLinks extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'url' => array(
-                               ApiBase::PARAM_DFLT => false,
-                               ApiBase::PARAM_DEPRECATED => true,
-                       ),
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
                                        'url',
                                )
                        ),
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       ),
-                       'continue' => null,
                        'prefix' => null,
                        'title' => null,
                        'dir' => array(
@@ -174,32 +162,27 @@ class ApiQueryIWLinks extends ApiQueryBase {
                                        'descending'
                                )
                        ),
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'prop' => array(
-                               'Which additional properties to get for each interlanguage link',
-                               ' url      - Adds the full URL',
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
+                       'url' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
                        ),
-                       'url' => "Whether to get the full URL (Cannot be used with {$this->getModulePrefix()}prop)",
-                       'limit' => 'How many interwiki links to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'prefix' => 'Prefix for the interwiki',
-                       'title' => "Interwiki link to search for. Must be used with {$this->getModulePrefix()}prefix",
-                       'dir' => 'The direction in which to list',
                );
        }
 
-       public function getDescription() {
-               return 'Returns all interwiki links from the given page(s).';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=iwlinks&titles=Main%20Page'
-                               => 'Get interwiki links from the [[Main Page]]',
+                       'action=query&prop=iwlinks&titles=Main%20Page'
+                               => 'apihelp-query+iwlinks-example-simple',
                );
        }
 
index ad5cdbd..18da1e6 100644 (file)
@@ -649,7 +649,11 @@ class ApiQueryImageInfo extends ApiQueryBase {
                        ),
                        'urlwidth' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_DFLT => -1
+                               ApiBase::PARAM_DFLT => -1,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+imageinfo-param-urlwidth',
+                                       ApiQueryImageInfo::TRANSFORM_LIMIT,
+                               ),
                        ),
                        'urlheight' => array(
                                ApiBase::PARAM_TYPE => 'integer',
@@ -675,7 +679,9 @@ class ApiQueryImageInfo extends ApiQueryBase {
                                ApiBase::PARAM_DFLT => '',
                                ApiBase::PARAM_TYPE => 'string',
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'localonly' => false,
                );
        }
@@ -694,6 +700,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
        /**
         * Returns array key value pairs of properties and their descriptions
         *
+        * @deprecated since 1.25
         * @param string $modulePrefix
         * @return array
         */
@@ -730,6 +737,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
        /**
         * Returns the descriptions for the properties provided by getPropertyNames()
         *
+        * @deprecated since 1.25
         * @param array $filter List of properties to filter out
         * @param string $modulePrefix
         * @return array
@@ -741,55 +749,13 @@ class ApiQueryImageInfo extends ApiQueryBase {
                );
        }
 
-       /**
-        * Return the API documentation for the parameters.
-        * @return array Parameter documentation.
-        */
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => self::getPropertyDescriptions( array(), $p ),
-                       'urlwidth' => array(
-                               "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
-                               'For performance reasons if this option is used, ' .
-                                       'no more than ' . self::TRANSFORM_LIMIT . ' scaled images will be returned.'
-                       ),
-                       'urlheight' => "Similar to {$p}urlwidth.",
-                       'urlparam' => array(
-                               "A handler specific parameter string. For example, pdf's ",
-                               "might use 'page15-100px'."
-                       ),
-                       'limit' => 'How many image revisions to return per image',
-                       'start' => 'Timestamp to start listing from',
-                       'end' => 'Timestamp to stop listing at',
-                       'metadataversion'
-                               => array( "Version of metadata to use. if 'latest' is specified, use latest version.",
-                               "Defaults to '1' for backwards compatibility" ),
-                       'extmetadatalanguage' => array(
-                               'What language to fetch extmetadata in. This affects both which',
-                               'translation to fetch, if multiple are available, as well as how things',
-                               'like numbers and various values are formatted.'
-                       ),
-                       'extmetadatamultilang'
-                               =>'If translations for extmetadata property are available, fetch all of them.',
-                       'extmetadatafilter'
-                               => "If specified and non-empty, only these keys will be returned for {$p}prop=extmetadata",
-                       'continue' => 'If the query response includes a continue value, ' .
-                               'use it here to get another page of results',
-                       'localonly' => 'Look only for files in the local repository',
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns image information and upload history.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&titles=File:Albert%20Einstein%20Head.jpg&prop=imageinfo',
-                       'api.php?action=query&titles=File:Test.jpg&prop=imageinfo&iilimit=50&' .
-                               'iiend=20071231235959&iiprop=timestamp|user|url',
+                       'action=query&titles=File:Albert%20Einstein%20Head.jpg&prop=imageinfo'
+                               => 'apihelp-query+imageinfo-example-simple',
+                       'action=query&titles=File:Test.jpg&prop=imageinfo&iilimit=50&' .
+                               'iiend=2007-12-31T23:59:59Z&iiprop=timestamp|user|url'
+                               => 'apihelp-query+imageinfo-example-dated',
                );
        }
 
index 9bc3abe..e23ce45 100644 (file)
@@ -146,7 +146,9 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'images' => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
@@ -160,26 +162,12 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'limit' => 'How many images to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'images' => 'Only list these images. Useful for checking whether a ' .
-                               'certain page has a certain Image.',
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns all images contained on the given page(s).';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=images&titles=Main%20Page'
-                               => 'Get a list of images used in the [[Main Page]]',
-                       'api.php?action=query&generator=images&titles=Main%20Page&prop=info'
-                               => 'Get information about all images used in the [[Main Page]]',
+                       'action=query&prop=images&titles=Main%20Page'
+                               => 'apihelp-query+images-example-simple',
+                       'action=query&generator=images&titles=Main%20Page&prop=info'
+                               => 'apihelp-query+images-example-generator',
                );
        }
 
index d7037e3..3a924b0 100644 (file)
@@ -64,9 +64,6 @@ class ApiQueryInfo extends ApiQueryBase {
                }
                $pageSet->requestField( 'page_is_new' );
                $config = $this->getConfig();
-               if ( !$config->get( 'DisableCounters' ) ) {
-                       $pageSet->requestField( 'page_counter' );
-               }
                $pageSet->requestField( 'page_touched' );
                $pageSet->requestField( 'page_latest' );
                $pageSet->requestField( 'page_len' );
@@ -328,9 +325,6 @@ class ApiQueryInfo extends ApiQueryBase {
                        : array();
                $this->pageIsNew = $pageSet->getCustomField( 'page_is_new' );
 
-               if ( !$this->getConfig()->get( 'DisableCounters' ) ) {
-                       $this->pageCounter = $pageSet->getCustomField( 'page_counter' );
-               }
                $this->pageTouched = $pageSet->getCustomField( 'page_touched' );
                $this->pageLatest = $pageSet->getCustomField( 'page_latest' );
                $this->pageLength = $pageSet->getCustomField( 'page_len' );
@@ -392,9 +386,6 @@ class ApiQueryInfo extends ApiQueryBase {
                if ( $titleExists ) {
                        $pageInfo['touched'] = wfTimestamp( TS_ISO_8601, $this->pageTouched[$pageid] );
                        $pageInfo['lastrevid'] = intval( $this->pageLatest[$pageid] );
-                       $pageInfo['counter'] = $this->getConfig()->get( 'DisableCounters' )
-                               ? ''
-                               : intval( $this->pageCounter[$pageid] );
                        $pageInfo['length'] = intval( $this->pageLength[$pageid] );
 
                        if ( isset( $this->pageIsRedir[$pageid] ) && $this->pageIsRedir[$pageid] ) {
@@ -824,38 +815,18 @@ class ApiQueryInfo extends ApiQueryBase {
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() )
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'prop' => array(
-                               'Which additional properties to get:',
-                               ' protection            - List the protection level of each page',
-                               ' talkid                - The page ID of the talk page for each non-talk page',
-                               ' watched               - List the watched status of each page',
-                               ' watchers              - The number of watchers, if allowed',
-                               ' notificationtimestamp - The watchlist notification timestamp of each page',
-                               ' subjectid             - The page ID of the parent page for each talk page',
-                               ' url                   - Gives a full URL, an edit URL, and the canonical URL for each page',
-                               ' readable              - Whether the user can read this page',
-                               ' preload               - Gives the text returned by EditFormPreloadText',
-                               ' displaytitle          - Gives the way the page title is actually displayed',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'token' => 'Request a token to perform a data-modifying action on a page',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'Get basic page information such as namespace, title, last touched date, ...';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=info&titles=Main%20Page',
-                       'api.php?action=query&prop=info&inprop=protection&titles=Main%20Page'
+                       'action=query&prop=info&titles=Main%20Page'
+                               => 'apihelp-query+info-example-simple',
+                       'action=query&prop=info&inprop=protection&titles=Main%20Page'
+                               => 'apihelp-query+info-example-protection',
                );
        }
 
index 34842c6..a3a285b 100644 (file)
@@ -168,7 +168,9 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                return array(
                        'lang' => null,
                        'title' => null,
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -194,34 +196,12 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'lang' => 'Language for the language link',
-                       'title' => "Language link to search for. Must be used with {$this->getModulePrefix()}lang",
-                       'continue' => 'When more results are available, use this to continue',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' lllang         - Adds the language code of the language link',
-                               ' lltitle        - Adds the title of the language link',
-                       ),
-                       'limit' => 'How many total pages to return',
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return array( 'Find all pages that link to the given language link.',
-                       'Can be used to find all links with a language code, or',
-                       'all links to a title (with a given language).',
-                       'Using neither parameter is effectively "All Language Links".',
-                       'Note that this may not consider language links added by extensions.',
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=langbacklinks&lbltitle=Test&lbllang=fr',
-                       'api.php?action=query&generator=langbacklinks&glbltitle=Test&glbllang=fr&prop=info'
+                       'action=query&list=langbacklinks&lbltitle=Test&lbllang=fr'
+                               => 'apihelp-query+langbacklinks-example-simple',
+                       'action=query&generator=langbacklinks&glbltitle=Test&glbllang=fr&prop=info'
+                               => 'apihelp-query+langbacklinks-example-generator',
                );
        }
 
index da05f27..2b555d3 100644 (file)
@@ -140,18 +140,6 @@ class ApiQueryLangLinks extends ApiQueryBase {
        public function getAllowedParams() {
                global $wgContLang;
                return array(
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 10,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       ),
-                       'continue' => null,
-                       'url' => array(
-                               ApiBase::PARAM_DFLT => false,
-                               ApiBase::PARAM_DEPRECATED => true,
-                       ),
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => array(
@@ -170,36 +158,27 @@ class ApiQueryLangLinks extends ApiQueryBase {
                                )
                        ),
                        'inlanguagecode' => $wgContLang->getCode(),
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'limit' => 'How many langlinks to return',
-                       'continue' => 'When more results are available, use this to continue',
-                       'url' => "Whether to get the full URL (Cannot be used with {$this->getModulePrefix()}prop)",
-                       'prop' => array(
-                               'Which additional properties to get for each interlanguage link',
-                               ' url      - Adds the full URL',
-                               ' langname - Adds the localised language name (best effort, use CLDR extension)',
-                               "            Use {$this->getModulePrefix()}inlanguagecode to control the language",
-                               ' autonym  - Adds the native language name',
+                       'limit' => array(
+                               ApiBase::PARAM_DFLT => 10,
+                               ApiBase::PARAM_TYPE => 'limit',
+                               ApiBase::PARAM_MIN => 1,
+                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
+                       'url' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
                        ),
-                       'lang' => 'Language code',
-                       'title' => "Link to search for. Must be used with {$this->getModulePrefix()}lang",
-                       'dir' => 'The direction in which to list',
-                       'inlanguagecode' => 'Language code for localised language names',
                );
        }
 
-       public function getDescription() {
-               return 'Returns all interlanguage links from the given page(s).';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=langlinks&titles=Main%20Page&redirects='
-                               => 'Get interlanguage links from the [[Main Page]]',
+                       'action=query&prop=langlinks&titles=Main%20Page&redirects='
+                               => 'apihelp-query+langlinks-example-simple',
                );
        }
 
index 71329c4..d654550 100644 (file)
@@ -34,26 +34,20 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
        const LINKS = 'links';
        const TEMPLATES = 'templates';
 
-       private $table, $prefix, $description, $helpUrl;
+       private $table, $prefix, $helpUrl;
 
        public function __construct( ApiQuery $query, $moduleName ) {
                switch ( $moduleName ) {
                        case self::LINKS:
                                $this->table = 'pagelinks';
                                $this->prefix = 'pl';
-                               $this->description = 'link';
                                $this->titlesParam = 'titles';
-                               $this->titlesParamDescription = 'Only list links to these titles. Useful ' .
-                                       'for checking whether a certain page links to a certain title.';
                                $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#links_.2F_pl';
                                break;
                        case self::TEMPLATES:
                                $this->table = 'templatelinks';
                                $this->prefix = 'tl';
-                               $this->description = 'template';
                                $this->titlesParam = 'templates';
-                               $this->titlesParamDescription = 'Only list these templates. Useful ' .
-                                       'for checking whether a certain page uses a certain template.';
                                $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Properties#templates_.2F_tl';
                                break;
                        default:
@@ -197,7 +191,9 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        $this->titlesParam => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
@@ -211,32 +207,17 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               $desc = $this->description;
-
-               return array(
-                       'namespace' => "Show {$desc}s in this namespace(s) only",
-                       'limit' => "How many {$desc}s to return",
-                       'continue' => 'When more results are available, use this to continue',
-                       $this->titlesParam => $this->titlesParamDescription,
-                       'dir' => 'The direction in which to list',
-               );
-       }
-
-       public function getDescription() {
-               return "Returns all {$this->description}s from the given page(s).";
-       }
-
-       public function getExamples() {
-               $desc = $this->description;
+       public function getExamplesMessages() {
                $name = $this->getModuleName();
+               $path = $this->getModulePath();
 
                return array(
-                       "api.php?action=query&prop={$name}&titles=Main%20Page" => "Get {$desc}s from the [[Main Page]]",
-                       "api.php?action=query&generator={$name}&titles=Main%20Page&prop=info"
-                               => "Get information about the {$desc} pages in the [[Main Page]]",
-                       "api.php?action=query&prop={$name}&titles=Main%20Page&{$this->prefix}namespace=2|10"
-                               => "Get {$desc}s from the Main Page in the User and Template namespaces",
+                       "action=query&prop={$name}&titles=Main%20Page"
+                               => "apihelp-{$path}-example-simple",
+                       "action=query&generator={$name}&titles=Main%20Page&prop=info"
+                               => "apihelp-{$path}-example-generator",
+                       "action=query&prop={$name}&titles=Main%20Page&{$this->prefix}namespace=2|10"
+                               => "apihelp-{$path}-example-namespaces",
                );
        }
 
index d3607e1..eb5ca4f 100644 (file)
@@ -327,6 +327,17 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                        $params['img_timestamp'] = wfTimestamp( TS_ISO_8601, $params['img_timestamp'] );
                                }
                                break;
+                       case 'merge':
+                               // replace the named parameter with numbered for backward compatibility
+                               if ( isset( $params['4::dest'] ) ) {
+                                       $params[] = $params['4::dest'];
+                                       unset( $params['4::dest'] );
+                               }
+                               if ( isset( $params['5::mergepoint'] ) ) {
+                                       $params[] = $params['5::mergepoint'];
+                                       unset( $params['5::mergepoint'] );
+                               }
+                               break;
                }
                if ( !is_null( $params ) ) {
                        $logParams = array();
@@ -474,7 +485,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
 
        public function getAllowedParams( $flags = 0 ) {
                $config = $this->getConfig();
-               return array(
+               $ret = array(
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_DFLT => 'ids|title|type|user|timestamp|comment|details',
@@ -511,14 +522,15 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'user' => null,
                        'title' => null,
                        'namespace' => array(
                                ApiBase::PARAM_TYPE => 'namespace'
                        ),
-                       'prefix' => null,
+                       'prefix' => array(),
                        'tag' => null,
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
@@ -527,52 +539,22 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => array(
-                               'Which properties to get',
-                               ' ids            - Adds the ID of the log event',
-                               ' title          - Adds the title of the page for the log event',
-                               ' type           - Adds the type of log event',
-                               ' user           - Adds the user responsible for the log event',
-                               ' userid         - Adds the user ID who was responsible for the log event',
-                               ' timestamp      - Adds the timestamp for the event',
-                               ' comment        - Adds the comment of the event',
-                               ' parsedcomment  - Adds the parsed comment of the event',
-                               ' details        - Lists additional details about the event',
-                               ' tags           - Lists tags for the event',
-                       ),
-                       'type' => 'Filter log entries to only this type',
-                       'action' => array(
-                               "Filter log actions to only this action. Overrides {$p}type",
-                               "Wildcard actions like 'action/*' allows to specify any string for the asterisk"
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'start' => 'The timestamp to start enumerating from',
-                       'end' => 'The timestamp to end enumerating',
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'user' => 'Filter entries to those made by the given user',
-                       'title' => 'Filter entries to those related to a page',
-                       'namespace' => 'Filter entries to those in the given namespace',
-                       'prefix' => 'Filter entries that start with this prefix. Disabled in Miser Mode',
-                       'limit' => 'How many total event entries to return',
-                       'tag' => 'Only list event entries tagged with this tag',
-                       'continue' => 'When more results are available, use this to continue',
                );
-       }
 
-       public function getDescription() {
-               return 'Get events from logs.';
+               if ( $config->get( 'MiserMode' ) ) {
+                       $ret['prefix'][ApiBase::PARAM_HELP_MSG] = 'api-help-param-disabled-in-miser-mode';
+               }
+
+               return $ret;
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=logevents'
+                       'action=query&list=logevents'
+                               => 'apihelp-query+logevents-example-simple',
                );
        }
 
index 469b297..035f901 100644 (file)
@@ -233,15 +233,19 @@ abstract class ApiQueryORM extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => $this->getTable()->getFieldNames(),
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_REQUIRED => true,
+                               ApiBase::PARAM_HELP_MSG => 'api-orm-param-props',
                        ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 20,
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_MIN => 1,
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
+                               ApiBase::PARAM_HELP_MSG => 'api-orm-param-limit',
+                       ),
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'continue' => null,
                );
 
                return array_merge( $this->getTable()->getAPIParams(), $params );
@@ -249,6 +253,7 @@ abstract class ApiQueryORM extends ApiQueryBase {
 
        /**
         * @see ApiBase::getParamDescription()
+        * @deprecated since 1.25
         * @return array
         */
        public function getParamDescription() {
index 8cd9c6c..e4a5002 100644 (file)
@@ -83,7 +83,9 @@ class ApiQueryPagePropNames extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_DFLT => 10,
@@ -94,20 +96,10 @@ class ApiQueryPagePropNames extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'continue' => 'When more results are available, use this to continue',
-                       'limit' => 'The maximum number of pages to return',
-               );
-       }
-
-       public function getDescription() {
-               return 'List all page prop names in use on the wiki.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=pagepropnames' => 'Get first 10 prop names',
+                       'action=query&list=pagepropnames'
+                               => 'apihelp-query+pagepropnames-example-simple',
                );
        }
 
index e370c39..130b829 100644 (file)
@@ -125,28 +125,19 @@ class ApiQueryPageProps extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'prop' => array(
                                ApiBase::PARAM_ISMULTI => true,
                        ),
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'continue' => 'When more results are available, use this to continue',
-                       'prop' => 'Only list these props. Useful for checking whether a ' .
-                               'certain page uses a certain page prop',
-               );
-       }
-
-       public function getDescription() {
-               return 'Get various properties defined in the page content.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=pageprops&titles=Category:Foo',
+                       'action=query&prop=pageprops&titles=Category:Foo'
+                               => 'apihelp-query+pageprops-example-simple',
                );
        }
 
index b6c8525..1e9bc4d 100644 (file)
@@ -140,7 +140,9 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
                                        'value',
                                )
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_DFLT => 10,
@@ -158,31 +160,12 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'propname' => 'Page prop for which to enumerate pages',
-                       'prop' => array(
-                               'What pieces of information to include',
-                               ' ids   - Adds the page ID',
-                               ' title - Adds the title and namespace ID of the page',
-                               ' value - Adds the value of the page prop',
-                       ),
-                       'dir' => 'In which direction to sort',
-                       'continue' => 'When more results are available, use this to continue',
-                       'limit' => 'The maximum number of pages to return',
-               );
-       }
-
-       public function getDescription() {
-               return 'List all pages using a given page prop.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value'
-                               => 'Get first 10 pages using {{DISPLAYTITLE:}}',
-                       'api.php?action=query&generator=pageswithprop&gpwppropname=notoc&prop=info'
-                               => 'Get page info about first 10 pages using __NOTOC__',
+                       'action=query&list=pageswithprop&pwppropname=displaytitle&pwpprop=ids|title|value'
+                               => 'apihelp-query+pageswithprop-example-simple',
+                       'action=query&generator=pageswithprop&gpwppropname=notoc&prop=info'
+                               => 'apihelp-query+pageswithprop-example-generator',
                );
        }
 
index 4abd7f0..2694067 100644 (file)
@@ -100,21 +100,10 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
                        );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'search' => 'Search string',
-                       'limit' => 'Maximum amount of results to return',
-                       'namespace' => 'Namespaces to search',
-               );
-       }
-
-       public function getDescription() {
-               return 'Perform a prefix search for page titles';
-       }
-
-       public function getExamples() {
-               return array(
-                       'api.php?action=query&list=prefixsearch&pssearch=meaning',
+                       'action=query&list=prefixsearch&pssearch=meaning'
+                               => 'apihelp-query+prefixsearch-example-simple',
                );
        }
 
index 4c88be7..098bfc7 100644 (file)
@@ -196,7 +196,8 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'start' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
@@ -217,39 +218,18 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                                        'level'
                                )
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'namespace' => 'Only list titles in these namespaces',
-                       'start' => 'Start listing at this protection timestamp',
-                       'end' => 'Stop listing at this protection timestamp',
-                       'dir' => $this->getDirectionDescription( $this->getModulePrefix() ),
-                       'limit' => 'How many total pages to return',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' timestamp      - Adds the timestamp of when protection was added',
-                               ' user           - Adds the user that added the protection',
-                               ' userid         - Adds the user id that added the protection',
-                               ' comment        - Adds the comment for the protection',
-                               ' parsedcomment  - Adds the parsed comment for the protection',
-                               ' expiry         - Adds the timestamp of when the protection will be lifted',
-                               ' level          - Adds the protection level',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'level' => 'Only list titles with these protection levels',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'List all titles protected from creation.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=protectedtitles',
+                       'action=query&list=protectedtitles'
+                               => 'apihelp-query+protectedtitles-example-simple',
+                       'action=query&generator=protectedtitles&gptnamespace=0&prop=linkshere'
+                               => 'apihelp-query+protectedtitles-example-generator',
                );
        }
 
index 5ddd945..2da5777 100644 (file)
@@ -144,7 +144,10 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => array_keys( $this->qpMap ),
                                ApiBase::PARAM_REQUIRED => true
                        ),
-                       'offset' => 0,
+                       'offset' => array(
+                               ApiBase::PARAM_DFLT => 0,
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -155,21 +158,10 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'page' => 'The name of the special page. Note, this is case sensitive',
-                       'offset' => 'When more results are available, use this to continue',
-                       'limit' => 'Number of results to return',
-               );
-       }
-
-       public function getDescription() {
-               return 'Get a list provided by a QueryPage-based special page.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=querypage&qppage=Ancientpages'
+                       'action=query&list=querypage&qppage=Ancientpages'
+                               => 'apihelp-query+querypage-example-ancientpages',
                );
        }
 
index 530557e..f4061e7 100644 (file)
@@ -165,30 +165,15 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'namespace' => 'Return pages in these namespaces only',
-                       'limit' => 'Limit how many random pages will be returned',
-                       'redirect' => 'Load a random redirect instead of a random page'
+                       'action=query&list=random&rnnamespace=0&rnlimit=2'
+                               => 'apihelp-query+random-example-simple',
+                       'action=query&generator=random&grnnamespace=0&grnlimit=2&prop=info'
+                               => 'apihelp-query+random-example-generator',
                );
        }
 
-       public function getDescription() {
-               return array(
-                       'Get a set of random pages.',
-                       'NOTE: Pages are listed in a fixed sequence, only the starting point is random.',
-                       '      This means that if, for example, "Main Page" is the first random page on',
-                       '      your list, "List of fictional monkeys" will *always* be second, "List of',
-                       '      people on stamps of Vanuatu" third, etc.',
-                       'NOTE: If the number of pages in the namespace is lower than rnlimit, you will',
-                       '      get fewer pages. You will not get the same page twice.'
-               );
-       }
-
-       public function getExamples() {
-               return 'api.php?action=query&list=random&rnnamespace=0&rnlimit=2';
-       }
-
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Random';
        }
index 6f0c5d3..a620a9f 100644 (file)
@@ -625,7 +625,8 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -696,57 +697,18 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                )
                        ),
                        'toponly' => false,
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'start' => 'The timestamp to start enumerating from',
-                       'end' => 'The timestamp to end enumerating',
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'namespace' => 'Filter log entries to only this namespace(s)',
-                       'user' => 'Only list changes by this user',
-                       'excludeuser' => 'Don\'t list changes by this user',
-                       'prop' => array(
-                               'Include additional pieces of information',
-                               ' user           - Adds the user responsible for the edit and tags if they are an IP',
-                               ' userid         - Adds the user id responsible for the edit',
-                               ' comment        - Adds the comment for the edit',
-                               ' parsedcomment  - Adds the parsed comment for the edit',
-                               ' flags          - Adds flags for the edit',
-                               ' timestamp      - Adds timestamp of the edit',
-                               ' title          - Adds the page title of the edit',
-                               ' ids            - Adds the page ID, recent changes ID and the new and old revision ID',
-                               ' sizes          - Adds the new and old page length in bytes',
-                               ' redirect       - Tags edit if page is a redirect',
-                               ' patrolled      - Tags patrollable edits as being patrolled or unpatrolled',
-                               ' loginfo        - Adds log information (logid, logtype, etc) to log entries',
-                               ' tags           - Lists tags for the entry',
-                               ' sha1           - Adds the content checksum for entries associated with a revision',
-                       ),
-                       'token' => 'Which tokens to obtain for each change',
-                       'show' => array(
-                               'Show only items that meet this criteria.',
-                               "For example, to see only minor edits done by logged-in users, set {$p}show=minor|!anon"
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'type' => 'Which types of changes to show',
-                       'limit' => 'How many total changes to return',
-                       'tag' => 'Only list changes tagged with this tag',
-                       'toponly' => 'Only list changes which are the latest revision',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return 'Enumerate recent changes.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=recentchanges'
+                       'action=query&list=recentchanges'
+                               => 'apihelp-query+recentchanges-example-simple',
+                       'action=query&generator=recentchanges&grcshow=!patrolled&prop=info'
+                               => 'apihelp-query+recentchanges-example-generator',
                );
        }
 
index da4ec19..d547929 100644 (file)
@@ -717,32 +717,41 @@ class ApiQueryRevisions extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => 'limit',
                                ApiBase::PARAM_MIN => 1,
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'startid' => array(
-                               ApiBase::PARAM_TYPE => 'integer'
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'endid' => array(
-                               ApiBase::PARAM_TYPE => 'integer'
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'start' => array(
-                               ApiBase::PARAM_TYPE => 'timestamp'
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'end' => array(
-                               ApiBase::PARAM_TYPE => 'timestamp'
+                               ApiBase::PARAM_TYPE => 'timestamp',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'dir' => array(
                                ApiBase::PARAM_DFLT => 'older',
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'user' => array(
-                               ApiBase::PARAM_TYPE => 'user'
+                               ApiBase::PARAM_TYPE => 'user',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'excludeuser' => array(
-                               ApiBase::PARAM_TYPE => 'user'
+                               ApiBase::PARAM_TYPE => 'user',
+                               ApiBase::PARAM_HELP_MSG_INFO => array( array( 'singlepageonly' ) ),
                        ),
                        'tag' => null,
                        'expandtemplates' => false,
@@ -754,7 +763,9 @@ class ApiQueryRevisions extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ),
                                ApiBase::PARAM_ISMULTI => true
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'diffto' => null,
                        'difftotext' => null,
                        'contentformat' => array(
@@ -764,83 +775,26 @@ class ApiQueryRevisions extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => array(
-                               'Which properties to get for each revision:',
-                               ' ids            - The ID of the revision',
-                               ' flags          - Revision flags (minor)',
-                               ' timestamp      - The timestamp of the revision',
-                               ' user           - User that made the revision',
-                               ' userid         - User id of revision creator',
-                               ' size           - Length (bytes) of the revision',
-                               ' sha1           - SHA-1 (base 16) of the revision',
-                               ' contentmodel   - Content model id',
-                               ' comment        - Comment by the user for revision',
-                               ' parsedcomment  - Parsed comment by the user for the revision',
-                               ' content        - Text of the revision',
-                               ' tags           - Tags for the revision',
-                       ),
-                       'limit' => 'Limit how many revisions will be returned (enum)',
-                       'startid' => 'From which revision id to start enumeration (enum)',
-                       'endid' => 'Stop revision enumeration on this revid (enum)',
-                       'start' => 'From which revision timestamp to start enumeration (enum)',
-                       'end' => 'Enumerate up to this timestamp (enum)',
-                       'dir' => $this->getDirectionDescription( $p, ' (enum)' ),
-                       'user' => 'Only include revisions made by user (enum)',
-                       'excludeuser' => 'Exclude revisions made by user (enum)',
-                       'expandtemplates' => "Expand templates in revision content (requires {$p}prop=content)",
-                       'generatexml' => "Generate XML parse tree for revision content (requires {$p}prop=content)",
-                       'parse' => array( "Parse revision content (requires {$p}prop=content).",
-                               'For performance reasons if this option is used, rvlimit is enforced to 1.' ),
-                       'section' => 'Only retrieve the content of this section number',
-                       'token' => 'Which tokens to obtain for each revision',
-                       'continue' => 'When more results are available, use this to continue',
-                       'diffto' => array( 'Revision ID to diff each revision to.',
-                               'Use "prev", "next" and "cur" for the previous, next and current revision respectively' ),
-                       'difftotext' => array(
-                               'Text to diff each revision to. Only diffs a limited number of revisions.',
-                               "Overrides {$p}diffto. If {$p}section is set, only that section will be",
-                               'diffed against this text',
-                       ),
-                       'tag' => 'Only list revisions tagged with this tag',
-                       'contentformat' => 'Serialization format used for difftotext and expected for output of content',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Get revision information.',
-                       'May be used in several ways:',
-                       ' 1) Get data about a set of pages (last revision), by setting titles or pageids parameter.',
-                       ' 2) Get revisions for one given page, by using titles/pageids with start/end/limit params.',
-                       ' 3) Get data about a set of revisions by setting their IDs with revids parameter.',
-                       'All parameters marked as (enum) may only be used with a single page (#2).'
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'Get data with content for the last revision of titles "API" and "Main Page"',
-                       '  api.php?action=query&prop=revisions&titles=API|Main%20Page&' .
-                               'rvprop=timestamp|user|comment|content',
-                       'Get last 5 revisions of the "Main Page"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment',
-                       'Get first 5 revisions of the "Main Page"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment&rvdir=newer',
-                       'Get first 5 revisions of the "Main Page" made after 2006-05-01',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment&rvdir=newer&rvstart=20060501000000',
-                       'Get first 5 revisions of the "Main Page" that were not made made by anonymous user "127.0.0.1"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment&rvexcludeuser=127.0.0.1',
-                       'Get first 5 revisions of the "Main Page" that were made by the user "MediaWiki default"',
-                       '  api.php?action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
-                               'rvprop=timestamp|user|comment&rvuser=MediaWiki%20default',
+                       'action=query&prop=revisions&titles=API|Main%20Page&' .
+                               'rvprop=timestamp|user|comment|content'
+                               => 'apihelp-query+revisions-example-content',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment'
+                               => 'apihelp-query+revisions-example-last5',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvdir=newer'
+                               => 'apihelp-query+revisions-example-first5',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvdir=newer&rvstart=2006-05-01T00:00:00Z'
+                               => 'apihelp-query+revisions-example-first5-after',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvexcludeuser=127.0.0.1'
+                               => 'apihelp-query+revisions-example-first5-not-localhost',
+                       'action=query&prop=revisions&titles=Main%20Page&rvlimit=5&' .
+                               'rvprop=timestamp|user|comment&rvuser=MediaWiki%20default'
+                               => 'apihelp-query+revisions-example-first5-user',
                );
        }
 
index bcf5d91..7d07f57 100644 (file)
@@ -303,7 +303,10 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                                ),
                                ApiBase::PARAM_ISMULTI => true,
                        ),
-                       'offset' => 0,
+                       'offset' => array(
+                               ApiBase::PARAM_DFLT => 0,
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -328,47 +331,14 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                return $params;
        }
 
-       public function getParamDescription() {
-               $descriptions = array(
-                       'search' => 'Search for all page titles (or content) that has this value',
-                       'namespace' => 'The namespace(s) to enumerate',
-                       'what' => 'Search inside the text or titles',
-                       'info' => 'What metadata to return',
-                       'prop' => array(
-                               'What properties to return',
-                               ' size             - Adds the size of the page in bytes',
-                               ' wordcount        - Adds the word count of the page',
-                               ' timestamp        - Adds the timestamp of when the page was last edited',
-                               ' score            - DEPRECATED and IGNORED',
-                               ' snippet          - Adds a parsed snippet of the page',
-                               ' titlesnippet     - Adds a parsed snippet of the page title',
-                               ' redirectsnippet  - Adds a parsed snippet of the redirect title',
-                               ' redirecttitle    - Adds the title of the matching redirect',
-                               ' sectionsnippet   - Adds a parsed snippet of the matching section title',
-                               ' sectiontitle     - Adds the title of the matching section',
-                               ' hasrelated       - DEPRECATED and IGNORED',
-                       ),
-                       'offset' => 'Use this value to continue paging (return by query)',
-                       'limit' => 'How many total pages to return',
-                       'interwiki' => 'Include interwiki results in the search, if available'
-               );
-
-               if ( count( SearchEngine::getSearchTypes() ) > 1 ) {
-                       $descriptions['backend'] = 'Which search backend to use, if not the default';
-               }
-
-               return $descriptions;
-       }
-
-       public function getDescription() {
-               return 'Perform a full text search.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=search&srsearch=meaning',
-                       'api.php?action=query&list=search&srwhat=text&srsearch=meaning',
-                       'api.php?action=query&generator=search&gsrsearch=meaning&prop=info',
+                       'action=query&list=search&srsearch=meaning'
+                               => 'apihelp-query+search-example-simple',
+                       'action=query&list=search&srwhat=text&srsearch=meaning'
+                               => 'apihelp-query+search-example-text',
+                       'action=query&generator=search&gsrsearch=meaning&prop=info'
+                               => 'apihelp-query+search-example-generator',
                );
        }
 
index 311438f..068418d 100644 (file)
@@ -481,9 +481,6 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data = array();
                $data['pages'] = intval( SiteStats::pages() );
                $data['articles'] = intval( SiteStats::articles() );
-               if ( !$this->getConfig()->get( 'DisableCounters' ) ) {
-                       $data['views'] = intval( SiteStats::views() );
-               }
                $data['edits'] = intval( SiteStats::edits() );
                $data['images'] = intval( SiteStats::images() );
                $data['users'] = intval( SiteStats::users() );
@@ -837,54 +834,14 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => array(
-                               'Which sysinfo properties to get:',
-                               ' general               - Overall system information',
-                               ' namespaces            - List of registered namespaces and their canonical names',
-                               ' namespacealiases      - List of registered namespace aliases',
-                               ' specialpagealiases    - List of special page aliases',
-                               ' magicwords            - List of magic words and their aliases',
-                               ' statistics            - Returns site statistics',
-                               ' interwikimap          - Returns interwiki map ' .
-                                       "(optionally filtered, (optionally localised by using {$p}inlanguagecode))",
-                               ' dbrepllag             - Returns database server with the highest replication lag',
-                               ' usergroups            - Returns user groups and the associated permissions',
-                               ' extensions            - Returns extensions installed on the wiki',
-                               ' fileextensions        - Returns list of file extensions allowed to be uploaded',
-                               ' rightsinfo            - Returns wiki rights (license) information if available',
-                               ' restrictions          - Returns information on available restriction (protection) types',
-                               ' languages             - Returns a list of languages MediaWiki supports ' .
-                                       "(optionally localised by using {$p}inlanguagecode)",
-                               ' skins                 - Returns a list of all enabled skins ' .
-                                       "(optionally localised by using {$p}inlanguagecode, otherwise in content language)",
-                               ' extensiontags         - Returns a list of parser extension tags',
-                               ' functionhooks         - Returns a list of parser function hooks',
-                               ' showhooks             - Returns a list of all subscribed hooks (contents of $wgHooks)',
-                               ' variables             - Returns a list of variable IDs',
-                               ' protocols             - Returns a list of protocols that are allowed in external links.',
-                               ' defaultoptions        - Returns the default values for user preferences.',
-                       ),
-                       'filteriw' => 'Return only local or only nonlocal entries of the interwiki map',
-                       'showalldb' => 'List all database servers, not just the one lagging the most',
-                       'numberingroup' => 'Lists the number of users in user groups',
-                       'inlanguagecode' => 'Language code for localised language names ' .
-                               '(best effort, use CLDR extension) and skin names',
-               );
-       }
-
-       public function getDescription() {
-               return 'Return general information about the site.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics',
-                       'api.php?action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local',
-                       'api.php?action=query&meta=siteinfo&siprop=dbrepllag&sishowalldb=',
+                       'action=query&meta=siteinfo&siprop=general|namespaces|namespacealiases|statistics'
+                               => 'apihelp-query+siteinfo-example-simple',
+                       'action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local'
+                               => 'apihelp-query+siteinfo-example-interwiki',
+                       'action=query&meta=siteinfo&siprop=dbrepllag&sishowalldb='
+                               => 'apihelp-query+siteinfo-example-replag',
                );
        }
 
index db92856..21b58af 100644 (file)
@@ -94,46 +94,32 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
                        ),
                        'urlwidth' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_DFLT => -1
+                               ApiBase::PARAM_DFLT => -1,
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+imageinfo-param-urlwidth',
+                                       ApiQueryImageInfo::TRANSFORM_LIMIT,
+                               ),
                        ),
                        'urlheight' => array(
                                ApiBase::PARAM_TYPE => 'integer',
-                               ApiBase::PARAM_DFLT => -1
+                               ApiBase::PARAM_DFLT => -1,
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-urlheight',
                        ),
                        'urlparam' => array(
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_DFLT => '',
+                               ApiBase::PARAM_HELP_MSG => 'apihelp-query+imageinfo-param-urlparam',
                        ),
                );
        }
 
-       /**
-        * Return the API documentation for the parameters.
-        * @return array Parameter documentation.
-        */
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'prop' => self::getPropertyDescriptions( $this->propertyFilter, $p ),
-                       'filekey' => 'Key that identifies a previous upload that was stashed temporarily.',
-                       'sessionkey' => 'Alias for filekey, for backward compatibility.',
-                       'urlwidth' => "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
-                       'urlheight' => "Similar to {$p}urlwidth. Cannot be used without {$p}urlwidth",
-                       'urlparam' => array( "A handler specific parameter string. For example, pdf's ",
-                               "might use 'page15-100px'. {$p}urlwidth must be used and be consistent with {$p}urlparam" ),
-               );
-       }
-
-       public function getDescription() {
-               return 'Returns image information for stashed images.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&prop=stashimageinfo&siifilekey=124sd34rsdf567',
-                       'api.php?action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&' .
-                               'siiurlwidth=120&siiprop=url',
+                       'action=query&prop=stashimageinfo&siifilekey=124sd34rsdf567'
+                               => 'apihelp-query+stashimageinfo-example-simple',
+                       'action=query&prop=stashimageinfo&siifilekey=b34edoe3|bceffd4&' .
+                               'siiurlwidth=120&siiprop=url'
+                               => 'apihelp-query+stashimageinfo-example-params',
                );
        }
 }
index 3184564..d1e6e28 100644 (file)
@@ -135,7 +135,9 @@ class ApiQueryTags extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -156,27 +158,10 @@ class ApiQueryTags extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'continue' => 'When more results are available, use this to continue',
-                       'limit' => 'The maximum number of tags to list',
-                       'prop' => array(
-                               'Which properties to get',
-                               ' name         - Adds name of tag',
-                               ' displayname  - Adds system message for the tag',
-                               ' description  - Adds description of the tag',
-                               ' hitcount     - Adds the amount of revisions that have this tag',
-                       ),
-               );
-       }
-
-       public function getDescription() {
-               return 'List change tags.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=tags&tgprop=displayname|description|hitcount'
+                       'action=query&list=tags&tgprop=displayname|description|hitcount'
+                               => 'apihelp-query+tags-example-simple',
                );
        }
 
index ba9c937..279e8e3 100644 (file)
@@ -81,20 +81,12 @@ class ApiQueryTokens extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                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'
+                       'action=query&meta=tokens'
+                               => 'apihelp-query+tokens-example-simple',
+                       'action=query&meta=tokens&type=watch|patrol'
+                               => 'apihelp-query+tokens-example-types',
                );
        }
 
index 4b167b8..10d62cb 100644 (file)
@@ -464,7 +464,9 @@ class ApiQueryContributions extends ApiQueryBase {
                        'end' => array(
                                ApiBase::PARAM_TYPE => 'timestamp'
                        ),
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'user' => array(
                                ApiBase::PARAM_ISMULTI => true
                        ),
@@ -474,7 +476,8 @@ class ApiQueryContributions extends ApiQueryBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -507,7 +510,11 @@ class ApiQueryContributions extends ApiQueryBase {
                                        '!top',
                                        'new',
                                        '!new',
-                               )
+                               ),
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+usercontribs-param-show',
+                                       $this->getConfig()->get( 'RCMaxAge' )
+                               ),
                        ),
                        'tag' => null,
                        'toponly' => array(
@@ -517,53 +524,12 @@ class ApiQueryContributions extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-               $RCMaxAge = $this->getConfig()->get( 'RCMaxAge' );
-
-               return array(
-                       'limit' => 'The maximum number of contributions to return',
-                       'start' => 'The start timestamp to return from',
-                       'end' => 'The end timestamp to return to',
-                       'continue' => 'When more results are available, use this to continue',
-                       'user' => 'The users to retrieve contributions for',
-                       'userprefix' => array(
-                               "Retrieve contributions for all users whose names begin with this value.",
-                               "Overrides {$p}user",
-                       ),
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'namespace' => 'Only list contributions in these namespaces',
-                       'prop' => array(
-                               'Include additional pieces of information',
-                               ' ids            - Adds the page ID and revision ID',
-                               ' title          - Adds the title and namespace ID of the page',
-                               ' timestamp      - Adds the timestamp of the edit',
-                               ' comment        - Adds the comment of the edit',
-                               ' parsedcomment  - Adds the parsed comment of the edit',
-                               ' size           - Adds the new size of the edit',
-                               ' sizediff       - Adds the size delta of the edit against its parent',
-                               ' flags          - Adds flags of the edit',
-                               ' patrolled      - Tags patrolled edits',
-                               ' tags           - Lists tags for the edit',
-                       ),
-                       'show' => array(
-                               "Show only items that meet thse criteria, e.g. non minor edits only: {$p}show=!minor",
-                               "NOTE: If {$p}show=patrolled or {$p}show=!patrolled is set, revisions older than",
-                               "\$wgRCMaxAge ($RCMaxAge) won't be shown",
-                       ),
-                       'tag' => 'Only list revisions tagged with this tag',
-                       'toponly' => 'Only list changes which are the latest revision',
-               );
-       }
-
-       public function getDescription() {
-               return 'Get all edits by a user.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=usercontribs&ucuser=YurikBot',
-                       'api.php?action=query&list=usercontribs&ucuserprefix=217.121.114.',
+                       'action=query&list=usercontribs&ucuser=Example'
+                               => 'apihelp-query+usercontribs-example-user',
+                       'action=query&list=usercontribs&ucuserprefix=192.0.2.'
+                               => 'apihelp-query+usercontribs-example-ipprefix',
                );
        }
 
index fd5f47b..f9eb677 100644 (file)
@@ -246,45 +246,22 @@ class ApiQueryUserInfo extends ApiQueryBase {
                                        'acceptlang',
                                        'registrationdate',
                                        'unreadcount',
-                               )
-                       )
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'prop' => array(
-                               'What pieces of information to include',
-                               '  blockinfo        - Tags if the current user is blocked, by whom, and for what reason',
-                               '  hasmsg           - Adds a tag "message" if the current user has pending messages',
-                               '  groups           - Lists all the groups the current user belongs to',
-                               '  implicitgroups   - Lists all the groups the current user is automatically a member of',
-                               '  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 - 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',
-                               '  email            - Adds the user\'s email address and email authentication date',
-                               '  acceptlang       - Echoes the Accept-Language header sent by ' .
-                                       'the client in a structured format',
-                               '  registrationdate - Adds the user\'s registration date',
-                               '  unreadcount      - Adds the count of unread pages on the user\'s watchlist ' .
-                                       '(maximum ' . ( self::WL_UNREAD_LIMIT - 1 ) . '; returns "' .
-                                       self::WL_UNREAD_LIMIT . '+" if more)',
+                               ),
+                               ApiBase::PARAM_HELP_MSG => array(
+                                       'apihelp-query+userinfo-param-prop',
+                                       self::WL_UNREAD_LIMIT - 1,
+                                       self::WL_UNREAD_LIMIT . '+',
+                               ),
                        )
                );
        }
 
-       public function getDescription() {
-               return 'Get information about the current user.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&meta=userinfo',
-                       'api.php?action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg',
+                       'action=query&meta=userinfo'
+                               => 'apihelp-query+userinfo-example-simple',
+                       'action=query&meta=userinfo&uiprop=blockinfo|groups|rights|hasmsg'
+                               => 'apihelp-query+userinfo-example-data',
                );
        }
 
index c147279..6d14523 100644 (file)
@@ -314,33 +314,13 @@ class ApiQueryUsers extends ApiQueryBase {
                );
        }
 
-       public function getParamDescription() {
+       public function getExamplesMessages() {
                return array(
-                       'prop' => array(
-                               'What pieces of information to include',
-                               '  blockinfo      - Tags if the user is blocked, by whom, and for what reason',
-                               '  groups         - Lists all the groups the user(s) belongs to',
-                               '  implicitgroups - Lists all the groups a user is automatically a member of',
-                               '  rights         - Lists all the rights the user(s) has',
-                               '  editcount      - Adds the user\'s edit count',
-                               '  registration   - Adds the user\'s registration timestamp',
-                               '  emailable      - Tags if the user can and wants to receive ' .
-                                       'email through [[Special:Emailuser]]',
-                               '  gender         - Tags the gender of the user. Returns "male", "female", or "unknown"',
-                       ),
-                       'users' => 'A list of users to obtain the same information for',
-                       'token' => 'Which tokens to obtain for each user',
+                       'action=query&list=users&ususers=Example&usprop=groups|editcount|gender'
+                               => 'apihelp-query+users-example-simple',
                );
        }
 
-       public function getDescription() {
-               return 'Get information about a list of users.';
-       }
-
-       public function getExamples() {
-               return 'api.php?action=query&list=users&ususers=brion|TimStarling&usprop=groups|editcount|gender';
-       }
-
        public function getHelpUrls() {
                return 'https://www.mediawiki.org/wiki/API:Users';
        }
index efbe05e..bb6e59a 100644 (file)
@@ -455,7 +455,8 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => array(
                                        'newer',
                                        'older'
-                               )
+                               ),
+                               ApiHelp::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
@@ -512,67 +513,26 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                        'token' => array(
                                ApiBase::PARAM_TYPE => 'string'
                        ),
-                       'continue' => null,
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'allrev' => 'Include multiple revisions of the same page within given timeframe',
-                       'start' => 'The timestamp to start enumerating from',
-                       'end' => 'The timestamp to end enumerating',
-                       'namespace' => 'Filter changes to only the given namespace(s)',
-                       'user' => 'Only list changes by this user',
-                       'excludeuser' => 'Don\'t list changes by this user',
-                       'dir' => $this->getDirectionDescription( $p ),
-                       'limit' => 'How many total results to return per request',
-                       'prop' => array(
-                               'Which additional items to get (non-generator mode only).',
-                               ' ids                    - Adds revision ids and page ids',
-                               ' title                  - Adds title of the page',
-                               ' flags                  - Adds flags for the edit',
-                               ' user                   - Adds the user who made the edit',
-                               ' userid                 - Adds user id of whom made the edit',
-                               ' comment                - Adds comment of the edit',
-                               ' parsedcomment          - Adds parsed comment of the edit',
-                               ' timestamp              - Adds timestamp of the edit',
-                               ' patrol                 - Tags edits that are patrolled',
-                               ' sizes                  - Adds the old and new lengths of the page',
-                               ' notificationtimestamp  - Adds timestamp of when the user was last notified about the edit',
-                               ' loginfo                - Adds log information where appropriate',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ),
-                       'show' => array(
-                               'Show only items that meet this criteria.',
-                               "For example, to see only minor edits done by logged-in users, set {$p}show=minor|!anon"
-                       ),
-                       'type' => array(
-                               'Which types of changes to show',
-                               ' edit           - Regular page edits',
-                               ' external       - External changes',
-                               ' new            - Page creations',
-                               ' log            - Log entries',
-                       ),
-                       'owner' => 'The name of the user whose watchlist you\'d like to access',
-                       'token' => 'Give a security token (settable in preferences) to ' .
-                               'allow access to another user\'s watchlist',
-                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
-       public function getDescription() {
-               return "Get all recent changes to pages in the logged in user's watchlist.";
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=watchlist',
-                       'api.php?action=query&list=watchlist&wlprop=ids|title|timestamp|user|comment',
-                       'api.php?action=query&list=watchlist&wlallrev=&wlprop=ids|title|timestamp|user|comment',
-                       'api.php?action=query&generator=watchlist&prop=info',
-                       'api.php?action=query&generator=watchlist&gwlallrev=&prop=revisions&rvprop=timestamp|user',
-                       'api.php?action=query&list=watchlist&wlowner=Bob_Smith&wltoken=123ABC'
+                       'action=query&list=watchlist'
+                               => 'apihelp-query+watchlist-example-simple',
+                       'action=query&list=watchlist&wlprop=ids|title|timestamp|user|comment'
+                               => 'apihelp-query+watchlist-example-props',
+                       'action=query&list=watchlist&wlallrev=&wlprop=ids|title|timestamp|user|comment'
+                               => 'apihelp-query+watchlist-example-allrev',
+                       'action=query&generator=watchlist&prop=info'
+                               => 'apihelp-query+watchlist-example-generator',
+                       'action=query&generator=watchlist&gwlallrev=&prop=revisions&rvprop=timestamp|user'
+                               => 'apihelp-query+watchlist-example-generator-rev',
+                       'action=query&list=watchlist&wlowner=Example&wltoken=123ABC'
+                               => 'apihelp-query+watchlist-example-wlowner',
                );
        }
 
index 6b2223a..71ce27f 100644 (file)
@@ -131,7 +131,9 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
 
        public function getAllowedParams() {
                return array(
-                       'continue' => null,
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                        'namespace' => array(
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => 'namespace'
@@ -168,35 +170,17 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                                        'ascending',
                                        'descending'
                                ),
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-direction',
                        ),
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'continue' => 'When more results are available, use this to continue',
-                       'namespace' => 'Only list pages in the given namespace(s)',
-                       'limit' => 'How many total results to return per request',
-                       'prop' => array(
-                               'Which additional properties to get (non-generator mode only)',
-                               ' changed  - Adds timestamp of when the user was last notified about the edit',
-                       ),
-                       'show' => 'Only list items that meet these criteria',
-                       'owner' => 'The name of the user whose watchlist you\'d like to access',
-                       'token' => 'Give a security token (settable in preferences) to allow ' .
-                               'access to another user\'s watchlist',
-                       'dir' => 'Direction to sort the titles and namespaces in',
-               );
-       }
-
-       public function getDescription() {
-               return "Get all pages on the logged in user's watchlist.";
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=query&list=watchlistraw',
-                       'api.php?action=query&generator=watchlistraw&gwrshow=changed&prop=revisions',
+                       'action=query&list=watchlistraw'
+                               => 'apihelp-query+watchlistraw-example-simple',
+                       'action=query&generator=watchlistraw&gwrshow=changed&prop=info'
+                               => 'apihelp-query+watchlistraw-example-generator',
                );
        }
 
index cbc3070..5107455 100644 (file)
@@ -199,34 +199,18 @@ class ApiRevisionDelete extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'type' => 'Type of revision deletion being performed',
-                       'target' => 'Page title for the revision deletion, if required for the type',
-                       'ids' => 'Identifiers for the revisions to be deleted',
-                       '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',
-                       'reason' => 'Reason for the deletion/undeletion',
-               );
-       }
-
-       public function getDescription() {
-               return 'Delete/undelete revisions.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=revisiondelete&target=Main%20Page&type=revision&ids=12345&' .
+                       'action=revisiondelete&target=Main%20Page&type=revision&ids=12345&' .
                                'hide=content&token=123ABC'
-                               => 'Hide content for revision 12345 on the Main Page',
-                       'api.php?action=revisiondelete&type=logging&ids=67890&hide=content|comment|user&' .
+                               => 'apihelp-revisiondelete-example-revision',
+                       'action=revisiondelete&type=logging&ids=67890&hide=content|comment|user&' .
                                'reason=BLP%20violation&token=123ABC'
-                               => 'Hide all data on log entry 67890 with the reason "BLP violation"',
+                               => 'apihelp-revisiondelete-example-log',
                );
        }
 
index f4d3c54..471fb43 100644 (file)
@@ -120,31 +120,10 @@ class ApiRollback extends ApiBase {
                                        'nochange'
                                ),
                        ),
-               );
-       }
-
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               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.',
                        'token' => array(
-                               /* Standard description automatically prepended */
-                               'For compatibility, the token used in the web UI is also accepted.'
+                               // Standard definition automatically inserted
+                               ApiBase::PARAM_HELP_MSG_APPEND => array( 'api-help-param-token-webui' ),
                        ),
-                       '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, ' .
-                               'use preferences or do not change watch',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Undo the last edit to the page. If the last user who edited the page made',
-                       'multiple edits in a row, they will all be rolled back.'
                );
        }
 
@@ -211,12 +190,13 @@ class ApiRollback extends ApiBase {
                return $this->mTitleObj;
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=rollback&title=Main%20Page&user=Catrope&token=123ABC',
-                       'api.php?action=rollback&pageid=122&user=Catrope&token=123ABC',
-                       'api.php?action=rollback&title=Main%20Page&user=217.121.114.116&' .
-                               'token=123ABC&summary=Reverting%20vandalism&markbot=1'
+                       'action=rollback&title=Main%20Page&user=Example&token=123ABC' =>
+                               'apihelp-rollback-example-simple',
+                       'action=rollback&title=Main%20Page&user=192.0.2.5&' .
+                               'token=123ABC&summary=Reverting%20vandalism&markbot=1' =>
+                               'apihelp-rollback-example-summary',
                );
        }
 
index a2771a0..d32b0dd 100644 (file)
@@ -51,21 +51,10 @@ class ApiRsd extends ApiBase {
                return new ApiFormatXmlRsd( $this->getMain(), 'xml' );
        }
 
-       public function getAllowedParams() {
-               return array();
-       }
-
-       public function getParamDescription() {
-               return array();
-       }
-
-       public function getDescription() {
-               return 'Export an RSD (Really Simple Discovery) schema.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=rsd'
+                       'action=rsd'
+                               => 'apihelp-rsd-example-simple',
                );
        }
 
index 5d527fc..ed3ea15 100644 (file)
@@ -219,7 +219,9 @@ class ApiSetNotificationTimestamp extends ApiBase {
                        'newerthanrevid' => array(
                                ApiBase::PARAM_TYPE => 'integer'
                        ),
-                       'continue' => '',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -228,34 +230,17 @@ class ApiSetNotificationTimestamp extends ApiBase {
                return $result;
        }
 
-       public function getParamDescription() {
-               return $this->getPageSet()->getFinalParamDescription() + array(
-                       'entirewatchlist' => 'Work on all watched pages',
-                       '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)',
-                       'continue' => 'When more results are available, use this to continue',
-               );
-       }
-
-       public function getDescription() {
-               return array( 'Update the notification timestamp for watched pages.',
-                       'This affects the highlighting of changed pages in the watchlist and history,',
-                       'and the sending of email when the "Email me when a page on my watchlist is',
-                       'changed" preference is enabled.'
-               );
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=setnotificationtimestamp&entirewatchlist=&token=123ABC'
-                               => 'Reset the notification status for the entire watchlist',
-                       'api.php?action=setnotificationtimestamp&titles=Main_page&token=123ABC'
-                               => 'Reset the notification status for "Main page"',
-                       'api.php?action=setnotificationtimestamp&titles=Main_page&' .
+                       'action=setnotificationtimestamp&entirewatchlist=&token=123ABC'
+                               => 'apihelp-setnotificationtimestamp-example-all',
+                       'action=setnotificationtimestamp&titles=Main_page&token=123ABC'
+                               => 'apihelp-setnotificationtimestamp-example-page',
+                       'action=setnotificationtimestamp&titles=Main_page&' .
                                'timestamp=2012-01-01T00:00:00Z&token=123ABC'
-                               => 'Set the notification timestamp for "Main page" so all edits ' .
-                                       'since 1 January 2012 are unviewed',
+                               => 'apihelp-setnotificationtimestamp-example-pagetimestamp',
+                       'action=setnotificationtimestamp&generator=allpages&gapnamespace=2&token=123ABC'
+                               => 'apihelp-setnotificationtimestamp-example-allpages',
                );
        }
 
index e5e9d5d..2a60af9 100644 (file)
@@ -91,23 +91,12 @@ class ApiTokens extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
+       protected function getExamplesMessages() {
                return array(
-                       'type' => 'Type of token(s) to request'
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'This module is deprecated in favor of action=query&meta=tokens.',
-                       'Gets tokens for data-modifying actions.'
-               );
-       }
-
-       protected function getExamples() {
-               return array(
-                       'api.php?action=tokens' => 'Retrieve an edit token (the default)',
-                       'api.php?action=tokens&type=email|move' => 'Retrieve an email token and a move token'
+                       'action=tokens'
+                               => 'apihelp-tokens-example-edit',
+                       'action=tokens&type=email|move'
+                               => 'apihelp-tokens-example-emailmove',
                );
        }
 }
index 2854a82..fb41839 100644 (file)
@@ -93,30 +93,16 @@ class ApiUnblock extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               $p = $this->getModulePrefix();
-
-               return array(
-                       'id' => "ID of the block you want to unblock (obtained through list=blocks). " .
-                               "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",
-                       'reason' => 'Reason for unblock',
-               );
-       }
-
-       public function getDescription() {
-               return 'Unblock a user.';
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=unblock&id=105',
-                       'api.php?action=unblock&user=Bob&reason=Sorry%20Bob'
+                       'action=unblock&id=105'
+                               => 'apihelp-unblock-example-id',
+                       'action=unblock&user=Bob&reason=Sorry%20Bob'
+                               => 'apihelp-unblock-example-user',
                );
        }
 
index 07aad9f..39b63f4 100644 (file)
@@ -117,39 +117,17 @@ class ApiUndelete extends ApiBase {
                );
        }
 
-       public function getParamDescription() {
-               return array(
-                       'title' => 'Title of the page you want to restore',
-                       'reason' => 'Reason for restoring',
-                       'timestamps' => array(
-                               'Timestamps of the revisions to restore.',
-                               'If both timestamps and fileids are empty, all will be restored.',
-                       ),
-                       'fileids' => array(
-                               'IDs of the file revisions to restore.',
-                               'If both timestamps and fileids are empty, all will be restored.',
-                       ),
-                       'watchlist' => 'Unconditionally add or remove the page from your ' .
-                               'watchlist, use preferences or do not change watch',
-               );
-       }
-
-       public function getDescription() {
-               return array(
-                       'Restore certain revisions of a deleted page. A list of deleted revisions ',
-                       '(including timestamps) can be retrieved through list=deletedrevs, and a list',
-                       'of deleted file ids can be retrieved through list=filearchive.'
-               );
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=undelete&title=Main%20Page&token=123ABC&reason=Restoring%20main%20page',
-                       'api.php?action=undelete&title=Main%20Page&token=123ABC&timestamps=20070703220045|20070702194856'
+                       'action=undelete&title=Main%20Page&token=123ABC&reason=Restoring%20main%20page'
+                               => 'apihelp-undelete-example-page',
+                       'action=undelete&title=Main%20Page&token=123ABC' .
+                               '&timestamps=2007-07-03T22:00:45Z|2007-07-02T19:48:56Z'
+                               => 'apihelp-undelete-example-revisions',
                );
        }
 
index 2770bdc..8cf53d7 100644 (file)
@@ -732,59 +732,17 @@ class ApiUpload extends ApiBase {
                return $params;
        }
 
-       public function getParamDescription() {
-               $params = array(
-                       'filename' => 'Target filename',
-                       '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',
-                       'watch' => 'Watch the page',
-                       'watchlist' => 'Unconditionally add or remove the page from your watchlist, ' .
-                               'use preferences or do not change watch',
-                       'ignorewarnings' => 'Ignore any warnings',
-                       'file' => 'File contents',
-                       'url' => 'URL to fetch the file from',
-                       'filekey' => 'Key that identifies a previous upload that was stashed temporarily.',
-                       'sessionkey' => 'Same as filekey, maintained for backward compatibility.',
-                       'stash' => 'If set, the server will not add the file to the repository ' .
-                               'and stash it temporarily.',
-
-                       'chunk' => 'Chunk contents',
-                       'offset' => 'Offset of chunk in bytes',
-                       'filesize' => 'Filesize of entire upload',
-
-                       'async' => 'Make potentially large file operations asynchronous when possible',
-                       'asyncdownload' => 'Make fetching a URL asynchronous',
-                       'leavemessage' => 'If asyncdownload is used, leave a message on the user talk page if finished',
-                       'statuskey' => 'Fetch the upload status for this file key (upload by URL)',
-                       'checkstatus' => 'Only fetch the upload status for the given file key',
-               );
-
-               return $params;
-       }
-
-       public function getDescription() {
-               return array(
-                       'Upload a file, or get the status of pending uploads. Several methods are available:',
-                       ' * Upload file contents directly, using the "file" parameter',
-                       ' * 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".',
-               );
-       }
-
        public function needsToken() {
                return 'csrf';
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=upload&filename=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&token=123ABC'
-                               => 'Complete an upload that failed due to warnings',
+                       'action=upload&filename=Wiki.png' .
+                               '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png&token=123ABC'
+                               => 'apihelp-upload-example-url',
+                       'action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1&token=123ABC'
+                               => 'apihelp-upload-example-filekey',
                );
        }
 
index 66af4c5..7e93c3e 100644 (file)
@@ -119,28 +119,14 @@ class ApiUserrights extends ApiBase {
                        ),
                        'reason' => array(
                                ApiBase::PARAM_DFLT => ''
-                       )
-               );
-       }
-
-       public function getParamDescription() {
-               return array(
-                       'user' => 'User name',
-                       'userid' => 'User id',
-                       'add' => 'Add the user to these groups',
-                       'remove' => 'Remove the user from these groups',
+                       ),
                        'token' => array(
-                               /* Standard description automatically prepended */
-                               'For compatibility, the token used in the web UI is also accepted.'
+                               // Standard definition automatically inserted
+                               ApiBase::PARAM_HELP_MSG_APPEND => array( 'api-help-param-token-webui' ),
                        ),
-                       'reason' => 'Reason for the change',
                );
        }
 
-       public function getDescription() {
-               return 'Add/remove a user to/from groups.';
-       }
-
        public function needsToken() {
                return 'userrights';
        }
@@ -149,10 +135,12 @@ class ApiUserrights extends ApiBase {
                return $this->getUrUser( $params )->getName();
        }
 
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=userrights&user=FooBot&add=bot&remove=sysop|bureaucrat&token=123ABC',
-                       'api.php?action=userrights&userid=123&add=bot&remove=sysop|bureaucrat&token=123ABC'
+                       'action=userrights&user=FooBot&add=bot&remove=sysop|bureaucrat&token=123ABC'
+                               => 'apihelp-userrights-example-user',
+                       'action=userrights&userid=123&add=bot&remove=sysop|bureaucrat&token=123ABC'
+                               => 'apihelp-userrights-example-userid',
                );
        }
 
index 8cd0f05..3ba06e1 100644 (file)
@@ -161,7 +161,9 @@ class ApiWatch extends ApiBase {
                                ApiBase::PARAM_DEPRECATED => true
                        ),
                        'unwatch' => false,
-                       'continue' => '',
+                       'continue' => array(
+                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
+                       ),
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -170,24 +172,14 @@ class ApiWatch extends ApiBase {
                return $result;
        }
 
-       public function getParamDescription() {
-               $psModule = $this->getPageSet();
-
-               return $psModule->getParamDescription() + array(
-                       'title' => 'The page to (un)watch. use titles instead',
-                       'unwatch' => 'If set the page will be unwatched rather than watched',
-                       'continue' => 'When more results are available, use this to continue',
-               );
-       }
-
-       public function getDescription() {
-               return 'Add or remove pages from/to the current user\'s watchlist.';
-       }
-
-       public function getExamples() {
+       public function getExamplesMessages() {
                return array(
-                       'api.php?action=watch&titles=Main_Page' => 'Watch the page "Main Page"',
-                       'api.php?action=watch&titles=Main_Page&unwatch=' => 'Unwatch the page "Main Page"',
+                       'action=watch&titles=Main_Page&token=123ABC'
+                               => 'apihelp-watch-example-watch',
+                       'action=watch&titles=Main_Page&unwatch=&token=123ABC'
+                               => 'apihelp-watch-example-unwatch',
+                       'action=watch&generator=allpages&gapnamespace=0&token=123ABC'
+                               => 'apihelp-watch-example-generator',
                );
        }
 
index 6c45425..82a2c91 100644 (file)
        "apihelp-main-param-origin": "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 therefore must be part of the request URI (not the POST body). This must match one of the origins in the Origin: header exactly, so it has to be set to something like http://en.wikipedia.org or https://meta.wikimedia.org. If this parameter does not match the Origin: header, a 403 response will be returned. If this parameter matches the Origin: header and the origin is whitelisted, an Access-Control-Allow-Origin header will be set.",
        "apihelp-main-param-uselang": "Language to use for message translations. A list of codes may be fetched from [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo&siprop=languages]], or specify \"user\" to use the current user's language preference.",
 
+       "apihelp-block-description": "Block a user.",
+       "apihelp-block-param-user": "Username, IP address or IP range you want to block.",
+       "apihelp-block-param-expiry": "Expiry time. May be relative (e.g. \"5 months\" or \"2 weeks\") or absolute (e.g. \"2014-09-18T12:34:56Z\"). If set to \"infinite\", \"indefinite\" or \"never\", the block will never expire.",
+       "apihelp-block-param-reason": "Reason for block.",
+       "apihelp-block-param-anononly": "Block anonymous users only (i.e. disable anonymous edits for this IP).",
+       "apihelp-block-param-nocreate": "Prevent account creation.",
+       "apihelp-block-param-autoblock": "Automatically block the last used IP address, and any subsequent IP addresses they try to login from.",
+       "apihelp-block-param-noemail": "Prevent user from sending email through the wiki. (Requires the \"blockemail\" right).",
+       "apihelp-block-param-hidename": "Hide the username from the block log. (Requires the \"hideuser\" right).",
+       "apihelp-block-param-allowusertalk": "Allow the user to edit their own talk page (depends on $wgBlockAllowsUTEdit).",
+       "apihelp-block-param-reblock": "If the user is already blocked, overwrite the existing block.",
+       "apihelp-block-param-watchuser": "Watch the user's or IP's user and talk pages.",
+       "apihelp-block-example-ip-simple": "Block IP 192.0.2.5 for three days with reason \"First strike\"",
+       "apihelp-block-example-user-complex": "Block user Vandal indefinitely with reason \"Vandalism\", and prevent new account creation and email",
+
+       "apihelp-clearhasmsg-description": "Clears the hasmsg flag for current user.",
+       "apihelp-clearhasmsg-example-1": "Clear the hasmsg flag for current user",
+
+       "apihelp-compare-description": "Get the difference between 2 pages.\n\nYou must pass a revision number, a page title, or a page ID for both \"from\" and \"to\".",
+       "apihelp-compare-param-fromtitle": "First title to compare.",
+       "apihelp-compare-param-fromid": "First page ID to compare.",
+       "apihelp-compare-param-fromrev": "First revision to compare.",
+       "apihelp-compare-param-totitle": "Second title to compare.",
+       "apihelp-compare-param-toid": "Second page ID to compare.",
+       "apihelp-compare-param-torev": "Second revision to compare.",
+       "apihelp-compare-example-1": "Create a diff between revision 1 and 2",
+
+       "apihelp-createaccount-description": "Create a new user account.",
+       "apihelp-createaccount-param-name": "Username.",
+       "apihelp-createaccount-param-password": "Password (ignored if $1mailpassword is set).",
+       "apihelp-createaccount-param-domain": "Domain for external authentication (optional).",
+       "apihelp-createaccount-param-token": "Account creation token obtained in first request.",
+       "apihelp-createaccount-param-email": "Email address of user (optional).",
+       "apihelp-createaccount-param-realname": "Real name of user (optional).",
+       "apihelp-createaccount-param-mailpassword": "If set to any value, a random password will be emailed to the user.",
+       "apihelp-createaccount-param-reason": "Optional reason for creating the account to be put in the logs.",
+       "apihelp-createaccount-param-language": "Language code to set as default for the user (optional, defaults to content language).",
+       "apihelp-createaccount-example-pass": "Create user \"testuser\" with password \"test123\"",
+       "apihelp-createaccount-example-mail": "Create user \"testmailuser\" and email a randomly-generated password",
+
+       "apihelp-delete-description": "Delete a page.",
+       "apihelp-delete-param-title": "Title of the page you want to delete. Cannot be used together with $1pageid.",
+       "apihelp-delete-param-pageid": "Page ID of the page you want to delete. Cannot be used together with $1title.",
+       "apihelp-delete-param-reason": "Reason for the deletion. If not set, an automatically generated reason will be used.",
+       "apihelp-delete-param-watch": "Add the page to your watchlist.",
+       "apihelp-delete-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-delete-param-unwatch": "Remove the page from your watchlist.",
+       "apihelp-delete-param-oldimage": "The name of the old image to delete as provided by [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
+       "apihelp-delete-example-simple": "Delete the Main Page",
+       "apihelp-delete-example-reason": "Delete the Main Page with the reason \"Preparing for move\"",
+
+       "apihelp-disabled-description": "This module has been disabled.",
+
+       "apihelp-edit-description": "Create and edit pages.",
+       "apihelp-edit-param-title": "Title of the page you want to edit. Cannot be used together with $1pageid.",
+       "apihelp-edit-param-pageid": "Page ID of the page you want to edit. Cannot be used together with $1title.",
+       "apihelp-edit-param-section": "Section number. 0 for the top section, \"new\" for a new section.",
+       "apihelp-edit-param-sectiontitle": "The title for a new section.",
+       "apihelp-edit-param-text": "Page content.",
+       "apihelp-edit-param-summary": "Edit summary. Also section title when $1section=new and $1sectiontitle is not set.",
+       "apihelp-edit-param-minor": "Minor edit.",
+       "apihelp-edit-param-notminor": "Non-minor edit.",
+       "apihelp-edit-param-bot": "Mark this edit as bot.",
+       "apihelp-edit-param-basetimestamp": "Timestamp of the base revision, used to detect edit conflicts. May be obtained through [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
+       "apihelp-edit-param-starttimestamp": "Timestamp when you began the editing process, used to detect edit conflicts. An appropriate value may be obtained using [[Special:ApiHelp/main|curtimestamp]] when beginning the edit process (e.g. when loading the page content to edit).",
+       "apihelp-edit-param-recreate": "Override any errors about the article having been deleted in the meantime.",
+       "apihelp-edit-param-createonly": "Don't edit the page if it exists already.",
+       "apihelp-edit-param-nocreate": "Throw an error if the page doesn't exist.",
+       "apihelp-edit-param-watch": "Add the page to your watchlist.",
+       "apihelp-edit-param-unwatch": "Remove the page from your watchlist.",
+       "apihelp-edit-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-edit-param-md5": "The MD5 hash of the $1text parameter, or the $1prependtext and $1appendtext parameters concatenated. If set, the edit won't be done unless the hash is correct.",
+       "apihelp-edit-param-prependtext": "Add this text to the beginning of the page. Overrides $1text.",
+       "apihelp-edit-param-appendtext": "Add this text to the end of the page. Overrides $1text.\n\nUse $1section=new to append a new section, rather than this parameter.",
+       "apihelp-edit-param-undo": "Undo this revision. Overrides $1text, $1prependtext and $1appendtext.",
+       "apihelp-edit-param-undoafter": "Undo all revisions from $1undo to this one. If not set, just undo one revision.",
+       "apihelp-edit-param-redirect": "Automatically resolve redirects.",
+       "apihelp-edit-param-contentformat": "Content serialization format used for the input text.",
+       "apihelp-edit-param-contentmodel": "Content model of the new content.",
+       "apihelp-edit-param-token": "The token should always be sent as the last parameter, or at least after the $1text parameter.",
+       "apihelp-edit-example-edit": "Edit a page",
+       "apihelp-edit-example-prepend": "Prepend _&#95;NOTOC_&#95; to a page",
+       "apihelp-edit-example-undo": "Undo revisions 13579 through 13585 with autosummary",
+
+       "apihelp-emailuser-description": "Email a user.",
+       "apihelp-emailuser-param-target": "User to send email to.",
+       "apihelp-emailuser-param-subject": "Subject header.",
+       "apihelp-emailuser-param-text": "Mail body.",
+       "apihelp-emailuser-param-ccme": "Send a copy of this mail to me.",
+       "apihelp-emailuser-example-email": "Send an email to the User \"WikiSysop\" with the text \"Content\"",
+
+       "apihelp-expandtemplates-description": "Expands all templates in wikitext.",
+       "apihelp-expandtemplates-param-title": "Title of page.",
+       "apihelp-expandtemplates-param-text": "Wikitext to convert.",
+       "apihelp-expandtemplates-param-prop": "Which pieces of information to get:\n;wikitext:The expanded wikitext.\n;categories:Any categories present in the input that are not represented in the wikitext output.\n;volatile:Whether the output is volatile and should not be reused elsewhere within the page.\n;ttl:The maximum time after which caches of the result should be invalidated.\n;parsetree:The XML parse tree of the input.\nNote that if no values are selected, the result will contain the wikitext, but the output will be in a deprecated format.",
+       "apihelp-expandtemplates-param-includecomments": "Whether to include HTML comments in the output.",
+       "apihelp-expandtemplates-param-generatexml": "Generate XML parse tree (replaced by $1prop=parsetree).",
+       "apihelp-expandtemplates-example-simple": "Expand the wikitext \"<nowiki>{{Project:Sandbox}}</nowiki>\"",
+
+       "apihelp-feedcontributions-description": "Returns a user contributions feed.",
+       "apihelp-feedcontributions-param-feedformat": "The format of the feed.",
+       "apihelp-feedcontributions-param-user": "What users to get the contributions for.",
+       "apihelp-feedcontributions-param-namespace": "Which namespace to filter the contributions by.",
+       "apihelp-feedcontributions-param-year": "From year (and earlier).",
+       "apihelp-feedcontributions-param-month": "From month (and earlier).",
+       "apihelp-feedcontributions-param-tagfilter": "Filter contributions that have these tags.",
+       "apihelp-feedcontributions-param-deletedonly": "Show only deleted contributions.",
+       "apihelp-feedcontributions-param-toponly": "Only show edits that are latest revisions.",
+       "apihelp-feedcontributions-param-newonly": "Only show edits that are page creations.",
+       "apihelp-feedcontributions-param-showsizediff": "Show the size difference between revisions.",
+       "apihelp-feedcontributions-example-simple": "Return contributions for [[User:Example]]",
+
+       "apihelp-feedrecentchanges-description": "Returns a recent changes feed.",
+       "apihelp-feedrecentchanges-param-feedformat": "The format of the feed.",
+       "apihelp-feedrecentchanges-param-namespace": "Namespace to limit the results to.",
+       "apihelp-feedrecentchanges-param-invert": "All namespaces but the selected one.",
+       "apihelp-feedrecentchanges-param-associated": "Include associated (talk or main) namespace.",
+       "apihelp-feedrecentchanges-param-days": "Days to limit the results to.",
+       "apihelp-feedrecentchanges-param-limit": "Maximum number of results to return.",
+       "apihelp-feedrecentchanges-param-from": "Show changes since then.",
+       "apihelp-feedrecentchanges-param-hideminor": "Hide minor changes.",
+       "apihelp-feedrecentchanges-param-hidebots": "Hide changes made by bots.",
+       "apihelp-feedrecentchanges-param-hideanons": "Hide changes made by anonymous users.",
+       "apihelp-feedrecentchanges-param-hideliu": "Hide changes made by registered users.",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "Hide patrolled changes.",
+       "apihelp-feedrecentchanges-param-hidemyself": "Hide changes made by yourself.",
+       "apihelp-feedrecentchanges-param-tagfilter": "Filter by tag.",
+       "apihelp-feedrecentchanges-param-target": "Show only changes on pages linked from this page.",
+       "apihelp-feedrecentchanges-param-showlinkedto": "Show changes on pages linked to the selected page instead.",
+       "apihelp-feedrecentchanges-example-simple": "Show recent changes",
+       "apihelp-feedrecentchanges-example-30days": "Show recent changes for 30 days",
+
+       "apihelp-feedwatchlist-description": "Returns a watchlist feed.",
+       "apihelp-feedwatchlist-param-feedformat": "The format of the feed.",
+       "apihelp-feedwatchlist-param-hours": "List pages modified within this many hours from now.",
+       "apihelp-feedwatchlist-param-linktosections": "Link directly to changed sections if possible.",
+       "apihelp-feedwatchlist-example-default": "Show the watchlist feed",
+       "apihelp-feedwatchlist-example-all6hrs": "Show all changes to watched pages in the past 6 hours",
+
+       "apihelp-filerevert-description": "Revert a file to an old version.",
+       "apihelp-filerevert-param-filename": "Target filename, without the File: prefix.",
+       "apihelp-filerevert-param-comment": "Upload comment.",
+       "apihelp-filerevert-param-archivename": "Archive name of the revision to revert to.",
+       "apihelp-filerevert-example-revert": "Revert Wiki.png to the version of 2011-03-05T15:27:40Z",
+
+       "apihelp-help-description": "Display help for the specified modules.",
+       "apihelp-help-param-modules": "Modules to display help for (values of the action= and format= parameters, or \"main\"). Can specify submodules with a \"+\".",
+       "apihelp-help-param-submodules": "Include help for submodules of the named module.",
+       "apihelp-help-param-recursivesubmodules": "Include help for submodules recursively.",
+       "apihelp-help-param-helpformat": "Format of the help output.",
+       "apihelp-help-param-wrap": "Wrap the output in a standard API response structure.",
+       "apihelp-help-param-toc": "Include a table of contents in the HTML output.",
+       "apihelp-help-example-main": "Help for the main module",
+       "apihelp-help-example-recursive": "All help in one page",
+       "apihelp-help-example-help": "Help for the help module itself",
+       "apihelp-help-example-query": "Help for two query submodules",
+
+       "apihelp-imagerotate-description": "Rotate one or more images.",
+       "apihelp-imagerotate-param-rotation": "Degrees to rotate image clockwise.",
+       "apihelp-imagerotate-example-simple": "Rotate [[:File:Example.png]] by 90 degrees",
+       "apihelp-imagerotate-example-generator": "Rotate all images in [[:Category:Flip]] by 180 degrees",
+
+       "apihelp-import-description": "Import a page from another wiki, or an XML file.\n\nNote that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when sending a file for the \"xml\" parameter.",
+       "apihelp-import-param-summary": "Import summary.",
+       "apihelp-import-param-xml": "Uploaded XML file.",
+       "apihelp-import-param-interwikisource": "For interwiki imports: wiki to import from.",
+       "apihelp-import-param-interwikipage": "For interwiki imports: page to import.",
+       "apihelp-import-param-fullhistory": "For interwiki imports: import the full history, not just the current version.",
+       "apihelp-import-param-templates": "For interwiki imports: import all included templates as well.",
+       "apihelp-import-param-namespace": "For interwiki imports: import to this namespace.",
+       "apihelp-import-param-rootpage": "Import as subpage of this page.",
+       "apihelp-import-example-import": "Import [[meta:Help:Parserfunctions]] to namespace 100 with full history.",
+
+       "apihelp-login-description": "Log in and get authentication cookies.\n\nIn the event of a successful log-in, the needed cookies will be included in the HTTP response headers. In the event of a failed log-in, further attempts may be throttled to limit automated password guessing attacks.",
+       "apihelp-login-param-name": "User name.",
+       "apihelp-login-param-password": "Password.",
+       "apihelp-login-param-domain": "Domain (optional).",
+       "apihelp-login-param-token": "Login token obtained in first request.",
+       "apihelp-login-example-gettoken": "Retrieve a login token",
+       "apihelp-login-example-login": "Log in",
+
+       "apihelp-logout-description": "Log out and clear session data.",
+       "apihelp-logout-example-logout": "Log the current user out",
+
+       "apihelp-move-description": "Move a page.",
+       "apihelp-move-param-from": "Title of the page you want to move. Cannot be used together with $1fromid.",
+       "apihelp-move-param-fromid": "Page ID of the page you want to move. Cannot be used together with $1from.",
+       "apihelp-move-param-to": "Title you want to rename the page to.",
+       "apihelp-move-param-reason": "Reason for the move.",
+       "apihelp-move-param-movetalk": "Move the talk page, if it exists.",
+       "apihelp-move-param-movesubpages": "Move subpages, if applicable.",
+       "apihelp-move-param-noredirect": "Don't create a redirect.",
+       "apihelp-move-param-watch": "Add the page and the redirect to your watchlist.",
+       "apihelp-move-param-unwatch": "Remove the page and the redirect from your watchlist.",
+       "apihelp-move-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-move-param-ignorewarnings": "Ignore any warnings.",
+       "apihelp-move-example-move": "Move \"Badtitle\" to \"Goodtitle\" without leaving a redirect",
+
+       "apihelp-opensearch-description": "Search the wiki using the OpenSearch protocol.",
+       "apihelp-opensearch-param-search": "Search string.",
+       "apihelp-opensearch-param-limit": "Maximum number of results to return.",
+       "apihelp-opensearch-param-namespace": "Namespaces to search.",
+       "apihelp-opensearch-param-suggest": "Do nothing if [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] is false.",
+       "apihelp-opensearch-param-format": "The format of the output.",
+       "apihelp-opensearch-example-te": "Find pages beginning with \"Te\"",
+
+       "apihelp-options-description": "Change preferences of the current user.\n\nOnly options which are registered in core or in one of installed extensions, or options with keys prefixed with \"userjs-\" (intended to be used by user scripts), can be set.",
+       "apihelp-options-param-reset": "Resets preferences to the site defaults.",
+       "apihelp-options-param-resetkinds": "List of types of options to reset when the \"$1reset\" option is set.",
+       "apihelp-options-param-change": "List of changes, formatted name=value (e.g. skin=vector). Value cannot contain pipe characters. If no value is given (not even an equals sign), e.g., optionname|otheroption|..., the option will be reset to its default value.",
+       "apihelp-options-param-optionname": "A name of a option which should be set to the value given by \"$1optionvalue\".",
+       "apihelp-options-param-optionvalue": "A value of the option specified by \"$1optionname\", can contain pipe characters.",
+       "apihelp-options-example-reset": "Reset all preferences",
+       "apihelp-options-example-change": "Change \"skin\" and \"hideminor\" preferences",
+       "apihelp-options-example-complex": "Reset all preferences, then set \"skin\" and \"nickname\"",
+
+       "apihelp-paraminfo-description": "Obtain information about API modules.",
+       "apihelp-paraminfo-param-modules": "List of module names (values of the action= and format= parameters, or \"main\"). Can specify submodules with a \"+\".",
+       "apihelp-paraminfo-param-helpformat": "Format of help strings.",
+       "apihelp-paraminfo-param-querymodules": "List of query module names (value of prop=, meta= or list= parameter). Use \"$1modules=query+foo\" instead of \"$1querymodules=foo\".",
+       "apihelp-paraminfo-param-mainmodule": "Get information about the main (top-level) module as well. Use \"$1modules=main\" instead.",
+       "apihelp-paraminfo-param-pagesetmodule": "Get information about the pageset module (providing titles= and friends) as well.",
+       "apihelp-paraminfo-param-formatmodules": "List of format module names (value of format= parameter). Use \"$1modules\" instead.",
+       "apihelp-paraminfo-example-1": "Show info for [[Special:ApiHelp/parse|action=parse]], [[Special:ApiHelp/jsonfm|format=jsonfm]], [[Special:ApiHelp/query+allpages|action=query&list=allpages]], and [[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]",
+
+       "apihelp-parse-description": "Parses content and returns parser output.\n\nSee the various prop-modules of [[Special:ApiHelp/query|action=query]] to get information from the current version of a page.\n\nThere are several ways to specify the text to parse:\n# Specify a page or revision, using $1page, $1pageid, or $1oldid.\n# Specify content explicitly, using $1text, $1title, and $1contentmodel.\n# Specify only a summary to parse. $1prop should be given an empty value.",
+       "apihelp-parse-param-title": "Title of page the text belongs to. If omitted, $1contentmodel must be specified, and \"[[API]]\" will be used as the title.",
+       "apihelp-parse-param-text": "Text to parse. Use $1title or $1contentmodel to control the content model.",
+       "apihelp-parse-param-summary": "Summary to parse.",
+       "apihelp-parse-param-page": "Parse the content of this page. Cannot be used together with $1text and $1title.",
+       "apihelp-parse-param-pageid": "Parse the content of this page. Overrides $1page.",
+       "apihelp-parse-param-redirects": "If the $1page or the $1pageid parameter is set to a redirect, resolve it.",
+       "apihelp-parse-param-oldid": "Parse the content of this revision. Overrides $1page and $1pageid.",
+       "apihelp-parse-param-prop": "Which pieces of information to get:\n;text:Gives the parsed text of the wikitext.\n;langlinks:Gives the language links in the parsed wikitext.\n;categories:Gives the categories in the parsed wikitext.\n;categorieshtml:Gives the HTML version of the categories.\n;links:Gives the internal links in the parsed wikitext.\n;templates:Gives the templates in the parsed wikitext.\n;images:Gives the images in the parsed wikitext.\n;externallinks:Gives the external links in the parsed wikitext.\n;sections:Gives the sections in the parsed wikitext.\n;revid:Adds the revision ID of the parsed page.\n;displaytitle:Adds the title of the parsed wikitext.\n;headitems:Gives items to put in the &lt;head&gt; of the page.\n;headhtml:Gives parsed &lt;head&gt; of the page.\n;modules:Gives the ResourceLoader modules used on the page.\n;indicators:Gives the HTML of page status indicators used on the page.\n;iwlinks:Gives interwiki links in the parsed wikitext.\n;wikitext:Gives the original wikitext that was parsed.\n;properties:Gives various properties defined in the parsed wikitext.\n;limitreportdata:Gives the limit report in a structured way. Gives no data, when $1disablepp is set.\n;limitreporthtml:Gives the HTML version of the limit report. Gives no data, when $1disablepp is set.",
+       "apihelp-parse-param-pst": "Do a pre-save transform on the input before parsing it. Only valid when used with text.",
+       "apihelp-parse-param-onlypst": "Do a pre-save transform (PST) on the input, but don't parse it Returns the same wikitext, after a PST has been applied. Only valid when used with $1text.",
+       "apihelp-parse-param-effectivelanglinks": "Includes language links supplied by extensions (for use with $1prop=langlinks).",
+       "apihelp-parse-param-section": "Only retrieve the content of this section number.",
+       "apihelp-parse-param-disablepp": "Disable the PP Report from the parser output.",
+       "apihelp-parse-param-disableeditsection": "Disable edit section links from the parser output.",
+       "apihelp-parse-param-generatexml": "Generate XML parse tree (requires content model \"$1\").",
+       "apihelp-parse-param-preview": "Parse in preview mode.",
+       "apihelp-parse-param-sectionpreview": "Parse in section preview mode (enables preview mode too).",
+       "apihelp-parse-param-disabletoc": "Disable table of contents in output.",
+       "apihelp-parse-param-contentformat": "Content serialization format used for the input text. Only valid when used with $1text.",
+       "apihelp-parse-param-contentmodel": "Content model of the input text. If omitted, $1title must be specified, and default will be the model of the specified title. Only valid when used with $1text.",
+       "apihelp-parse-example-page": "Parse a page.",
+       "apihelp-parse-example-text": "Parse wikitext.",
+       "apihelp-parse-example-texttitle": "Parse wikitext, specifying the page title.",
+       "apihelp-parse-example-summary": "Parse a summary.",
+
+       "apihelp-patrol-description": "Patrol a page or revision.",
+       "apihelp-patrol-param-rcid": "Recentchanges ID to patrol.",
+       "apihelp-patrol-param-revid": "Revision ID to patrol.",
+       "apihelp-patrol-example-rcid": "Patrol a recent change",
+       "apihelp-patrol-example-revid": "Patrol a revision",
+
+       "apihelp-protect-description": "Change the protection level of a page.",
+       "apihelp-protect-param-title": "Title of the page to (un)protect. Cannot be used together with $1pageid.",
+       "apihelp-protect-param-pageid": "ID of the page to (un)protect. Cannot be used together with $1title.",
+       "apihelp-protect-param-protections": "List of protection levels, formatted action=level (e.g. edit=sysop).\n\n'''NOTE:''' Any actions not listed will have restrictions removed.",
+       "apihelp-protect-param-expiry": "Expiry timestamps. If only one timestamp is set, it'll be used for all protections. Use \"infinite\", \"indefinite\", \"infinity\" or \"never\", for a never-expiring protection.",
+       "apihelp-protect-param-reason": "Reason for (un)protecting.",
+       "apihelp-protect-param-cascade": "Enable cascading protection (i.e. protect pages included in this page). Ignored if all protection levels given do not support cascading.",
+       "apihelp-protect-param-watch": "If set, add the page being (un)protected to your watchlist.",
+       "apihelp-protect-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-protect-example-protect": "Protect a page",
+       "apihelp-protect-example-unprotect": "Unprotect a page by setting restrictions to \"all\"",
+       "apihelp-protect-example-unprotect2": "Unprotect a page by setting no restrictions",
+
+       "apihelp-purge-description": "Purge the cache for the given titles.\n\nRequires a POST request if the user is not logged in.",
+       "apihelp-purge-param-forcelinkupdate": "Update the links tables.",
+       "apihelp-purge-param-forcerecursivelinkupdate": "Update the links table, and update the links tables for any page that uses this page as a template.",
+       "apihelp-purge-example-simple": "Purge the \"Main Page\" and the \"API\" page",
+       "apihelp-purge-example-generator": "Purge the first 10 pages in the main namespace",
+
+       "apihelp-query-description": "Fetch data from and about MediaWiki.\n\nAll data modifications will first have to use query to acquire a token to prevent abuse from malicious sites.",
+       "apihelp-query-param-prop": "Which properties to get for the queried pages.",
+       "apihelp-query-param-list": "Which lists to get.",
+       "apihelp-query-param-meta": "Which metadata to get.",
+       "apihelp-query-param-indexpageids": "Include an additional pageids section listing all returned page IDs.",
+       "apihelp-query-param-export": "Export the current revisions of all given or generated pages.",
+       "apihelp-query-param-exportnowrap": "Return the export XML without wrapping it in an XML result (same format as [[Special:Export]]). Can only be used with $1export.",
+       "apihelp-query-param-iwurl": "Whether to get the full URL if the title is an interwiki link.",
+       "apihelp-query-param-continue": "When present, formats query-continue as key-value pairs that should simply be merged into the original request. This parameter must be set to an empty string in the initial query.\n\nThis parameter is recommended for all new development, and will be made default in the next API version.",
+       "apihelp-query-param-rawcontinue": "Currently ignored. In the future, \"$1continue=\" will become the default and this will be needed to receive the raw query-continue data.",
+       "apihelp-query-example-revisions": "Fetch [[Special:ApiHelp/query+siteinfo|site info]] and [[Special:ApiHelp/query+revisions|revisions]] of the Main Page",
+       "apihelp-query-example-allpages": "Fetch revisions of pages beginning with \"API/\"",
+
+       "apihelp-query+allcategories-description": "Enumerate all categories.",
+       "apihelp-query+allcategories-param-from": "The category to start enumerating from.",
+       "apihelp-query+allcategories-param-to": "The category to stop enumerating at.",
+       "apihelp-query+allcategories-param-prefix": "Search for all category titles that begin with this value.",
+       "apihelp-query+allcategories-param-dir": "Direction to sort in.",
+       "apihelp-query+allcategories-param-min": "Only return categories with at least this many members.",
+       "apihelp-query+allcategories-param-max": "Only return categories with at most this many members.",
+       "apihelp-query+allcategories-param-limit": "How many categories to return.",
+       "apihelp-query+allcategories-param-prop": "Which properties to get:\n;size:Adds number of pages in the category.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+allcategories-example-size": "List categories with information on the number of pages in each",
+       "apihelp-query+allcategories-example-generator": "Retrieve info about the category page itself for categories beginning \"List\"",
+
+       "apihelp-query+allfileusages-description": "List all file usages, including non-existing.",
+       "apihelp-query+allfileusages-param-from": "The title of the file to start enumerating from.",
+       "apihelp-query+allfileusages-param-to": "The title of the file to stop enumerating at.",
+       "apihelp-query+allfileusages-param-prefix": "Search for all file titles that begin with this value.",
+       "apihelp-query+allfileusages-param-unique": "Only show distinct file titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
+       "apihelp-query+allfileusages-param-prop": "Which pieces of information to include:\n;ids:Adds the pageid of the using page (cannot be used with $1unique).\n;title:Adds the title of the file.",
+       "apihelp-query+allfileusages-param-limit": "How many total items to return.",
+       "apihelp-query+allfileusages-param-dir": "The direction in which to list.",
+       "apihelp-query+allfileusages-example-B": "List file titles, including missing ones, with page ids they are from, starting at B",
+       "apihelp-query+allfileusages-example-unique": "List unique file titles",
+       "apihelp-query+allfileusages-example-unique-generator": "Gets all file titles, marking the missing ones",
+       "apihelp-query+allfileusages-example-generator": "Gets pages containing the files",
+
+       "apihelp-query+allimages-description": "Enumerate all images sequentially.",
+       "apihelp-query+allimages-param-sort": "Property to sort by.",
+       "apihelp-query+allimages-param-dir": "The direction in which to list.",
+       "apihelp-query+allimages-param-from": "The image title to start enumerating from. Can only be used with $1sort=name.",
+       "apihelp-query+allimages-param-to": "The image title to stop enumerating at. Can only be used with $1sort=name.",
+       "apihelp-query+allimages-param-start": "The timestamp to start enumerating from. Can only be used with $1sort=timestamp.",
+       "apihelp-query+allimages-param-end": "The timestamp to end enumerating. Can only be used with $1sort=timestamp.",
+       "apihelp-query+allimages-param-prop": "Which image information to get:\n;timestamp:Adds timestamp for the uploaded version.\n;user:Adds the user who uploaded the image version.\n;userid:Add the user ID that uploaded the image version.\n;comment:Comment on the version.\n;parsedcomment:Parse the comment on the version.\n;canonicaltitle:Adds the canonical title of the image file.\n;url:Gives URL to the image and the description page.\n;size:Adds the size of the image in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;sha1:Adds SHA-1 hash for the image.\n;mime:Adds MIME type of the image.\n;mediatype:Adds the media type of the image.\n;metadata:Lists Exif metadata for the version of the image.\n;commonmetadata:Lists file format generic metadata for the version of the image.\n;extmetadata:Lists formatted metadata combined from multiple sources. Results are HTML formatted.\n;bitdepth:Adds the bit depth of the version.",
+       "apihelp-query+allimages-param-prefix": "Search for all image titles that begin with this value. Can only be used with $1sort=name.",
+       "apihelp-query+allimages-param-minsize": "Limit to images with at least this many bytes.",
+       "apihelp-query+allimages-param-maxsize": "Limit to images with at most this many bytes.",
+       "apihelp-query+allimages-param-sha1": "SHA1 hash of image. Overrides $1sha1base36.",
+       "apihelp-query+allimages-param-sha1base36": "SHA1 hash of image in base 36 (used in MediaWiki).",
+       "apihelp-query+allimages-param-user": "Only return files uploaded by this user. Can only be used with $1sort=timestamp. Cannot be used together with $1filterbots.",
+       "apihelp-query+allimages-param-filterbots": "How to filter files uploaded by bots. Can only be used with $1sort=timestamp. Cannot be used together with $1user.",
+       "apihelp-query+allimages-param-mime": "What MIME type to search for. e.g. image/jpeg.",
+       "apihelp-query+allimages-param-limit": "How many images in total to return.",
+       "apihelp-query+allimages-example-B": "Show a list of files starting at the letter \"B\"",
+       "apihelp-query+allimages-example-recent": "Show a list of recently uploaded files similar to [[Special:NewFiles]]",
+       "apihelp-query+allimages-example-generator": "Show info about 4 files starting at the letter \"T\"",
+
+       "apihelp-query+alllinks-description": "Enumerate all links that point to a given namespace.",
+       "apihelp-query+alllinks-param-from": "The title of the link to start enumerating from.",
+       "apihelp-query+alllinks-param-to": "The title of the link to stop enumerating at.",
+       "apihelp-query+alllinks-param-prefix": "Search for all linked titles that begin with this value.",
+       "apihelp-query+alllinks-param-unique": "Only show distinct linked titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
+       "apihelp-query+alllinks-param-prop": "Which pieces of information to include:\n;ids:Adds the pageid of the linking page (cannot be used with $1unique).\n;title:Adds the title of the link.",
+       "apihelp-query+alllinks-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+alllinks-param-limit": "How many total items to return.",
+       "apihelp-query+alllinks-param-dir": "The direction in which to list.",
+       "apihelp-query+alllinks-example-B": "List linked titles, including missing ones, with page ids they are from, starting at B",
+       "apihelp-query+alllinks-example-unique": "List unique linked titles",
+       "apihelp-query+alllinks-example-unique-generator": "Gets all linked titles, marking the missing ones",
+       "apihelp-query+alllinks-example-generator": "Gets pages containing the links",
+
+       "apihelp-query+allmessages-description": "Return messages from this site.",
+       "apihelp-query+allmessages-param-messages": "Which messages to output. \"*\" (default) means all messages.",
+       "apihelp-query+allmessages-param-prop": "Which properties to get.",
+       "apihelp-query+allmessages-param-enableparser": "Set to enable parser, will preprocess the wikitext of message (substitute magic words, handle templates, etc.).",
+       "apihelp-query+allmessages-param-nocontent": "If set, do not include the content of the messages in the output.",
+       "apihelp-query+allmessages-param-includelocal": "Also include local messages, i.e. messages that don't exist in the software but do exist as a MediaWiki: page.\nThis lists all MediaWiki: pages, so it will also list those that aren't really messages such as [[MediaWiki:Common.js|Common.js]].",
+       "apihelp-query+allmessages-param-args": "Arguments to be substituted into message.",
+       "apihelp-query+allmessages-param-filter": "Return only messages with names that contain this string.",
+       "apihelp-query+allmessages-param-customised": "Return only messages in this customisation state.",
+       "apihelp-query+allmessages-param-lang": "Return messages in this language.",
+       "apihelp-query+allmessages-param-from": "Return messages starting at this message.",
+       "apihelp-query+allmessages-param-to": "Return messages ending at this message.",
+       "apihelp-query+allmessages-param-title": "Page name to use as context when parsing message (for $1enableparser option).",
+       "apihelp-query+allmessages-param-prefix": "Return messages with this prefix.",
+       "apihelp-query+allmessages-example-ipb": "Show messages starting with \"ipb-\"",
+       "apihelp-query+allmessages-example-de": "Show messages \"august\" and \"mainpage\" in German",
+
+       "apihelp-query+allpages-description": "Enumerate all pages sequentially in a given namespace.",
+       "apihelp-query+allpages-param-from": "The page title to start enumerating from.",
+       "apihelp-query+allpages-param-to": "The page title to stop enumerating at.",
+       "apihelp-query+allpages-param-prefix": "Search for all page titles that begin with this value.",
+       "apihelp-query+allpages-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+allpages-param-filterredir": "Which pages to list.",
+       "apihelp-query+allpages-param-minsize": "Limit to pages with at least this many bytes.",
+       "apihelp-query+allpages-param-maxsize": "Limit to pages with at most this many bytes.",
+       "apihelp-query+allpages-param-prtype": "Limit to protected pages only.",
+       "apihelp-query+allpages-param-prlevel": "Filter protections based on protection level (must be used with $1prtype= parameter).",
+       "apihelp-query+allpages-param-prfiltercascade": "Filter protections based on cascadingness (ignored when $1prtype isn't set).",
+       "apihelp-query+allpages-param-limit": "How many total pages to return.",
+       "apihelp-query+allpages-param-dir": "The direction in which to list.",
+       "apihelp-query+allpages-param-filterlanglinks": "Filter based on whether a page has langlinks. Note that this may not consider langlinks added by extensions.",
+       "apihelp-query+allpages-param-prexpiry": "Which protection expiry to filter the page on:\n;indefinite:Get only pages with indefinite protection expiry.\n;definite:Get only pages with a definite (specific) protection expiry.\n;all:Get pages with any protections expiry.",
+       "apihelp-query+allpages-example-B": "Show a list of pages starting at the letter \"B\"",
+       "apihelp-query+allpages-example-generator": "Show info about 4 pages starting at the letter \"T\"",
+       "apihelp-query+allpages-example-generator-revisions": "Show content of first 2 non-redirect pages beginning at \"Re\"",
+
+       "apihelp-query+allredirects-description": "List all redirects to a namespace.",
+       "apihelp-query+allredirects-param-from": "The title of the redirect to start enumerating from.",
+       "apihelp-query+allredirects-param-to": "The title of the redirect to stop enumerating at.",
+       "apihelp-query+allredirects-param-prefix": "Search for all target pages that begin with this value.",
+       "apihelp-query+allredirects-param-unique": "Only show distinct target pages. Cannot be used with $1prop=ids|fragment|interwiki.\nWhen used as a generator, yields target pages instead of source pages.",
+       "apihelp-query+allredirects-param-prop": "Which pieces of information to include:\n;ids:Adds the pageid of the redirecting page (cannot be used with $1unique).\n;title:Adds the title of the redirect.\n;fragment:Adds the fragment from the redirect, if any (cannot be used with $1unique).\n;interwiki:Adds the interwiki prefix from the redirect, if any (cannot be used with $1unique).",
+       "apihelp-query+allredirects-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+allredirects-param-limit": "How many total items to return.",
+       "apihelp-query+allredirects-param-dir": "The direction in which to list.",
+       "apihelp-query+allredirects-example-B": "List target pages, including missing ones, with page ids they are from, starting at B",
+       "apihelp-query+allredirects-example-unique": "List unique target pages",
+       "apihelp-query+allredirects-example-unique-generator": "Gets all target pages, marking the missing ones",
+       "apihelp-query+allredirects-example-generator": "Gets pages containing the redirects",
+
+       "apihelp-query+alltransclusions-description": "List all transclusions (pages embedded using &#123;&#123;x&#125;&#125;), including non-existing.",
+       "apihelp-query+alltransclusions-param-from": "The title of the transclusion to start enumerating from.",
+       "apihelp-query+alltransclusions-param-to": "The title of the transclusion to stop enumerating at.",
+       "apihelp-query+alltransclusions-param-prefix": "Search for all transcluded titles that begin with this value.",
+       "apihelp-query+alltransclusions-param-unique": "Only show distinct transcluded titles. Cannot be used with $1prop=ids.\nWhen used as a generator, yields target pages instead of source pages.",
+       "apihelp-query+alltransclusions-param-prop": "Which pieces of information to include:\n;ids:Adds the pageid of the transcluding page (cannot be used with $1unique).\n;title:Adds the title of the transclusion.",
+       "apihelp-query+alltransclusions-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+alltransclusions-param-limit": "How many total items to return.",
+       "apihelp-query+alltransclusions-param-dir": "The direction in which to list.",
+       "apihelp-query+alltransclusions-example-B": "List transcluded titles, including missing ones, with page ids they are from, starting at B",
+       "apihelp-query+alltransclusions-example-unique": "List unique transcluded titles",
+       "apihelp-query+alltransclusions-example-unique-generator": "Gets all transcluded titles, marking the missing ones",
+       "apihelp-query+alltransclusions-example-generator": "Gets pages containing the transclusions",
+
+       "apihelp-query+allusers-description": "Enumerate all registered users.",
+       "apihelp-query+allusers-param-from": "The user name to start enumerating from.",
+       "apihelp-query+allusers-param-to": "The user name to stop enumerating at.",
+       "apihelp-query+allusers-param-prefix": "Search for all users that begin with this value.",
+       "apihelp-query+allusers-param-dir": "Direction to sort in.",
+       "apihelp-query+allusers-param-group": "Only include users in the given groups.",
+       "apihelp-query+allusers-param-excludegroup": "Exclude users in the given groups.",
+       "apihelp-query+allusers-param-rights": "Only include users with the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+allusers-param-prop": "Which pieces of information to include:\n;blockinfo:Adds the information about a current block on the user.\n;groups:Lists groups that the user is in. This uses more server resources and may return fewer results than the limit.\n;implicitgroups:Lists all the groups the user is automatically in.\n;rights:Lists rights that the user has.\n;editcount:Adds the edit count of the user.\n;registration:Adds the timestamp of when the user registered if available (may be blank).",
+       "apihelp-query+allusers-param-limit": "How many total user names to return.",
+       "apihelp-query+allusers-param-witheditsonly": "Only list users who have made edits.",
+       "apihelp-query+allusers-param-activeusers": "Only list users active in the last $1 {{PLURAL:$1|day|days}}.",
+       "apihelp-query+allusers-example-Y": "List users starting at Y",
+
+       "apihelp-query+backlinks-description": "Find all pages that link to the given page.",
+       "apihelp-query+backlinks-param-title": "Title to search. Cannot be used together with $1pageid.",
+       "apihelp-query+backlinks-param-pageid": "Pageid to search. Cannot be used together with $1title.",
+       "apihelp-query+backlinks-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+backlinks-param-dir": "The direction in which to list.",
+       "apihelp-query+backlinks-param-filterredir": "How to filter for redirects. If set to nonredirects when $1redirect is enabled, this is only applied to the second level.",
+       "apihelp-query+backlinks-param-limit": "How many total pages to return. If $1redirect is enabled, limit applies to each level separately (which means you may get up to 2 * limit results).",
+       "apihelp-query+backlinks-param-redirect": "If linking page is a redirect, find all pages that link to that redirect as well. Maximum limit is halved.",
+       "apihelp-query+backlinks-example-simple": "Show links to [[Main page]]",
+       "apihelp-query+backlinks-example-generator": "Get information about pages linking to [[Main page]]",
+
+       "apihelp-query+blocks-description": "List all blocked users and IP addresses.",
+       "apihelp-query+blocks-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+blocks-param-end": "The timestamp to stop enumerating at.",
+       "apihelp-query+blocks-param-ids": "List of block IDs to list (optional).",
+       "apihelp-query+blocks-param-users": "List of users to search for (optional).",
+       "apihelp-query+blocks-param-ip": "Get all blocks applying to this IP or CIDR range, including range blocks.\nCannot be used together with $3users. CIDR ranges broader than IPv4/$1 or IPv6/$2 are not accepted.",
+       "apihelp-query+blocks-param-limit": "The maximum number of blocks to list.",
+       "apihelp-query+blocks-param-prop": "Which properties to get:\n;id:Adds the ID of the block.\n;user:Adds the username of the blocked user.\n;userid:Adds the user ID of the blocked user.\n;by:Adds the username of the blocking user.\n;byid:Adds the user ID of the blocking user.\n;timestamp:Adds the timestamp of when the block was given.\n;expiry:Adds the timestamp of when the block expires.\n;reason:Adds the reason given for the block.\n;range:Adds the range of IPs affected by the block.\n;flags:Tags the ban with (autoblock, anononly, etc.).",
+       "apihelp-query+blocks-param-show": "Show only items that meet these criteria.\nFor example, to see only indefinite blocks on IPs, set $1show=ip|!temp.",
+       "apihelp-query+blocks-example-simple": "List blocks",
+       "apihelp-query+blocks-example-users": "List blocks of users Alice and Bob",
+
+       "apihelp-query+categories-description": "List all categories the pages belong to.",
+       "apihelp-query+categories-param-prop": "Which additional properties to get for each category:\n;sortkey:Adds the sortkey (hexadecimal string) and sortkey prefix (human-readable part) for the category.\n;timestamp:Adds timestamp of when the category was added.\n;hidden:Tags categories that are hidden with _&#95;HIDDENCAT_&#95;.",
+       "apihelp-query+categories-param-show": "Which kind of categories to show.",
+       "apihelp-query+categories-param-limit": "How many categories to return.",
+       "apihelp-query+categories-param-categories": "Only list these categories. Useful for checking whether a certain page is in a certain category.",
+       "apihelp-query+categories-param-dir": "The direction in which to list.",
+       "apihelp-query+categories-example-simple": "Get a list of categories [[Albert Einstein]] belongs to",
+       "apihelp-query+categories-example-generator": "Get information about all categories used in the [[Albert Einstein]]",
+
+       "apihelp-query+categoryinfo-description": "Returns information about the given categories.",
+       "apihelp-query+categoryinfo-example-simple": "Get information about [[:Category:Foo]] and [[:Category:Bar]]",
+
+       "apihelp-query+categorymembers-description": "List all pages in a given category.",
+       "apihelp-query+categorymembers-param-title": "Which category to enumerate (required). Must include the \"Category:\" prefix. Cannot be used together with $1pageid.",
+       "apihelp-query+categorymembers-param-pageid": "Page ID of the category to enumerate. Cannot be used together with $1title.",
+       "apihelp-query+categorymembers-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID.\n;title:Adds the title and namespace ID of the page.\n;sortkey:Adds the sortkey used for sorting in the category (hexadecimal string).\n;sortkeyprefix:Adds the sortkey prefix used for sorting in the category (human-readable part of the sortkey).\n;type:Adds the type that the page has been categorised as (page, subcat or file).\n;timestamp:Adds the timestamp of when the page was included.",
+       "apihelp-query+categorymembers-param-namespace": "Only include pages in these namespaces. Note that $1type=subcat or $1type=file may be used instead of $1namespace=14 or 6.",
+       "apihelp-query+categorymembers-param-type": "Which type of category members to include. Ignored when $1sort=timestamp is set.",
+       "apihelp-query+categorymembers-param-limit": "The maximum number of pages to return.",
+       "apihelp-query+categorymembers-param-sort": "Property to sort by.",
+       "apihelp-query+categorymembers-param-dir": "In which direction to sort.",
+       "apihelp-query+categorymembers-param-start": "Timestamp to start listing from. Can only be used with $1sort=timestamp.",
+       "apihelp-query+categorymembers-param-end": "Timestamp to end listing at. Can only be used with $1sort=timestamp.",
+       "apihelp-query+categorymembers-param-starthexsortkey": "Sortkey to start listing from, as returned by $1prop=sortkey. Can only be used with $1sort=sortkey.",
+       "apihelp-query+categorymembers-param-endhexsortkey": "Sortkey to end listing from, as returned by $1prop=sortkey. Can only be used with $1sort=sortkey.",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "Sortkey prefix to start listing from. Can only be used with $1sort=sortkey. Overrides $1starthexsortkey.",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "Sortkey prefix to end listing BEFORE (not at, if this value occurs it will not be included!). Can only be used with $1sort=sortkey. Overrides $1endhexsortkey.",
+       "apihelp-query+categorymembers-param-startsortkey": "Use $1starthexsortkey instead.",
+       "apihelp-query+categorymembers-param-endsortkey": "Use $1endhexsortkey instead.",
+       "apihelp-query+categorymembers-example-simple": "Get first 10 pages in [[:Category:Physics]]",
+       "apihelp-query+categorymembers-example-generator": "Get page info about first 10 pages in [[:Category:Physics]]",
+
+       "apihelp-query+contributors-description": "Get the list of logged-in contributors and the count of anonymous contributors to a page.",
+       "apihelp-query+contributors-param-group": "Only include users in the given groups. Does not include implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+contributors-param-excludegroup": "Exclude users in the given groups. Does not include implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+contributors-param-rights": "Only include users having the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+contributors-param-excluderights": "Exclude users having the given rights. Does not include rights granted by implicit or auto-promoted groups like *, user, or autoconfirmed.",
+       "apihelp-query+contributors-param-limit": "How many contributors to return.",
+       "apihelp-query+contributors-example-simple": "Show contributors to the [[Main Page]]",
+
+       "apihelp-query+deletedrevs-description": "List deleted revisions.\n\nOperates in three modes:\n# List deleted revisions for the given titles, sorted by timestamp.\n# List deleted contributions for the given user, sorted by timestamp (no titles specified).\n# List all deleted revisions in the given namespace, sorted by title and timestamp (no titles specified, $1user not set).\n\nCertain parameters only apply to some modes and are ignored in others.",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Mode|Modes}}: $2",
+       "apihelp-query+deletedrevs-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+deletedrevs-param-end": "The timestamp to stop enumerating at.",
+       "apihelp-query+deletedrevs-param-from": "Start listing at this title.",
+       "apihelp-query+deletedrevs-param-to": "Stop listing at this title.",
+       "apihelp-query+deletedrevs-param-prefix": "Search for all page titles that begin with this value.",
+       "apihelp-query+deletedrevs-param-unique": "List only one revision for each page.",
+       "apihelp-query+deletedrevs-param-tag": "Only list revisions tagged with this tag.",
+       "apihelp-query+deletedrevs-param-user": "Only list revisions by this user.",
+       "apihelp-query+deletedrevs-param-excludeuser": "Don't list revisions by this user.",
+       "apihelp-query+deletedrevs-param-namespace": "Only list pages in this namespace.",
+       "apihelp-query+deletedrevs-param-limit": "The maximum amount of revisions to list.",
+       "apihelp-query+deletedrevs-param-prop": "Which properties to get:\n;revid:Adds the revision ID of the deleted revision.\n;parentid:Adds the revision ID of the previous revision to the page.\n;user:Adds the user who made the revision.\n;userid:Adds the user ID whom made the revision.\n;comment:Adds the comment of the revision.\n;parsedcomment:Adds the parsed comment of the revision.\n;minor:Tags if the revision is minor.\n;len:Adds the length (bytes) of the revision.\n;sha1:Adds the SHA-1 (base 16) of the revision.\n;content:Adds the content of the revision.\n;token:<span class=\"apihelp-deprecated\">Deprecated.</span> Gives the edit token.\n;tags:Tags for the revision.",
+       "apihelp-query+deletedrevs-example-mode1": "List the last deleted revisions of Main Page and Talk:Main Page, with content (mode 1)",
+       "apihelp-query+deletedrevs-example-mode2": "List the last 50 deleted contributions by Bob (mode 2)",
+       "apihelp-query+deletedrevs-example-mode3-main": "List the first 50 deleted revisions in the main namespace (mode 3)",
+       "apihelp-query+deletedrevs-example-mode3-talk": "List the first 50 deleted pages in the Talk namespace (mode 3):",
+
+       "apihelp-query+disabled-description": "This query module has been disabled.",
+
+       "apihelp-query+duplicatefiles-description": "List all files that are duplicates of the given files based on hash values.",
+       "apihelp-query+duplicatefiles-param-limit": "How many duplicate files to return.",
+       "apihelp-query+duplicatefiles-param-dir": "The direction in which to list.",
+       "apihelp-query+duplicatefiles-param-localonly": "Look only for files in the local repository.",
+       "apihelp-query+duplicatefiles-example-simple": "Look for duplicates of [[:File:Albert Einstein Head.jpg]]",
+       "apihelp-query+duplicatefiles-example-generated": "Look for duplicates of all files",
+
+       "apihelp-query+embeddedin-description": "Find all pages that embed (transclude) the given title.",
+       "apihelp-query+embeddedin-param-title": "Title to search. Cannot be used together with $1pageid.",
+       "apihelp-query+embeddedin-param-pageid": "Pageid to search. Cannot be used together with $1title.",
+       "apihelp-query+embeddedin-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+embeddedin-param-dir": "The direction in which to list.",
+       "apihelp-query+embeddedin-param-filterredir": "How to filter for redirects.",
+       "apihelp-query+embeddedin-param-limit": "How many total pages to return.",
+       "apihelp-query+embeddedin-example-simple": "Show pages transcluding [[Template:Stub]]",
+       "apihelp-query+embeddedin-example-generator": "Get information about pages transcluding [[Template:Stub]]",
+
+       "apihelp-query+extlinks-description": "Returns all external URLs (not interwikis) from the given pages.",
+       "apihelp-query+extlinks-param-limit": "How many links to return.",
+       "apihelp-query+extlinks-param-protocol": "Protocol of the URL. If empty and $1query is set, the protocol is \"http\". Leave both this and $1query empty to list all external links.",
+       "apihelp-query+extlinks-param-query": "Search string without protocol. Useful for checking whether a certain page contains a certain external url.",
+       "apihelp-query+extlinks-param-expandurl": "Expand protocol-relative URLs with the canonical protocol.",
+       "apihelp-query+extlinks-example-simple": "Get a list of external links on the [[Main Page]]",
+
+       "apihelp-query+exturlusage-description": "Enumerate pages that contain a given URL.",
+       "apihelp-query+exturlusage-param-prop": "Which pieces of information to include:\n;ids:Adds the ID of page.\n;title:Adds the title and namespace ID of the page.\n;url:Adds the URL used in the page.",
+       "apihelp-query+exturlusage-param-protocol": "Protocol of the URL. If empty and $1query set, the protocol is \"http\". Leave both this and $1query empty to list all external links.",
+       "apihelp-query+exturlusage-param-query": "Search string without protocol. See [[Special:LinkSearch]]. Leave empty to list all external links.",
+       "apihelp-query+exturlusage-param-namespace": "The page namespaces to enumerate.",
+       "apihelp-query+exturlusage-param-limit": "How many pages to return.",
+       "apihelp-query+exturlusage-param-expandurl": "Expand protocol-relative URLs with the canonical protocol.",
+       "apihelp-query+exturlusage-example-simple": "Show pages linking to http://www.mediawiki.org",
+
+       "apihelp-query+filearchive-description": "Enumerate all deleted files sequentially.",
+       "apihelp-query+filearchive-param-from": "The image title to start enumerating from.",
+       "apihelp-query+filearchive-param-to": "The image title to stop enumerating at.",
+       "apihelp-query+filearchive-param-prefix": "Search for all image titles that begin with this value.",
+       "apihelp-query+filearchive-param-limit": "How many images to return in total.",
+       "apihelp-query+filearchive-param-dir": "The direction in which to list.",
+       "apihelp-query+filearchive-param-sha1": "SHA1 hash of image. Overrides $1sha1base36.",
+       "apihelp-query+filearchive-param-sha1base36": "SHA1 hash of image in base 36 (used in MediaWiki).",
+       "apihelp-query+filearchive-param-prop": "Which image information to get:\n;sha1:Adds SHA-1 hash for the image.\n;timestamp:Adds timestamp for the uploaded version.\n;user:Adds user who uploaded the image version.\n;size:Adds the size of the image in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;description:Adds description the image version.\n;parseddescription:Parse the description on the version.\n;mime:Adds MIME of the image.\n;mediatype:Adds the media type of the image.\n;metadata:Lists Exif metadata for the version of the image.\n;bitdepth:Adds the bit depth of the version.\n;archivename:Adds the file name of the archive version for non-latest versions.",
+       "apihelp-query+filearchive-example-simple": "Show a list of all deleted files",
+
+       "apihelp-query+filerepoinfo-description": "Return meta information about image repositories configured on the wiki.",
+       "apihelp-query+filerepoinfo-param-prop": "Which repository properties to get (there may be more available on some wikis):\n;apiurl:URL to the repository API - helpful for getting image info from the host.\n;name:The key of the repository - used in e.g. $wgForeignFileRepos and imageinfo return values.\n;displayname:The human-readable name of the repository wiki.\n;rooturl:Root URL for image paths.\n;local:Whether that repository is the local one or not.",
+       "apihelp-query+filerepoinfo-example-simple": "Get information about file repositories",
+
+       "apihelp-query+fileusage-description": "Find all pages that use the given files.",
+       "apihelp-query+fileusage-param-prop": "Which properties to get:\n;pageid:Page id of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+fileusage-param-namespace": "Only include pages in these namespaces.",
+       "apihelp-query+fileusage-param-limit": "How many to return.",
+       "apihelp-query+fileusage-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirects:Only show non-redirects.",
+       "apihelp-query+fileusage-example-simple": "Get a list of pages using [[:File:Example.jpg]]",
+       "apihelp-query+fileusage-example-generator": "Get information about pages using [[:File:Example.jpg]]",
+
+       "apihelp-query+imageinfo-description": "Returns file information and upload history.",
+       "apihelp-query+imageinfo-param-prop": "Which file information to get:\n;timestamp:Adds timestamp for the uploaded version.\n;user:Adds the user who uploaded each file version.\n;userid:Add the user ID that uploaded each file version.\n;comment:Comment on the version.\n;parsedcomment:Parse the comment on the version.\n;canonicaltitle:Adds the canonical title of the file.\n;url:Gives URL to the file and the description page.\n;size:Adds the size of the file in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;sha1:Adds SHA-1 hash for the file.\n;mime:Adds MIME type of the file.\n;thumbmime:Adds MIME type of the image thumbnail (requires url and param $1urlwidth).\n;mediatype:Adds the media type of the file.\n;metadata:Lists Exif metadata for the version of the file.\n;commonmetadata:Lists file format generic metadata for the version of the file.\n;extmetadata:Lists formatted metadata combined from multiple sources. Results are HTML formatted.\n;archivename:Adds the file name of the archive version for non-latest versions.\n;bitdepth:Adds the bit depth of the version.\n;uploadwarning:Used by the Special:Upload page to get information about an existing file. Not intended for use outside MediaWiki core.",
+       "apihelp-query+imageinfo-param-limit": "How many file revisions to return per file.",
+       "apihelp-query+imageinfo-param-start": "Timestamp to start listing from.",
+       "apihelp-query+imageinfo-param-end": "Timestamp to stop listing at.",
+       "apihelp-query+imageinfo-param-urlwidth": "If $2prop=url is set, a URL to an image scaled to this width will be returned.\nFor performance reasons if this option is used, no more than $1 scaled images will be returned.",
+       "apihelp-query+imageinfo-param-urlheight": "Similar to $1urlwidth.",
+       "apihelp-query+imageinfo-param-metadataversion": "Version of metadata to use. if \"latest\" is specified, use latest version. Defaults to \"1\" for backwards compatibility.",
+       "apihelp-query+imageinfo-param-extmetadatalanguage": "What language to fetch extmetadata in. This affects both which translation to fetch, if multiple are available, as well as how things like numbers and various values are formatted.",
+       "apihelp-query+imageinfo-param-extmetadatamultilang": "If translations for extmetadata property are available, fetch all of them.",
+       "apihelp-query+imageinfo-param-extmetadatafilter": "If specified and non-empty, only these keys will be returned for $1prop=extmetadata.",
+       "apihelp-query+imageinfo-param-urlparam": "A handler specific parameter string. For example, pdfs might use \"page15-100px\". $1urlwidth must be used and be consistent with $1urlparam.",
+       "apihelp-query+imageinfo-param-localonly": "Look only for files in the local repository.",
+       "apihelp-query+imageinfo-example-simple": "Fetch information about the current version of [[:File:Albert Einstein Head.jpg]]",
+       "apihelp-query+imageinfo-example-dated": "Fetch information about versions of [[:File:Test.jpg]] from 2008 and later",
+
+       "apihelp-query+images-description": "Returns all files contained on the given pages.",
+       "apihelp-query+images-param-limit": "How many files to return.",
+       "apihelp-query+images-param-images": "Only list these files. Useful for checking whether a certain page has a certain file.",
+       "apihelp-query+images-param-dir": "The direction in which to list.",
+       "apihelp-query+images-example-simple": "Get a list of files used in the [[Main Page]]",
+       "apihelp-query+images-example-generator": "Get information about all files used in the [[Main Page]]",
+
+       "apihelp-query+imageusage-description": "Find all pages that use the given image title.",
+       "apihelp-query+imageusage-param-title": "Title to search. Cannot be used together with $1pageid.",
+       "apihelp-query+imageusage-param-pageid": "Pageid to search. Cannot be used together with $1title.",
+       "apihelp-query+imageusage-param-namespace": "The namespace to enumerate.",
+       "apihelp-query+imageusage-param-dir": "The direction in which to list.",
+       "apihelp-query+imageusage-param-filterredir": "How to filter for redirects. If set to nonredirects when $1redirect is enabled, this is only applied to the second level.",
+       "apihelp-query+imageusage-param-limit": "How many total pages to return. If $1redirect is enabled, limit applies to each level separately (which means you may get up to 2 * limit results).",
+       "apihelp-query+imageusage-param-redirect": "If linking page is a redirect, find all pages that link to that redirect as well. Maximum limit is halved.",
+       "apihelp-query+imageusage-example-simple": "Show pages using [[:File:Albert Einstein Head.jpg]]",
+       "apihelp-query+imageusage-example-generator": "Get information about pages using [[:File:Albert Einstein Head.jpg]]",
+
+       "apihelp-query+info-description": "Get basic page information.",
+       "apihelp-query+info-param-prop": "Which additional properties to get:\n;protection:List the protection level of each page.\n;talkid:The page ID of the talk page for each non-talk page.\n;watched:List the watched status of each page.\n;watchers:The number of watchers, if allowed.\n;notificationtimestamp:The watchlist notification timestamp of each page.\n;subjectid:The page ID of the parent page for each talk page.\n;url:Gives a full URL, an edit URL, and the canonical URL for each page.\n;readable:Whether the user can read this page.\n;preload:Gives the text returned by EditFormPreloadText.\n;displaytitle:Gives the way the page title is actually displayed.",
+       "apihelp-query+info-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
+       "apihelp-query+info-example-simple": "Get information about the [[Main Page]]",
+       "apihelp-query+info-example-protection": "Get general and protection information about the [[Main Page]]",
+
+       "apihelp-query+iwbacklinks-description": "Find all pages that link to the given interwiki link.\n\nCan be used to find all links with a prefix, or all links to a title (with a given prefix). Using neither parameter is effectively \"all interwiki links\".",
+       "apihelp-query+iwbacklinks-param-prefix": "Prefix for the interwiki.",
+       "apihelp-query+iwbacklinks-param-title": "Interwiki link to search for. Must be used with $1blprefix.",
+       "apihelp-query+iwbacklinks-param-limit": "How many total pages to return.",
+       "apihelp-query+iwbacklinks-param-prop": "Which properties to get:\n;iwprefix:Adds the prefix of the interwiki.\n;iwtitle:Adds the title of the interwiki.",
+       "apihelp-query+iwbacklinks-param-dir": "The direction in which to list.",
+       "apihelp-query+iwbacklinks-example-simple": "Get pages linking to [[wikibooks:Test]]",
+       "apihelp-query+iwbacklinks-example-generator": "Get information about pages linking to [[wikibooks:Test]]",
+
+       "apihelp-query+iwlinks-description": "Returns all interwiki links from the given pages.",
+       "apihelp-query+iwlinks-param-url": "Whether to get the full URL (cannot be used with $1prop).",
+       "apihelp-query+iwlinks-param-prop": "Which additional properties to get for each interlanguage link:\n;url:Adds the full URL.",
+       "apihelp-query+iwlinks-param-limit": "How many interwiki links to return.",
+       "apihelp-query+iwlinks-param-prefix": "Only return interwiki links with this prefix.",
+       "apihelp-query+iwlinks-param-title": "Interwiki link to search for. Must be used with $1prefix.",
+       "apihelp-query+iwlinks-param-dir": "The direction in which to list.",
+       "apihelp-query+iwlinks-example-simple": "Get interwiki links from the [[Main Page]]",
+
+       "apihelp-query+langbacklinks-description": "Find all pages that link to the given language link.\n\nCan be used to find all links with a language code, or all links to a title (with a given language). Using neither parameter is effectively \"all language links\".\n\nNote that this may not consider language links added by extensions.",
+       "apihelp-query+langbacklinks-param-lang": "Language for the language link.",
+       "apihelp-query+langbacklinks-param-title": "Language link to search for. Must be used with $1lang.",
+       "apihelp-query+langbacklinks-param-limit": "How many total pages to return.",
+       "apihelp-query+langbacklinks-param-prop": "Which properties to get:\n;lllang:Adds the language code of the language link.\n;lltitle:Adds the title of the language link.",
+       "apihelp-query+langbacklinks-param-dir": "The direction in which to list.",
+       "apihelp-query+langbacklinks-example-simple": "Get pages linking to [[:fr:Test]]",
+       "apihelp-query+langbacklinks-example-generator": "Get information about pages linking to [[:fr:Test]]",
+
+       "apihelp-query+langlinks-description": "Returns all interlanguage links from the given pages.",
+       "apihelp-query+langlinks-param-limit": "How many langlinks to return.",
+       "apihelp-query+langlinks-param-url": "Whether to get the full URL (cannot be used with $1prop).",
+       "apihelp-query+langlinks-param-prop": "Which additional properties to get for each interlanguage link:\n;url:Adds the full URL.\n;langname:Adds the localised language name (best effort). Use $1inlanguagecode to control the language.\n;autonym:Adds the native language name.",
+       "apihelp-query+langlinks-param-lang": "Only return language links with this language code.",
+       "apihelp-query+langlinks-param-title": "Link to search for. Must be used with $1lang.",
+       "apihelp-query+langlinks-param-dir": "The direction in which to list.",
+       "apihelp-query+langlinks-param-inlanguagecode": "Language code for localised language names.",
+       "apihelp-query+langlinks-example-simple": "Get interlanguage links from the [[Main Page]]",
+
+       "apihelp-query+links-description": "Returns all links from the given pages.",
+       "apihelp-query+links-param-namespace": "Show links in these namespaces only.",
+       "apihelp-query+links-param-limit": "How many links to return.",
+       "apihelp-query+links-param-titles": "Only list links to these titles. Useful for checking whether a certain page links to a certain title.",
+       "apihelp-query+links-param-dir": "The direction in which to list.",
+       "apihelp-query+links-example-simple": "Get links from the [[Main Page]]",
+       "apihelp-query+links-example-generator": "Get information about the link pages in the [[Main Page]]",
+       "apihelp-query+links-example-namespaces": "Get links from the [[Main Page]] in the User and Template namespaces",
+
+       "apihelp-query+linkshere-description": "Find all pages that link to the given pages.",
+       "apihelp-query+linkshere-param-prop": "Which properties to get:\n;pageid:Page id of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+linkshere-param-namespace": "Only include pages in these namespaces.",
+       "apihelp-query+linkshere-param-limit": "How many to return.",
+       "apihelp-query+linkshere-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirects:Only show non-redirects.",
+       "apihelp-query+linkshere-example-simple": "Get a list of pages linking to the [[Main Page]]",
+       "apihelp-query+linkshere-example-generator": "Get information about pages linking to the [[Main Page]]",
+
+       "apihelp-query+logevents-description": "Get events from logs.",
+       "apihelp-query+logevents-param-prop": "Which properties to get:\n;ids:Adds the ID of the log event.\n;title:Adds the title of the page for the log event.\n;type:Adds the type of log event.\n;user:Adds the user responsible for the log event.\n;userid:Adds the user ID who was responsible for the log event.\n;timestamp:Adds the timestamp for the event.\n;comment:Adds the comment of the event.\n;parsedcomment:Adds the parsed comment of the event.\n;details:Lists additional details about the event.\n;tags:Lists tags for the event.",
+       "apihelp-query+logevents-param-type": "Filter log entries to only this type.",
+       "apihelp-query+logevents-param-action": "Filter log actions to only this action. Overrides $1type. Wildcard actions like \"action/*\" allows to specify any string for the asterisk.",
+       "apihelp-query+logevents-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+logevents-param-end": "The timestamp to end enumerating.",
+       "apihelp-query+logevents-param-user": "Filter entries to those made by the given user.",
+       "apihelp-query+logevents-param-title": "Filter entries to those related to a page.",
+       "apihelp-query+logevents-param-namespace": "Filter entries to those in the given namespace.",
+       "apihelp-query+logevents-param-prefix": "Filter entries that start with this prefix.",
+       "apihelp-query+logevents-param-tag": "Only list event entries tagged with this tag.",
+       "apihelp-query+logevents-param-limit": "How many total event entries to return.",
+       "apihelp-query+logevents-example-simple": "List recent log events",
+
+       "apihelp-query+pagepropnames-description": "List all page prop names in use on the wiki.",
+       "apihelp-query+pagepropnames-param-limit": "The maximum number of names to return.",
+       "apihelp-query+pagepropnames-example-simple": "Get first 10 prop names",
+
+       "apihelp-query+pageprops-description": "Get various properties defined in the page content.",
+       "apihelp-query+pageprops-param-prop": "Only list these props. Useful for checking whether a certain page uses a certain page prop.",
+       "apihelp-query+pageprops-example-simple": "Get properties for [[:Category:Foo]]",
+
+       "apihelp-query+pageswithprop-description": "List all pages using a given page prop.",
+       "apihelp-query+pageswithprop-param-propname": "Page prop for which to enumerate pages.",
+       "apihelp-query+pageswithprop-param-prop": "Which pieces of information to include:\n;ids:Adds the page ID.\n;title:Adds the title and namespace ID of the page.\n;value:Adds the value of the page prop.",
+       "apihelp-query+pageswithprop-param-limit": "The maximum number of pages to return.",
+       "apihelp-query+pageswithprop-param-dir": "In which direction to sort.",
+       "apihelp-query+pageswithprop-example-simple": "List the first 10 pages using &#123;&#123;DISPLAYTITLE:&#125;&#125;",
+       "apihelp-query+pageswithprop-example-generator": "Get page info about first 10 pages using _&#95;NOTOC_&#95;",
+
+       "apihelp-query+prefixsearch-description": "Perform a prefix search for page titles.",
+       "apihelp-query+prefixsearch-param-search": "Search string.",
+       "apihelp-query+prefixsearch-param-namespace": "Namespaces to search.",
+       "apihelp-query+prefixsearch-param-limit": "Maximum number of results to return.",
+       "apihelp-query+prefixsearch-example-simple": "Search for page titles beginning with \"meaning\"",
+
+       "apihelp-query+protectedtitles-description": "List all titles protected from creation.",
+       "apihelp-query+protectedtitles-param-namespace": "Only list titles in these namespaces.",
+       "apihelp-query+protectedtitles-param-level": "Only list titles with these protection levels.",
+       "apihelp-query+protectedtitles-param-limit": "How many total pages to return.",
+       "apihelp-query+protectedtitles-param-start": "Start listing at this protection timestamp.",
+       "apihelp-query+protectedtitles-param-end": "Stop listing at this protection timestamp.",
+       "apihelp-query+protectedtitles-param-prop": "Which properties to get:\n;timestamp:Adds the timestamp of when protection was added.\n;user:Adds the user that added the protection.\n;userid:Adds the user id that added the protection.\n;comment:Adds the comment for the protection.\n;parsedcomment:Adds the parsed comment for the protection.\n;expiry:Adds the timestamp of when the protection will be lifted.\n;level:Adds the protection level.",
+       "apihelp-query+protectedtitles-example-simple": "List protected titles",
+       "apihelp-query+protectedtitles-example-generator": "Find links to protected titles in the main namespace",
+
+       "apihelp-query+querypage-description": "Get a list provided by a QueryPage-based special page.",
+       "apihelp-query+querypage-param-page": "The name of the special page. Note, this is case sensitive.",
+       "apihelp-query+querypage-param-limit": "Number of results to return.",
+       "apihelp-query+querypage-example-ancientpages": "Return results from [[Special:Ancientpages]].",
+
+       "apihelp-query+random-description": "Get a set of random pages.\n\nPages are listed in a fixed sequence, only the starting point is random. This means that if, for example, \"Main Page\" is the first random page on your list, \"List of fictional monkeys\" will *always* be second, \"List of people on stamps of Vanuatu\" third, etc.\n\nIf the number of pages in the namespace is lower than $1limit, you will get fewer pages. You will not get the same page twice.",
+       "apihelp-query+random-param-namespace": "Return pages in these namespaces only.",
+       "apihelp-query+random-param-limit": "Limit how many random pages will be returned.",
+       "apihelp-query+random-param-redirect": "Load a random redirect instead of a random page.",
+       "apihelp-query+random-example-simple": "Return two random pages from the main namespace",
+       "apihelp-query+random-example-generator": "Return page info about two random pages from the main namespace",
+
+       "apihelp-query+recentchanges-description": "Enumerate recent changes.",
+       "apihelp-query+recentchanges-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+recentchanges-param-end": "The timestamp to end enumerating.",
+       "apihelp-query+recentchanges-param-namespace": "Filter changes to only these namespaces.",
+       "apihelp-query+recentchanges-param-user": "Only list changes by this user.",
+       "apihelp-query+recentchanges-param-excludeuser": "Don't list changes by this user.",
+       "apihelp-query+recentchanges-param-tag": "Only list changes tagged with this tag.",
+       "apihelp-query+recentchanges-param-prop": "Include additional pieces of information:\n;user:Adds the user responsible for the edit and tags if they are an IP.\n;userid:Adds the user id responsible for the edit.\n;comment:Adds the comment for the edit.\n;parsedcomment:Adds the parsed comment for the edit.\n;flags:Adds flags for the edit.\n;timestamp:Adds timestamp of the edit.\n;title:Adds the page title of the edit.\n;ids:Adds the page ID, recent changes ID and the new and old revision ID.\n;sizes:Adds the new and old page length in bytes.\n;redirect:Tags edit if page is a redirect.\n;patrolled:Tags patrollable edits as being patrolled or unpatrolled.\n;loginfo:Adds log information (logid, logtype, etc) to log entries.\n;tags:Lists tags for the entry.\n;sha1:Adds the content checksum for entries associated with a revision.",
+       "apihelp-query+recentchanges-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
+       "apihelp-query+recentchanges-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
+       "apihelp-query+recentchanges-param-limit": "How many total changes to return.",
+       "apihelp-query+recentchanges-param-type": "Which types of changes to show.",
+       "apihelp-query+recentchanges-param-toponly": "Only list changes which are the latest revision.",
+       "apihelp-query+recentchanges-example-simple": "List recent changes",
+       "apihelp-query+recentchanges-example-generator": "Get page info about recent unpatrolled changes",
+
+       "apihelp-query+redirects-description": "Returns all redirects to the given pages.",
+       "apihelp-query+redirects-param-prop": "Which properties to get:\n;pageid:Page id of each redirect.\n;title:Title of each redirect.\n;fragment:Fragment of each redirect, if any.",
+       "apihelp-query+redirects-param-namespace": "Only include pages in these namespaces.",
+       "apihelp-query+redirects-param-limit": "How many redirects to return.",
+       "apihelp-query+redirects-param-show": "Show only items that meet these criteria:\n;fragment:Only show redirects with a fragment.\n;!fragment:Only show redirects without a fragment.",
+       "apihelp-query+redirects-example-simple": "Get a list of redirects to the [[Main Page]]",
+       "apihelp-query+redirects-example-generator": "Get information about all redirects to the [[Main Page]]",
+
+       "apihelp-query+revisions-description": "Get revision information.\n\nMay be used in several ways:\n# Get data about a set of pages (last revision), by setting titles or pageids.\n# Get revisions for one given page, by using titles or pageids with start, end, or limit.\n# Get data about a set of revisions by setting their IDs with revids.",
+       "apihelp-query+revisions-paraminfo-singlepageonly": "May only be used with a single page (mode #2).",
+       "apihelp-query+revisions-param-prop": "Which properties to get for each revision:\n;ids:The ID of the revision.\n;flags:Revision flags (minor).\n;timestamp:The timestamp of the revision.\n;user:User that made the revision.\n;userid:User id of revision creator.\n;size:Length (bytes) of the revision.\n;sha1:SHA-1 (base 16) of the revision.\n;contentmodel:Content model id.\n;comment:Comment by the user for revision.\n;parsedcomment:Parsed comment by the user for the revision.\n;content:Text of the revision.\n;tags:Tags for the revision.",
+       "apihelp-query+revisions-param-limit": "Limit how many revisions will be returned.",
+       "apihelp-query+revisions-param-startid": "From which revision id to start enumeration.",
+       "apihelp-query+revisions-param-endid": "Stop revision enumeration on this revid.",
+       "apihelp-query+revisions-param-start": "From which revision timestamp to start enumeration.",
+       "apihelp-query+revisions-param-end": "Enumerate up to this timestamp.",
+       "apihelp-query+revisions-param-user": "Only include revisions made by user.",
+       "apihelp-query+revisions-param-excludeuser": "Exclude revisions made by user.",
+       "apihelp-query+revisions-param-tag": "Only list revisions tagged with this tag.",
+       "apihelp-query+revisions-param-expandtemplates": "Expand templates in revision content (requires $1prop=content).",
+       "apihelp-query+revisions-param-generatexml": "Generate XML parse tree for revision content (requires $1prop=content).",
+       "apihelp-query+revisions-param-parse": "Parse revision content (requires $1prop=content). For performance reasons, if this option is used, $1limit is enforced to 1.",
+       "apihelp-query+revisions-param-section": "Only retrieve the content of this section number.",
+       "apihelp-query+revisions-param-token": "Which tokens to obtain for each revision.",
+       "apihelp-query+revisions-param-diffto": "Revision ID to diff each revision to. Use \"prev\", \"next\" and \"cur\" for the previous, next and current revision respectively.",
+       "apihelp-query+revisions-param-difftotext": "Text to diff each revision to. Only diffs a limited number of revisions. Overrides $1diffto. If $1section is set, only that section will be diffed against this text.",
+       "apihelp-query+revisions-param-contentformat": "Serialization format used for $1difftotext and expected for output of content.",
+       "apihelp-query+revisions-example-content": "Get data with content for the last revision of titles \"API\" and \"Main Page\"",
+       "apihelp-query+revisions-example-last5": "Get last 5 revisions of the \"Main Page\"",
+       "apihelp-query+revisions-example-first5": "Get first 5 revisions of the \"Main Page\"",
+       "apihelp-query+revisions-example-first5-after": "Get first 5 revisions of the \"Main Page\" made after 2006-05-01",
+       "apihelp-query+revisions-example-first5-not-localhost": "Get first 5 revisions of the \"Main Page\" that were not made made by anonymous user \"127.0.0.1\"",
+       "apihelp-query+revisions-example-first5-user": "Get first 5 revisions of the \"Main Page\" that were made by the user \"MediaWiki default\"",
+
+       "apihelp-query+search-description": "Perform a full text search.",
+       "apihelp-query+search-param-search": "Search for all page titles (or content) that have this value.",
+       "apihelp-query+search-param-namespace": "Search only within these namespaces.",
+       "apihelp-query+search-param-what": "Which type of search to perform.",
+       "apihelp-query+search-param-info": "Which metadata to return.",
+       "apihelp-query+search-param-prop": "Which properties to return:\n;size:Adds the size of the page in bytes.\n;wordcount:Adds the word count of the page.\n;timestamp:Adds the timestamp of when the page was last edited.\n;snippet:Adds a parsed snippet of the page.\n;titlesnippet:Adds a parsed snippet of the page title.\n;redirectsnippet:Adds a parsed snippet of the redirect title.\n;redirecttitle:Adds the title of the matching redirect.\n;sectionsnippet:Adds a parsed snippet of the matching section title.\n;sectiontitle:Adds the title of the matching section.\n;score:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Deprecated and ignored.</span>",
+       "apihelp-query+search-param-limit": "How many total pages to return.",
+       "apihelp-query+search-param-interwiki": "Include interwiki results in the search, if available.",
+       "apihelp-query+search-param-backend": "Which search backend to use, if not the default.",
+       "apihelp-query+search-example-simple": "Search for \"meaning\"",
+       "apihelp-query+search-example-text": "Search texts for \"meaning\"",
+       "apihelp-query+search-example-generator": "Ger page info about the pages returned for a search for \"meaning\"",
+
+       "apihelp-query+siteinfo-description": "Return general information about the site.",
+       "apihelp-query+siteinfo-param-prop": "Which information to get:\n;general:Overall system information.\n;namespaces:List of registered namespaces and their canonical names.\n;namespacealiases:List of registered namespace aliases.\n;specialpagealiases:List of special page aliases.\n;magicwords:List of magic words and their aliases.\n;statistics:Returns site statistics.\n;interwikimap:Returns interwiki map (optionally filtered, (optionally localised by using $1inlanguagecode)).\n;dbrepllag:Returns database server with the highest replication lag.\n;usergroups:Returns user groups and the associated permissions.\n;extensions:Returns extensions installed on the wiki.\n;fileextensions:Returns list of file extensions allowed to be uploaded.\n;rightsinfo:Returns wiki rights (license) information if available.\n;restrictions:Returns information on available restriction (protection) types.\n;languages:Returns a list of languages MediaWiki supports (optionally localised by using $1inlanguagecode).\n;skins:Returns a list of all enabled skins (optionally localised by using $1inlanguagecode, otherwise in content language).\n;extensiontags:Returns a list of parser extension tags.\n;functionhooks:Returns a list of parser function hooks.\n;showhooks:Returns a list of all subscribed hooks (contents of $wgHooks).\n;variables:Returns a list of variable IDs.\n;protocols:Returns a list of protocols that are allowed in external links.\n;defaultoptions:Returns the default values for user preferences.",
+       "apihelp-query+siteinfo-param-filteriw": "Return only local or only nonlocal entries of the interwiki map.",
+       "apihelp-query+siteinfo-param-showalldb": "List all database servers, not just the one lagging the most.",
+       "apihelp-query+siteinfo-param-numberingroup": "Lists the number of users in user groups.",
+       "apihelp-query+siteinfo-param-inlanguagecode": "Language code for localised language names (best effort) and skin names.",
+       "apihelp-query+siteinfo-example-simple": "Fetch site information",
+       "apihelp-query+siteinfo-example-interwiki": "Fetch a list of local interwiki prefixes",
+       "apihelp-query+siteinfo-example-replag": "Check the current replication lag",
+
+       "apihelp-query+stashimageinfo-description": "Returns file information for stashed files.",
+       "apihelp-query+stashimageinfo-param-filekey": "Key that identifies a previous upload that was stashed temporarily.",
+       "apihelp-query+stashimageinfo-param-sessionkey": "Alias for $1filekey, for backward compatibility.",
+       "apihelp-query+stashimageinfo-param-prop": "Which image information to get:\n;timestamp:Adds timestamp for the uploaded version.\n;canonicaltitle:Adds the canonical title of the image file.\n;url:Gives URL to the image and the description page.\n;size:Adds the size of the image in bytes and the height, width and page count (if applicable).\n;dimensions:Alias for size.\n;sha1:Adds SHA-1 hash for the image.\n;mime:Adds MIME type of the image.\n;thumbmime:Adds MIME type of the image thumbnail (requires url and param $1urlwidth).\n;metadata:Lists Exif metadata for the version of the image.\n;commonmetadata:Lists file format generic metadata for the version of the image.\n;extmetadata:Lists formatted metadata combined from multiple sources. Results are HTML formatted.\n;bitdepth:Adds the bit depth of the version.",
+       "apihelp-query+stashimageinfo-example-simple": "Returns information for a stashed file",
+       "apihelp-query+stashimageinfo-example-params": "Returns thumbnails for two stashed files",
+
+       "apihelp-query+tags-description": "List change tags.",
+       "apihelp-query+tags-param-limit": "The maximum number of tags to list.",
+       "apihelp-query+tags-param-prop": "Which properties to get:\n;name:Adds name of tag.\n;displayname:Adds system message for the tag.\n;description:Adds description of the tag.\n;hitcount:Adds the amount of revisions that have this tag.",
+       "apihelp-query+tags-example-simple": "List available tags",
+
+       "apihelp-query+templates-description": "Returns all pages transcluded on the given pages.",
+       "apihelp-query+templates-param-namespace": "Show templates in this namespaces only.",
+       "apihelp-query+templates-param-limit": "How many templates to return.",
+       "apihelp-query+templates-param-templates": "Only list these templates. Useful for checking whether a certain page uses a certain template.",
+       "apihelp-query+templates-param-dir": "The direction in which to list.",
+       "apihelp-query+templates-example-simple": "Get templates from the [[Main Page]]",
+       "apihelp-query+templates-example-generator": "Get information about the template pages in the [[Main Page]]",
+       "apihelp-query+templates-example-namespaces": "Get templates from the [[Main Page]] in the User and Template namespaces",
+
+       "apihelp-query+tokens-description": "Gets tokens for data-modifying actions.",
+       "apihelp-query+tokens-param-type": "Types of token to request.",
+       "apihelp-query+tokens-example-simple": "Retrieve a csrf token (the default)",
+       "apihelp-query+tokens-example-types": "Retrieve a watch token and a patrol token",
+
+       "apihelp-query+transcludedin-description": "Find all pages that transclude the given pages.",
+       "apihelp-query+transcludedin-param-prop": "Which properties to get:\n;pageid:Page id of each page.\n;title:Title of each page.\n;redirect:Flag if the page is a redirect.",
+       "apihelp-query+transcludedin-param-namespace": "Only include pages in these namespaces.",
+       "apihelp-query+transcludedin-param-limit": "How many to return.",
+       "apihelp-query+transcludedin-param-show": "Show only items that meet these criteria:\n;redirect:Only show redirects.\n;!redirects:Only show non-redirects.",
+       "apihelp-query+transcludedin-example-simple": "Get a list of pages transcluding the [[Main Page]]",
+       "apihelp-query+transcludedin-example-generator": "Get information about pages transcluding the [[Main Page]]",
+
+       "apihelp-query+usercontribs-description": "Get all edits by a user.",
+       "apihelp-query+usercontribs-param-limit": "The maximum number of contributions to return.",
+       "apihelp-query+usercontribs-param-start": "The start timestamp to return from.",
+       "apihelp-query+usercontribs-param-end": "The end timestamp to return to.",
+       "apihelp-query+usercontribs-param-user": "The users to retrieve contributions for.",
+       "apihelp-query+usercontribs-param-userprefix": "Retrieve contributions for all users whose names begin with this value. Overrides $1user.",
+       "apihelp-query+usercontribs-param-namespace": "Only list contributions in these namespaces.",
+       "apihelp-query+usercontribs-param-prop": "Include additional pieces of information:\n;ids:Adds the page ID and revision ID.\n;title:Adds the title and namespace ID of the page.\n;timestamp:Adds the timestamp of the edit.\n;comment:Adds the comment of the edit.\n;parsedcomment:Adds the parsed comment of the edit.\n;size:Adds the new size of the edit.\n;sizediff:Adds the size delta of the edit against its parent.\n;flags:Adds flags of the edit.\n;patrolled:Tags patrolled edits.\n;tags:Lists tags for the edit.",
+       "apihelp-query+usercontribs-param-show": "Show only items that meet thse criteria, e.g. non minor edits only: $2show=!minor.\n\nIf $2show=patrolled or $2show=!patrolled is set, revisions older than [https://www.mediawiki.org/wiki/Manual:$wgRCMaxAge $wgRCMaxAge] ($1 {{PLURAL:$1|second|seconds}}) won't be shown.",
+       "apihelp-query+usercontribs-param-tag": "Only list revisions tagged with this tag.",
+       "apihelp-query+usercontribs-param-toponly": "Only list changes which are the latest revision.",
+       "apihelp-query+usercontribs-example-user": "Show contributions of [[User:Example]]",
+       "apihelp-query+usercontribs-example-ipprefix": "Show contributions from all IPs with prefix \"192.0.2.\"",
+
+       "apihelp-query+userinfo-description": "Get information about the current user.",
+       "apihelp-query+userinfo-param-prop": "Which pieces of information to include:\n;blockinfo:Tags if the current user is blocked, by whom, and for what reason.\n;hasmsg:Adds a tag \"message\" if the current user has pending messages.\n;groups:Lists all the groups the current user belongs to.\n;implicitgroups:Lists all the groups the current user is automatically a member of.\n;rights:Lists all the rights the current user has.\n;changeablegroups:Lists the groups the current user can add to and remove from.\n;options:Lists all preferences the current user has set.\n;preferencestoken:DEPRECATED! Get a token to change current user's preferences.\n;editcount:Adds the current user's edit count.\n;ratelimits:Lists all rate limits applying to the current user.\n;realname:Adds the user's real name.\n;email:Adds the user's email address and email authentication date.\n;acceptlang:Echoes the Accept-Language header sent by the client in a structured format.\n;registrationdate:Adds the user's registration date.\n;unreadcount:Adds the count of unread pages on the user's watchlist (maximum $1; returns \"$2\" if more).",
+       "apihelp-query+userinfo-example-simple": "Get information about the current user",
+       "apihelp-query+userinfo-example-data": "Get additional information about the current user",
+
+       "apihelp-query+users-description": "Get information about a list of users.",
+       "apihelp-query+users-param-prop": "Which pieces of information to include:\n;blockinfo:Tags if the user is blocked, by whom, and for what reason.\n;groups:Lists all the groups each user belongs to.\n;implicitgroups:Lists all the groups a user is automatically a member of.\n;rights:Lists all the rights each user has.\n;editcount:Adds the user's edit count.\n;registration:Adds the user's registration timestamp.\n;emailable:Tags if the user can and wants to receive email through [[Special:Emailuser]].\n;gender:Tags the gender of the user. Returns \"male\", \"female\", or \"unknown\".",
+       "apihelp-query+users-param-users": "A list of users to obtain information for.",
+       "apihelp-query+users-param-token": "Use [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] instead.",
+       "apihelp-query+users-example-simple": "Return information for [[User:Example]]",
+
+       "apihelp-query+watchlist-description": "Get recent changes to pages in the logged in user's watchlist.",
+       "apihelp-query+watchlist-param-allrev": "Include multiple revisions of the same page within given timeframe.",
+       "apihelp-query+watchlist-param-start": "The timestamp to start enumerating from.",
+       "apihelp-query+watchlist-param-end": "The timestamp to end enumerating.",
+       "apihelp-query+watchlist-param-namespace": "Filter changes to only the given namespaces.",
+       "apihelp-query+watchlist-param-user": "Only list changes by this user.",
+       "apihelp-query+watchlist-param-excludeuser": "Don't list changes by this user.",
+       "apihelp-query+watchlist-param-limit": "How many total results to return per request.",
+       "apihelp-query+watchlist-param-prop": "Which additional items to get:\n;ids:Adds revision ids and page ids.\n;title:Adds title of the page.\n;flags:Adds flags for the edit.\n;user:Adds the user who made the edit.\n;userid:Adds user id of whom made the edit.\n;comment:Adds comment of the edit.\n;parsedcomment:Adds parsed comment of the edit.\n;timestamp:Adds timestamp of the edit.\n;patrol:Tags edits that are patrolled.\n;sizes:Adds the old and new lengths of the page.\n;notificationtimestamp:Adds timestamp of when the user was last notified about the edit.\n;loginfo:Adds log information where appropriate.",
+       "apihelp-query+watchlist-param-show": "Show only items that meet these criteria. For example, to see only minor edits done by logged-in users, set $1show=minor|!anon.",
+       "apihelp-query+watchlist-param-type": "Which types of changes to show:\n;edit:Regular page edits.\n;external:External changes.\n;new:Page creations.\n;log:Log entries.",
+       "apihelp-query+watchlist-param-owner": "Used along with $1token to access a different user's watchlist.",
+       "apihelp-query+watchlist-param-token": "A security token (available in the user's [[Special:Preferences#mw-prefsection-watchlist|preferences]]) to allow access to another user's watchlist.",
+       "apihelp-query+watchlist-example-simple": "List the top revision for recently changed pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-props": "Fetch additional information about the top revision for recently changed pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-allrev": "Fetch information about all recent changes to pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-generator": "Fetch page info for recently changed pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-generator-rev": "Fetch revision info for recent changes to pages on the current user's watchlist",
+       "apihelp-query+watchlist-example-wlowner": "List the top revision for recently changed pages on [[User:Example]]'s watchlist",
+
+       "apihelp-query+watchlistraw-description": "Get all pages on the logged in user's watchlist.",
+       "apihelp-query+watchlistraw-param-namespace": "Only list pages in the given namespaces.",
+       "apihelp-query+watchlistraw-param-limit": "How many total results to return per request.",
+       "apihelp-query+watchlistraw-param-prop": "Which additional properties to get:\n;changed:Adds timestamp of when the user was last notified about the edit.",
+       "apihelp-query+watchlistraw-param-show": "Only list items that meet these criteria.",
+       "apihelp-query+watchlistraw-param-owner": "Used along with $1token to access a different user's watchlist.",
+       "apihelp-query+watchlistraw-param-token": "A security token (available in the user's [[Special:Preferences#mw-prefsection-watchlist|preferences]]) to allow access to another user's watchlist.",
+       "apihelp-query+watchlistraw-example-simple": "List pages on the current user's watchlist",
+       "apihelp-query+watchlistraw-example-generator": "Fetch page info for pages on the current user's watchlist",
+
+       "apihelp-revisiondelete-description": "Delete and undelete revisions.",
+       "apihelp-revisiondelete-param-type": "Type of revision deletion being performed.",
+       "apihelp-revisiondelete-param-target": "Page title for the revision deletion, if required for the type.",
+       "apihelp-revisiondelete-param-ids": "Identifiers for the revisions to be deleted.",
+       "apihelp-revisiondelete-param-hide": "What to hide for each revision.",
+       "apihelp-revisiondelete-param-show": "What to unhide for each revision.",
+       "apihelp-revisiondelete-param-suppress": "Whether to suppress data from administrators as well as others.",
+       "apihelp-revisiondelete-param-reason": "Reason for the deletion or undeletion.",
+       "apihelp-revisiondelete-example-revision": "Hide content for revision 12345 on the Main Page",
+       "apihelp-revisiondelete-example-log": "Hide all data on log entry 67890 with the reason \"BLP violation\"",
+
+       "apihelp-rollback-description": "Undo the last edit to the page.\n\nIf the last user who edited the page made multiple edits in a row, they will all be rolled back.",
+       "apihelp-rollback-param-title": "Title of the page you want to roll back. Cannot be used together with $1pageid.",
+       "apihelp-rollback-param-pageid": "Page ID of the page you want to roll back. Cannot be used together with $1title.",
+       "apihelp-rollback-param-user": "Name of the user whose edits are to be rolled back.",
+       "apihelp-rollback-param-summary": "Custom edit summary. If empty, default summary will be used.",
+       "apihelp-rollback-param-markbot": "Mark the reverted edits and the revert as bot edits.",
+       "apihelp-rollback-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-rollback-example-simple": "Roll back the last edits to [[Main Page]] by user Example",
+       "apihelp-rollback-example-summary": "Roll back the last edits to [[Main Page]] by IP user 192.0.2.5 with summary \"Reverting vandalism\", and mark those edits and the revert as \"bot\"",
+
+       "apihelp-rsd-description": "Export an RSD (Really Simple Discovery) schema.",
+       "apihelp-rsd-example-simple": "Export the RSD schema",
+
+       "apihelp-setnotificationtimestamp-description": "Update the notification timestamp for watched pages.\n\nThis affects the highlighting of changed pages in the watchlist and history, and the sending of email when the \"Email me when a page on my watchlist is changed\" preference is enabled.",
+       "apihelp-setnotificationtimestamp-param-entirewatchlist": "Work on all watched pages.",
+       "apihelp-setnotificationtimestamp-param-timestamp": "Timestamp to which to set the notification timestamp.",
+       "apihelp-setnotificationtimestamp-param-torevid": "Revision to set the notification timestamp to (one page only).",
+       "apihelp-setnotificationtimestamp-param-newerthanrevid": "Revision to set the notification timestamp newer than (one page only).",
+       "apihelp-setnotificationtimestamp-example-all": "Reset the notification status for the entire watchlist",
+       "apihelp-setnotificationtimestamp-example-page": "Reset the notification status for \"Main page\"",
+       "apihelp-setnotificationtimestamp-example-pagetimestamp": "Set the notification timestamp for \"Main page\" so all edits since 1 January 2012 are unviewed",
+       "apihelp-setnotificationtimestamp-example-allpages": "Reset the notification status for pages in the User namespace",
+
+       "apihelp-tokens-description": "Get tokens for data-modifying actions.\n\nThis module is deprecated in favor of [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-tokens-param-type": "Types of token to request.",
+       "apihelp-tokens-example-edit": "Retrieve an edit token (the default).",
+       "apihelp-tokens-example-emailmove": "Retrieve an email token and a move token.",
+
+       "apihelp-unblock-description": "Unblock a user.",
+       "apihelp-unblock-param-id": "ID of the block to unblock (obtained through list=blocks). Cannot be used together with $1user.",
+       "apihelp-unblock-param-user": "Username, IP address or IP range to unblock. Cannot be used together with $1id.",
+       "apihelp-unblock-param-reason": "Reason for unblock.",
+       "apihelp-unblock-example-id": "Unblock block ID #105",
+       "apihelp-unblock-example-user": "Unblock user Bob with reason \"Sorry Bob\"",
+
+       "apihelp-undelete-description": "Restore revisions of a deleted page.\n\nA list of deleted revisions (including timestamps) can be retrieved through [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], and a list of deleted file ids can be retrieved through [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+       "apihelp-undelete-param-title": "Title of the page to restore.",
+       "apihelp-undelete-param-reason": "Reason for restoring.",
+       "apihelp-undelete-param-timestamps": "Timestamps of the revisions to restore. If both $1timestamps and $1fileids are empty, all will be restored.",
+       "apihelp-undelete-param-fileids": "IDs of the file revisions to restore. If both $1timestamps and $1fileids are empty, all will be restored.",
+       "apihelp-undelete-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-undelete-example-page": "Undelete [[Main Page]]",
+       "apihelp-undelete-example-revisions": "Undelete two revisions of [[Main Page]]",
+
+       "apihelp-upload-description": "Upload a file, or get the status of pending uploads.\n\nSeveral methods are available:\n* Upload file contents directly, using the \"$1file\" parameter.\n* Upload the file in pieces, using the \"$1filesize\", \"$1chunk\" and \"$1offset\" parameters.* Have the MediaWiki server fetch a file from a URL, using the \"$1url\" parameter.\n* Complete an earlier upload that failed due to warnings, using the \"$1filekey\" parameter.\nNote that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when sending the \"$1file\".",
+       "apihelp-upload-param-filename": "Target filename.",
+       "apihelp-upload-param-comment": "Upload comment. Also used as the initial page text for new files if \"$1text\" is not specified.",
+       "apihelp-upload-param-text": "Initial page text for new files.",
+       "apihelp-upload-param-watch": "Watch the page.",
+       "apihelp-upload-param-watchlist": "Unconditionally add or remove the page from your watchlist, use preferences or do not change watch.",
+       "apihelp-upload-param-ignorewarnings": "Ignore any warnings.",
+       "apihelp-upload-param-file": "File contents.",
+       "apihelp-upload-param-url": "URL to fetch the file from.",
+       "apihelp-upload-param-filekey": "Key that identifies a previous upload that was stashed temporarily.",
+       "apihelp-upload-param-sessionkey": "Same as $1filekey, maintained for backward compatibility.",
+       "apihelp-upload-param-stash": "If set, the server will not add the file to the repository and stash it temporarily.",
+       "apihelp-upload-param-filesize": "Filesize of entire upload.",
+       "apihelp-upload-param-offset": "Offset of chunk in bytes.",
+       "apihelp-upload-param-chunk": "Chunk contents.",
+       "apihelp-upload-param-async": "Make potentially large file operations asynchronous when possible.",
+       "apihelp-upload-param-asyncdownload": "Make fetching a URL asynchronous.",
+       "apihelp-upload-param-leavemessage": "If asyncdownload is used, leave a message on the user talk page if finished.",
+       "apihelp-upload-param-statuskey": "Fetch the upload status for this file key (upload by URL).",
+       "apihelp-upload-param-checkstatus": "Only fetch the upload status for the given file key.",
+       "apihelp-upload-example-url": "Upload from a URL",
+       "apihelp-upload-example-filekey": "Complete an upload that failed due to warnings",
+
+       "apihelp-userrights-description": "Change a user's group membership.",
+       "apihelp-userrights-param-user": "User name.",
+       "apihelp-userrights-param-userid": "User id.",
+       "apihelp-userrights-param-add": "Add the user to these groups.",
+       "apihelp-userrights-param-remove": "Remove the user from these groups.",
+       "apihelp-userrights-param-reason": "Reason for the change.",
+       "apihelp-userrights-example-user": "Add user FooBot to group \"bot\", and remove from groups \"sysop\" and \"bureaucrat\"",
+       "apihelp-userrights-example-userid": "Add the user with id 123 to group \"bot\", and remove from groups \"sysop\" and \"bureaucrat\"",
+
+       "apihelp-watch-description": "Add or remove pages from the current user's watchlist.",
+       "apihelp-watch-param-title": "The page to (un)watch. Use $1titles instead.",
+       "apihelp-watch-param-unwatch": "If set the page will be unwatched rather than watched.",
+       "apihelp-watch-example-watch": "Watch the page \"Main Page\"",
+       "apihelp-watch-example-unwatch": "Unwatch the page \"Main Page\"",
+       "apihelp-watch-example-generator": "Watch the first few pages in the main namespace",
+
        "apihelp-format-example-generic": "Format the query result in the $1 format",
        "apihelp-dbg-description": "Output data in PHP's var_export() format.",
        "apihelp-dbgfm-description": "Output data in PHP's var_export() format (pretty-print in HTML).",
        "apihelp-wddxfm-description": "Output data in WDDX format (pretty-print in HTML).",
        "apihelp-xml-description": "Output data in XML format.",
        "apihelp-xml-param-xslt": "If specified, adds &lt;xslt&gt; as stylesheet. This should be a wiki page in the MediaWiki namespace whose page name ends with \".xsl\".",
-       "apihelp-xml-param-includexmlnamespac": "If specified, adds an XML namespace.",
+       "apihelp-xml-param-includexmlnamespace": "If specified, adds an XML namespace.",
        "apihelp-xmlfm-description": "Output data in XML format (pretty-print in HTML).",
        "apihelp-yaml-description": "Output data in YAML format.",
        "apihelp-yamlfm-description": "Output data in YAML format (pretty-print in HTML).",
 
-       "apihelp-help-description": "Display help for the specified modules.",
-       "apihelp-help-param-modules": "Modules to display help for (values of the action= and format= parameters, or \"main\"). Can specify submodules with a \"+\".",
-       "apihelp-help-param-submodules": "Include help for submodules of the named module.",
-       "apihelp-help-param-recursivesubmodules": "Include help for submodules recursively.",
-       "apihelp-help-param-helpformat": "Format of the help output.",
-       "apihelp-help-param-wrap": "Wrap the output in a standard API response structure.",
-       "apihelp-help-param-toc": "Include a table of contents in the HTML output.",
-       "apihelp-help-example-main": "Help for the main module",
-       "apihelp-help-example-recursive": "All help in one page",
-       "apihelp-help-example-help": "Help for the help module itself",
-       "apihelp-help-example-query": "Help for two query submodules",
-
        "api-format-title": "MediaWiki API result",
        "api-format-prettyprint-header": "You are looking at the HTML representation of the $1 format. HTML is good for debugging, but is unsuitable for application use.\n\nSpecify the format parameter to change the output format. To see the non-HTML representation of the $1 format, set format=$2.\n\nSee the [https://www.mediawiki.org/wiki/API complete documentation], or [[Special:ApiHelp/main|API help]] for more information.",
 
+       "api-orm-param-props": "Fields to query.",
+       "api-orm-param-limit": "Max amount of rows to return.",
+
+       "api-pageset-param-titles": "A list of titles to work on.",
+       "api-pageset-param-pageids": "A list of page IDs to work on.",
+       "api-pageset-param-revids": "A list of revision IDs to work on.",
+       "api-pageset-param-generator": "Get the list of pages to work on by executing the specified query module.\n\n'''NOTE:''' generator parameter names must be prefixed with a \"g\", see examples.",
+       "api-pageset-param-redirects-generator": "Automatically resolve redirects in $1titles, $1pageids, and $1revids, and in pages returned by $1generator.",
+       "api-pageset-param-redirects-nogenerator": "Automatically resolve redirects in $1titles, $1pageids, and $1revids.",
+       "api-pageset-param-converttitles": "Convert titles to other variants if necessary. Only works if the wiki's content language supports variant conversion. Languages that support variant conversion include $1.",
+
        "api-help-title": "MediaWiki API help",
        "api-help-lead": "This is an auto-generated MediaWiki API documentation page.\n\nDocumentation and examples: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "Main module",
        "api-help-param-default": "Default: $1",
        "api-help-param-default-empty": "Default: <span class=\"apihelp-empty\">(empty)</span>",
        "api-help-param-token": "A \"$1\" token retrieved from [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-token-webui": "For compatibility, the token used in the web UI is also accepted.",
+       "api-help-param-disabled-in-miser-mode": "Disabled due to [https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser mode].",
+       "api-help-param-limited-in-miser-mode": "'''NOTE:''' Due to [https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser mode], using this may result in fewer than \"$1limit\" results returned before continuing; in extreme cases, zero results may be returned.",
+       "api-help-param-direction": "In which direction to enumerate:\n;newer:List oldest first. Note: $1start has to be before $1end.\n;older:List newest first (default). Note: $1start has to be later than $1end.",
+       "api-help-param-continue": "When more results are available, use this to continue.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(no description)</span>",
        "api-help-examples": "{{PLURAL:$1|Example|Examples}}:",
        "api-help-permissions": "{{PLURAL:$1|Permission|Permissions}}:",
index a4dfd7c..6fac19c 100644 (file)
        "apihelp-main-param-origin": "{{doc-apihelp-param|main|origin}}",
        "apihelp-main-param-uselang": "{{doc-apihelp-param|main|uselang}}",
 
+       "apihelp-block-description": "{{doc-apihelp-description|block}}",
+       "apihelp-block-param-user": "{{doc-apihelp-param|block|user}}",
+       "apihelp-block-param-expiry": "{{doc-apihelp-param|block|expiry}}",
+       "apihelp-block-param-reason": "{{doc-apihelp-param|block|reason}}",
+       "apihelp-block-param-anononly": "{{doc-apihelp-param|block|anononly}}",
+       "apihelp-block-param-nocreate": "{{doc-apihelp-param|block|nocreate}}",
+       "apihelp-block-param-autoblock": "{{doc-apihelp-param|block|autoblock}}",
+       "apihelp-block-param-noemail": "{{doc-apihelp-param|block|noemail}}",
+       "apihelp-block-param-hidename": "{{doc-apihelp-param|block|hidename}}",
+       "apihelp-block-param-allowusertalk": "{{doc-apihelp-param|block|allowusertalk}}",
+       "apihelp-block-param-reblock": "{{doc-apihelp-param|block|reblock}}",
+       "apihelp-block-param-watchuser": "{{doc-apihelp-param|block|watchuser}}",
+       "apihelp-block-example-ip-simple": "{{doc-apihelp-example|block}}",
+       "apihelp-block-example-user-complex": "{{doc-apihelp-example|block}}",
+
+       "apihelp-clearhasmsg-description": "{{doc-apihelp-description|clearhasmsg}}",
+       "apihelp-clearhasmsg-example-1": "{{doc-apihelp-example|clearhasmsg}}",
+
+       "apihelp-compare-description": "{{doc-apihelp-description|compare}}",
+       "apihelp-compare-param-fromtitle": "{{doc-apihelp-param|compare|fromtitle}}",
+       "apihelp-compare-param-fromid": "{{doc-apihelp-param|compare|fromid}}",
+       "apihelp-compare-param-fromrev": "{{doc-apihelp-param|compare|fromrev}}",
+       "apihelp-compare-param-totitle": "{{doc-apihelp-param|compare|totitle}}",
+       "apihelp-compare-param-toid": "{{doc-apihelp-param|compare|toid}}",
+       "apihelp-compare-param-torev": "{{doc-apihelp-param|compare|torev}}",
+       "apihelp-compare-example-1": "{{doc-apihelp-example|compare}}",
+
+       "apihelp-createaccount-description": "{{doc-apihelp-description|createaccount}}",
+       "apihelp-createaccount-param-name": "{{doc-apihelp-param|createaccount|name}}",
+       "apihelp-createaccount-param-password": "{{doc-apihelp-param|createaccount|password}}",
+       "apihelp-createaccount-param-domain": "{{doc-apihelp-param|createaccount|domain}}",
+       "apihelp-createaccount-param-token": "{{doc-apihelp-param|createaccount|token}}",
+       "apihelp-createaccount-param-email": "{{doc-apihelp-param|createaccount|email}}",
+       "apihelp-createaccount-param-realname": "{{doc-apihelp-param|createaccount|realname}}",
+       "apihelp-createaccount-param-mailpassword": "{{doc-apihelp-param|createaccount|mailpassword}}",
+       "apihelp-createaccount-param-reason": "{{doc-apihelp-param|createaccount|reason}}",
+       "apihelp-createaccount-param-language": "{{doc-apihelp-param|createaccount|language}}",
+       "apihelp-createaccount-example-pass": "{{doc-apihelp-example|createaccount}}",
+       "apihelp-createaccount-example-mail": "{{doc-apihelp-example|createaccount}}",
+
+       "apihelp-delete-description": "{{doc-apihelp-description|delete}}",
+       "apihelp-delete-param-title": "{{doc-apihelp-param|delete|title}}",
+       "apihelp-delete-param-pageid": "{{doc-apihelp-param|delete|pageid}}",
+       "apihelp-delete-param-reason": "{{doc-apihelp-param|delete|reason}}",
+       "apihelp-delete-param-watch": "{{doc-apihelp-param|delete|watch}}",
+       "apihelp-delete-param-watchlist": "{{doc-apihelp-param|delete|watchlist}}",
+       "apihelp-delete-param-unwatch": "{{doc-apihelp-param|delete|unwatch}}",
+       "apihelp-delete-param-oldimage": "{{doc-apihelp-param|delete|oldimage}}",
+       "apihelp-delete-example-simple": "{{doc-apihelp-example|delete}}",
+       "apihelp-delete-example-reason": "{{doc-apihelp-example|delete}}",
+
+       "apihelp-disabled-description": "{{doc-apihelp-description|disabled}}",
+
+       "apihelp-edit-description": "{{doc-apihelp-description|edit}}",
+       "apihelp-edit-param-title": "{{doc-apihelp-param|edit|title}}",
+       "apihelp-edit-param-pageid": "{{doc-apihelp-param|edit|pageid}}",
+       "apihelp-edit-param-section": "{{doc-apihelp-param|edit|section}}",
+       "apihelp-edit-param-sectiontitle": "{{doc-apihelp-param|edit|sectiontitle}}",
+       "apihelp-edit-param-text": "{{doc-apihelp-param|edit|text}}",
+       "apihelp-edit-param-summary": "{{doc-apihelp-param|edit|summary}}",
+       "apihelp-edit-param-minor": "{{doc-apihelp-param|edit|minor}}",
+       "apihelp-edit-param-notminor": "{{doc-apihelp-param|edit|notminor}}",
+       "apihelp-edit-param-bot": "{{doc-apihelp-param|edit|bot}}",
+       "apihelp-edit-param-basetimestamp": "{{doc-apihelp-param|edit|basetimestamp}}",
+       "apihelp-edit-param-starttimestamp": "{{doc-apihelp-param|edit|starttimestamp}}",
+       "apihelp-edit-param-recreate": "{{doc-apihelp-param|edit|recreate}}",
+       "apihelp-edit-param-createonly": "{{doc-apihelp-param|edit|createonly}}",
+       "apihelp-edit-param-nocreate": "{{doc-apihelp-param|edit|nocreate}}",
+       "apihelp-edit-param-watch": "{{doc-apihelp-param|edit|watch}}",
+       "apihelp-edit-param-unwatch": "{{doc-apihelp-param|edit|unwatch}}",
+       "apihelp-edit-param-watchlist": "{{doc-apihelp-param|edit|watchlist}}",
+       "apihelp-edit-param-md5": "{{doc-apihelp-param|edit|md5}}",
+       "apihelp-edit-param-prependtext": "{{doc-apihelp-param|edit|prependtext}}",
+       "apihelp-edit-param-appendtext": "{{doc-apihelp-param|edit|appendtext}}",
+       "apihelp-edit-param-undo": "{{doc-apihelp-param|edit|undo}}",
+       "apihelp-edit-param-undoafter": "{{doc-apihelp-param|edit|undoafter}}",
+       "apihelp-edit-param-redirect": "{{doc-apihelp-param|edit|redirect}}",
+       "apihelp-edit-param-contentformat": "{{doc-apihelp-param|edit|contentformat}}",
+       "apihelp-edit-param-contentmodel": "{{doc-apihelp-param|edit|contentmodel}}",
+       "apihelp-edit-param-token": "{{doc-apihelp-param|edit|token}}",
+       "apihelp-edit-example-edit": "{{doc-apihelp-example|edit}}",
+       "apihelp-edit-example-prepend": "{{doc-apihelp-example|edit}}",
+       "apihelp-edit-example-undo": "{{doc-apihelp-example|edit}}",
+
+       "apihelp-emailuser-description": "{{doc-apihelp-description|emailuser}}",
+       "apihelp-emailuser-param-target": "{{doc-apihelp-param|emailuser|target}}",
+       "apihelp-emailuser-param-subject": "{{doc-apihelp-param|emailuser|subject}}",
+       "apihelp-emailuser-param-text": "{{doc-apihelp-param|emailuser|text}}",
+       "apihelp-emailuser-param-ccme": "{{doc-apihelp-param|emailuser|ccme}}",
+       "apihelp-emailuser-example-email": "{{doc-apihelp-example|emailuser}}",
+
+       "apihelp-expandtemplates-description": "{{doc-apihelp-description|expandtemplates}}",
+       "apihelp-expandtemplates-param-title": "{{doc-apihelp-param|expandtemplates|title}}",
+       "apihelp-expandtemplates-param-text": "{{doc-apihelp-param|expandtemplates|text}}",
+       "apihelp-expandtemplates-param-prop": "{{doc-apihelp-param|expandtemplates|prop}}",
+       "apihelp-expandtemplates-param-includecomments": "{{doc-apihelp-param|expandtemplates|includecomments}}",
+       "apihelp-expandtemplates-param-generatexml": "{{doc-apihelp-param|expandtemplates|generatexml}}",
+       "apihelp-expandtemplates-example-simple": "{{doc-apihelp-example|expandtemplates}}",
+
+       "apihelp-feedcontributions-description": "{{doc-apihelp-description|feedcontributions}}",
+       "apihelp-feedcontributions-param-feedformat": "{{doc-apihelp-param|feedcontributions|feedformat}}",
+       "apihelp-feedcontributions-param-user": "{{doc-apihelp-param|feedcontributions|user}}",
+       "apihelp-feedcontributions-param-namespace": "{{doc-apihelp-param|feedcontributions|namespace}}",
+       "apihelp-feedcontributions-param-year": "{{doc-apihelp-param|feedcontributions|year}}",
+       "apihelp-feedcontributions-param-month": "{{doc-apihelp-param|feedcontributions|month}}",
+       "apihelp-feedcontributions-param-tagfilter": "{{doc-apihelp-param|feedcontributions|tagfilter}}",
+       "apihelp-feedcontributions-param-deletedonly": "{{doc-apihelp-param|feedcontributions|deletedonly}}",
+       "apihelp-feedcontributions-param-toponly": "{{doc-apihelp-param|feedcontributions|toponly}}",
+       "apihelp-feedcontributions-param-newonly": "{{doc-apihelp-param|feedcontributions|newonly}}",
+       "apihelp-feedcontributions-param-showsizediff": "{{doc-apihelp-param|feedcontributions|showsizediff}}",
+       "apihelp-feedcontributions-example-simple": "{{doc-apihelp-example|feedcontributions}}",
+
+       "apihelp-feedrecentchanges-description": "{{doc-apihelp-description|feedrecentchanges}}",
+       "apihelp-feedrecentchanges-param-feedformat": "{{doc-apihelp-param|feedrecentchanges|feedformat}}",
+       "apihelp-feedrecentchanges-param-namespace": "{{doc-apihelp-param|feedrecentchanges|namespace}}",
+       "apihelp-feedrecentchanges-param-invert": "{{doc-apihelp-param|feedrecentchanges|invert}}",
+       "apihelp-feedrecentchanges-param-associated": "{{doc-apihelp-param|feedrecentchanges|associated}}",
+       "apihelp-feedrecentchanges-param-days": "{{doc-apihelp-param|feedrecentchanges|days}}",
+       "apihelp-feedrecentchanges-param-limit": "{{doc-apihelp-param|feedrecentchanges|limit}}",
+       "apihelp-feedrecentchanges-param-from": "{{doc-apihelp-param|feedrecentchanges|from}}",
+       "apihelp-feedrecentchanges-param-hideminor": "{{doc-apihelp-param|feedrecentchanges|hideminor}}",
+       "apihelp-feedrecentchanges-param-hidebots": "{{doc-apihelp-param|feedrecentchanges|hidebots}}",
+       "apihelp-feedrecentchanges-param-hideanons": "{{doc-apihelp-param|feedrecentchanges|hideanons}}",
+       "apihelp-feedrecentchanges-param-hideliu": "{{doc-apihelp-param|feedrecentchanges|hideliu}}",
+       "apihelp-feedrecentchanges-param-hidepatrolled": "{{doc-apihelp-param|feedrecentchanges|hidepatrolled}}",
+       "apihelp-feedrecentchanges-param-hidemyself": "{{doc-apihelp-param|feedrecentchanges|hidemyself}}",
+       "apihelp-feedrecentchanges-param-tagfilter": "{{doc-apihelp-param|feedrecentchanges|tagfilter}}",
+       "apihelp-feedrecentchanges-param-target": "{{doc-apihelp-param|feedrecentchanges|target}}",
+       "apihelp-feedrecentchanges-param-showlinkedto": "{{doc-apihelp-param|feedrecentchanges|showlinkedto}}",
+       "apihelp-feedrecentchanges-example-simple": "{{doc-apihelp-example|feedrecentchanges}}",
+       "apihelp-feedrecentchanges-example-30days": "{{doc-apihelp-example|feedrecentchanges}}",
+
+       "apihelp-feedwatchlist-description": "{{doc-apihelp-description|feedwatchlist}}",
+       "apihelp-feedwatchlist-param-feedformat": "{{doc-apihelp-param|feedwatchlist|feedformat}}",
+       "apihelp-feedwatchlist-param-hours": "{{doc-apihelp-param|feedwatchlist|hours}}",
+       "apihelp-feedwatchlist-param-linktosections": "{{doc-apihelp-param|feedwatchlist|linktosections}}",
+       "apihelp-feedwatchlist-example-default": "{{doc-apihelp-example|feedwatchlist}}",
+       "apihelp-feedwatchlist-example-all6hrs": "{{doc-apihelp-example|feedwatchlist}}",
+
+       "apihelp-filerevert-description": "{{doc-apihelp-description|filerevert}}",
+       "apihelp-filerevert-param-filename": "{{doc-apihelp-param|filerevert|filename}}",
+       "apihelp-filerevert-param-comment": "{{doc-apihelp-param|filerevert|comment}}",
+       "apihelp-filerevert-param-archivename": "{{doc-apihelp-param|filerevert|archivename}}",
+       "apihelp-filerevert-example-revert": "{{doc-apihelp-example|filerevert}}",
+
+       "apihelp-help-description": "{{doc-apihelp-description|help}}",
+       "apihelp-help-param-modules": "{{doc-apihelp-param|help|modules}}",
+       "apihelp-help-param-submodules": "{{doc-apihelp-param|help|submodules}}",
+       "apihelp-help-param-recursivesubmodules": "{{doc-apihelp-param|help|recursivesubmodules}}",
+       "apihelp-help-param-helpformat": "{{doc-apihelp-param|help|helpformat}}",
+       "apihelp-help-param-wrap": "{{doc-apihelp-param|help|wrap}}",
+       "apihelp-help-param-toc": "{{doc-apihelp-param|help|toc}}",
+       "apihelp-help-example-main": "{{doc-apihelp-example|help}}",
+       "apihelp-help-example-recursive": "{{doc-apihelp-example|help}}",
+       "apihelp-help-example-help": "{{doc-apihelp-example|help}}",
+       "apihelp-help-example-query": "{{doc-apihelp-example|help}}",
+
+       "apihelp-imagerotate-description": "{{doc-apihelp-description|imagerotate}}",
+       "apihelp-imagerotate-param-rotation": "{{doc-apihelp-param|imagerotate|rotation}}",
+       "apihelp-imagerotate-example-simple": "{{doc-apihelp-example|imagerotate}}",
+       "apihelp-imagerotate-example-generator": "{{doc-apihelp-example|imagerotate}}",
+
+       "apihelp-import-description": "{{doc-apihelp-description|import}}",
+       "apihelp-import-param-summary": "{{doc-apihelp-param|import|summary}}",
+       "apihelp-import-param-xml": "{{doc-apihelp-param|import|xml}}",
+       "apihelp-import-param-interwikisource": "{{doc-apihelp-param|import|interwikisource}}",
+       "apihelp-import-param-interwikipage": "{{doc-apihelp-param|import|interwikipage}}",
+       "apihelp-import-param-fullhistory": "{{doc-apihelp-param|import|fullhistory}}",
+       "apihelp-import-param-templates": "{{doc-apihelp-param|import|templates}}",
+       "apihelp-import-param-namespace": "{{doc-apihelp-param|import|namespace}}",
+       "apihelp-import-param-rootpage": "{{doc-apihelp-param|import|rootpage}}",
+       "apihelp-import-example-import": "{{doc-apihelp-example|import}}",
+
+       "apihelp-login-description": "{{doc-apihelp-description|login}}",
+       "apihelp-login-param-name": "{{doc-apihelp-param|login|name}}",
+       "apihelp-login-param-password": "{{doc-apihelp-param|login|password}}",
+       "apihelp-login-param-domain": "{{doc-apihelp-param|login|domain}}",
+       "apihelp-login-param-token": "{{doc-apihelp-param|login|token}}",
+       "apihelp-login-example-gettoken": "{{doc-apihelp-example|login}}",
+       "apihelp-login-example-login": "{{doc-apihelp-example|login}}",
+
+       "apihelp-logout-description": "{{doc-apihelp-description|logout}}",
+       "apihelp-logout-example-logout": "{{doc-apihelp-example|logout}}",
+
+       "apihelp-move-description": "{{doc-apihelp-description|move}}",
+       "apihelp-move-param-from": "{{doc-apihelp-param|move|from}}",
+       "apihelp-move-param-fromid": "{{doc-apihelp-param|move|fromid}}",
+       "apihelp-move-param-to": "{{doc-apihelp-param|move|to}}",
+       "apihelp-move-param-reason": "{{doc-apihelp-param|move|reason}}",
+       "apihelp-move-param-movetalk": "{{doc-apihelp-param|move|movetalk}}",
+       "apihelp-move-param-movesubpages": "{{doc-apihelp-param|move|movesubpages}}",
+       "apihelp-move-param-noredirect": "{{doc-apihelp-param|move|noredirect}}",
+       "apihelp-move-param-watch": "{{doc-apihelp-param|move|watch}}",
+       "apihelp-move-param-unwatch": "{{doc-apihelp-param|move|unwatch}}",
+       "apihelp-move-param-watchlist": "{{doc-apihelp-param|move|watchlist}}",
+       "apihelp-move-param-ignorewarnings": "{{doc-apihelp-param|move|ignorewarnings}}",
+       "apihelp-move-example-move": "{{doc-apihelp-example|move}}",
+
+       "apihelp-opensearch-description": "{{doc-apihelp-description|opensearch}}",
+       "apihelp-opensearch-param-search": "{{doc-apihelp-param|opensearch|search}}",
+       "apihelp-opensearch-param-limit": "{{doc-apihelp-param|opensearch|limit}}",
+       "apihelp-opensearch-param-namespace": "{{doc-apihelp-param|opensearch|namespace}}",
+       "apihelp-opensearch-param-suggest": "{{doc-apihelp-param|opensearch|suggest}}",
+       "apihelp-opensearch-param-format": "{{doc-apihelp-param|opensearch|format}}",
+       "apihelp-opensearch-example-te": "{{doc-apihelp-example|opensearch}}",
+
+       "apihelp-options-description": "{{doc-apihelp-description|options}}",
+       "apihelp-options-param-reset": "{{doc-apihelp-param|options|reset}}",
+       "apihelp-options-param-resetkinds": "{{doc-apihelp-param|options|resetkinds}}",
+       "apihelp-options-param-change": "{{doc-apihelp-param|options|change}}",
+       "apihelp-options-param-optionname": "{{doc-apihelp-param|options|optionname}}",
+       "apihelp-options-param-optionvalue": "{{doc-apihelp-param|options|optionvalue}}",
+       "apihelp-options-example-reset": "{{doc-apihelp-example|options}}",
+       "apihelp-options-example-change": "{{doc-apihelp-example|options}}",
+       "apihelp-options-example-complex": "{{doc-apihelp-example|options}}",
+
+       "apihelp-paraminfo-description": "{{doc-apihelp-description|paraminfo}}",
+       "apihelp-paraminfo-param-modules": "{{doc-apihelp-param|paraminfo|modules}}",
+       "apihelp-paraminfo-param-helpformat": "{{doc-apihelp-param|paraminfo|helpformat}}",
+       "apihelp-paraminfo-param-querymodules": "{{doc-apihelp-param|paraminfo|querymodules}}",
+       "apihelp-paraminfo-param-mainmodule": "{{doc-apihelp-param|paraminfo|mainmodule}}",
+       "apihelp-paraminfo-param-pagesetmodule": "{{doc-apihelp-param|paraminfo|pagesetmodule}}",
+       "apihelp-paraminfo-param-formatmodules": "{{doc-apihelp-param|paraminfo|formatmodules}}",
+       "apihelp-paraminfo-example-1": "{{doc-apihelp-example|paraminfo}}",
+
+       "apihelp-parse-description": "{{doc-apihelp-description|parse}}",
+       "apihelp-parse-param-title": "{{doc-apihelp-param|parse|title}}",
+       "apihelp-parse-param-text": "{{doc-apihelp-param|parse|text}}",
+       "apihelp-parse-param-summary": "{{doc-apihelp-param|parse|summary}}",
+       "apihelp-parse-param-page": "{{doc-apihelp-param|parse|page}}",
+       "apihelp-parse-param-pageid": "{{doc-apihelp-param|parse|pageid}}",
+       "apihelp-parse-param-redirects": "{{doc-apihelp-param|parse|redirects}}",
+       "apihelp-parse-param-oldid": "{{doc-apihelp-param|parse|oldid}}",
+       "apihelp-parse-param-prop": "{{doc-apihelp-param|parse|prop}}",
+       "apihelp-parse-param-pst": "{{doc-apihelp-param|parse|pst}}",
+       "apihelp-parse-param-onlypst": "{{doc-apihelp-param|parse|onlypst}}",
+       "apihelp-parse-param-effectivelanglinks": "{{doc-apihelp-param|parse|effectivelanglinks}}",
+       "apihelp-parse-param-section": "{{doc-apihelp-param|parse|section}}",
+       "apihelp-parse-param-disablepp": "{{doc-apihelp-param|parse|disablepp}}",
+       "apihelp-parse-param-disableeditsection": "{{doc-apihelp-param|parse|disableeditsection}}",
+       "apihelp-parse-param-generatexml": "{{doc-apihelp-param|parse|generatexml|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}",
+       "apihelp-parse-param-preview": "{{doc-apihelp-param|parse|preview}}",
+       "apihelp-parse-param-sectionpreview": "{{doc-apihelp-param|parse|sectionpreview}}",
+       "apihelp-parse-param-disabletoc": "{{doc-apihelp-param|parse|disabletoc}}",
+       "apihelp-parse-param-contentformat": "{{doc-apihelp-param|parse|contentformat}}",
+       "apihelp-parse-param-contentmodel": "{{doc-apihelp-param|parse|contentmodel}}",
+       "apihelp-parse-example-page": "{{doc-apihelp-example|parse}}",
+       "apihelp-parse-example-text": "{{doc-apihelp-example|parse}}",
+       "apihelp-parse-example-texttitle": "{{doc-apihelp-example|parse}}",
+       "apihelp-parse-example-summary": "{{doc-apihelp-example|parse}}",
+
+       "apihelp-patrol-description": "{{doc-apihelp-description|patrol}}",
+       "apihelp-patrol-param-rcid": "{{doc-apihelp-param|patrol|rcid}}",
+       "apihelp-patrol-param-revid": "{{doc-apihelp-param|patrol|revid}}",
+       "apihelp-patrol-example-rcid": "{{doc-apihelp-example|patrol}}",
+       "apihelp-patrol-example-revid": "{{doc-apihelp-example|patrol}}",
+
+       "apihelp-protect-description": "{{doc-apihelp-description|protect}}",
+       "apihelp-protect-param-title": "{{doc-apihelp-param|protect|title}}",
+       "apihelp-protect-param-pageid": "{{doc-apihelp-param|protect|pageid}}",
+       "apihelp-protect-param-protections": "{{doc-apihelp-param|protect|protections}}",
+       "apihelp-protect-param-expiry": "{{doc-apihelp-param|protect|expiry}}",
+       "apihelp-protect-param-reason": "{{doc-apihelp-param|protect|reason}}",
+       "apihelp-protect-param-cascade": "{{doc-apihelp-param|protect|cascade}}",
+       "apihelp-protect-param-watch": "{{doc-apihelp-param|protect|watch}}",
+       "apihelp-protect-param-watchlist": "{{doc-apihelp-param|protect|watchlist}}",
+       "apihelp-protect-example-protect": "{{doc-apihelp-example|protect}}",
+       "apihelp-protect-example-unprotect": "{{doc-apihelp-example|protect}}",
+       "apihelp-protect-example-unprotect2": "{{doc-apihelp-example|protect}}",
+
+       "apihelp-purge-description": "{{doc-apihelp-description|purge}}",
+       "apihelp-purge-param-forcelinkupdate": "{{doc-apihelp-param|purge|forcelinkupdate}}",
+       "apihelp-purge-param-forcerecursivelinkupdate": "{{doc-apihelp-param|purge|forcerecursivelinkupdate}}",
+       "apihelp-purge-example-simple": "{{doc-apihelp-example|purge}}",
+       "apihelp-purge-example-generator": "{{doc-apihelp-example|purge}}",
+
+       "apihelp-query-description": "{{doc-apihelp-description|query}}",
+       "apihelp-query-param-prop": "{{doc-apihelp-param|query|prop}}",
+       "apihelp-query-param-list": "{{doc-apihelp-param|query|list}}",
+       "apihelp-query-param-meta": "{{doc-apihelp-param|query|meta}}",
+       "apihelp-query-param-indexpageids": "{{doc-apihelp-param|query|indexpageids}}",
+       "apihelp-query-param-export": "{{doc-apihelp-param|query|export}}",
+       "apihelp-query-param-exportnowrap": "{{doc-apihelp-param|query|exportnowrap}}",
+       "apihelp-query-param-iwurl": "{{doc-apihelp-param|query|iwurl}}",
+       "apihelp-query-param-continue": "{{doc-apihelp-param|query|continue}}",
+       "apihelp-query-param-rawcontinue": "{{doc-apihelp-param|query|rawcontinue}}",
+       "apihelp-query-example-revisions": "{{doc-apihelp-example|query}}",
+       "apihelp-query-example-allpages": "{{doc-apihelp-example|query}}",
+
+       "apihelp-query+allcategories-description": "{{doc-apihelp-description|query+allcategories}}",
+       "apihelp-query+allcategories-param-from": "{{doc-apihelp-param|query+allcategories|from}}",
+       "apihelp-query+allcategories-param-to": "{{doc-apihelp-param|query+allcategories|to}}",
+       "apihelp-query+allcategories-param-prefix": "{{doc-apihelp-param|query+allcategories|prefix}}",
+       "apihelp-query+allcategories-param-dir": "{{doc-apihelp-param|query+allcategories|dir}}",
+       "apihelp-query+allcategories-param-min": "{{doc-apihelp-param|query+allcategories|min}}",
+       "apihelp-query+allcategories-param-max": "{{doc-apihelp-param|query+allcategories|max}}",
+       "apihelp-query+allcategories-param-limit": "{{doc-apihelp-param|query+allcategories|limit}}",
+       "apihelp-query+allcategories-param-prop": "{{doc-apihelp-param|query+allcategories|prop}}",
+       "apihelp-query+allcategories-example-size": "{{doc-apihelp-example|query+allcategories}}",
+       "apihelp-query+allcategories-example-generator": "{{doc-apihelp-example|query+allcategories}}",
+
+       "apihelp-query+allfileusages-description": "{{doc-apihelp-description|query+allfileusages}}",
+       "apihelp-query+allfileusages-param-from": "{{doc-apihelp-param|query+allfileusages|from}}",
+       "apihelp-query+allfileusages-param-to": "{{doc-apihelp-param|query+allfileusages|to}}",
+       "apihelp-query+allfileusages-param-prefix": "{{doc-apihelp-param|query+allfileusages|prefix}}",
+       "apihelp-query+allfileusages-param-unique": "{{doc-apihelp-param|query+allfileusages|unique}}",
+       "apihelp-query+allfileusages-param-prop": "{{doc-apihelp-param|query+allfileusages|prop}}",
+       "apihelp-query+allfileusages-param-limit": "{{doc-apihelp-param|query+allfileusages|limit}}",
+       "apihelp-query+allfileusages-param-dir": "{{doc-apihelp-param|query+allfileusages|dir}}",
+       "apihelp-query+allfileusages-example-B": "{{doc-apihelp-example|query+allfileusages}}",
+       "apihelp-query+allfileusages-example-unique": "{{doc-apihelp-example|query+allfileusages}}",
+       "apihelp-query+allfileusages-example-unique-generator": "{{doc-apihelp-example|query+allfileusages}}",
+       "apihelp-query+allfileusages-example-generator": "{{doc-apihelp-example|query+allfileusages}}",
+
+       "apihelp-query+allimages-description": "{{doc-apihelp-description|query+allimages}}",
+       "apihelp-query+allimages-param-sort": "{{doc-apihelp-param|query+allimages|sort}}",
+       "apihelp-query+allimages-param-dir": "{{doc-apihelp-param|query+allimages|dir}}",
+       "apihelp-query+allimages-param-from": "{{doc-apihelp-param|query+allimages|from}}",
+       "apihelp-query+allimages-param-to": "{{doc-apihelp-param|query+allimages|to}}",
+       "apihelp-query+allimages-param-start": "{{doc-apihelp-param|query+allimages|start}}",
+       "apihelp-query+allimages-param-end": "{{doc-apihelp-param|query+allimages|end}}",
+       "apihelp-query+allimages-param-prop": "{{doc-apihelp-param|query+allimages|prop}}",
+       "apihelp-query+allimages-param-prefix": "{{doc-apihelp-param|query+allimages|prefix}}",
+       "apihelp-query+allimages-param-minsize": "{{doc-apihelp-param|query+allimages|minsize}}",
+       "apihelp-query+allimages-param-maxsize": "{{doc-apihelp-param|query+allimages|maxsize}}",
+       "apihelp-query+allimages-param-sha1": "{{doc-apihelp-param|query+allimages|sha1}}",
+       "apihelp-query+allimages-param-sha1base36": "{{doc-apihelp-param|query+allimages|sha1base36}}",
+       "apihelp-query+allimages-param-user": "{{doc-apihelp-param|query+allimages|user}}",
+       "apihelp-query+allimages-param-filterbots": "{{doc-apihelp-param|query+allimages|filterbots}}",
+       "apihelp-query+allimages-param-mime": "{{doc-apihelp-param|query+allimages|mime}}",
+       "apihelp-query+allimages-param-limit": "{{doc-apihelp-param|query+allimages|limit}}",
+       "apihelp-query+allimages-example-B": "{{doc-apihelp-example|query+allimages}}",
+       "apihelp-query+allimages-example-recent": "{{doc-apihelp-example|query+allimages}}",
+       "apihelp-query+allimages-example-generator": "{{doc-apihelp-example|query+allimages}}",
+
+       "apihelp-query+alllinks-description": "{{doc-apihelp-description|query+alllinks}}",
+       "apihelp-query+alllinks-param-from": "{{doc-apihelp-param|query+alllinks|from}}",
+       "apihelp-query+alllinks-param-to": "{{doc-apihelp-param|query+alllinks|to}}",
+       "apihelp-query+alllinks-param-prefix": "{{doc-apihelp-param|query+alllinks|prefix}}",
+       "apihelp-query+alllinks-param-unique": "{{doc-apihelp-param|query+alllinks|unique}}",
+       "apihelp-query+alllinks-param-prop": "{{doc-apihelp-param|query+alllinks|prop}}",
+       "apihelp-query+alllinks-param-namespace": "{{doc-apihelp-param|query+alllinks|namespace}}",
+       "apihelp-query+alllinks-param-limit": "{{doc-apihelp-param|query+alllinks|limit}}",
+       "apihelp-query+alllinks-param-dir": "{{doc-apihelp-param|query+alllinks|dir}}",
+       "apihelp-query+alllinks-example-B": "{{doc-apihelp-example|query+alllinks}}",
+       "apihelp-query+alllinks-example-unique": "{{doc-apihelp-example|query+alllinks}}",
+       "apihelp-query+alllinks-example-unique-generator": "{{doc-apihelp-example|query+alllinks}}",
+       "apihelp-query+alllinks-example-generator": "{{doc-apihelp-example|query+alllinks}}",
+
+       "apihelp-query+allmessages-description": "{{doc-apihelp-description|query+allmessages}}",
+       "apihelp-query+allmessages-param-messages": "{{doc-apihelp-param|query+allmessages|messages}}",
+       "apihelp-query+allmessages-param-prop": "{{doc-apihelp-param|query+allmessages|prop}}",
+       "apihelp-query+allmessages-param-enableparser": "{{doc-apihelp-param|query+allmessages|enableparser}}",
+       "apihelp-query+allmessages-param-nocontent": "{{doc-apihelp-param|query+allmessages|nocontent}}",
+       "apihelp-query+allmessages-param-includelocal": "{{doc-apihelp-param|query+allmessages|includelocal}}",
+       "apihelp-query+allmessages-param-args": "{{doc-apihelp-param|query+allmessages|args}}",
+       "apihelp-query+allmessages-param-filter": "{{doc-apihelp-param|query+allmessages|filter}}",
+       "apihelp-query+allmessages-param-customised": "{{doc-apihelp-param|query+allmessages|customised}}",
+       "apihelp-query+allmessages-param-lang": "{{doc-apihelp-param|query+allmessages|lang}}",
+       "apihelp-query+allmessages-param-from": "{{doc-apihelp-param|query+allmessages|from}}",
+       "apihelp-query+allmessages-param-to": "{{doc-apihelp-param|query+allmessages|to}}",
+       "apihelp-query+allmessages-param-title": "{{doc-apihelp-param|query+allmessages|title}}",
+       "apihelp-query+allmessages-param-prefix": "{{doc-apihelp-param|query+allmessages|prefix}}",
+       "apihelp-query+allmessages-example-ipb": "{{doc-apihelp-example|query+allmessages}}",
+       "apihelp-query+allmessages-example-de": "{{doc-apihelp-example|query+allmessages}}",
+
+       "apihelp-query+allpages-description": "{{doc-apihelp-description|query+allpages}}",
+       "apihelp-query+allpages-param-from": "{{doc-apihelp-param|query+allpages|from}}",
+       "apihelp-query+allpages-param-to": "{{doc-apihelp-param|query+allpages|to}}",
+       "apihelp-query+allpages-param-prefix": "{{doc-apihelp-param|query+allpages|prefix}}",
+       "apihelp-query+allpages-param-namespace": "{{doc-apihelp-param|query+allpages|namespace}}",
+       "apihelp-query+allpages-param-filterredir": "{{doc-apihelp-param|query+allpages|filterredir}}",
+       "apihelp-query+allpages-param-minsize": "{{doc-apihelp-param|query+allpages|minsize}}",
+       "apihelp-query+allpages-param-maxsize": "{{doc-apihelp-param|query+allpages|maxsize}}",
+       "apihelp-query+allpages-param-prtype": "{{doc-apihelp-param|query+allpages|prtype}}",
+       "apihelp-query+allpages-param-prlevel": "{{doc-apihelp-param|query+allpages|prlevel}}",
+       "apihelp-query+allpages-param-prfiltercascade": "{{doc-apihelp-param|query+allpages|prfiltercascade}}",
+       "apihelp-query+allpages-param-limit": "{{doc-apihelp-param|query+allpages|limit}}",
+       "apihelp-query+allpages-param-dir": "{{doc-apihelp-param|query+allpages|dir}}",
+       "apihelp-query+allpages-param-filterlanglinks": "{{doc-apihelp-param|query+allpages|filterlanglinks}}",
+       "apihelp-query+allpages-param-prexpiry": "{{doc-apihelp-param|query+allpages|prexpiry}}",
+       "apihelp-query+allpages-example-B": "{{doc-apihelp-example|query+allpages}}",
+       "apihelp-query+allpages-example-generator": "{{doc-apihelp-example|query+allpages}}",
+       "apihelp-query+allpages-example-generator-revisions": "{{doc-apihelp-example|query+allpages}}",
+
+       "apihelp-query+allredirects-description": "{{doc-apihelp-description|query+allredirects}}",
+       "apihelp-query+allredirects-param-from": "{{doc-apihelp-param|query+allredirects|from}}",
+       "apihelp-query+allredirects-param-to": "{{doc-apihelp-param|query+allredirects|to}}",
+       "apihelp-query+allredirects-param-prefix": "{{doc-apihelp-param|query+allredirects|prefix}}",
+       "apihelp-query+allredirects-param-unique": "{{doc-apihelp-param|query+allredirects|unique}}",
+       "apihelp-query+allredirects-param-prop": "{{doc-apihelp-param|query+allredirects|prop}}",
+       "apihelp-query+allredirects-param-namespace": "{{doc-apihelp-param|query+allredirects|namespace}}",
+       "apihelp-query+allredirects-param-limit": "{{doc-apihelp-param|query+allredirects|limit}}",
+       "apihelp-query+allredirects-param-dir": "{{doc-apihelp-param|query+allredirects|dir}}",
+       "apihelp-query+allredirects-example-B": "{{doc-apihelp-example|query+allredirects}}",
+       "apihelp-query+allredirects-example-unique": "{{doc-apihelp-example|query+allredirects}}",
+       "apihelp-query+allredirects-example-unique-generator": "{{doc-apihelp-example|query+allredirects}}",
+       "apihelp-query+allredirects-example-generator": "{{doc-apihelp-example|query+allredirects}}",
+
+       "apihelp-query+alltransclusions-description": "{{doc-apihelp-description|query+alltransclusions}}",
+       "apihelp-query+alltransclusions-param-from": "{{doc-apihelp-param|query+alltransclusions|from}}",
+       "apihelp-query+alltransclusions-param-to": "{{doc-apihelp-param|query+alltransclusions|to}}",
+       "apihelp-query+alltransclusions-param-prefix": "{{doc-apihelp-param|query+alltransclusions|prefix}}",
+       "apihelp-query+alltransclusions-param-unique": "{{doc-apihelp-param|query+alltransclusions|unique}}",
+       "apihelp-query+alltransclusions-param-prop": "{{doc-apihelp-param|query+alltransclusions|prop}}",
+       "apihelp-query+alltransclusions-param-namespace": "{{doc-apihelp-param|query+alltransclusions|namespace}}",
+       "apihelp-query+alltransclusions-param-limit": "{{doc-apihelp-param|query+alltransclusions|limit}}",
+       "apihelp-query+alltransclusions-param-dir": "{{doc-apihelp-param|query+alltransclusions|dir}}",
+       "apihelp-query+alltransclusions-example-B": "{{doc-apihelp-example|query+alltransclusions}}",
+       "apihelp-query+alltransclusions-example-unique": "{{doc-apihelp-example|query+alltransclusions}}",
+       "apihelp-query+alltransclusions-example-unique-generator": "{{doc-apihelp-example|query+alltransclusions}}",
+       "apihelp-query+alltransclusions-example-generator": "{{doc-apihelp-example|query+alltransclusions}}",
+
+       "apihelp-query+allusers-description": "{{doc-apihelp-description|query+allusers}}",
+       "apihelp-query+allusers-param-from": "{{doc-apihelp-param|query+allusers|from}}",
+       "apihelp-query+allusers-param-to": "{{doc-apihelp-param|query+allusers|to}}",
+       "apihelp-query+allusers-param-prefix": "{{doc-apihelp-param|query+allusers|prefix}}",
+       "apihelp-query+allusers-param-dir": "{{doc-apihelp-param|query+allusers|dir}}",
+       "apihelp-query+allusers-param-group": "{{doc-apihelp-param|query+allusers|group}}",
+       "apihelp-query+allusers-param-excludegroup": "{{doc-apihelp-param|query+allusers|excludegroup}}",
+       "apihelp-query+allusers-param-rights": "{{doc-apihelp-param|query+allusers|rights}}",
+       "apihelp-query+allusers-param-prop": "{{doc-apihelp-param|query+allusers|prop}}",
+       "apihelp-query+allusers-param-limit": "{{doc-apihelp-param|query+allusers|limit}}",
+       "apihelp-query+allusers-param-witheditsonly": "{{doc-apihelp-param|query+allusers|witheditsonly}}",
+       "apihelp-query+allusers-param-activeusers": "{{doc-apihelp-param|query+allusers|activeusers|params=* $1 - Value of [[mw:Manual:$wgActiveUserDays]]|paramstart=2}}",
+       "apihelp-query+allusers-example-Y": "{{doc-apihelp-example|query+allusers}}",
+
+       "apihelp-query+backlinks-description": "{{doc-apihelp-description|query+backlinks}}",
+       "apihelp-query+backlinks-param-title": "{{doc-apihelp-param|query+backlinks|title}}",
+       "apihelp-query+backlinks-param-pageid": "{{doc-apihelp-param|query+backlinks|pageid}}",
+       "apihelp-query+backlinks-param-namespace": "{{doc-apihelp-param|query+backlinks|namespace}}",
+       "apihelp-query+backlinks-param-dir": "{{doc-apihelp-param|query+backlinks|dir}}",
+       "apihelp-query+backlinks-param-filterredir": "{{doc-apihelp-param|query+backlinks|filterredir}}",
+       "apihelp-query+backlinks-param-limit": "{{doc-apihelp-param|query+backlinks|limit}}",
+       "apihelp-query+backlinks-param-redirect": "{{doc-apihelp-param|query+backlinks|redirect}}",
+       "apihelp-query+backlinks-example-simple": "{{doc-apihelp-example|query+backlinks}}",
+       "apihelp-query+backlinks-example-generator": "{{doc-apihelp-example|query+backlinks}}",
+
+       "apihelp-query+blocks-description": "{{doc-apihelp-description|query+blocks}}",
+       "apihelp-query+blocks-param-start": "{{doc-apihelp-param|query+blocks|start}}",
+       "apihelp-query+blocks-param-end": "{{doc-apihelp-param|query+blocks|end}}",
+       "apihelp-query+blocks-param-ids": "{{doc-apihelp-param|query+blocks|ids}}",
+       "apihelp-query+blocks-param-users": "{{doc-apihelp-param|query+blocks|users}}",
+       "apihelp-query+blocks-param-ip": "{{doc-apihelp-param|query+blocks|ip|params=* $1 - Minimum CIDR prefix for IPv4\n* $2 - Minimum CIDR prefix for IPv6|paramstart=3}}",
+       "apihelp-query+blocks-param-limit": "{{doc-apihelp-param|query+blocks|limit}}",
+       "apihelp-query+blocks-param-prop": "{{doc-apihelp-param|query+blocks|prop}}",
+       "apihelp-query+blocks-param-show": "{{doc-apihelp-param|query+blocks|show}}",
+       "apihelp-query+blocks-example-simple": "{{doc-apihelp-example|query+blocks}}",
+       "apihelp-query+blocks-example-users": "{{doc-apihelp-example|query+blocks}}",
+
+       "apihelp-query+categories-description": "{{doc-apihelp-description|query+categories}}",
+       "apihelp-query+categories-param-prop": "{{doc-apihelp-param|query+categories|prop}}",
+       "apihelp-query+categories-param-show": "{{doc-apihelp-param|query+categories|show}}",
+       "apihelp-query+categories-param-limit": "{{doc-apihelp-param|query+categories|limit}}",
+       "apihelp-query+categories-param-categories": "{{doc-apihelp-param|query+categories|categories}}",
+       "apihelp-query+categories-param-dir": "{{doc-apihelp-param|query+categories|dir}}",
+       "apihelp-query+categories-example-simple": "{{doc-apihelp-example|query+categories}}",
+       "apihelp-query+categories-example-generator": "{{doc-apihelp-example|query+categories}}",
+
+       "apihelp-query+categoryinfo-description": "{{doc-apihelp-description|query+categoryinfo}}",
+       "apihelp-query+categoryinfo-example-simple": "{{doc-apihelp-example|query+categoryinfo}}",
+
+       "apihelp-query+categorymembers-description": "{{doc-apihelp-description|query+categorymembers}}",
+       "apihelp-query+categorymembers-param-title": "{{doc-apihelp-param|query+categorymembers|title}}",
+       "apihelp-query+categorymembers-param-pageid": "{{doc-apihelp-param|query+categorymembers|pageid}}",
+       "apihelp-query+categorymembers-param-prop": "{{doc-apihelp-param|query+categorymembers|prop}}",
+       "apihelp-query+categorymembers-param-namespace": "{{doc-apihelp-param|query+categorymembers|namespace}}",
+       "apihelp-query+categorymembers-param-type": "{{doc-apihelp-param|query+categorymembers|type}}",
+       "apihelp-query+categorymembers-param-limit": "{{doc-apihelp-param|query+categorymembers|limit}}",
+       "apihelp-query+categorymembers-param-sort": "{{doc-apihelp-param|query+categorymembers|sort}}",
+       "apihelp-query+categorymembers-param-dir": "{{doc-apihelp-param|query+categorymembers|dir}}",
+       "apihelp-query+categorymembers-param-start": "{{doc-apihelp-param|query+categorymembers|start}}",
+       "apihelp-query+categorymembers-param-end": "{{doc-apihelp-param|query+categorymembers|end}}",
+       "apihelp-query+categorymembers-param-starthexsortkey": "{{doc-apihelp-param|query+categorymembers|starthexsortkey}}",
+       "apihelp-query+categorymembers-param-endhexsortkey": "{{doc-apihelp-param|query+categorymembers|endhexsortkey}}",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "{{doc-apihelp-param|query+categorymembers|startsortkeyprefix}}",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "{{doc-apihelp-param|query+categorymembers|endsortkeyprefix}}",
+       "apihelp-query+categorymembers-param-startsortkey": "{{doc-apihelp-param|query+categorymembers|startsortkey}}",
+       "apihelp-query+categorymembers-param-endsortkey": "{{doc-apihelp-param|query+categorymembers|endsortkey}}",
+       "apihelp-query+categorymembers-example-simple": "{{doc-apihelp-example|query+categorymembers}}",
+       "apihelp-query+categorymembers-example-generator": "{{doc-apihelp-example|query+categorymembers}}",
+
+       "apihelp-query+contributors-description": "{{doc-apihelp-description|query+contributors}}",
+       "apihelp-query+contributors-param-group": "{{doc-apihelp-param|query+contributors|group}}",
+       "apihelp-query+contributors-param-excludegroup": "{{doc-apihelp-param|query+contributors|excludegroup}}",
+       "apihelp-query+contributors-param-rights": "{{doc-apihelp-param|query+contributors|rights}}",
+       "apihelp-query+contributors-param-excluderights": "{{doc-apihelp-param|query+contributors|excluderights}}",
+       "apihelp-query+contributors-param-limit": "{{doc-apihelp-param|query+contributors|limit}}",
+       "apihelp-query+contributors-example-simple": "{{doc-apihelp-example|query+contributors}}",
+
+       "apihelp-query+deletedrevs-description": "{{doc-apihelp-description|query+deletedrevs}}",
+       "apihelp-query+deletedrevs-paraminfo-modes": "{{doc-apihelp-paraminfo|query+deletedrevs|modes}}",
+       "apihelp-query+deletedrevs-param-start": "{{doc-apihelp-param|query+deletedrevs|start}}",
+       "apihelp-query+deletedrevs-param-end": "{{doc-apihelp-param|query+deletedrevs|end}}",
+       "apihelp-query+deletedrevs-param-from": "{{doc-apihelp-param|query+deletedrevs|from}}",
+       "apihelp-query+deletedrevs-param-to": "{{doc-apihelp-param|query+deletedrevs|to}}",
+       "apihelp-query+deletedrevs-param-prefix": "{{doc-apihelp-param|query+deletedrevs|prefix}}",
+       "apihelp-query+deletedrevs-param-unique": "{{doc-apihelp-param|query+deletedrevs|unique}}",
+       "apihelp-query+deletedrevs-param-tag": "{{doc-apihelp-param|query+deletedrevs|tag}}",
+       "apihelp-query+deletedrevs-param-user": "{{doc-apihelp-param|query+deletedrevs|user}}",
+       "apihelp-query+deletedrevs-param-excludeuser": "{{doc-apihelp-param|query+deletedrevs|excludeuser}}",
+       "apihelp-query+deletedrevs-param-namespace": "{{doc-apihelp-param|query+deletedrevs|namespace}}",
+       "apihelp-query+deletedrevs-param-limit": "{{doc-apihelp-param|query+deletedrevs|limit}}",
+       "apihelp-query+deletedrevs-param-prop": "{{doc-apihelp-param|query+deletedrevs|prop}}",
+       "apihelp-query+deletedrevs-example-mode1": "{{doc-apihelp-example|query+deletedrevs}}",
+       "apihelp-query+deletedrevs-example-mode2": "{{doc-apihelp-example|query+deletedrevs}}",
+       "apihelp-query+deletedrevs-example-mode3-main": "{{doc-apihelp-example|query+deletedrevs}}",
+       "apihelp-query+deletedrevs-example-mode3-talk": "{{doc-apihelp-example|query+deletedrevs}}",
+
+       "apihelp-query+disabled-description": "{{doc-apihelp-description|query+disabled}}",
+
+       "apihelp-query+duplicatefiles-description": "{{doc-apihelp-description|query+duplicatefiles}}",
+       "apihelp-query+duplicatefiles-param-limit": "{{doc-apihelp-param|query+duplicatefiles|limit}}",
+       "apihelp-query+duplicatefiles-param-dir": "{{doc-apihelp-param|query+duplicatefiles|dir}}",
+       "apihelp-query+duplicatefiles-param-localonly": "{{doc-apihelp-param|query+duplicatefiles|localonly}}",
+       "apihelp-query+duplicatefiles-example-simple": "{{doc-apihelp-example|query+duplicatefiles}}",
+       "apihelp-query+duplicatefiles-example-generated": "{{doc-apihelp-example|query+duplicatefiles}}",
+
+       "apihelp-query+embeddedin-description": "{{doc-apihelp-description|query+embeddedin}}",
+       "apihelp-query+embeddedin-param-title": "{{doc-apihelp-param|query+embeddedin|title}}",
+       "apihelp-query+embeddedin-param-pageid": "{{doc-apihelp-param|query+embeddedin|pageid}}",
+       "apihelp-query+embeddedin-param-namespace": "{{doc-apihelp-param|query+embeddedin|namespace}}",
+       "apihelp-query+embeddedin-param-dir": "{{doc-apihelp-param|query+embeddedin|dir}}",
+       "apihelp-query+embeddedin-param-filterredir": "{{doc-apihelp-param|query+embeddedin|filterredir}}",
+       "apihelp-query+embeddedin-param-limit": "{{doc-apihelp-param|query+embeddedin|limit}}",
+       "apihelp-query+embeddedin-example-simple": "{{doc-apihelp-example|query+embeddedin}}",
+       "apihelp-query+embeddedin-example-generator": "{{doc-apihelp-example|query+embeddedin}}",
+
+       "apihelp-query+extlinks-description": "{{doc-apihelp-description|query+extlinks}}",
+       "apihelp-query+extlinks-param-limit": "{{doc-apihelp-param|query+extlinks|limit}}",
+       "apihelp-query+extlinks-param-protocol": "{{doc-apihelp-param|query+extlinks|protocol}}",
+       "apihelp-query+extlinks-param-query": "{{doc-apihelp-param|query+extlinks|query}}",
+       "apihelp-query+extlinks-param-expandurl": "{{doc-apihelp-param|query+extlinks|expandurl}}",
+       "apihelp-query+extlinks-example-simple": "{{doc-apihelp-example|query+extlinks}}",
+
+       "apihelp-query+exturlusage-description": "{{doc-apihelp-description|query+exturlusage}}",
+       "apihelp-query+exturlusage-param-prop": "{{doc-apihelp-param|query+exturlusage|prop}}",
+       "apihelp-query+exturlusage-param-protocol": "{{doc-apihelp-param|query+exturlusage|protocol}}",
+       "apihelp-query+exturlusage-param-query": "{{doc-apihelp-param|query+exturlusage|query}}",
+       "apihelp-query+exturlusage-param-namespace": "{{doc-apihelp-param|query+exturlusage|namespace}}",
+       "apihelp-query+exturlusage-param-limit": "{{doc-apihelp-param|query+exturlusage|limit}}",
+       "apihelp-query+exturlusage-param-expandurl": "{{doc-apihelp-param|query+exturlusage|expandurl}}",
+       "apihelp-query+exturlusage-example-simple": "{{doc-apihelp-example|query+exturlusage}}",
+
+       "apihelp-query+filearchive-description": "{{doc-apihelp-description|query+filearchive}}",
+       "apihelp-query+filearchive-param-from": "{{doc-apihelp-param|query+filearchive|from}}",
+       "apihelp-query+filearchive-param-to": "{{doc-apihelp-param|query+filearchive|to}}",
+       "apihelp-query+filearchive-param-prefix": "{{doc-apihelp-param|query+filearchive|prefix}}",
+       "apihelp-query+filearchive-param-limit": "{{doc-apihelp-param|query+filearchive|limit}}",
+       "apihelp-query+filearchive-param-dir": "{{doc-apihelp-param|query+filearchive|dir}}",
+       "apihelp-query+filearchive-param-sha1": "{{doc-apihelp-param|query+filearchive|sha1}}",
+       "apihelp-query+filearchive-param-sha1base36": "{{doc-apihelp-param|query+filearchive|sha1base36}}",
+       "apihelp-query+filearchive-param-prop": "{{doc-apihelp-param|query+filearchive|prop}}",
+       "apihelp-query+filearchive-example-simple": "{{doc-apihelp-example|query+filearchive}}",
+
+       "apihelp-query+filerepoinfo-description": "{{doc-apihelp-description|query+filerepoinfo}}",
+       "apihelp-query+filerepoinfo-param-prop": "{{doc-apihelp-param|query+filerepoinfo|prop}}",
+       "apihelp-query+filerepoinfo-example-simple": "{{doc-apihelp-example|query+filerepoinfo}}",
+
+       "apihelp-query+fileusage-description": "{{doc-apihelp-description|query+fileusage}}",
+       "apihelp-query+fileusage-param-prop": "{{doc-apihelp-param|query+fileusage|prop}}",
+       "apihelp-query+fileusage-param-namespace": "{{doc-apihelp-param|query+fileusage|namespace}}",
+       "apihelp-query+fileusage-param-limit": "{{doc-apihelp-param|query+fileusage|limit}}",
+       "apihelp-query+fileusage-param-show": "{{doc-apihelp-param|query+fileusage|show}}",
+       "apihelp-query+fileusage-example-simple": "{{doc-apihelp-example|query+fileusage}}",
+       "apihelp-query+fileusage-example-generator": "{{doc-apihelp-example|query+fileusage}}",
+
+       "apihelp-query+imageinfo-description": "{{doc-apihelp-description|query+imageinfo}}",
+       "apihelp-query+imageinfo-param-prop": "{{doc-apihelp-param|query+imageinfo|prop}}",
+       "apihelp-query+imageinfo-param-limit": "{{doc-apihelp-param|query+imageinfo|limit}}",
+       "apihelp-query+imageinfo-param-start": "{{doc-apihelp-param|query+imageinfo|start}}",
+       "apihelp-query+imageinfo-param-end": "{{doc-apihelp-param|query+imageinfo|end}}",
+       "apihelp-query+imageinfo-param-urlwidth": "{{doc-apihelp-param|query+imageinfo|urlwidth|params=* $1 - Maximum number of thumbnails per query|paramstart=2}}",
+       "apihelp-query+imageinfo-param-urlheight": "{{doc-apihelp-param|query+imageinfo|urlheight}}",
+       "apihelp-query+imageinfo-param-metadataversion": "{{doc-apihelp-param|query+imageinfo|metadataversion}}",
+       "apihelp-query+imageinfo-param-extmetadatalanguage": "{{doc-apihelp-param|query+imageinfo|extmetadatalanguage}}",
+       "apihelp-query+imageinfo-param-extmetadatamultilang": "{{doc-apihelp-param|query+imageinfo|extmetadatamultilang}}",
+       "apihelp-query+imageinfo-param-extmetadatafilter": "{{doc-apihelp-param|query+imageinfo|extmetadatafilter}}",
+       "apihelp-query+imageinfo-param-urlparam": "{{doc-apihelp-param|query+imageinfo|urlparam}}",
+       "apihelp-query+imageinfo-param-localonly": "{{doc-apihelp-param|query+imageinfo|localonly}}",
+       "apihelp-query+imageinfo-example-simple": "{{doc-apihelp-example|query+imageinfo}}",
+       "apihelp-query+imageinfo-example-dated": "{{doc-apihelp-example|query+imageinfo}}",
+
+       "apihelp-query+images-description": "{{doc-apihelp-description|query+images}}",
+       "apihelp-query+images-param-limit": "{{doc-apihelp-param|query+images|limit}}",
+       "apihelp-query+images-param-images": "{{doc-apihelp-param|query+images|images}}",
+       "apihelp-query+images-param-dir": "{{doc-apihelp-param|query+images|dir}}",
+       "apihelp-query+images-example-simple": "{{doc-apihelp-example|query+images}}",
+       "apihelp-query+images-example-generator": "{{doc-apihelp-example|query+images}}",
+
+       "apihelp-query+imageusage-description": "{{doc-apihelp-description|query+imageusage}}",
+       "apihelp-query+imageusage-param-title": "{{doc-apihelp-param|query+imageusage|title}}",
+       "apihelp-query+imageusage-param-pageid": "{{doc-apihelp-param|query+imageusage|pageid}}",
+       "apihelp-query+imageusage-param-namespace": "{{doc-apihelp-param|query+imageusage|namespace}}",
+       "apihelp-query+imageusage-param-dir": "{{doc-apihelp-param|query+imageusage|dir}}",
+       "apihelp-query+imageusage-param-filterredir": "{{doc-apihelp-param|query+imageusage|filterredir}}",
+       "apihelp-query+imageusage-param-limit": "{{doc-apihelp-param|query+imageusage|limit}}",
+       "apihelp-query+imageusage-param-redirect": "{{doc-apihelp-param|query+imageusage|redirect}}",
+       "apihelp-query+imageusage-example-simple": "{{doc-apihelp-example|query+imageusage}}",
+       "apihelp-query+imageusage-example-generator": "{{doc-apihelp-example|query+imageusage}}",
+
+       "apihelp-query+info-description": "{{doc-apihelp-description|query+info}}",
+       "apihelp-query+info-param-prop": "{{doc-apihelp-param|query+info|prop}}",
+       "apihelp-query+info-param-token": "{{doc-apihelp-param|query+info|token}}",
+       "apihelp-query+info-example-simple": "{{doc-apihelp-example|query+info}}",
+       "apihelp-query+info-example-protection": "{{doc-apihelp-example|query+info}}",
+
+       "apihelp-query+iwbacklinks-description": "{{doc-apihelp-description|query+iwbacklinks}}",
+       "apihelp-query+iwbacklinks-param-prefix": "{{doc-apihelp-param|query+iwbacklinks|prefix}}",
+       "apihelp-query+iwbacklinks-param-title": "{{doc-apihelp-param|query+iwbacklinks|title}}",
+       "apihelp-query+iwbacklinks-param-limit": "{{doc-apihelp-param|query+iwbacklinks|limit}}",
+       "apihelp-query+iwbacklinks-param-prop": "{{doc-apihelp-param|query+iwbacklinks|prop}}",
+       "apihelp-query+iwbacklinks-param-dir": "{{doc-apihelp-param|query+iwbacklinks|dir}}",
+       "apihelp-query+iwbacklinks-example-simple": "{{doc-apihelp-example|query+iwbacklinks}}",
+       "apihelp-query+iwbacklinks-example-generator": "{{doc-apihelp-example|query+iwbacklinks}}",
+
+       "apihelp-query+iwlinks-description": "{{doc-apihelp-description|query+iwlinks}}",
+       "apihelp-query+iwlinks-param-url": "{{doc-apihelp-param|query+iwlinks|url}}",
+       "apihelp-query+iwlinks-param-prop": "{{doc-apihelp-param|query+iwlinks|prop}}",
+       "apihelp-query+iwlinks-param-limit": "{{doc-apihelp-param|query+iwlinks|limit}}",
+       "apihelp-query+iwlinks-param-prefix": "{{doc-apihelp-param|query+iwlinks|prefix}}",
+       "apihelp-query+iwlinks-param-title": "{{doc-apihelp-param|query+iwlinks|title}}",
+       "apihelp-query+iwlinks-param-dir": "{{doc-apihelp-param|query+iwlinks|dir}}",
+       "apihelp-query+iwlinks-example-simple": "{{doc-apihelp-example|query+iwlinks}}",
+
+       "apihelp-query+langbacklinks-description": "{{doc-apihelp-description|query+langbacklinks}}",
+       "apihelp-query+langbacklinks-param-lang": "{{doc-apihelp-param|query+langbacklinks|lang}}",
+       "apihelp-query+langbacklinks-param-title": "{{doc-apihelp-param|query+langbacklinks|title}}",
+       "apihelp-query+langbacklinks-param-limit": "{{doc-apihelp-param|query+langbacklinks|limit}}",
+       "apihelp-query+langbacklinks-param-prop": "{{doc-apihelp-param|query+langbacklinks|prop}}",
+       "apihelp-query+langbacklinks-param-dir": "{{doc-apihelp-param|query+langbacklinks|dir}}",
+       "apihelp-query+langbacklinks-example-simple": "{{doc-apihelp-example|query+langbacklinks}}",
+       "apihelp-query+langbacklinks-example-generator": "{{doc-apihelp-example|query+langbacklinks}}",
+
+       "apihelp-query+langlinks-description": "{{doc-apihelp-description|query+langlinks}}",
+       "apihelp-query+langlinks-param-limit": "{{doc-apihelp-param|query+langlinks|limit}}",
+       "apihelp-query+langlinks-param-url": "{{doc-apihelp-param|query+langlinks|url}}",
+       "apihelp-query+langlinks-param-prop": "{{doc-apihelp-param|query+langlinks|prop}}",
+       "apihelp-query+langlinks-param-lang": "{{doc-apihelp-param|query+langlinks|lang}}",
+       "apihelp-query+langlinks-param-title": "{{doc-apihelp-param|query+langlinks|title}}",
+       "apihelp-query+langlinks-param-dir": "{{doc-apihelp-param|query+langlinks|dir}}",
+       "apihelp-query+langlinks-param-inlanguagecode": "{{doc-apihelp-param|query+langlinks|inlanguagecode}}",
+       "apihelp-query+langlinks-example-simple": "{{doc-apihelp-example|query+langlinks}}",
+
+       "apihelp-query+links-description": "{{doc-apihelp-description|query+links}}",
+       "apihelp-query+links-param-namespace": "{{doc-apihelp-param|query+links|namespace}}",
+       "apihelp-query+links-param-limit": "{{doc-apihelp-param|query+links|limit}}",
+       "apihelp-query+links-param-titles": "{{doc-apihelp-param|query+links|titles}}",
+       "apihelp-query+links-param-dir": "{{doc-apihelp-param|query+links|dir}}",
+       "apihelp-query+links-example-simple": "{{doc-apihelp-example|query+links}}",
+       "apihelp-query+links-example-generator": "{{doc-apihelp-example|query+links}}",
+       "apihelp-query+links-example-namespaces": "{{doc-apihelp-example|query+links}}",
+
+       "apihelp-query+linkshere-description": "{{doc-apihelp-description|query+linkshere}}",
+       "apihelp-query+linkshere-param-prop": "{{doc-apihelp-param|query+linkshere|prop}}",
+       "apihelp-query+linkshere-param-namespace": "{{doc-apihelp-param|query+linkshere|namespace}}",
+       "apihelp-query+linkshere-param-limit": "{{doc-apihelp-param|query+linkshere|limit}}",
+       "apihelp-query+linkshere-param-show": "{{doc-apihelp-param|query+linkshere|show}}",
+       "apihelp-query+linkshere-example-simple": "{{doc-apihelp-example|query+linkshere}}",
+       "apihelp-query+linkshere-example-generator": "{{doc-apihelp-example|query+linkshere}}",
+
+       "apihelp-query+logevents-description": "{{doc-apihelp-description|query+logevents}}",
+       "apihelp-query+logevents-param-prop": "{{doc-apihelp-param|query+logevents|prop}}",
+       "apihelp-query+logevents-param-type": "{{doc-apihelp-param|query+logevents|type}}",
+       "apihelp-query+logevents-param-action": "{{doc-apihelp-param|query+logevents|action}}",
+       "apihelp-query+logevents-param-start": "{{doc-apihelp-param|query+logevents|start}}",
+       "apihelp-query+logevents-param-end": "{{doc-apihelp-param|query+logevents|end}}",
+       "apihelp-query+logevents-param-user": "{{doc-apihelp-param|query+logevents|user}}",
+       "apihelp-query+logevents-param-title": "{{doc-apihelp-param|query+logevents|title}}",
+       "apihelp-query+logevents-param-namespace": "{{doc-apihelp-param|query+logevents|namespace}}",
+       "apihelp-query+logevents-param-prefix": "{{doc-apihelp-param|query+logevents|prefix}}",
+       "apihelp-query+logevents-param-tag": "{{doc-apihelp-param|query+logevents|tag}}",
+       "apihelp-query+logevents-param-limit": "{{doc-apihelp-param|query+logevents|limit}}",
+       "apihelp-query+logevents-example-simple": "{{doc-apihelp-example|query+logevents}}",
+
+       "apihelp-query+pagepropnames-description": "{{doc-apihelp-description|query+pagepropnames}}",
+       "apihelp-query+pagepropnames-param-limit": "{{doc-apihelp-param|query+pagepropnames|limit}}",
+       "apihelp-query+pagepropnames-example-simple": "{{doc-apihelp-example|query+pagepropnames}}",
+
+       "apihelp-query+pageprops-description": "{{doc-apihelp-description|query+pageprops}}",
+       "apihelp-query+pageprops-param-prop": "{{doc-apihelp-param|query+pageprops|prop}}",
+       "apihelp-query+pageprops-example-simple": "{{doc-apihelp-example|query+pageprops}}",
+
+       "apihelp-query+pageswithprop-description": "{{doc-apihelp-description|query+pageswithprop}}",
+       "apihelp-query+pageswithprop-param-propname": "{{doc-apihelp-param|query+pageswithprop|propname}}",
+       "apihelp-query+pageswithprop-param-prop": "{{doc-apihelp-param|query+pageswithprop|prop}}",
+       "apihelp-query+pageswithprop-param-limit": "{{doc-apihelp-param|query+pageswithprop|limit}}",
+       "apihelp-query+pageswithprop-param-dir": "{{doc-apihelp-param|query+pageswithprop|dir}}",
+       "apihelp-query+pageswithprop-example-simple": "{{doc-apihelp-example|query+pageswithprop}}",
+       "apihelp-query+pageswithprop-example-generator": "{{doc-apihelp-example|query+pageswithprop}}",
+
+       "apihelp-query+prefixsearch-description": "{{doc-apihelp-description|query+prefixsearch}}",
+       "apihelp-query+prefixsearch-param-search": "{{doc-apihelp-param|query+prefixsearch|search}}",
+       "apihelp-query+prefixsearch-param-namespace": "{{doc-apihelp-param|query+prefixsearch|namespace}}",
+       "apihelp-query+prefixsearch-param-limit": "{{doc-apihelp-param|query+prefixsearch|limit}}",
+       "apihelp-query+prefixsearch-example-simple": "{{doc-apihelp-example|query+prefixsearch}}",
+
+       "apihelp-query+protectedtitles-description": "{{doc-apihelp-description|query+protectedtitles}}",
+       "apihelp-query+protectedtitles-param-namespace": "{{doc-apihelp-param|query+protectedtitles|namespace}}",
+       "apihelp-query+protectedtitles-param-level": "{{doc-apihelp-param|query+protectedtitles|level}}",
+       "apihelp-query+protectedtitles-param-limit": "{{doc-apihelp-param|query+protectedtitles|limit}}",
+       "apihelp-query+protectedtitles-param-start": "{{doc-apihelp-param|query+protectedtitles|start}}",
+       "apihelp-query+protectedtitles-param-end": "{{doc-apihelp-param|query+protectedtitles|end}}",
+       "apihelp-query+protectedtitles-param-prop": "{{doc-apihelp-param|query+protectedtitles|prop}}",
+       "apihelp-query+protectedtitles-example-simple": "{{doc-apihelp-example|query+protectedtitles}}",
+       "apihelp-query+protectedtitles-example-generator": "{{doc-apihelp-example|query+protectedtitles}}",
+
+       "apihelp-query+querypage-description": "{{doc-apihelp-description|query+querypage}}",
+       "apihelp-query+querypage-param-page": "{{doc-apihelp-param|query+querypage|page}}",
+       "apihelp-query+querypage-param-limit": "{{doc-apihelp-param|query+querypage|limit}}",
+       "apihelp-query+querypage-example-ancientpages": "{{doc-apihelp-example|query+querypage}}",
+
+       "apihelp-query+random-description": "{{doc-apihelp-description|query+random}}",
+       "apihelp-query+random-param-namespace": "{{doc-apihelp-param|query+random|namespace}}",
+       "apihelp-query+random-param-limit": "{{doc-apihelp-param|query+random|limit}}",
+       "apihelp-query+random-param-redirect": "{{doc-apihelp-param|query+random|redirect}}",
+       "apihelp-query+random-example-simple": "{{doc-apihelp-example|query+random}}",
+       "apihelp-query+random-example-generator": "{{doc-apihelp-example|query+random}}",
+
+       "apihelp-query+recentchanges-description": "{{doc-apihelp-description|query+recentchanges}}",
+       "apihelp-query+recentchanges-param-start": "{{doc-apihelp-param|query+recentchanges|start}}",
+       "apihelp-query+recentchanges-param-end": "{{doc-apihelp-param|query+recentchanges|end}}",
+       "apihelp-query+recentchanges-param-namespace": "{{doc-apihelp-param|query+recentchanges|namespace}}",
+       "apihelp-query+recentchanges-param-user": "{{doc-apihelp-param|query+recentchanges|user}}",
+       "apihelp-query+recentchanges-param-excludeuser": "{{doc-apihelp-param|query+recentchanges|excludeuser}}",
+       "apihelp-query+recentchanges-param-tag": "{{doc-apihelp-param|query+recentchanges|tag}}",
+       "apihelp-query+recentchanges-param-prop": "{{doc-apihelp-param|query+recentchanges|prop}}",
+       "apihelp-query+recentchanges-param-token": "{{doc-apihelp-param|query+recentchanges|token}}",
+       "apihelp-query+recentchanges-param-show": "{{doc-apihelp-param|query+recentchanges|show}}",
+       "apihelp-query+recentchanges-param-limit": "{{doc-apihelp-param|query+recentchanges|limit}}",
+       "apihelp-query+recentchanges-param-type": "{{doc-apihelp-param|query+recentchanges|type}}",
+       "apihelp-query+recentchanges-param-toponly": "{{doc-apihelp-param|query+recentchanges|toponly}}",
+       "apihelp-query+recentchanges-example-simple": "{{doc-apihelp-example|query+recentchanges}}",
+       "apihelp-query+recentchanges-example-generator": "{{doc-apihelp-example|query+recentchanges}}",
+
+       "apihelp-query+redirects-description": "{{doc-apihelp-description|query+redirects}}",
+       "apihelp-query+redirects-param-prop": "{{doc-apihelp-param|query+redirects|prop}}",
+       "apihelp-query+redirects-param-namespace": "{{doc-apihelp-param|query+redirects|namespace}}",
+       "apihelp-query+redirects-param-limit": "{{doc-apihelp-param|query+redirects|limit}}",
+       "apihelp-query+redirects-param-show": "{{doc-apihelp-param|query+redirects|show}}",
+       "apihelp-query+redirects-example-simple": "{{doc-apihelp-example|query+redirects}}",
+       "apihelp-query+redirects-example-generator": "{{doc-apihelp-example|query+redirects}}",
+
+       "apihelp-query+revisions-description": "{{doc-apihelp-description|query+revisions}}",
+       "apihelp-query+revisions-paraminfo-singlepageonly": "{{doc-apihelp-paraminfo|query+revisions|singlepageonly}}",
+       "apihelp-query+revisions-param-prop": "{{doc-apihelp-param|query+revisions|prop}}",
+       "apihelp-query+revisions-param-limit": "{{doc-apihelp-param|query+revisions|limit}}",
+       "apihelp-query+revisions-param-startid": "{{doc-apihelp-param|query+revisions|startid}}",
+       "apihelp-query+revisions-param-endid": "{{doc-apihelp-param|query+revisions|endid}}",
+       "apihelp-query+revisions-param-start": "{{doc-apihelp-param|query+revisions|start}}",
+       "apihelp-query+revisions-param-end": "{{doc-apihelp-param|query+revisions|end}}",
+       "apihelp-query+revisions-param-user": "{{doc-apihelp-param|query+revisions|user}}",
+       "apihelp-query+revisions-param-excludeuser": "{{doc-apihelp-param|query+revisions|excludeuser}}",
+       "apihelp-query+revisions-param-tag": "{{doc-apihelp-param|query+revisions|tag}}",
+       "apihelp-query+revisions-param-expandtemplates": "{{doc-apihelp-param|query+revisions|expandtemplates}}",
+       "apihelp-query+revisions-param-generatexml": "{{doc-apihelp-param|query+revisions|generatexml}}",
+       "apihelp-query+revisions-param-parse": "{{doc-apihelp-param|query+revisions|parse}}",
+       "apihelp-query+revisions-param-section": "{{doc-apihelp-param|query+revisions|section}}",
+       "apihelp-query+revisions-param-token": "{{doc-apihelp-param|query+revisions|token}}",
+       "apihelp-query+revisions-param-diffto": "{{doc-apihelp-param|query+revisions|diffto}}",
+       "apihelp-query+revisions-param-difftotext": "{{doc-apihelp-param|query+revisions|difftotext}}",
+       "apihelp-query+revisions-param-contentformat": "{{doc-apihelp-param|query+revisions|contentformat}}",
+       "apihelp-query+revisions-example-content": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-last5": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-first5": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-first5-after": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-first5-not-localhost": "{{doc-apihelp-example|query+revisions}}",
+       "apihelp-query+revisions-example-first5-user": "{{doc-apihelp-example|query+revisions}}",
+
+       "apihelp-query+search-description": "{{doc-apihelp-description|query+search}}",
+       "apihelp-query+search-param-search": "{{doc-apihelp-param|query+search|search}}",
+       "apihelp-query+search-param-namespace": "{{doc-apihelp-param|query+search|namespace}}",
+       "apihelp-query+search-param-what": "{{doc-apihelp-param|query+search|what}}",
+       "apihelp-query+search-param-info": "{{doc-apihelp-param|query+search|info}}",
+       "apihelp-query+search-param-prop": "{{doc-apihelp-param|query+search|prop}}",
+       "apihelp-query+search-param-limit": "{{doc-apihelp-param|query+search|limit}}",
+       "apihelp-query+search-param-interwiki": "{{doc-apihelp-param|query+search|interwiki}}",
+       "apihelp-query+search-param-backend": "{{doc-apihelp-param|query+search|backend}}",
+       "apihelp-query+search-example-simple": "{{doc-apihelp-example|query+search}}",
+       "apihelp-query+search-example-text": "{{doc-apihelp-example|query+search}}",
+       "apihelp-query+search-example-generator": "{{doc-apihelp-example|query+search}}",
+
+       "apihelp-query+siteinfo-description": "{{doc-apihelp-description|query+siteinfo}}",
+       "apihelp-query+siteinfo-param-prop": "{{doc-apihelp-param|query+siteinfo|prop}}",
+       "apihelp-query+siteinfo-param-filteriw": "{{doc-apihelp-param|query+siteinfo|filteriw}}",
+       "apihelp-query+siteinfo-param-showalldb": "{{doc-apihelp-param|query+siteinfo|showalldb}}",
+       "apihelp-query+siteinfo-param-numberingroup": "{{doc-apihelp-param|query+siteinfo|numberingroup}}",
+       "apihelp-query+siteinfo-param-inlanguagecode": "{{doc-apihelp-param|query+siteinfo|inlanguagecode}}",
+       "apihelp-query+siteinfo-example-simple": "{{doc-apihelp-example|query+siteinfo}}",
+       "apihelp-query+siteinfo-example-interwiki": "{{doc-apihelp-example|query+siteinfo}}",
+       "apihelp-query+siteinfo-example-replag": "{{doc-apihelp-example|query+siteinfo}}",
+
+       "apihelp-query+stashimageinfo-description": "{{doc-apihelp-description|query+stashimageinfo}}",
+       "apihelp-query+stashimageinfo-param-filekey": "{{doc-apihelp-param|query+stashimageinfo|filekey}}",
+       "apihelp-query+stashimageinfo-param-sessionkey": "{{doc-apihelp-param|query+stashimageinfo|sessionkey}}",
+       "apihelp-query+stashimageinfo-param-prop": "{{doc-apihelp-param|query+stashimageinfo|prop}}",
+       "apihelp-query+stashimageinfo-example-simple": "{{doc-apihelp-example|query+stashimageinfo}}",
+       "apihelp-query+stashimageinfo-example-params": "{{doc-apihelp-example|query+stashimageinfo}}",
+
+       "apihelp-query+tags-description": "{{doc-apihelp-description|query+tags}}",
+       "apihelp-query+tags-param-limit": "{{doc-apihelp-param|query+tags|limit}}",
+       "apihelp-query+tags-param-prop": "{{doc-apihelp-param|query+tags|prop}}",
+       "apihelp-query+tags-example-simple": "{{doc-apihelp-example|query+tags}}",
+
+       "apihelp-query+templates-description": "{{doc-apihelp-description|query+templates}}",
+       "apihelp-query+templates-param-namespace": "{{doc-apihelp-param|query+templates|namespace}}",
+       "apihelp-query+templates-param-limit": "{{doc-apihelp-param|query+templates|limit}}",
+       "apihelp-query+templates-param-templates": "{{doc-apihelp-param|query+templates|templates}}",
+       "apihelp-query+templates-param-dir": "{{doc-apihelp-param|query+templates|dir}}",
+       "apihelp-query+templates-example-simple": "{{doc-apihelp-example|query+templates}}",
+       "apihelp-query+templates-example-generator": "{{doc-apihelp-example|query+templates}}",
+       "apihelp-query+templates-example-namespaces": "{{doc-apihelp-example|query+templates}}",
+
+       "apihelp-query+tokens-description": "{{doc-apihelp-description|query+tokens}}",
+       "apihelp-query+tokens-param-type": "{{doc-apihelp-param|query+tokens|type}}",
+       "apihelp-query+tokens-example-simple": "{{doc-apihelp-example|query+tokens}}",
+       "apihelp-query+tokens-example-types": "{{doc-apihelp-example|query+tokens}}",
+
+       "apihelp-query+transcludedin-description": "{{doc-apihelp-description|query+transcludedin}}",
+       "apihelp-query+transcludedin-param-prop": "{{doc-apihelp-param|query+transcludedin|prop}}",
+       "apihelp-query+transcludedin-param-namespace": "{{doc-apihelp-param|query+transcludedin|namespace}}",
+       "apihelp-query+transcludedin-param-limit": "{{doc-apihelp-param|query+transcludedin|limit}}",
+       "apihelp-query+transcludedin-param-show": "{{doc-apihelp-param|query+transcludedin|show}}",
+       "apihelp-query+transcludedin-example-simple": "{{doc-apihelp-example|query+transcludedin}}",
+       "apihelp-query+transcludedin-example-generator": "{{doc-apihelp-example|query+transcludedin}}",
+
+       "apihelp-query+usercontribs-description": "{{doc-apihelp-description|query+usercontribs}}",
+       "apihelp-query+usercontribs-param-limit": "{{doc-apihelp-param|query+usercontribs|limit}}",
+       "apihelp-query+usercontribs-param-start": "{{doc-apihelp-param|query+usercontribs|start}}",
+       "apihelp-query+usercontribs-param-end": "{{doc-apihelp-param|query+usercontribs|end}}",
+       "apihelp-query+usercontribs-param-user": "{{doc-apihelp-param|query+usercontribs|user}}",
+       "apihelp-query+usercontribs-param-userprefix": "{{doc-apihelp-param|query+usercontribs|userprefix}}",
+       "apihelp-query+usercontribs-param-namespace": "{{doc-apihelp-param|query+usercontribs|namespace}}",
+       "apihelp-query+usercontribs-param-prop": "{{doc-apihelp-param|query+usercontribs|prop}}",
+       "apihelp-query+usercontribs-param-show": "{{doc-apihelp-param|query+usercontribs|show|params=* $1 - Value of [[mw:Manual:$RCMaxAge|$RCMaxAge]]|paramstart=2}}",
+       "apihelp-query+usercontribs-param-tag": "{{doc-apihelp-param|query+usercontribs|tag}}",
+       "apihelp-query+usercontribs-param-toponly": "{{doc-apihelp-param|query+usercontribs|toponly}}",
+       "apihelp-query+usercontribs-example-user": "{{doc-apihelp-example|query+usercontribs}}",
+       "apihelp-query+usercontribs-example-ipprefix": "{{doc-apihelp-example|query+usercontribs}}",
+
+       "apihelp-query+userinfo-description": "{{doc-apihelp-description|query+userinfo}}",
+       "apihelp-query+userinfo-param-prop": "{{doc-apihelp-param|query+userinfo|prop|params=* $1 - Maximum value for the \"unreadcount\" property.\n$2 - Return value when there are more unread pages.|paramstart=3}}",
+       "apihelp-query+userinfo-example-simple": "{{doc-apihelp-example|query+userinfo}}",
+       "apihelp-query+userinfo-example-data": "{{doc-apihelp-example|query+userinfo}}",
+
+       "apihelp-query+users-description": "{{doc-apihelp-description|query+users}}",
+       "apihelp-query+users-param-prop": "{{doc-apihelp-param|query+users|prop}}",
+       "apihelp-query+users-param-users": "{{doc-apihelp-param|query+users|users}}",
+       "apihelp-query+users-param-token": "{{doc-apihelp-param|query+users|token}}",
+       "apihelp-query+users-example-simple": "{{doc-apihelp-example|query+users}}",
+
+       "apihelp-query+watchlist-description": "{{doc-apihelp-description|query+watchlist}}",
+       "apihelp-query+watchlist-param-allrev": "{{doc-apihelp-param|query+watchlist|allrev}}",
+       "apihelp-query+watchlist-param-start": "{{doc-apihelp-param|query+watchlist|start}}",
+       "apihelp-query+watchlist-param-end": "{{doc-apihelp-param|query+watchlist|end}}",
+       "apihelp-query+watchlist-param-namespace": "{{doc-apihelp-param|query+watchlist|namespace}}",
+       "apihelp-query+watchlist-param-user": "{{doc-apihelp-param|query+watchlist|user}}",
+       "apihelp-query+watchlist-param-excludeuser": "{{doc-apihelp-param|query+watchlist|excludeuser}}",
+       "apihelp-query+watchlist-param-limit": "{{doc-apihelp-param|query+watchlist|limit}}",
+       "apihelp-query+watchlist-param-prop": "{{doc-apihelp-param|query+watchlist|prop}}",
+       "apihelp-query+watchlist-param-show": "{{doc-apihelp-param|query+watchlist|show}}",
+       "apihelp-query+watchlist-param-type": "{{doc-apihelp-param|query+watchlist|type}}",
+       "apihelp-query+watchlist-param-owner": "{{doc-apihelp-param|query+watchlist|owner}}",
+       "apihelp-query+watchlist-param-token": "{{doc-apihelp-param|query+watchlist|token}}",
+       "apihelp-query+watchlist-example-simple": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-props": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-allrev": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-generator": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-generator-rev": "{{doc-apihelp-example|query+watchlist}}",
+       "apihelp-query+watchlist-example-wlowner": "{{doc-apihelp-example|query+watchlist}}",
+
+       "apihelp-query+watchlistraw-description": "{{doc-apihelp-description|query+watchlistraw}}",
+       "apihelp-query+watchlistraw-param-namespace": "{{doc-apihelp-param|query+watchlistraw|namespace}}",
+       "apihelp-query+watchlistraw-param-limit": "{{doc-apihelp-param|query+watchlistraw|limit}}",
+       "apihelp-query+watchlistraw-param-prop": "{{doc-apihelp-param|query+watchlistraw|prop}}",
+       "apihelp-query+watchlistraw-param-show": "{{doc-apihelp-param|query+watchlistraw|show}}",
+       "apihelp-query+watchlistraw-param-owner": "{{doc-apihelp-param|query+watchlistraw|owner}}",
+       "apihelp-query+watchlistraw-param-token": "{{doc-apihelp-param|query+watchlistraw|token}}",
+       "apihelp-query+watchlistraw-example-simple": "{{doc-apihelp-example|query+watchlistraw}}",
+       "apihelp-query+watchlistraw-example-generator": "{{doc-apihelp-example|query+watchlistraw}}",
+
+       "apihelp-revisiondelete-description": "{{doc-apihelp-description|revisiondelete}}",
+       "apihelp-revisiondelete-param-type": "{{doc-apihelp-param|revisiondelete|type}}",
+       "apihelp-revisiondelete-param-target": "{{doc-apihelp-param|revisiondelete|target}}",
+       "apihelp-revisiondelete-param-ids": "{{doc-apihelp-param|revisiondelete|ids}}",
+       "apihelp-revisiondelete-param-hide": "{{doc-apihelp-param|revisiondelete|hide}}",
+       "apihelp-revisiondelete-param-show": "{{doc-apihelp-param|revisiondelete|show}}",
+       "apihelp-revisiondelete-param-suppress": "{{doc-apihelp-param|revisiondelete|suppress}}",
+       "apihelp-revisiondelete-param-reason": "{{doc-apihelp-param|revisiondelete|reason}}",
+       "apihelp-revisiondelete-example-revision": "{{doc-apihelp-example|revisiondelete}}",
+       "apihelp-revisiondelete-example-log": "{{doc-apihelp-example|revisiondelete}}",
+
+       "apihelp-rollback-description": "{{doc-apihelp-description|rollback}}",
+       "apihelp-rollback-param-title": "{{doc-apihelp-param|rollback|title}}",
+       "apihelp-rollback-param-pageid": "{{doc-apihelp-param|rollback|pageid}}",
+       "apihelp-rollback-param-user": "{{doc-apihelp-param|rollback|user}}",
+       "apihelp-rollback-param-summary": "{{doc-apihelp-param|rollback|summary}}",
+       "apihelp-rollback-param-markbot": "{{doc-apihelp-param|rollback|markbot}}",
+       "apihelp-rollback-param-watchlist": "{{doc-apihelp-param|rollback|watchlist}}",
+       "apihelp-rollback-example-simple": "{{doc-apihelp-example|rollback}}",
+       "apihelp-rollback-example-summary": "{{doc-apihelp-example|rollback}}",
+
+       "apihelp-rsd-description": "{{doc-apihelp-description|rsd}}",
+       "apihelp-rsd-example-simple": "{{doc-apihelp-example|rsd}}",
+
+       "apihelp-setnotificationtimestamp-description": "{{doc-apihelp-description|setnotificationtimestamp}}",
+       "apihelp-setnotificationtimestamp-param-entirewatchlist": "{{doc-apihelp-param|setnotificationtimestamp|entirewatchlist}}",
+       "apihelp-setnotificationtimestamp-param-timestamp": "{{doc-apihelp-param|setnotificationtimestamp|timestamp}}",
+       "apihelp-setnotificationtimestamp-param-torevid": "{{doc-apihelp-param|setnotificationtimestamp|torevid}}",
+       "apihelp-setnotificationtimestamp-param-newerthanrevid": "{{doc-apihelp-param|setnotificationtimestamp|newerthanrevid}}",
+       "apihelp-setnotificationtimestamp-example-all": "{{doc-apihelp-example|setnotificationtimestamp}}",
+       "apihelp-setnotificationtimestamp-example-page": "{{doc-apihelp-example|setnotificationtimestamp}}",
+       "apihelp-setnotificationtimestamp-example-pagetimestamp": "{{doc-apihelp-example|setnotificationtimestamp}}",
+       "apihelp-setnotificationtimestamp-example-allpages": "{{doc-apihelp-example|setnotificationtimestamp}}",
+
+       "apihelp-tokens-description": "{{doc-apihelp-description|tokens}}",
+       "apihelp-tokens-param-type": "{{doc-apihelp-param|tokens|type}}",
+       "apihelp-tokens-example-edit": "{{doc-apihelp-example|tokens}}",
+       "apihelp-tokens-example-emailmove": "{{doc-apihelp-example|tokens}}",
+
+       "apihelp-unblock-description": "{{doc-apihelp-description|unblock}}",
+       "apihelp-unblock-param-id": "{{doc-apihelp-param|unblock|id}}",
+       "apihelp-unblock-param-user": "{{doc-apihelp-param|unblock|user}}",
+       "apihelp-unblock-param-reason": "{{doc-apihelp-param|unblock|reason}}",
+       "apihelp-unblock-example-id": "{{doc-apihelp-example|unblock}}",
+       "apihelp-unblock-example-user": "{{doc-apihelp-example|unblock}}",
+
+       "apihelp-undelete-description": "{{doc-apihelp-description|undelete}}",
+       "apihelp-undelete-param-title": "{{doc-apihelp-param|undelete|title}}",
+       "apihelp-undelete-param-reason": "{{doc-apihelp-param|undelete|reason}}",
+       "apihelp-undelete-param-timestamps": "{{doc-apihelp-param|undelete|timestamps}}",
+       "apihelp-undelete-param-fileids": "{{doc-apihelp-param|undelete|fileids}}",
+       "apihelp-undelete-param-watchlist": "{{doc-apihelp-param|undelete|watchlist}}",
+       "apihelp-undelete-example-page": "{{doc-apihelp-example|undelete}}",
+       "apihelp-undelete-example-revisions": "{{doc-apihelp-example|undelete}}",
+
+       "apihelp-upload-description": "{{doc-apihelp-description|upload}}",
+       "apihelp-upload-param-filename": "{{doc-apihelp-param|upload|filename}}",
+       "apihelp-upload-param-comment": "{{doc-apihelp-param|upload|comment}}",
+       "apihelp-upload-param-text": "{{doc-apihelp-param|upload|text}}",
+       "apihelp-upload-param-watch": "{{doc-apihelp-param|upload|watch}}",
+       "apihelp-upload-param-watchlist": "{{doc-apihelp-param|upload|watchlist}}",
+       "apihelp-upload-param-ignorewarnings": "{{doc-apihelp-param|upload|ignorewarnings}}",
+       "apihelp-upload-param-file": "{{doc-apihelp-param|upload|file}}",
+       "apihelp-upload-param-url": "{{doc-apihelp-param|upload|url}}",
+       "apihelp-upload-param-filekey": "{{doc-apihelp-param|upload|filekey}}",
+       "apihelp-upload-param-sessionkey": "{{doc-apihelp-param|upload|sessionkey}}",
+       "apihelp-upload-param-stash": "{{doc-apihelp-param|upload|stash}}",
+       "apihelp-upload-param-filesize": "{{doc-apihelp-param|upload|filesize}}",
+       "apihelp-upload-param-offset": "{{doc-apihelp-param|upload|offset}}",
+       "apihelp-upload-param-chunk": "{{doc-apihelp-param|upload|chunk}}",
+       "apihelp-upload-param-async": "{{doc-apihelp-param|upload|async}}",
+       "apihelp-upload-param-asyncdownload": "{{doc-apihelp-param|upload|asyncdownload}}",
+       "apihelp-upload-param-leavemessage": "{{doc-apihelp-param|upload|leavemessage}}",
+       "apihelp-upload-param-statuskey": "{{doc-apihelp-param|upload|statuskey}}",
+       "apihelp-upload-param-checkstatus": "{{doc-apihelp-param|upload|checkstatus}}",
+       "apihelp-upload-example-url": "{{doc-apihelp-example|upload}}",
+       "apihelp-upload-example-filekey": "{{doc-apihelp-example|upload}}",
+
+       "apihelp-userrights-description": "{{doc-apihelp-description|userrights}}",
+       "apihelp-userrights-param-user": "{{doc-apihelp-param|userrights|user}}",
+       "apihelp-userrights-param-userid": "{{doc-apihelp-param|userrights|userid}}",
+       "apihelp-userrights-param-add": "{{doc-apihelp-param|userrights|add}}",
+       "apihelp-userrights-param-remove": "{{doc-apihelp-param|userrights|remove}}",
+       "apihelp-userrights-param-reason": "{{doc-apihelp-param|userrights|reason}}",
+       "apihelp-userrights-example-user": "{{doc-apihelp-example|userrights}}",
+       "apihelp-userrights-example-userid": "{{doc-apihelp-example|userrights}}",
+
+       "apihelp-watch-description": "{{doc-apihelp-description|watch}}",
+       "apihelp-watch-param-title": "{{doc-apihelp-param|watch|title}}",
+       "apihelp-watch-param-unwatch": "{{doc-apihelp-param|watch|unwatch}}",
+       "apihelp-watch-example-watch": "{{doc-apihelp-example|watch}}",
+       "apihelp-watch-example-unwatch": "{{doc-apihelp-example|watch}}",
+       "apihelp-watch-example-generator": "{{doc-apihelp-example|watch}}",
+
        "apihelp-format-example-generic": "{{doc-apihelp-example|format|params=* $1 - Format name|paramstart=2|noseealso=1}}",
        "apihelp-dbg-description": "{{doc-apihelp-description|dbg|seealso=* {{msg-mw|apihelp-dbgfm-description}}}}",
        "apihelp-dbgfm-description": "{{doc-apihelp-description|dbgfm|seealso=* {{msg-mw|apihelp-dbg-description}}}}",
        "apihelp-wddxfm-description": "{{doc-apihelp-description|wddxfm|seealso=* {{msg-mw|apihelp-wddx-description}}}}",
        "apihelp-xml-description": "{{doc-apihelp-description|xml|seealso=* {{msg-mw|apihelp-xmlfm-description}}}}",
        "apihelp-xml-param-xslt": "{{doc-apihelp-param|xml|xslt}}",
-       "apihelp-xml-param-includexmlnamespac": "{{doc-apihelp-param|xml|includexmlnamespac}}",
+       "apihelp-xml-param-includexmlnamespace": "{{doc-apihelp-param|xml|includexmlnamespace}}",
        "apihelp-xmlfm-description": "{{doc-apihelp-description|xmlfm|seealso=* {{msg-mw|apihelp-xml-description}}}}",
        "apihelp-yaml-description": "{{doc-apihelp-description|yaml|seealso=* {{msg-mw|apihelp-yamlfm-description}}}}",
        "apihelp-yamlfm-description": "{{doc-apihelp-description|yamlfm|seealso=* {{msg-mw|apihelp-yaml-description}}}}",
 
-       "apihelp-help-description": "{{doc-apihelp-description|help}}",
-       "apihelp-help-param-modules": "{{doc-apihelp-param|help|modules}}",
-       "apihelp-help-param-submodules": "{{doc-apihelp-param|help|submodules}}",
-       "apihelp-help-param-recursivesubmodules": "{{doc-apihelp-param|help|recursivesubmodules}}",
-       "apihelp-help-param-helpformat": "{{doc-apihelp-param|help|helpformat}}",
-       "apihelp-help-param-wrap": "{{doc-apihelp-param|help|wrap}}",
-       "apihelp-help-param-toc": "{{doc-apihelp-param|help|toc}}",
-       "apihelp-help-example-main": "{{doc-apihelp-example|help}}",
-       "apihelp-help-example-recursive": "{{doc-apihelp-example|help}}",
-       "apihelp-help-example-help": "{{doc-apihelp-example|help}}",
-       "apihelp-help-example-query": "{{doc-apihelp-example|help}}",
-
        "api-format-title": "Page title when API output is pretty-printed in HTML.",
        "api-format-prettyprint-header": "{{technical}} Displayed as a header when API output is pretty-printed in HTML.\n\nParameters:\n* $1 - Format name\n* $2 - Non-pretty-printing module name",
 
+       "api-orm-param-props": "{{doc-apihelp-param|orm|props|description=the \"props\" parameter in subclasses of ApiQueryORM}}",
+       "api-orm-param-limit": "{{doc-apihelp-param|orm|limit|description=the \"limit\" parameter in subclasses of ApiQueryORM}}",
+
+       "api-pageset-param-titles": "{{doc-apihelp-param|pageset|titles|description=the \"titles\" parameter in pageset-using modules}}",
+       "api-pageset-param-pageids": "{{doc-apihelp-param|pageset|pageids|description=the \"pageids\" parameter in pageset-using modules}}",
+       "api-pageset-param-revids": "{{doc-apihelp-param|pageset|revids|description=the \"revids\" parameter in pageset-using modules}}",
+       "api-pageset-param-generator": "{{doc-apihelp-param|pageset|generator|description=the \"generator\" parameter in pageset-using modules}}",
+       "api-pageset-param-redirects-generator": "{{doc-apihelp-param|pageset|redirects-generator|description=the \"redirects\" parameter in pageset-using modules when the \"generator\" parameter is also available}}",
+       "api-pageset-param-redirects-nogenerator": "{{doc-apihelp-param|pageset|redirects-generator|description=the \"redirects\" parameter in pageset-using modules when the \"generator\" parameter is not available}}",
+       "api-pageset-param-converttitles": "{{doc-apihelp-param|pageset|converttitles|description=the \"converttitles\" parameter in pageset-using modules|params=* $1 - List of languages with variants|paramstart=2}}",
+
        "api-help-title": "Page title for the auto-generated help output",
        "api-help-lead": "Text displayed at the top of the API help page",
        "api-help-main-header": "Text for the header of the main module",
        "api-help-param-default": "Used to display the default value for an API parameter\n\nParameters:\n* $1 - Default value\n\nSee also:\n* {{msg-mw|api-help-param-default-empty}}",
        "api-help-param-default-empty": "Used to display the default value for an API parameter when that default is an empty value\n\nSee also:\n* {{msg-mw|api-help-param-default}}",
        "api-help-param-token": "{{doc-apihelp-param|description=any 'token' parameter|paramstart=3|params=\n* $1 - Token type|noseealso=1}}",
+       "api-help-param-token-webui": "{{doc-apihelp-param|description=additional text for any \"token\" parameter, explaining that web UI tokens are also accepted|noseealso=1}}",
+       "api-help-param-disabled-in-miser-mode": "{{doc-apihelp-param|description=any parameter that is disabled when [[mw:Manual:$wgMiserMode|$wgMiserMode]] is set.|noseealso=1}}",
+       "api-help-param-limited-in-miser-mode": "{{doc-apihelp-param|description=additional text for any parameter that may cause the module to return few results when [[mw:Manual:$wgMiserMode|$wgMiserMode]] is set.|noseealso=1}}",
+       "api-help-param-direction": "{{doc-apihelp-param|description=any standard \"dir\" parameter|noseealso=1}}",
+       "api-help-param-continue": "{{doc-apihelp-param|description=any standard \"continue\" parameter, or other parameter with the same semantics|noseealso=1}}",
        "api-help-param-no-description": "Displayed on API parameters that lack any description",
        "api-help-examples": "Label for the API help examples section\n\nParameters:\n* $1 - Number of examples to be displayed",
        "api-help-permissions": "Label for the \"permissions\" section in the main module's help output.\n\nParameters:\n* $1 - Number of permissions displayed",
index 39d6e8e..589f7d3 100644 (file)
@@ -62,15 +62,6 @@ class GlobalVarConfig implements Config {
                return $this->hasWithPrefix( $this->prefix, $name );
        }
 
-       /**
-        * @see MutableConfig::set
-        * @deprecated since 1.24
-        */
-       public function set( $name, $value ) {
-               wfDeprecated( __METHOD__, '1.24' );
-               $this->setWithPrefix( $this->prefix, $name, $value );
-       }
-
        /**
         * Get a variable with a given prefix, if not the defaults.
         *
@@ -93,16 +84,4 @@ class GlobalVarConfig implements Config {
                $var = $prefix . $name;
                return array_key_exists( $var, $GLOBALS );
        }
-
-       /**
-        * Get a variable with a given prefix, if not the defaults.
-        *
-        * @param string $prefix Prefix to use on the variable
-        * @param string $name Variable name without prefix
-        * @param mixed $value Value to set
-        * @deprecated since 1.24
-        */
-       protected function setWithPrefix( $prefix, $name, $value ) {
-               $GLOBALS[$prefix . $name] = $value;
-       }
 }
index 29642d0..4bb646e 100644 (file)
@@ -2346,7 +2346,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                # Split database and table into proper variables.
                # We reverse the explode so that database.table and table both output
                # the correct table.
-               $dbDetails = explode( '.', $name, 2 );
+               $dbDetails = explode( '.', $name, 3 );
                if ( count( $dbDetails ) == 3 ) {
                        list( $database, $schema, $table ) = $dbDetails;
                        # We don't want any prefix added in this case
index 755a851..31f32e5 100644 (file)
@@ -784,7 +784,11 @@ class ORMTable extends DBAccessBase implements IORMTable {
         * @return array
         */
        public function unprefixFieldNames( array $fieldNames ) {
-               return array_map( array( $this, 'unprefixFieldName' ), $fieldNames );
+               $start = strlen( $this->fieldPrefix );
+
+               return array_map( function( $fieldName ) use ( $start ) {
+                       return substr( $fieldName, $start );
+               }, $fieldNames );
        }
 
        /**
diff --git a/includes/debug/logger/Logger.php b/includes/debug/logger/Logger.php
new file mode 100644 (file)
index 0000000..f5dd1cf
--- /dev/null
@@ -0,0 +1,212 @@
+<?php
+/**
+ * @section LICENSE
+ * 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
+ */
+
+/**
+ * PSR-3 logging service.
+ *
+ * This class provides a service interface for logging system events. The
+ * MWLogger class itself is intended to be a thin wrapper around another PSR-3
+ * compliant logging library. Creation of MWLogger instances is managed via
+ * the MWLogger::getInstance() static method which in turn delegates to the
+ * currently registered service provider.
+ *
+ * A service provider is any class implementing the MWLoggerSpi interface.
+ * There are two possible methods of registering a service provider. The
+ * MWLogger::registerProvider() static method can be called at any time to
+ * change the service provider. If MWLogger::getInstance() is called before
+ * any service provider has been registered, it will attempt to use the
+ * $wgMWLoggerDefaultSpi global to bootstrap MWLoggerSpi registration.
+ * $wgMWLoggerDefaultSpi can either be the name of a class implementing the
+ * MWLoggerSpi interface with a zero argument constructor or a callable that
+ * will return an MWLoggerSpi instance.
+ *
+ * @see MWLoggerSpi
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class MWLogger implements \Psr\Log\LoggerInterface {
+
+       /**
+        * Service provider.
+        * @var MWLoggerSpi $spi
+        */
+       protected static $spi;
+
+
+       /**
+        * Wrapped PSR-3 logger instance.
+        *
+        * @var \Psr\Log\LoggerInterface $delegate
+        */
+       protected $delegate;
+
+
+       /**
+        * @param \Psr\Log\LoggerInterface $logger
+        */
+       public function __construct( \Psr\Log\LoggerInterface $logger ) {
+               $this->delegate = $logger;
+       }
+
+
+       /**
+        * Logs with an arbitrary level.
+        *
+        * @param string|int $level
+        * @param string $message
+        * @param array $context
+        */
+       public function log( $level, $message, array $context = array() ) {
+               $this->delegate->log( $level, $message, $context );
+       }
+
+
+       /**
+        * System is unusable.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function emergency( $message, array $context = array() ) {
+               $this->log( \Psr\Log\LogLevel::EMERGENCY, $message, $context );
+       }
+
+
+       /**
+        * Action must be taken immediately.
+        *
+        * Example: Entire website down, database unavailable, etc. This should
+        * trigger the SMS alerts and wake you up.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function alert( $message, array $context = array() ) {
+               $this->log( \Psr\Log\LogLevel::ALERT, $message, $context );
+       }
+
+
+       /**
+        * Critical conditions.
+        *
+        * Example: Application component unavailable, unexpected exception.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function critical( $message, array $context = array( ) ) {
+               $this->log( \Psr\Log\LogLevel::CRITICAL, $message, $context );
+       }
+
+
+       /**
+        * Runtime errors that do not require immediate action but should typically
+        * be logged and monitored.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function error( $message, array $context = array( ) ) {
+               $this->log( \Psr\Log\LogLevel::ERROR, $message, $context );
+       }
+
+
+       /**
+        * Exceptional occurrences that are not errors.
+        *
+        * Example: Use of deprecated APIs, poor use of an API, undesirable things
+        * that are not necessarily wrong.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function warning( $message, array $context = array() ) {
+               $this->log( \Psr\Log\LogLevel::WARNING, $message, $context );
+       }
+
+
+       /**
+        * Normal but significant events.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function notice( $message, array $context = array() ) {
+               $this->log( \Psr\Log\LogLevel::NOTICE, $message, $context );
+       }
+
+
+       /**
+        * Interesting events.
+        *
+        * Example: User logs in, SQL logs.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function info( $message, array $context = array() ) {
+               $this->log( \Psr\Log\LogLevel::INFO, $message, $context );
+       }
+
+
+       /**
+        * Detailed debug information.
+        *
+        * @param string $message
+        * @param array $context
+        */
+       public function debug( $message, array $context = array() ) {
+               $this->log( \Psr\Log\LogLevel::DEBUG, $message, $context );
+       }
+
+
+       /**
+        * Register a service provider to create new MWLogger instances.
+        *
+        * @param MWLoggerSpi $provider Provider to register
+        */
+       public static function registerProvider( MWLoggerSpi $provider ) {
+               self::$spi = $provider;
+       }
+
+
+       /**
+        * Get a named logger instance from the currently configured logger factory.
+        *
+        * @param string $channel Logger channel (name)
+        * @return MWLogger
+        */
+       public static function getInstance( $channel ) {
+               if ( self::$spi === null ) {
+                       global $wgMWLoggerDefaultSpi;
+                       if ( is_callable( $wgMWLoggerDefaultSpi ) ) {
+                               $provider = $wgMWLoggerDefaultSpi();
+                       } else {
+                               $provider = new $wgMWLoggerDefaultSpi();
+                       }
+                       self::registerProvider( $provider );
+               }
+
+               return self::$spi->getLogger( $channel );
+       }
+
+}
diff --git a/includes/debug/logger/NullSpi.php b/includes/debug/logger/NullSpi.php
new file mode 100644 (file)
index 0000000..6c38c32
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+/**
+ * @section LICENSE
+ * 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
+ */
+
+/**
+ * MWLogger service provider that creates \Psr\Log\NullLogger instances.
+ * A NullLogger silently discards all log events sent to it.
+ *
+ * @see MWLogger
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class MWLoggerNullSpi implements MWLoggerSpi {
+
+       /**
+        * @var \Psr\Log\NullLogger $singleton
+        */
+       protected $singleton;
+
+
+       public function __construct() {
+               $this->singleton = new \Psr\Log\NullLogger();
+       }
+
+
+       /**
+        * Get a logger instance.
+        *
+        * @param string $channel Logging channel
+        * @return MWLogger Logger instance
+        */
+       public function getLogger( $channel ) {
+               return $this->singleton;
+       }
+
+}
diff --git a/includes/debug/logger/Spi.php b/includes/debug/logger/Spi.php
new file mode 100644 (file)
index 0000000..7139856
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+/**
+ * @section LICENSE
+ * 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
+ */
+
+/**
+ * Service provider interface for MWLogger implementation libraries.
+ *
+ * MediaWiki can be configured to use a class implementing this interface to
+ * create new MWLogger instances via either the $wgMWLoggerDefaultSpi global
+ * variable or code that constructs an instance and registeres it via the
+ * MWLogger::registerProvider() static method.
+ *
+ * @see MWLogger
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+interface MWLoggerSpi {
+
+       /**
+        * Get a logger instance.
+        *
+        * @param string $channel Logging channel
+        * @return MWLogger Logger instance
+        */
+       public function getLogger( $channel );
+
+}
diff --git a/includes/debug/logger/monolog/Handler.php b/includes/debug/logger/monolog/Handler.php
new file mode 100644 (file)
index 0000000..1472459
--- /dev/null
@@ -0,0 +1,212 @@
+<?php
+/**
+ * @section LICENSE
+ * 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
+ */
+
+
+/**
+ * Log handler that replicates the behavior of MediaWiki's wfErrorLog()
+ * logging service. Log output can be directed to a local file, a PHP stream,
+ * or a udp2log server.
+ *
+ * For udp2log output, the stream specification must have the form:
+ * "udp://HOST:PORT[/PREFIX]"
+ * where:
+ * - HOST: IPv4, IPv6 or hostname
+ * - PORT: server port
+ * - PREFIX: optional (but recommended) prefix telling udp2log how to route
+ * the log event
+ *
+ * When not targeting a udp2log stream this class will act as a drop-in
+ * replacement for Monolog's StreamHandler.
+ *
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
+ */
+class MWLoggerMonologHandler extends \Monolog\Handler\AbstractProcessingHandler {
+
+       /**
+        * Log sink descriptor
+        * @var string $uri
+        */
+       protected $uri;
+
+       /**
+        * Log sink
+        * @var resource $sink
+        */
+       protected $sink;
+
+       /**
+        * @var string $error
+        */
+       protected $error;
+
+       /**
+        * @var string $host
+        */
+       protected $host;
+
+       /**
+        * @var int $port
+        */
+       protected $port;
+
+       /**
+        * @var string $prefix
+        */
+       protected $prefix;
+
+
+       /**
+        * @param string $stream Stream URI
+        * @param int $level Minimum logging level that will trigger handler
+        * @param bool $bubble Can handled meesages bubble up the handler stack?
+        */
+       public function __construct(
+               $stream, $level = \Monolog\Logger::DEBUG, $bubble = true
+       ) {
+               parent::__construct( $level, $bubble );
+               $this->uri = $stream;
+       }
+
+
+       /**
+        * Open the log sink described by our stream URI.
+        */
+       protected function openSink() {
+               if ( !$this->uri ) {
+                       throw new LogicException(
+                               'Missing stream uri, the stream can not be opened.' );
+               }
+               $this->error = null;
+               set_error_handler( array( $this, 'errorTrap' ) );
+
+               if ( substr( $this->uri, 0, 4 ) == 'udp:' ) {
+                       $parsed = parse_url( $this->uri );
+                       if ( !isset( $parsed['host'] ) ) {
+                               throw new UnexpectedValueException( sprintf(
+                                       'Udp transport "%s" must specify a host', $this->uri
+                               ) );
+                       }
+                       if ( !isset( $parsed['port'] ) ) {
+                               throw new UnexpectedValueException( sprintf(
+                                       'Udp transport "%s" must specify a port', $this->uri
+                               ) );
+                       }
+
+                       $this->host = $parsed['host'];
+                       $this->port = $parsed['port'];
+                       $this->prefix = '';
+
+                       if ( isset( $parsed['path'] ) ) {
+                               $this->prefix = ltrim( $parsed['path'], '/' );
+                       }
+
+                       if ( filter_var( $this->host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) {
+                               $domain = AF_INET6;
+
+                       } else {
+                               $domain = AF_INET;
+                       }
+
+                       $this->sink = socket_create( $domain, SOCK_DGRAM, SOL_UDP );
+
+               } else {
+                       $this->sink = fopen( $this->uri, 'a' );
+               }
+               restore_error_handler();
+
+               if ( !is_resource( $this->sink ) ) {
+                       $this->sink = null;
+                       throw new UnexpectedValueException( sprintf(
+                               'The stream or file "%s" could not be opened: %s',
+                               $this->uri, $this->error
+                       ) );
+               }
+       }
+
+
+       /**
+        * Custom error handler.
+        * @param int $code Error number
+        * @param string $msg Error message
+        */
+       protected function errorTrap( $code, $msg ) {
+               $this->error = $msg;
+       }
+
+
+       /**
+        * Should we use UDP to send messages to the sink?
+        * @return bool
+        */
+       protected function useUdp() {
+               return $this->host !== null;
+       }
+
+
+       protected function write( array $record ) {
+               if ( $this->sink === null ) {
+                       $this->openSink();
+               }
+
+               $text = (string) $record['formatted'];
+               if ( $this->useUdp() ) {
+
+                       // Clean it up for the multiplexer
+                       if ( $this->prefix !== '' ) {
+                               $text = preg_replace( '/^/m', "{$this->prefix} ", $text );
+
+                               // Limit to 64KB
+                               if ( strlen( $text ) > 65506 ) {
+                                       $text = substr( $text, 0, 65506 );
+                               }
+
+                               if ( substr( $text, -1 ) != "\n" ) {
+                                       $text .= "\n";
+                               }
+
+                       } elseif ( strlen( $text ) > 65507 ) {
+                               $text = substr( $text, 0, 65507 );
+                       }
+
+                       socket_sendto(
+                               $this->sink, $text, strlen( $text ), 0, $this->host, $this->port );
+
+               } else {
+                       fwrite( $this->sink, $text );
+               }
+       }
+
+
+       public function close() {
+               if ( is_resource( $this->sink ) ) {
+                       if ( $this->useUdp() ) {
+                               socket_close( $this->sink );
+
+                       } else {
+                               fclose( $this->sink );
+                       }
+               }
+               $this->sink = null;
+       }
+
+}
diff --git a/includes/debug/logger/monolog/Processor.php b/includes/debug/logger/monolog/Processor.php
new file mode 100644 (file)
index 0000000..a9f72c8
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+/**
+ * @section LICENSE
+ * 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
+ */
+
+
+/**
+ * Injects `wfHostname()` and `wfWikiID()` in all records.
+ *
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2013 Bryan Davis and Wikimedia Foundation.
+ */
+class MWLoggerMonologProcessor {
+
+       /**
+        * @param array $record
+        * @return array
+        */
+       public function __invoke( array $record ) {
+               $record['extra'] = array_merge(
+                       $record['extra'],
+                       array(
+                               'host' => wfHostname(),
+                               'wiki' => wfWikiID(),
+                       )
+               );
+               return $record;
+       }
+
+}
diff --git a/includes/debug/logger/monolog/Spi.php b/includes/debug/logger/monolog/Spi.php
new file mode 100644 (file)
index 0000000..fc39b25
--- /dev/null
@@ -0,0 +1,279 @@
+<?php
+/**
+ * @section LICENSE
+ * 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
+ */
+
+/**
+ * MWLogger service provider that creates loggers implemented by Monolog.
+ *
+ * Configured using an array of configuration data with the keys 'loggers',
+ * 'processors', 'handlers' and 'formatters'.
+ *
+ * The ['loggers']['@default'] configuration will be used to create loggers
+ * for any channel that isn't explicitly named in the 'loggers' configuration
+ * section.
+ *
+ * Configuration can be specified using the $wgMWLoggerMonologSpiConfig global
+ * variable.
+ *
+ * Example:
+ * @code
+ * $wgMWLoggerMonologSpiConfig = array(
+ *     'loggers' => array(
+ *         '@default' => array(
+ *             'processors' => array( 'wiki', 'psr', 'pid', 'uid', 'web' ),
+ *             'handlers'   => array( 'stream' ),
+ *         ),
+ *         'runJobs' => array(
+ *             'processors' => array( 'wiki', 'psr', 'pid' ),
+ *             'handlers'   => array( 'stream' ),
+ *         )
+ *     ),
+ *     'processors' => array(
+ *         'wiki' => array(
+ *             'class' => 'MWLoggerMonologProcessor',
+ *         ),
+ *         'psr' => array(
+ *             'class' => '\\Monolog\\Processor\\PsrLogMessageProcessor',
+ *         ),
+ *         'pid' => array(
+ *             'class' => '\\Monolog\\Processor\\ProcessIdProcessor',
+ *         ),
+ *         'uid' => array(
+ *             'class' => '\\Monolog\\Processor\\UidProcessor',
+ *         ),
+ *         'web' => array(
+ *             'class' => '\\Monolog\\Processor\\WebProcessor',
+ *         ),
+ *     ),
+ *     'handlers' => array(
+ *         'stream' => array(
+ *             'class'     => '\\Monolog\\Handler\\StreamHandler',
+ *             'args'      => array( 'path/to/your.log' ),
+ *             'formatter' => 'line',
+ *         ),
+ *         'redis' => array(
+ *             'class'     => '\\Monolog\\Handler\\RedisHandler',
+ *             'args'      => array( function() {
+ *                     $redis = new Redis();
+ *                     $redis->connect( '127.0.0.1', 6379 );
+ *                     return $redis;
+ *                 },
+ *                 'logstash'
+ *             ),
+ *             'formatter' => 'logstash',
+ *         ),
+ *         'udp2log' => array(
+ *             'class' => 'MWLoggerMonologHandler',
+ *             'args' => array(
+ *                 'udp://127.0.0.1:8420/mediawiki
+ *             ),
+ *             'formatter' => 'line',
+ *         ),
+ *     ),
+ *     'formatters' => array(
+ *         'line' => array(
+ *             'class' => '\\Monolog\\Formatter\\LineFormatter',
+ *          ),
+ *          'logstash' => array(
+ *              'class' => '\\Monolog\\Formatter\\LogstashFormatter',
+ *              'args'  => array( 'mediawiki', php_uname( 'n' ), null, '', 1 ),
+ *          ),
+ *     ),
+ * );
+ * @endcode
+ *
+ * @see https://github.com/Seldaek/monolog
+ * @since 1.25
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ */
+class MWLoggerMonologSpi implements MWLoggerSpi {
+
+       /**
+        * @var array $singletons
+        */
+       protected $singletons;
+
+       /**
+        * Configuration for creating new loggers.
+        * @var array $config
+        */
+       protected $config;
+
+
+       /**
+        * @param array $config Configuration data. Defaults to global
+        *     $wgMWLoggerMonologSpiConfig
+        */
+       public function __construct( $config = null ) {
+               if ( $config === null ) {
+                       global $wgMWLoggerMonologSpiConfig;
+                       $config = $wgMWLoggerMonologSpiConfig;
+               }
+               $this->config = $config;
+               $this->reset();
+       }
+
+
+       /**
+        * Reset internal caches.
+        *
+        * This is public for use in unit tests. Under normal operation there should
+        * be no need to flush the caches.
+        */
+       public function reset() {
+               $this->singletons = array(
+                       'loggers'    => array(),
+                       'handlers'   => array(),
+                       'formatters' => array(),
+                       'processors' => array(),
+               );
+       }
+
+
+       /**
+        * Get a logger instance.
+        *
+        * Creates and caches a logger instance based on configuration found in the
+        * $wgMWLoggerMonologSpiConfig global. Subsequent request for the same channel
+        * name will return the cached instance.
+        *
+        * @param string $channel Logging channel
+        * @return MWLogger Logger instance
+        */
+       public function getLogger( $channel ) {
+               if ( !isset( $this->singletons['loggers'][$channel] ) ) {
+                       // Fallback to using the '@default' configuration if an explict
+                       // configuration for the requested channel isn't found.
+                       $spec = isset( $this->config['loggers'][$channel] ) ?
+                               $this->config['loggers'][$channel] :
+                               $this->config['loggers']['@default'];
+
+                               $monolog = $this->createLogger( $channel, $spec );
+                               $this->singletons['loggers'][$channel] = new MWLogger( $monolog );
+               }
+
+               return $this->singletons['loggers'][$channel];
+       }
+
+
+       /**
+        * Create a logger.
+        * @param string $channel Logger channel
+        * @param array $spec Configuration
+        * @return \Monolog\Logger
+        */
+       protected function createLogger( $channel, $spec ) {
+               $obj = new \Monolog\Logger( $channel );
+
+               if ( isset( $spec['processors'] ) ) {
+                       foreach ( $spec['processors'] as $processor ) {
+                               $obj->pushProcessor( $this->getProcessor( $processor ) );
+                       }
+               }
+
+               if ( isset( $spec['handlers'] ) ) {
+                       foreach ( $spec['handlers'] as $handler ) {
+                               $obj->pushHandler( $this->getHandler( $handler ) );
+                       }
+               }
+               return $obj;
+       }
+
+
+       /**
+        * Create or return cached processor.
+        * @param string $name Processor name
+        * @return callable
+        */
+       protected function getProcessor( $name ) {
+               if ( !isset( $this->singletons['processors'][$name] ) ) {
+                       $spec = $this->config['processors'][$name];
+                       $this->singletons['processors'][$name] = $this->instantiate( $spec );
+               }
+               return $this->singletons['processors'][$name];
+       }
+
+
+       /**
+        * Create or return cached handler.
+        * @param string $name Processor name
+        * @return \Monolog\Handler\HandlerInterface
+        */
+       protected function getHandler( $name ) {
+               if ( !isset( $this->singletons['handlers'][$name] ) ) {
+                       $spec = $this->config['handlers'][$name];
+                       $handler = $this->instantiate( $spec );
+                       $handler->setFormatter( $this->getFormatter( $spec['formatter'] ) );
+                       $this->singletons['handlers'][$name] = $handler;
+               }
+               return $this->singletons['handlers'][$name];
+       }
+
+
+       /**
+        * Create or return cached formatter.
+        * @param string $name Formatter name
+        * @return \Monolog\Formatter\FormatterInterface
+        */
+       protected function getFormatter( $name ) {
+               if ( !isset( $this->singletons['formatters'][$name] ) ) {
+                       $spec = $this->config['formatters'][$name];
+                       $this->singletons['formatters'][$name] = $this->instantiate( $spec );
+               }
+               return $this->singletons['formatters'][$name];
+       }
+
+
+       /**
+        * Instantiate the requested object.
+        *
+        * The specification array must contain a 'class' key with string value that
+        * specifies the class name to instantiate. It can optionally contain an
+        * 'args' key that provides constructor arguments.
+        *
+        * @param array $spec Object specification
+        * @return object
+        */
+       protected function instantiate( $spec ) {
+               $clazz = $spec['class'];
+               $args = isset( $spec['args'] ) ? $spec['args'] : array();
+               // If an argument is a callable, call it.
+               // This allows passing things such as a database connection to a logger.
+               $args = array_map( function ( $value ) {
+                               if ( is_callable( $value ) ) {
+                                       return $value();
+                               } else {
+                                       return $value;
+                               }
+                       }, $args );
+
+               if ( empty( $args ) ) {
+                       $obj = new $clazz();
+
+               } else {
+                       $ref = new ReflectionClass( $clazz );
+                       $obj = $ref->newInstanceArgs( $args );
+               }
+
+               return $obj;
+       }
+
+}
index 7bfafee..97a17c3 100644 (file)
@@ -22,9 +22,6 @@
  * Class for handling updates to the site_stats table
  */
 class SiteStatsUpdate implements DeferrableUpdate {
-       /** @var int */
-       protected $views = 0;
-
        /** @var int */
        protected $edits = 0;
 
@@ -42,7 +39,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
 
        // @todo deprecate this constructor
        function __construct( $views, $edits, $good, $pages = 0, $users = 0 ) {
-               $this->views = $views;
                $this->edits = $edits;
                $this->articles = $good;
                $this->pages = $pages;
@@ -100,7 +96,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
                        }
                        $pd = $this->getPendingDeltas();
                        // Piggy-back the async deltas onto those of this stats update....
-                       $this->views += ( $pd['ss_total_views']['+'] - $pd['ss_total_views']['-'] );
                        $this->edits += ( $pd['ss_total_edits']['+'] - $pd['ss_total_edits']['-'] );
                        $this->articles += ( $pd['ss_good_articles']['+'] - $pd['ss_good_articles']['-'] );
                        $this->pages += ( $pd['ss_total_pages']['+'] - $pd['ss_total_pages']['-'] );
@@ -110,7 +105,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
 
                // Build up an SQL query of deltas and apply them...
                $updates = '';
-               $this->appendUpdate( $updates, 'ss_total_views', $this->views );
                $this->appendUpdate( $updates, 'ss_total_edits', $this->edits );
                $this->appendUpdate( $updates, 'ss_good_articles', $this->articles );
                $this->appendUpdate( $updates, 'ss_total_pages', $this->pages );
@@ -160,7 +154,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
        }
 
        protected function doUpdatePendingDeltas() {
-               $this->adjustPending( 'ss_total_views', $this->views );
                $this->adjustPending( 'ss_total_edits', $this->edits );
                $this->adjustPending( 'ss_good_articles', $this->articles );
                $this->adjustPending( 'ss_total_pages', $this->pages );
@@ -226,7 +219,7 @@ class SiteStatsUpdate implements DeferrableUpdate {
                global $wgMemc;
 
                $pending = array();
-               foreach ( array( 'ss_total_views', 'ss_total_edits',
+               foreach ( array( 'ss_total_edits',
                        'ss_good_articles', 'ss_total_pages', 'ss_users', 'ss_images' ) as $type
                ) {
                        // Get pending increments and pending decrements
diff --git a/includes/deferred/ViewCountUpdate.php b/includes/deferred/ViewCountUpdate.php
deleted file mode 100644 (file)
index 8282295..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-/**
- * Update for the 'page_counter' field
- *
- * 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
- */
-
-/**
- * Update for the 'page_counter' field, when $wgDisableCounters is false.
- *
- * Depending on $wgHitcounterUpdateFreq, this will directly increment the
- * 'page_counter' field or use the 'hitcounter' table and then collect the data
- * from that table to update the 'page_counter' field in a batch operation.
- */
-class ViewCountUpdate implements DeferrableUpdate {
-       /** @var int Page ID to increment the view count */
-       protected $id;
-
-       /**
-        * Constructor
-        *
-        * @param int $id Page ID to increment the view count
-        */
-       public function __construct( $id ) {
-               $this->id = intval( $id );
-       }
-
-       /**
-        * Run the update
-        */
-       public function doUpdate() {
-               global $wgHitcounterUpdateFreq;
-
-               $dbw = wfGetDB( DB_MASTER );
-
-               if ( $wgHitcounterUpdateFreq <= 1 || $dbw->getType() == 'sqlite' ) {
-                       $id = $this->id;
-                       $method = __METHOD__;
-                       $dbw->onTransactionIdle( function () use ( $dbw, $id, $method ) {
-                               try {
-                                       $dbw->update( 'page',
-                                               array( 'page_counter = page_counter + 1' ),
-                                               array( 'page_id' => $id ),
-                                               $method
-                                       );
-                               } catch ( DBError $e ) {
-                                       MWExceptionHandler::logException( $e );
-                               }
-                       } );
-                       return;
-               }
-
-               # Not important enough to warrant an error page in case of failure
-               try {
-                       // Since `hitcounter` is non-transactional, the contention is minimal
-                       $dbw->insert( 'hitcounter', array( 'hc_id' => $this->id ), __METHOD__ );
-                       $checkfreq = intval( $wgHitcounterUpdateFreq / 25 + 1 );
-                       if ( rand() % $checkfreq == 0 && $dbw->lastErrno() == 0 ) {
-                               $this->collect();
-                       }
-               } catch ( DBError $e ) {
-                       MWExceptionHandler::logException( $e );
-               }
-       }
-
-       protected function collect() {
-               global $wgHitcounterUpdateFreq;
-
-               $dbw = wfGetDB( DB_MASTER );
-
-               $rown = $dbw->selectField( 'hitcounter', 'COUNT(*)', array(), __METHOD__ );
-               if ( $rown < $wgHitcounterUpdateFreq ) {
-                       return;
-               }
-
-               wfProfileIn( __METHOD__ . '-collect' );
-               $old_user_abort = ignore_user_abort( true );
-
-               $dbType = $dbw->getType();
-               $tabletype = $dbType == 'mysql' ? "ENGINE=HEAP " : '';
-               $hitcounterTable = $dbw->tableName( 'hitcounter' );
-               $acchitsTable = $dbw->tableName( 'acchits' );
-               $pageTable = $dbw->tableName( 'page' );
-
-               $dbw->lockTables( array(), array( 'hitcounter' ), __METHOD__, false );
-               $dbw->query( "CREATE TEMPORARY TABLE $acchitsTable $tabletype AS " .
-                       "SELECT hc_id,COUNT(*) AS hc_n FROM $hitcounterTable " .
-                       'GROUP BY hc_id', __METHOD__ );
-               $dbw->delete( 'hitcounter', '*', __METHOD__ );
-               $dbw->unlockTables( __METHOD__ );
-
-               if ( $dbType == 'mysql' ) {
-                       $dbw->query( "UPDATE $pageTable,$acchitsTable SET page_counter=page_counter + hc_n " .
-                               'WHERE page_id = hc_id', __METHOD__ );
-               } else {
-                       $dbw->query( "UPDATE $pageTable SET page_counter=page_counter + hc_n " .
-                               "FROM $acchitsTable WHERE page_id = hc_id", __METHOD__ );
-               }
-               $dbw->query( "DROP TABLE $acchitsTable", __METHOD__ );
-
-               ignore_user_abort( $old_user_abort );
-               wfProfileOut( __METHOD__ . '-collect' );
-       }
-}
index 5929525..58245a5 100644 (file)
@@ -114,6 +114,9 @@ class FileRepo {
        /** @var string The URL of the repo's favicon, if any */
        protected $favicon;
 
+       /** @var bool Whether all zones should be private (e.g. private wiki repo) */
+       protected $isPrivate;
+
        /**
         * Factory functions for creating new files
         * Override these in the base class
@@ -269,7 +272,7 @@ class FileRepo {
         * @return string|bool
         */
        public function getZoneUrl( $zone, $ext = null ) {
-               if ( in_array( $zone, array( 'public', 'temp', 'thumb', 'transcoded' ) ) ) {
+               if ( in_array( $zone, array( 'public', 'thumb', 'transcoded' ) ) ) {
                        // standard public zones
                        if ( $ext !== null && isset( $this->zones[$zone]['urlsByExt'][$ext] ) ) {
                                // custom URL for extension/zone
@@ -283,7 +286,6 @@ class FileRepo {
                        case 'public':
                                return $this->url;
                        case 'temp':
-                               return "{$this->url}/temp";
                        case 'deleted':
                                return false; // no public URL
                        case 'thumb':
@@ -1305,7 +1307,10 @@ class FileRepo {
                list( , $container, ) = FileBackend::splitStoragePath( $path );
 
                $params = array( 'dir' => $path );
-               if ( $this->isPrivate || $container === $this->zones['deleted']['container'] ) {
+               if ( $this->isPrivate
+                       || $container === $this->zones['deleted']['container']
+                       || $container === $this->zones['temp']['container']
+               ) {
                        # Take all available measures to prevent web accessibility of new deleted
                        # directories, in case the user has not configured offline storage
                        $params = array( 'noAccess' => true, 'noListing' => true ) + $params;
@@ -1785,9 +1790,9 @@ class FileRepo {
        }
 
        /**
-        * Get an temporary FileRepo associated with this repo.
-        * Files will be created in the temp zone of this repo and
-        * thumbnails in a /temp subdirectory in thumb zone of this repo.
+        * Get a temporary private FileRepo associated with this repo.
+        *
+        * Files will be created in the temp zone of this repo.
         * It will have the same backend as this repo.
         *
         * @return TempFileRepo
@@ -1798,26 +1803,26 @@ class FileRepo {
                        'backend' => $this->backend,
                        'zones' => array(
                                'public' => array(
+                                       // Same place storeTemp() uses in the base repo, though
+                                       // the path hashing is mismatched, which is annoying.
                                        'container' => $this->zones['temp']['container'],
                                        'directory' => $this->zones['temp']['directory']
                                ),
                                'thumb' => array(
-                                       'container' => $this->zones['thumb']['container'],
-                                       'directory' => $this->zones['thumb']['directory'] == ''
-                                               ? 'temp'
-                                               : $this->zones['thumb']['directory'] . '/temp'
+                                       'container' => $this->zones['temp']['container'],
+                                       'directory' => $this->zones['temp']['directory'] == ''
+                                               ? 'thumb'
+                                               : $this->zones['temp']['directory'] . '/thumb'
                                ),
                                'transcoded' => array(
-                                       'container' => $this->zones['transcoded']['container'],
-                                       'directory' => $this->zones['transcoded']['directory'] == ''
-                                               ? 'temp'
-                                               : $this->zones['transcoded']['directory'] . '/temp'
+                                       'container' => $this->zones['temp']['container'],
+                                       'directory' => $this->zones['temp']['directory'] == ''
+                                               ? 'transcoded'
+                                               : $this->zones['temp']['directory'] . '/transcoded'
                                )
                        ),
-                       'url' => $this->getZoneUrl( 'temp' ),
-                       'thumbUrl' => $this->getZoneUrl( 'thumb' ) . '/temp',
-                       'transcodedUrl' => $this->getZoneUrl( 'transcoded' ) . '/temp',
-                       'hashLevels' => $this->hashLevels // performance
+                       'hashLevels' => $this->hashLevels, // performance
+                       'isPrivate' => true // all in temp zone
                ) );
        }
 
index 6ca19fe..08c9afb 100644 (file)
@@ -1850,7 +1850,7 @@ class LocalFile extends File {
         * Start a transaction and lock the image for update
         * Increments a reference counter if the lock is already held
         * @throws MWException Throws an error if the lock was not acquired
-        * @return bool Success
+        * @return bool Whether the file lock owns/spawned the DB transaction
         */
        function lock() {
                $dbw = $this->repo->getMasterDB();
@@ -1877,7 +1877,7 @@ class LocalFile extends File {
 
                $this->markVolatile(); // file may change soon
 
-               return true;
+               return $this->lockedOwnTrx;
        }
 
        /**
@@ -2419,13 +2419,19 @@ class LocalFileRestoreBatch {
                        return $this->file->repo->newGood();
                }
 
-               $this->file->lock();
+               $lockOwnsTrx = $this->file->lock();
 
                $dbw = $this->file->repo->getMasterDB();
                $status = $this->file->repo->newGood();
 
                $exists = (bool)$dbw->selectField( 'image', '1',
-                       array( 'img_name' => $this->file->getName() ), __METHOD__, array( 'FOR UPDATE' ) );
+                       array( 'img_name' => $this->file->getName() ),
+                       __METHOD__,
+                       // The lock() should already prevents changes, but this still may need
+                       // to bypass any transaction snapshot. However, if lock() started the
+                       // trx (which it probably did) then snapshot is post-lock and up-to-date.
+                       $lockOwnsTrx ? array() : array( 'LOCK IN SHARE MODE' )
+               );
 
                // Fetch all or selected archived revisions for the file,
                // sorted from the most recent to the oldest.
index 4511046..62345b8 100644 (file)
@@ -115,6 +115,8 @@ class HTMLForm extends ContextSource {
                'info' => 'HTMLInfoField',
                'selectorother' => 'HTMLSelectOrOtherField',
                'selectandother' => 'HTMLSelectAndOtherField',
+               'namespaceselect' => 'HTMLSelectNamespace',
+               'tagfilter' => 'HTMLTagFilter',
                'submit' => 'HTMLSubmitField',
                'hidden' => 'HTMLHiddenField',
                'edittools' => 'HTMLEditTools',
diff --git a/includes/htmlform/HTMLSelectNamespace.php b/includes/htmlform/HTMLSelectNamespace.php
new file mode 100644 (file)
index 0000000..9638106
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Wrapper for Html::namespaceSelector to use in HTMLForm
+ */
+class HTMLSelectNamespace extends HTMLFormField {
+       function getInputHTML( $value ) {
+               return Html::namespaceSelector(
+                       array(
+                               'selected' => $value,
+                               'all' => 'all'
+                       ), array(
+                               'name' => $this->mName,
+                               'id' => $this->mID,
+                               'class' => 'namespaceselector',
+                       )
+               );
+       }
+}
diff --git a/includes/htmlform/HTMLTagFilter.php b/includes/htmlform/HTMLTagFilter.php
new file mode 100644 (file)
index 0000000..da5e85c
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Wrapper for ChgangeTags::buildTagFilterSelector to use in HTMLForm
+ */
+class HTMLTagFilter extends HTMLFormField {
+       function getInputHTML( $value ) {
+               $tagFilter = ChangeTags::buildTagFilterSelector( $value );
+               if ( $tagFilter ) {
+                       list( $tagFilterLabel, $tagFilterSelector ) = $tagFilter;
+                       // we only need the select field, HTMLForm should handle the label
+                       return $tagFilterSelector;
+               }
+               return;
+       }
+}
index 2e31e41..b2b0a69 100644 (file)
@@ -796,6 +796,9 @@ class WebInstallerName extends WebInstallerPage {
                        ) ) .
                        $this->parent->getTextBox( array(
                                'var' => '_AdminEmail',
+                               'attribs' => array(
+                                       'dir' => 'ltr',
+                               ),
                                'label' => 'config-admin-email',
                                'help' => $this->parent->getHelpBox( 'config-admin-email-help' )
                        ) ) .
index a150fbc..a35ea31 100644 (file)
@@ -6,7 +6,8 @@
                        "아라",
                        "Dj",
                        "Misibacsi",
-                       "Tacsipacsi"
+                       "Tacsipacsi",
+                       "Dorgan"
                ]
        },
        "config-desc": "A MediaWiki telepítője",
        "config-env-good": "A környezet ellenőrzése befejeződött.\nA MediaWiki telepíthető.",
        "config-env-bad": "A környezet ellenőrzése befejeződött.\nA MediaWiki nem telepíthető.",
        "config-env-php": "A PHP verziója: $1",
-       "config-env-php-toolow": "PHP $1 van telepítve,\nazonban a MediaWikinek PHP $2, vagy újabb szükséges.",
        "config-unicode-using-utf8": "A rendszer Unicode normalizálására Brion Vibber utf8_normalize.so könyvtárát használja.",
        "config-unicode-using-intl": "A rendszer Unicode normalizálására az [http://pecl.php.net/intl intl PECL kiterjesztést] használja.",
        "config-unicode-pure-php-warning": "'''Figyelmeztetés''': Az Unicode normalizáláshoz szükséges [http://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el, helyette a lassú, PHP alapú implementáció lesz használva.\nHa nagy látogatottságú oldalt üzemeltetsz, itt találhatsz további információkat [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations a témáról].",
        "config-unicode-update-warning": "'''Figyelmeztetés''': Az Unicode normalizáláshoz szükséges burkolókönyvtár [http://site.icu-project.org/ ICU projekt] függvénykönyvtárának régebbi változatát használja.\nHa ügyelni kívánsz a Unicode használatára, fontold meg a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations frissítését].",
        "config-no-db": "Nem sikerült egyetlen használható adatbázis-illesztőprogramot sem találni.  Telepítened kell egyet a PHP-hez.\nA következő adatbázistípusok támogatottak: $1.\n\nHa a PHP-t magad fordítottad, konfiguráld újra úgy, hogy engedélyezve legyen egy adatbáziskliens, pl. a <code>./configure --with-mysql</code> parancs használatával.\nHa a PHP-t Debian vagy Ubuntu csomaggal telepítetted, akkor szükséged lesz a php5-mysql modulra is.",
        "config-no-fts3": "'''Figyelmeztetés''': Az SQLite [//sqlite.org/fts3.html FTS3 modul] nélkül lett fordítva, a keresési funkciók nem fognak működni ezen a rendszeren.",
-       "config-register-globals": "'''Figyelmeztetés: A PHP <code>[http://php.net/register_globals register_globals]</code> beállítása engedélyezve van.'''\n'''Tiltsd le, ha van rá lehetőséged.'''\nA MediaWiki működőképes a beállítás használata mellett, de a szerver biztonsági kockázatnak lesz kitéve.",
        "config-magic-quotes-runtime": "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] aktív!'''\nEz a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
        "config-magic-quotes-sybase": "'''Kritikus hiba: a [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] aktív!'''\nEz a beállítás kiszámíthatatlan károkat okoz a bevitt adatokban.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
        "config-mbstring": "'''Kritikus hiba: az [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime mbstring.func_overload] aktív!'''\nEz a beállítás hibákat okoz és kiszámíthatatlanul károsíthatja bevitt adatokat.\nA MediaWiki csak akkor telepíthető, ha ki van kapcsolva.",
        "config-memcache-badport": "A Memcached a(z) $1 és $2 közötti portokat szokta használni.",
        "config-extensions": "Kiterjesztések",
        "config-extensions-help": "A fent felsorolt kiterjesztések találhatóak meg az <code>./extensions</code> könyvtárban.\n\nLehetséges, hogy további beállításra lesz szükség hozzájuk, de már most engedélyezheted őket.",
+       "config-skins": "Felületek",
+       "config-skins-use-as-default": "Felület használata alapértelmezettként",
        "config-install-alreadydone": "'''Figyelmeztetés:''' Úgy tűnik, hogy a MediaWiki telepítve van, és te ismét megpróbálod telepíteni.\nFolytasd a következő oldalon.",
        "config-install-begin": "A „{{int:config-continue}}” gomb megnyomása elindítja a MediaWiki telepítését.\nHa szeretnél módosítani a beállításokon, kattints a \"{{int:config-back}}\" gombra.",
        "config-install-step-done": "kész",
index a61fff2..8ef3188 100644 (file)
@@ -10,7 +10,8 @@
                        "Lucas2",
                        "Ontsed",
                        "Seb35",
-                       "Nemo bis"
+                       "Nemo bis",
+                       "Ricordisamoa"
                ]
        },
        "config-desc": "Il programma di installazione per MediaWiki",
        "config-admin-error-password": "Errore interno durante l'impostazione di una password per amministratore \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
        "config-admin-error-bademail": "È stato inserito un indirizzo email non valido.",
        "config-subscribe": "Sottoscrivi la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailing list degli annunci di rilasci].",
-       "config-subscribe-help": "Si tratta di una mailing list a basso traffico dedicata agli annunci di nuove versioni, compresi importanti segnalazioni riguardanti la sicurezza.\nÈ consigliato iscriversi e aggiornare la proprio installazione di MediaWiki quando una nuova versione viene resa pubblica.",
+       "config-subscribe-help": "Si tratta di una mailing list a basso traffico dedicata agli annunci di nuove versioni, compresi importanti segnalazioni riguardanti la sicurezza.\nÈ consigliato iscriversi e aggiornare la propria installazione di MediaWiki quando una nuova versione viene resa pubblica.",
        "config-subscribe-noemail": "Hai provato ad iscriverti alla mailing list dedicata agli annunci delle nuove versioni senza fornire un indirizzo email.\nInserire un indirizzo email se si desidera effettuare l'iscrizione alla mailing list.",
        "config-almost-done": "Hai quasi finito!\nAdesso puoi saltare la rimanente parte della configurazione e semplicemente installare la wiki.",
        "config-optional-continue": "Fammi altre domande.",
index 3576585..52d049b 100644 (file)
@@ -92,7 +92,7 @@
        "config-db-host": "Домаќин на базата:",
        "config-db-host-help": "Ако вашата база е на друг опслужувач, тогаш тука внесете го името на домаќинот или IP-адресата.\n\nАко користите заедничко (споделено) вдомување, тогаш вашиот вдомител треба да го наведе точното име на домаќинот во неговата документација.\n\nАко воспоставувате на опслужувач на Windows и користите MySQL, можноста „localhost“ може да не функционира за опслужувачкото име. Во тој случај, обидете се со внесување на „127.0.0.1“ како локална IP-адреса.\n\nАко користите PostgreSQL, оставете го полево празно за да се поврзете преку Unix-приклучок.",
        "config-db-host-oracle": "TNS на базата:",
-       "config-db-host-oracle-help": "Ð\92неÑ\81еÑ\82е Ð²Ð°Ð¶ÐµÑ\87ко [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Ð»Ð¾ÐºÐ°Ð»но име за поврзување]. На оваа воспоставка мора да ѝ биде видлива податотеката tnsnames.ora.<br />Ако користите клиентски библиотеки 10g или понови, тогаш можете да го користите и методот на иметнување на [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+       "config-db-host-oracle-help": "Ð\92неÑ\81еÑ\82е Ð²Ð°Ð¶ÐµÑ\87ко [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Ð¼ÐµÑ\81но име за поврзување]. На оваа воспоставка мора да ѝ биде видлива податотеката tnsnames.ora.<br />Ако користите клиентски библиотеки 10g или понови, тогаш можете да го користите и методот на иметнување на [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Идентификувај го викиво",
        "config-db-name": "Име на базата:",
        "config-db-name-help": "Одберете име што ќе го претставува вашето вики.\nИмето не смее да содржи празни места.\n\nАко користите заедничко (споделено) вдомување, тогаш вашиот вдомител ќе ви даде конкретно име на база за користење, или пак ќе ви даде да создавате бази преку контролната табла.",
index c1bc294..55771c8 100644 (file)
        "config-memcache-badport": "Memcached-port-numrene må være mellom $1 og $2.",
        "config-extensions": "Utvidelser",
        "config-extensions-help": "Utvidelsene listet over ble oppdaget i din <code>./extensions</code>-folder.\n\nDisse kan trenge ekstra konfigurering, men du kan aktivisere dem nå.",
+       "config-skins": "Drakt",
+       "config-skins-use-as-default": "Bruk denne drakta som standard",
        "config-install-alreadydone": "'''Advarsel:''' Det ser ut til at allerede har installert MediaWiki og prøver å installere denne må nytt.\nVær vennlig å fortsette til neste side.",
        "config-install-begin": "Ved å trykke \"{{int:config-continue}}\", starter du installeringen av MediaWiki.\nHvis du først ønsker å endre på noe, trykk\"{{int:config-back}}\".",
        "config-install-step-done": "ferdig",
index 83c51ee..8b4136e 100644 (file)
@@ -6,7 +6,8 @@
                        "Rhinestorm",
                        "SiLveRLeaD",
                        "Trncmvsr",
-                       "Sayginer"
+                       "Sayginer",
+                       "Trockya"
                ]
        },
        "config-desc": "MediaWiki yükleyicisi",
        "config-install-schema": "Şema oluştur",
        "config-install-pg-schema-not-exist": "PostgreSQL şema yok.",
        "config-install-pg-commit": "Değişiklikleri yapılıyor",
+       "config-pg-no-create-privs": "Kurulum için belirttiğiniz hesap yeni bir hesap oluşturmak için gereken izinlere sahip değil.",
        "config-install-user": "Veritabanı kullanıcısı oluşturma",
        "config-install-user-alreadyexists": "Kullanıcı \" $1 \" zaten var",
        "config-install-user-create-failed": "Kullanıcı oluşturma \" $1 \" başarısız oldu:$2",
index d89c5d2..56fd1c6 100644 (file)
@@ -47,20 +47,12 @@ abstract class Job implements IJobSpecification {
        /** @var string Text for error that occurred last */
        protected $error;
 
-       /*-------------------------------------------------------------------------
-        * Abstract functions
-        *------------------------------------------------------------------------*/
-
        /**
         * Run the job
         * @return bool Success
         */
        abstract public function run();
 
-       /*-------------------------------------------------------------------------
-        * Static functions
-        *------------------------------------------------------------------------*/
-
        /**
         * Create the appropriate object to handle a specific job
         *
@@ -80,6 +72,20 @@ abstract class Job implements IJobSpecification {
                throw new MWException( "Invalid job command `{$command}`" );
        }
 
+       /**
+        * @param string $command
+        * @param Title $title
+        * @param array|bool $params Can not be === true
+        */
+       public function __construct( $command, $title, $params = false ) {
+               $this->command = $command;
+               $this->title = $title;
+               $this->params = $params;
+
+               // expensive jobs may set this to true
+               $this->removeDuplicates = false;
+       }
+
        /**
         * Batch-insert a group of jobs into the queue.
         * This will be wrapped in a transaction with a forced commit.
@@ -92,68 +98,11 @@ abstract class Job implements IJobSpecification {
         * @deprecated since 1.21
         */
        public static function batchInsert( $jobs ) {
+               wfDeprecated( __METHOD__, '1.21' );
                JobQueueGroup::singleton()->push( $jobs );
                return true;
        }
 
-       /**
-        * Insert a group of jobs into the queue.
-        *
-        * Same as batchInsert() but does not commit and can thus
-        * be rolled-back as part of a larger transaction. However,
-        * large batches of jobs can cause slave lag.
-        *
-        * @param Job[] $jobs Array of Job objects
-        * @return bool
-        * @deprecated since 1.21
-        */
-       public static function safeBatchInsert( $jobs ) {
-               JobQueueGroup::singleton()->push( $jobs, JobQueue::QOS_ATOMIC );
-               return true;
-       }
-
-       /**
-        * Pop a job of a certain type.  This tries less hard than pop() to
-        * actually find a job; it may be adversely affected by concurrent job
-        * runners.
-        *
-        * @param string $type
-        * @return Job|bool Returns false if there are no jobs
-        * @deprecated since 1.21
-        */
-       public static function pop_type( $type ) {
-               return JobQueueGroup::singleton()->get( $type )->pop();
-       }
-
-       /**
-        * Pop a job off the front of the queue.
-        * This is subject to $wgJobTypesExcludedFromDefaultQueue.
-        *
-        * @return Job|bool False if there are no jobs
-        * @deprecated since 1.21
-        */
-       public static function pop() {
-               return JobQueueGroup::singleton()->pop();
-       }
-
-       /*-------------------------------------------------------------------------
-        * Non-static functions
-        *------------------------------------------------------------------------*/
-
-       /**
-        * @param string $command
-        * @param Title $title
-        * @param array|bool $params Can not be === true
-        */
-       public function __construct( $command, $title, $params = false ) {
-               $this->command = $command;
-               $this->title = $title;
-               $this->params = $params;
-
-               // expensive jobs may set this to true
-               $this->removeDuplicates = false;
-       }
-
        /**
         * @return string
         */
@@ -315,7 +264,7 @@ abstract class Job implements IJobSpecification {
                                                        break;
                                                }
                                        }
-                                       if ( $filteredValue ) {
+                                       if ( $filteredValue && count( $filteredValue ) < 10 ) {
                                                $value = FormatJson::encode( $filteredValue );
                                        } else {
                                                $value = "array(" . count( $value ) . ")";
@@ -328,16 +277,25 @@ abstract class Job implements IJobSpecification {
                        }
                }
 
-               if ( is_object( $this->title ) ) {
-                       $s = "{$this->command} " . $this->title->getPrefixedDBkey();
-                       if ( $paramString !== '' ) {
-                               $s .= ' ' . $paramString;
+               $metaString = '';
+               foreach ( $this->metadata as $key => $value ) {
+                       if ( is_scalar( $value ) && mb_strlen( $value ) < 1024 ) {
+                               $metaString .= ( $metaString ? ",$key=$value" : "$key=$value" );
                        }
+               }
 
-                       return $s;
-               } else {
-                       return "{$this->command} $paramString";
+               $s = $this->command;
+               if ( is_object( $this->title ) ) {
+                       $s .= " {$this->title->getPrefixedDBkey()}";
                }
+               if ( $paramString != '' ) {
+                       $s .= " $paramString";
+               }
+               if ( $metaString != '' ) {
+                       $s .= " ($metaString)";
+               }
+
+               return $s;
        }
 
        protected function setLastError( $error ) {
index 3519eac..abfdc8c 100644 (file)
@@ -91,6 +91,7 @@ class JobQueueRedis extends JobQueue {
                $this->compression = isset( $params['compression'] ) ? $params['compression'] : 'none';
                $this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] );
                $this->daemonized = !empty( $params['daemonized'] );
+               $this->checkDelay = true; // always enabled
        }
 
        protected function supportedOrders() {
@@ -134,9 +135,6 @@ class JobQueueRedis extends JobQueue {
         * @throws JobQueueError
         */
        protected function doGetAcquiredCount() {
-               if ( $this->claimTTL <= 0 ) {
-                       return 0; // no acknowledgements
-               }
                $conn = $this->getConnection();
                try {
                        $conn->multi( Redis::PIPELINE );
@@ -155,9 +153,6 @@ class JobQueueRedis extends JobQueue {
         * @throws JobQueueError
         */
        protected function doGetDelayedCount() {
-               if ( !$this->checkDelay ) {
-                       return 0; // no delayed jobs
-               }
                $conn = $this->getConnection();
                try {
                        return $conn->zSize( $this->getQueueKey( 'z-delayed' ) );
@@ -172,9 +167,6 @@ class JobQueueRedis extends JobQueue {
         * @throws JobQueueError
         */
        protected function doGetAbandonedCount() {
-               if ( $this->claimTTL <= 0 ) {
-                       return 0; // no acknowledgements
-               }
                $conn = $this->getConnection();
                try {
                        return $conn->zSize( $this->getQueueKey( 'z-abandoned' ) );
@@ -301,22 +293,18 @@ LUA;
 
                // Push ready delayed jobs into the queue every 10 jobs to spread the load.
                // This is also done as a periodic task, but we don't want too much done at once.
-               if ( $this->checkDelay && mt_rand( 0, 9 ) == 0 ) {
+               if ( !$this->daemonized && mt_rand( 0, 9 ) == 0 ) {
                        $this->recyclePruneAndUndelayJobs();
                }
 
                $conn = $this->getConnection();
                try {
                        do {
-                               if ( $this->claimTTL > 0 ) {
-                                       // Keep the claimed job list down for high-traffic queues
-                                       if ( mt_rand( 0, 99 ) == 0 ) {
-                                               $this->recyclePruneAndUndelayJobs();
-                                       }
-                                       $blob = $this->popAndAcquireBlob( $conn );
-                               } else {
-                                       $blob = $this->popAndDeleteBlob( $conn );
+                               // Keep the claimed job list down for high-traffic queues
+                               if ( !$this->daemonized && mt_rand( 0, 99 ) == 0 ) {
+                                       $this->recyclePruneAndUndelayJobs();
                                }
+                               $blob = $this->popAndAcquireBlob( $conn );
                                if ( !is_string( $blob ) ) {
                                        break; // no jobs; nothing to do
                                }
@@ -338,39 +326,6 @@ LUA;
                return $job;
        }
 
-       /**
-        * @param RedisConnRef $conn
-        * @return array Serialized string or false
-        * @throws RedisException
-        */
-       protected function popAndDeleteBlob( RedisConnRef $conn ) {
-               static $script =
-<<<LUA
-               local kUnclaimed, kSha1ById, kIdBySha1, kData = unpack(KEYS)
-               -- Pop an item off the queue
-               local id = redis.call('rpop',kUnclaimed)
-               if not id then return false end
-               -- Get the job data and remove it
-               local item = redis.call('hGet',kData,id)
-               redis.call('hDel',kData,id)
-               -- Allow new duplicates of this job
-               local sha1 = redis.call('hGet',kSha1ById,id)
-               if sha1 then redis.call('hDel',kIdBySha1,sha1) end
-               redis.call('hDel',kSha1ById,id)
-               -- Return the job data
-               return item
-LUA;
-               return $conn->luaEval( $script,
-                       array(
-                               $this->getQueueKey( 'l-unclaimed' ), # KEYS[1]
-                               $this->getQueueKey( 'h-sha1ById' ), # KEYS[2]
-                               $this->getQueueKey( 'h-idBySha1' ), # KEYS[3]
-                               $this->getQueueKey( 'h-data' ), # KEYS[4]
-                       ),
-                       4 # number of first argument(s) that are keys
-               );
-       }
-
        /**
         * @param RedisConnRef $conn
         * @return array Serialized string or false
@@ -416,36 +371,35 @@ LUA;
                if ( !isset( $job->metadata['uuid'] ) ) {
                        throw new MWException( "Job of type '{$job->getType()}' has no UUID." );
                }
-               if ( $this->claimTTL > 0 ) {
-                       $conn = $this->getConnection();
-                       try {
-                               static $script =
+
+               $conn = $this->getConnection();
+               try {
+                       static $script =
 <<<LUA
-                               local kClaimed, kAttempts, kData = unpack(KEYS)
-                               -- Unmark the job as claimed
-                               redis.call('zRem',kClaimed,ARGV[1])
-                               redis.call('hDel',kAttempts,ARGV[1])
-                               -- Delete the job data itself
-                               return redis.call('hDel',kData,ARGV[1])
+                       local kClaimed, kAttempts, kData = unpack(KEYS)
+                       -- Unmark the job as claimed
+                       redis.call('zRem',kClaimed,ARGV[1])
+                       redis.call('hDel',kAttempts,ARGV[1])
+                       -- Delete the job data itself
+                       return redis.call('hDel',kData,ARGV[1])
 LUA;
-                               $res = $conn->luaEval( $script,
-                                       array(
-                                               $this->getQueueKey( 'z-claimed' ), # KEYS[1]
-                                               $this->getQueueKey( 'h-attempts' ), # KEYS[2]
-                                               $this->getQueueKey( 'h-data' ), # KEYS[3]
-                                               $job->metadata['uuid'] # ARGV[1]
-                                       ),
-                                       3 # number of first argument(s) that are keys
-                               );
-
-                               if ( !$res ) {
-                                       wfDebugLog( 'JobQueueRedis', "Could not acknowledge {$this->type} job." );
-
-                                       return false;
-                               }
-                       } catch ( RedisException $e ) {
-                               $this->throwRedisException( $conn, $e );
+                       $res = $conn->luaEval( $script,
+                               array(
+                                       $this->getQueueKey( 'z-claimed' ), # KEYS[1]
+                                       $this->getQueueKey( 'h-attempts' ), # KEYS[2]
+                                       $this->getQueueKey( 'h-data' ), # KEYS[3]
+                                       $job->metadata['uuid'] # ARGV[1]
+                               ),
+                               3 # number of first argument(s) that are keys
+                       );
+
+                       if ( !$res ) {
+                               wfDebugLog( 'JobQueueRedis', "Could not acknowledge {$this->type} job." );
+
+                               return false;
                        }
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $conn, $e );
                }
 
                return true;
@@ -658,7 +612,6 @@ LUA;
                                if attempts < ARGV[3] then
                                        -- Claim expired and retries left: re-enqueue the job
                                        redis.call('lPush',kUnclaimed,id)
-                                       redis.call('hIncrBy',kAttempts,id,1)
                                        released = released + 1
                                else
                                        -- Claim expired and no retries left: mark the job as dead
@@ -723,12 +676,9 @@ LUA;
                if ( $this->daemonized ) {
                        return array(); // managed in the runner loop
                }
-               $periods = array( 3600 ); // standard cleanup (useful on config change)
+               $periods = array( 300 ); // 5 min; delayed/stale jobs
                if ( $this->claimTTL > 0 ) {
-                       $periods[] = ceil( $this->claimTTL / 2 ); // avoid bad timing
-               }
-               if ( $this->checkDelay ) {
-                       $periods[] = 300; // 5 minutes
+                       $periods[] = ceil( $this->claimTTL / 2 ); // halved to avoid bad timing
                }
                $period = min( $periods );
                $period = max( $period, 30 ); // sanity
index 4d2c618..6b19340 100644 (file)
@@ -186,7 +186,7 @@ class JobRunner {
                                // other wikis in the farm (on different masters) get a chance.
                                $timePassed = microtime( true ) - $lastTime;
                                if ( $timePassed >= 5 || $timePassed < 0 ) {
-                                       if ( !wfWaitForSlaves( $lastTime, wfWikiID(), false, 5 ) ) {
+                                       if ( !wfWaitForSlaves( $lastTime, false, '*', 5 ) ) {
                                                $response['reached'] = 'slave-lag-limit';
                                                break;
                                        }
index ed0382c..99cf399 100644 (file)
@@ -1017,7 +1017,7 @@ class JSParser
 
                        case KEYWORD_CATCH:
                        case KEYWORD_FINALLY:
-                               throw $this->t->newSyntaxError($tt + ' without preceding try');
+                               throw $this->t->newSyntaxError($tt . ' without preceding try');
 
                        case KEYWORD_THROW:
                                $n = new JSNode($this->t);
index 48a565f..bbe2f42 100644 (file)
@@ -322,6 +322,12 @@ class LogFormatter {
                                                break;
                                }
                                break;
+
+                       case 'merge':
+                               $text = wfMessage( 'pagemerge-logentry' )
+                                       ->rawParams( $target, $parameters['4::dest'], $parameters['5::mergepoint'] )
+                                       ->inContentLanguage()->escaped();
+                               break;
                        // case 'suppress' --private log -- aaron  (so we know who to blame in a few years :-D)
                        // default:
                }
@@ -791,26 +797,6 @@ class LegacyLogFormatter extends LogFormatter {
 
                        return $this->msg( 'parentheses' )->rawParams(
                                $this->context->getLanguage()->pipeList( $links ) )->escaped();
-               // Show unmerge link
-               } elseif ( $type == 'merge' && $subtype == 'merge' ) {
-                       if ( !$this->context->getUser()->isAllowed( 'mergehistory' ) ) {
-                               return '';
-                       }
-
-                       $params = $this->extractParameters();
-                       $revert = Linker::linkKnown(
-                               SpecialPage::getTitleFor( 'MergeHistory' ),
-                               $this->msg( 'revertmerge' )->escaped(),
-                               array(),
-                               array(
-                                       'target' => $params[3],
-                                       'dest' => $title->getPrefixedDBkey(),
-                                       'mergepoint' => $params[4],
-                                       'submitted' => 1 // show the revisions immediately
-                               )
-                       );
-
-                       return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
                }
 
                // Do nothing. The implementation is handled by the hook modifiying the
index b0b23ba..d576d74 100644 (file)
@@ -382,19 +382,6 @@ class LogPage {
                                                . Linker::userToolLinks( $id, $title->getText(), false, Linker::TOOL_LINKS_NOBLOCK );
                                }
                                break;
-                       case 'merge':
-                               $titleLink = Linker::link(
-                                       $title,
-                                       $title->getPrefixedText(),
-                                       array(),
-                                       array( 'redirect' => 'no' )
-                               );
-                               $params[0] = Linker::link(
-                                       Title::newFromText( $params[0] ),
-                                       htmlspecialchars( $params[0] )
-                               );
-                               $params[1] = $lang->timeanddate( $params[1] );
-                               break;
                        default:
                                if ( $title->isSpecialPage() ) {
                                        list( $name, $par ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
diff --git a/includes/logging/MergeLogFormatter.php b/includes/logging/MergeLogFormatter.php
new file mode 100644 (file)
index 0000000..263d37a
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Formatter for merge log entries.
+ *
+ * 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
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @since 1.25
+ */
+
+/**
+ * This class formats merge log entries.
+ *
+ * @since 1.25
+ */
+class MergeLogFormatter extends LogFormatter {
+       public function getPreloadTitles() {
+               $params = $this->extractParameters();
+
+               return array( Title::newFromText( $params[3] ) );
+       }
+
+       protected function getMessageParameters() {
+               $params = parent::getMessageParameters();
+               $oldname = $this->makePageLink( $this->entry->getTarget(), array( 'redirect' => 'no' ) );
+               $newname = $this->makePageLink( Title::newFromText( $params[3] ) );
+               $params[2] = Message::rawParam( $oldname );
+               $params[3] = Message::rawParam( $newname );
+               $params[4] = $this->context->getLanguage()->timeanddate( $params[4] );
+               return $params;
+       }
+
+       public function getActionLinks() {
+               if ( $this->entry->isDeleted( LogPage::DELETED_ACTION ) // Action is hidden
+                       || !$this->context->getUser()->isAllowed( 'mergehistory' )
+               ) {
+                       return '';
+               }
+
+               // Show unmerge link
+               $params = $this->extractParameters();
+               $revert = Linker::linkKnown(
+                       SpecialPage::getTitleFor( 'MergeHistory' ),
+                       $this->msg( 'revertmerge' )->escaped(),
+                       array(),
+                       array(
+                               'target' => $params[3],
+                               'dest' => $this->entry->getTarget()->getPrefixedDBkey(),
+                               'mergepoint' => $params[4],
+                               'submitted' => 1 // show the revisions immediately
+                       )
+               );
+
+               return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
+       }
+}
index 5872079..d8d86db 100644 (file)
@@ -621,7 +621,8 @@ class SqlBagOStuff extends BagOStuff {
                                                                if ( $remainingSeconds > $totalSeconds ) {
                                                                        $totalSeconds = $remainingSeconds;
                                                                }
-                                                               $percent = ( $i + $remainingSeconds / $totalSeconds )
+                                                               $processedSeconds = $totalSeconds - $remainingSeconds;
+                                                               $percent = ( $i + $processedSeconds / $totalSeconds )
                                                                        / $this->shards * 100;
                                                        }
                                                        $percent = ( $percent / $this->numServers )
@@ -638,6 +639,11 @@ class SqlBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * Delete content of shard tables in every server.
+        * Return true if the operation is successful, false otherwise.
+        * @return bool
+        */
        public function deleteAll() {
                for ( $serverIndex = 0; $serverIndex < $this->numServers; $serverIndex++ ) {
                        try {
index 9ade16e..81c93a1 100644 (file)
@@ -88,11 +88,6 @@ class WikiPage implements Page, IDBAccessObject {
         */
        protected $mLinksUpdated = '19700101000000';
 
-       /**
-        * @var int|null
-        */
-       protected $mCounter = null;
-
        /**
         * Constructor and clear the article
         * @param Title $title Reference to a Title object.
@@ -247,7 +242,6 @@ class WikiPage implements Page, IDBAccessObject {
         */
        protected function clearCacheFields() {
                $this->mId = null;
-               $this->mCounter = null;
                $this->mRedirectTarget = null; // Title object if set
                $this->mLastRevision = null; // Latest revision
                $this->mTouched = '19700101000000';
@@ -419,7 +413,6 @@ class WikiPage implements Page, IDBAccessObject {
                        $this->mTitle->loadRestrictions( $data->page_restrictions );
 
                        $this->mId = intval( $data->page_id );
-                       $this->mCounter = intval( $data->page_counter );
                        $this->mTouched = wfTimestamp( TS_MW, $data->page_touched );
                        $this->mLinksUpdated = wfTimestampOrNull( TS_MW, $data->page_links_updated );
                        $this->mIsRedirect = intval( $data->page_is_redirect );
@@ -476,17 +469,6 @@ class WikiPage implements Page, IDBAccessObject {
                return $this->exists() || $this->mTitle->isAlwaysKnown();
        }
 
-       /**
-        * @return int The view count for the page
-        */
-       public function getCount() {
-               if ( !$this->mDataLoaded ) {
-                       $this->loadPageData();
-               }
-
-               return $this->mCounter;
-       }
-
        /**
         * Tests if the article content represents a redirect
         *
@@ -1183,17 +1165,10 @@ class WikiPage implements Page, IDBAccessObject {
         * @param int $oldid The revision id being viewed. If not given or 0, latest revision is assumed.
         */
        public function doViewUpdates( User $user, $oldid = 0 ) {
-               global $wgDisableCounters;
                if ( wfReadOnly() ) {
                        return;
                }
 
-               // Don't update page view counters on views from bot users (bug 14044)
-               if ( !$wgDisableCounters && !$user->isAllowed( 'bot' ) && $this->exists() ) {
-                       DeferredUpdates::addUpdate( new ViewCountUpdate( $this->getId() ) );
-                       DeferredUpdates::addUpdate( new SiteStatsUpdate( 1, 0, 0 ) );
-               }
-
                // Update newtalk / watchlist notification status
                $user->clearNotification( $this->mTitle, $oldid );
        }
@@ -1262,7 +1237,6 @@ class WikiPage implements Page, IDBAccessObject {
                        'page_id'           => $page_id,
                        'page_namespace'    => $this->mTitle->getNamespace(),
                        'page_title'        => $this->mTitle->getDBkey(),
-                       'page_counter'      => 0,
                        'page_restrictions' => '',
                        'page_is_redirect'  => 0, // Will set this shortly...
                        'page_is_new'       => 1,
index 355a3c1..d9f1761 100644 (file)
@@ -44,7 +44,7 @@ class CoreParserFunctions {
                        'canonicalurle', 'formatnum', 'grammar', 'gender', 'plural',
                        'numberofpages', 'numberofusers', 'numberofactiveusers',
                        'numberofarticles', 'numberoffiles', 'numberofadmins',
-                       'numberingroup', 'numberofedits', 'numberofviews', 'language',
+                       'numberingroup', 'numberofedits', 'language',
                        'padleft', 'padright', 'anchorencode', 'defaultsort', 'filepath',
                        'pagesincategory', 'pagesize', 'protectionlevel',
                        'namespacee', 'namespacenumber', 'talkspace', 'talkspacee',
@@ -379,8 +379,7 @@ class CoreParserFunctions {
                $text = $parser->doQuotes( $text );
 
                // remove stripped text (e.g. the UNIQ-QINU stuff) that was generated by tag extensions/whatever
-               $text = preg_replace( '/' . preg_quote( $parser->uniqPrefix(), '/' ) . '.*?'
-                       . preg_quote( Parser::MARKER_SUFFIX, '/' ) . '/', '', $text );
+               $text = $parser->killMarkers( $text );
 
                // list of disallowed tags for DISPLAYTITLE
                // these will be escaped even though they are allowed in normal wiki text
@@ -489,10 +488,6 @@ class CoreParserFunctions {
        public static function numberofedits( $parser, $raw = null ) {
                return self::formatRaw( SiteStats::edits(), $raw );
        }
-       public static function numberofviews( $parser, $raw = null ) {
-               global $wgDisableCounters;
-               return !$wgDisableCounters ? self::formatRaw( SiteStats::views(), $raw ) : '';
-       }
        public static function pagesinnamespace( $parser, $namespace = 0, $raw = null ) {
                return self::formatRaw( SiteStats::pagesInNs( intval( $namespace ) ), $raw );
        }
index 85920cc..3ffa16c 100644 (file)
@@ -35,6 +35,7 @@ class CoreTagHooks {
                $parser->setHook( 'pre', array( __CLASS__, 'pre' ) );
                $parser->setHook( 'nowiki', array( __CLASS__, 'nowiki' ) );
                $parser->setHook( 'gallery', array( __CLASS__, 'gallery' ) );
+               $parser->setHook( 'indicator', array( __CLASS__, 'indicator' ) );
                if ( $wgRawHtml ) {
                        $parser->setHook( 'html', array( __CLASS__, 'html' ) );
                }
@@ -119,4 +120,30 @@ class CoreTagHooks {
        public static function gallery( $content, $attributes, $parser ) {
                return $parser->renderImageGallery( $content, $attributes );
        }
+
+       /**
+        * XML-style tag for page status indicators: icons (or short text snippets) usually displayed in
+        * the top-right corner of the page, outside of the main content.
+        *
+        * @param string $content
+        * @param array $attributes
+        * @param Parser $parser
+        * @param PPFrame $frame
+        * @return string
+        * @since 1.25
+        */
+       public static function indicator( $content, array $attributes, Parser $parser, PPFrame $frame ) {
+               if ( !isset( $attributes['name'] ) || trim( $attributes['name'] ) === '' ) {
+                       return '<span class="error">' .
+                               wfMessage( 'invalid-indicator-name' )->inContentLanguage()->text() .
+                               '</span>';
+               }
+
+               $parser->getOutput()->setIndicator(
+                       trim( $attributes['name'] ),
+                       $parser->recursiveTagParse( $content, $frame )
+               );
+
+               return '';
+       }
 }
index ddd1f9a..e6478a4 100644 (file)
@@ -3155,10 +3155,6 @@ class Parser {
                        case 'numberofedits':
                                $value = $pageLang->formatNum( SiteStats::edits() );
                                break;
-                       case 'numberofviews':
-                               global $wgDisableCounters;
-                               $value = !$wgDisableCounters ? $pageLang->formatNum( SiteStats::views() ) : '';
-                               break;
                        case 'currenttimestamp':
                                $value = wfTimestamp( TS_MW, $ts );
                                break;
index 43e8d0b..428e7b2 100644 (file)
@@ -25,6 +25,7 @@ class ParserOutput extends CacheTime {
        public $mText,                       # The output text
                $mLanguageLinks,              # List of the full text of language links, in the order they appear
                $mCategories,                 # Map of category names to sort keys
+               $mIndicators = array(),       # Page status indicators, usually displayed in top-right corner
                $mTitleText,                  # title text of the chosen language variant
                $mLinks = array(),            # 2-D map of NS/DBK to ID for the links in the document. ID=zero for broken.
                $mTemplates = array(),        # 2-D map of NS/DBK to ID for the template references. ID=zero for broken.
@@ -130,6 +131,13 @@ class ParserOutput extends CacheTime {
                return $this->mCategories;
        }
 
+       /**
+        * @since 1.25
+        */
+       public function getIndicators() {
+               return $this->mIndicators;
+       }
+
        public function getTitleText() {
                return $this->mTitleText;
        }
@@ -267,6 +275,13 @@ class ParserOutput extends CacheTime {
                $this->mCategories[$c] = $sort;
        }
 
+       /**
+        * @since 1.25
+        */
+       public function setIndicator( $id, $content ) {
+               $this->mIndicators[$id] = $content;
+       }
+
        public function addLanguageLink( $t ) {
                $this->mLanguageLinks[] = $t;
        }
index 2edb79a..2cce574 100644 (file)
@@ -1043,11 +1043,17 @@ class PPFrame_DOM implements PPFrame {
                                        // Numbered parameter
                                        $index = $nameNodes->item( 0 )->attributes->getNamedItem( 'index' )->textContent;
                                        $index = $index - $indexOffset;
+                                       if ( isset( $namedArgs[$index] ) || isset( $numberedArgs[$index] ) ) {
+                                               $this->parser->addTrackingCategory( 'duplicate-args-category' );
+                                       }
                                        $numberedArgs[$index] = $value->item( 0 );
                                        unset( $namedArgs[$index] );
                                } else {
                                        // Named parameter
                                        $name = trim( $this->expand( $nameNodes->item( 0 ), PPFrame::STRIP_COMMENTS ) );
+                                       if ( isset( $namedArgs[$name] ) || isset( $numberedArgs[$name] ) ) {
+                                               $this->parser->addTrackingCategory( 'duplicate-args-category' );
+                                       }
                                        $namedArgs[$name] = $value->item( 0 );
                                        unset( $numberedArgs[$name] );
                                }
index 6376396..b4b14dc 100644 (file)
@@ -985,11 +985,17 @@ class PPFrame_Hash implements PPFrame {
                                if ( $bits['index'] !== '' ) {
                                        // Numbered parameter
                                        $index = $bits['index'] - $indexOffset;
+                                       if ( isset( $namedArgs[$index] ) || isset( $numberedArgs[$index] ) ) {
+                                               $this->parser->addTrackingCategory( 'duplicate-args-category' );
+                                       }
                                        $numberedArgs[$index] = $bits['value'];
                                        unset( $namedArgs[$index] );
                                } else {
                                        // Named parameter
                                        $name = trim( $this->expand( $bits['name'], PPFrame::STRIP_COMMENTS ) );
+                                       if ( isset( $namedArgs[$name] ) || isset( $numberedArgs[$name] ) ) {
+                                               $this->parser->addTrackingCategory( 'duplicate-args-category' );
+                                       }
                                        $namedArgs[$name] = $bits['value'];
                                        unset( $numberedArgs[$name] );
                                }
index 48d6866..86a3fef 100644 (file)
@@ -68,6 +68,15 @@ final class PasswordFactory {
                $this->default = $type;
        }
 
+       /**
+        * Get the default password type
+        *
+        * @return string
+        */
+       public function getDefaultType() {
+               return $this->default;
+       }
+
        /**
         * Initialize the internal static variables using the global variables
         *
index af3c774..83fed28 100644 (file)
@@ -75,7 +75,7 @@ class ProfilerMwprof extends Profiler {
         * @param string $outName Section to close
         */
        public function profileOut( $outName ) {
-               list( $inName, $inCount, $inWall, $inCpu ) = array_pop( $this->mWorkStack );
+               list( $inName, , $inWall, $inCpu ) = array_pop( $this->mWorkStack );
 
                // Check for unbalanced profileIn / profileOut calls.
                // Bad entries are logged but not sent.
index 6dc33ac..7217000 100644 (file)
@@ -600,6 +600,37 @@ abstract class BaseTemplate extends QuickTemplate {
                return $footericons;
        }
 
+       /**
+        * Get the suggested HTML for page status indicators: icons (or short text snippets) usually
+        * displayed in the top-right corner of the page, outside of the main content.
+        *
+        * Your skin may implement this differently, for example by handling some indicator names
+        * specially with a different UI. However, it is recommended to use a `<div class="mw-indicator"
+        * id="mw-indicator-<id>" />` as a wrapper element for each indicator, for better compatibility
+        * with extensions and user scripts.
+        *
+        * The raw data is available in `$this->data['indicators']` as an associative array (keys:
+        * identifiers, values: contents) internally ordered by keys.
+        *
+        * @return string HTML
+        * @since 1.25
+        */
+       public function getIndicators() {
+               $out = "<div class=\"mw-indicators\">\n";
+               foreach ( $this->data['indicators'] as $id => $content ) {
+                       $out .= Html::rawElement(
+                               'div',
+                               array(
+                                       'id' => Sanitizer::escapeId( "mw-indicator-$id" ),
+                                       'class' => 'mw-indicator',
+                               ),
+                               $content
+                       ) . "\n";
+               }
+               $out .= "</div>\n";
+               return $out;
+       }
+
        /**
         * Output the basic end-page trail including bottomscripts, reporttime, and
         * debug stuff. This should be called right before outputting the closing
index 064c076..2fef220 100644 (file)
@@ -38,4 +38,34 @@ class SkinApi extends SkinTemplate {
                parent::setupSkinUserCss( $out );
                $out->addModuleStyles( 'mediawiki.skinning.interface' );
        }
+
+       // Skip work and hooks for stuff we don't use
+
+       function buildSidebar() {
+               return array();
+       }
+
+       function getNewtalks() {
+               return '';
+       }
+
+       function getSiteNotice() {
+               return '';
+       }
+
+       public function getLanguages() {
+               return array();
+       }
+
+       protected function buildPersonalUrls() {
+               return array();
+       }
+
+       protected function buildContentNavigationUrls() {
+               return array();
+       }
+
+       protected function buildNavUrls() {
+               return array();
+       }
 }
index be77c61..d5c57eb 100644 (file)
@@ -49,4 +49,18 @@ class SkinApiTemplate extends BaseTemplate {
 
        <?php
        }
+
+       // Skip work and hooks for stuff we don't use
+
+       function getToolbox() {
+               return array();
+       }
+
+       function getPersonalTools() {
+               return array();
+       }
+
+       function getSidebar( $options = array() ) {
+               return array();
+       }
 }
index c1db302..5514ae0 100644 (file)
@@ -260,7 +260,7 @@ class SkinTemplate extends Skin {
         */
        protected function prepareQuickTemplate() {
                global $wgContLang, $wgScript, $wgStylePath, $wgMimeType, $wgJsMimeType,
-                       $wgDisableCounters, $wgSitename, $wgLogo, $wgMaxCredits,
+                       $wgSitename, $wgLogo, $wgMaxCredits,
                        $wgShowCreditsIfMax, $wgArticlePath,
                        $wgScriptPath, $wgServer;
 
@@ -373,19 +373,13 @@ class SkinTemplate extends Skin {
                $tpl->set( 'logo', $this->logoText() );
 
                $tpl->set( 'copyright', false );
+               // No longer used
                $tpl->set( 'viewcount', false );
                $tpl->set( 'lastmod', false );
                $tpl->set( 'credits', false );
                $tpl->set( 'numberofwatchingusers', false );
                if ( $out->isArticle() && $title->exists() ) {
                        if ( $this->isRevisionCurrent() ) {
-                               if ( !$wgDisableCounters ) {
-                                       $viewcount = $this->getWikiPage()->getCount();
-                                       if ( $viewcount ) {
-                                               $tpl->set( 'viewcount', $this->msg( 'viewcount' )->numParams( $viewcount )->parse() );
-                                       }
-                               }
-
                                if ( $wgMaxCredits != 0 ) {
                                        $tpl->set( 'credits', Action::factory( 'credits', $this->getWikiPage(),
                                                $this->getContext() )->getCredits( $wgMaxCredits, $wgShowCreditsIfMax ) );
@@ -407,7 +401,6 @@ class SkinTemplate extends Skin {
                $tpl->set( 'footerlinks', array(
                        'info' => array(
                                'lastmod',
-                               'viewcount',
                                'numberofwatchingusers',
                                'credits',
                                'copyright',
@@ -438,6 +431,8 @@ class SkinTemplate extends Skin {
                        }
                }
 
+               $tpl->set( 'indicators', $out->getIndicators() );
+
                $tpl->set( 'sitenotice', $this->getSiteNotice() );
                $tpl->set( 'bottomscripts', $this->bottomScripts() );
                $tpl->set( 'printfooter', $this->printSource() );
index b229e06..167135b 100644 (file)
@@ -60,7 +60,6 @@ abstract class QueryPage extends SpecialPage {
         * @return array
         */
        public static function getPages() {
-               global $wgDisableCounters;
                static $qp = null;
 
                if ( $qp === null ) {
@@ -102,10 +101,6 @@ abstract class QueryPage extends SpecialPage {
                                array( 'WithoutInterwikiPage', 'Withoutinterwiki' ),
                        );
                        wfRunHooks( 'wgQueryPages', array( &$qp ) );
-
-                       if ( !$wgDisableCounters ) {
-                               $qp[] = array( 'PopularPagesPage', 'Popularpages' );
-                       }
                }
 
                return $qp;
index febd119..b110bda 100644 (file)
@@ -215,7 +215,7 @@ class SpecialPageFactory {
         */
        private static function getPageList() {
                global $wgSpecialPages;
-               global $wgDisableCounters, $wgDisableInternalSearch, $wgEmailAuthentication;
+               global $wgDisableInternalSearch, $wgEmailAuthentication;
                global $wgEnableEmail, $wgEnableJavaScriptTest;
                global $wgPageLanguageUseDB;
 
@@ -224,10 +224,6 @@ class SpecialPageFactory {
 
                        self::$list = self::$coreList;
 
-                       if ( !$wgDisableCounters ) {
-                               self::$list['Popularpages'] = 'PopularPagesPage';
-                       }
-
                        if ( !$wgDisableInternalSearch ) {
                                self::$list['Search'] = 'SpecialSearch';
                        }
index c8fae68..08b8761 100644 (file)
@@ -225,6 +225,7 @@ class SpecialAllPages extends IncludableSpecialPage {
                                        } else {
                                                $out .= '<li>[[' . htmlspecialchars( $s->page_title ) . "]]</li>\n";
                                        }
+                                       $n++;
                                }
                                $out .= Xml::closeElement( 'ul' );
                        } else {
index c08d11b..c68341c 100644 (file)
@@ -545,6 +545,7 @@ class ImageListPager extends TablePager {
                unset( $query['title'] );
                unset( $query['limit'] );
                unset( $query['ilsearch'] );
+               unset( $query['ilshowall'] );
                unset( $query['user'] );
 
                $form = new HTMLForm( $fields, $this->getContext() );
index 43f5a1b..c71ef76 100644 (file)
@@ -469,11 +469,16 @@ class SpecialMergeHistory extends SpecialPage {
                        return false;
                }
                # Update our logs
-               $log = new LogPage( 'merge' );
-               $log->addEntry(
-                       'merge', $targetTitle, $this->mComment,
-                       array( $destTitle->getPrefixedText(), $timestampLimit ), $this->getUser()
-               );
+               $logEntry = new ManualLogEntry( 'merge', 'merge' );
+               $logEntry->setPerformer( $this->getUser() );
+               $logEntry->setComment( $this->mComment );
+               $logEntry->setTarget( $targetTitle );
+               $logEntry->setParameters( array(
+                       '4::dest' => $destTitle->getPrefixedText(),
+                       '5::mergepoint' => $timestampLimit
+               ) );
+               $logId = $logEntry->insert();
+               $logEntry->publish( $logId );
 
                # @todo message should use redirect=no
                $this->getOutput()->addWikiText( $this->msg( 'mergehistory-success',
index 3a74e7a..5b34297 100644 (file)
@@ -198,6 +198,7 @@ class SpecialNewpages extends IncludableSpecialPage {
        }
 
        protected function form() {
+               $out = $this->getOutput();
                // Consume values
                $this->opts->consumeValue( 'offset' ); // don't carry offset, DWIW
                $namespace = $this->opts->consumeValue( 'namespace' );
@@ -216,77 +217,62 @@ class SpecialNewpages extends IncludableSpecialPage {
                }
                $hidden = implode( "\n", $hidden );
 
-               $tagFilter = ChangeTags::buildTagFilterSelector( $tagFilterVal );
-               if ( $tagFilter ) {
-                       list( $tagFilterLabel, $tagFilterSelector ) = $tagFilter;
-               }
+               $form = array(
+                       'namespace' => array(
+                               'type' => 'namespaceselect',
+                               'name' => 'namespace',
+                               'label-message' => 'namespace',
+                               'default' => $namespace,
+                       ),
+                       'nsinvert' => array(
+                               'type' => 'check',
+                               'name' => 'nsinvert',
+                               'label-message' => 'invert',
+                               'default' => $nsinvert,
+                               'tooltip' => $this->msg( 'tooltip-invert' )->text(),
+                       ),
+                       'tagFilter' => array(
+                               'type' => 'tagfilter',
+                               'name' => 'tagfilter',
+                               'label-raw' => wfMessage( 'tag-filter' )->parse(),
+                               'default' => $tagFilterVal,
+                       ),
+                       'username' => array(
+                               'type' => 'text',
+                               'name' => 'username',
+                               'label-message' => 'newpages-username',
+                               'default' => $userText,
+                               'id' => 'mw-np-username',
+                               'size' => 30,
+                               'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
+                       ),
+               );
+
+               $htmlForm = new HTMLForm( $form, $this->getContext() );
+
+               $htmlForm->setSubmitText( $this->msg( 'allpagessubmit' )->text() );
+               $htmlForm->setSubmitProgressive();
+               // The form should be visible on each request (inclusive requests with submitted forms), so
+               // return always false here.
+               $htmlForm->setSubmitCallback(
+                       function() {
+                               return false;
+                       }
+               );
+               $htmlForm->setMethod( 'get' );
+
+               $out->addHtml( Xml::fieldset( $this->msg( 'newpages' )->text() ) );
 
-               $this->getOutput()->addModules( 'mediawiki.userSuggest' );
-
-               $form = Xml::openElement( 'form', array( 'action' => wfScript() ) ) .
-                       Html::hidden( 'title', $this->getPageTitle()->getPrefixedDBkey() ) .
-                       Xml::fieldset( $this->msg( 'newpages' )->text() ) .
-                       Xml::openElement( 'table', array( 'id' => 'mw-newpages-table' ) ) .
-                       '<tr>
-                               <td class="mw-label">' .
-                       Xml::label( $this->msg( 'namespace' )->text(), 'namespace' ) .
-                       '</td>
-                       <td class="mw-input">' .
-                       Html::namespaceSelector(
-                               array(
-                                       'selected' => $namespace,
-                                       'all' => 'all',
-                               ), array(
-                                       'name' => 'namespace',
-                                       'id' => 'namespace',
-                                       'class' => 'namespaceselector',
-                               )
-                       ) . '&#160;' .
-                       Xml::checkLabel(
-                               $this->msg( 'invert' )->text(),
-                               'invert',
-                               'nsinvert',
-                               $nsinvert,
-                               array( 'title' => $this->msg( 'tooltip-invert' )->text() )
+               $htmlForm->show();
+
+               $out->addHtml(
+                       Html::rawElement(
+                               'div',
+                               null,
+                               $this->filterLinks()
                        ) .
-                       '</td>
-                       </tr>' . ( $tagFilter ? (
-                       '<tr>
-                               <td class="mw-label">' .
-                               $tagFilterLabel .
-                               '</td>
-                               <td class="mw-input">' .
-                               $tagFilterSelector .
-                               '</td>
-                       </tr>' ) : '' ) .
-                       '<tr>
-                               <td class="mw-label">' .
-                                       Xml::label( $this->msg( 'newpages-username' )->text(), 'mw-np-username' ) .
-                                       '</td>
-                               <td class="mw-input">' .
-                                       Xml::input( 'username', 30, $userText, array(
-                                               'id' => 'mw-np-username',
-                                               'class' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
-                                       ) ) .
-                                       '</td>
-                       </tr>' .
-                       '<tr> <td></td>
-                               <td class="mw-submit">' .
-                       Xml::submitButton( $this->msg( 'allpagessubmit' )->text() ) .
-                       '</td>
-               </tr>' .
-                       '<tr>
-                               <td></td>
-                               <td class="mw-input">' .
-                       $this->filterLinks() .
-                       '</td>
-                       </tr>' .
-                       Xml::closeElement( 'table' ) .
-                       Xml::closeElement( 'fieldset' ) .
-                       $hidden .
-                       Xml::closeElement( 'form' );
-
-               $this->getOutput()->addHTML( $form );
+                       Xml::closeElement( 'fieldset' )
+               );
        }
 
        /**
diff --git a/includes/specials/SpecialPopularpages.php b/includes/specials/SpecialPopularpages.php
deleted file mode 100644 (file)
index 2a80f65..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/**
- * Implements Special:PopularPages
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup SpecialPage
- */
-
-/**
- * A special page that list most viewed pages
- *
- * @ingroup SpecialPage
- */
-class PopularPagesPage extends QueryPage {
-       function __construct( $name = 'Popularpages' ) {
-               parent::__construct( $name );
-       }
-
-       function isExpensive() {
-               # page_counter is not indexed
-               return true;
-       }
-
-       function isSyndicated() {
-               return false;
-       }
-
-       function getQueryInfo() {
-               return array(
-                       'tables' => array( 'page' ),
-                       'fields' => array(
-                               'namespace' => 'page_namespace',
-                               'title' => 'page_title',
-                               'value' => 'page_counter' ),
-                       'conds' => array(
-                               'page_is_redirect' => 0,
-                               'page_namespace' => MWNamespace::getContentNamespaces()
-                       )
-               );
-       }
-
-       /**
-        * @param Skin $skin
-        * @param object $result Result row
-        * @return string
-        */
-       function formatResult( $skin, $result ) {
-               global $wgContLang;
-
-               $title = Title::makeTitleSafe( $result->namespace, $result->title );
-               if ( !$title ) {
-                       return Html::element(
-                               'span',
-                               array( 'class' => 'mw-invalidtitle' ),
-                               Linker::getInvalidTitleDescription(
-                                       $this->getContext(),
-                                       $result->namespace,
-                                       $result->title )
-                       );
-               }
-
-               $link = Linker::linkKnown(
-                       $title,
-                       htmlspecialchars( $wgContLang->convert( $title->getPrefixedText() ) )
-               );
-               $nv = $this->msg( 'nviews' )->numParams( $result->value )->escaped();
-
-               return $this->getLanguage()->specialList( $link, $nv );
-       }
-
-       protected function getGroupName() {
-               return 'wiki';
-       }
-}
index c922fbd..3cb5444 100644 (file)
@@ -426,15 +426,18 @@ class SpecialSearch extends SpecialPage {
                        return;
                }
 
+               $messageName = 'searchmenu-new-nocreate';
                $linkClass = 'mw-search-createlink';
-               if ( $title->isKnown() ) {
-                       $messageName = 'searchmenu-exists';
-                       $linkClass = 'mw-search-exists';
-               } elseif ( $title->quickUserCan( 'create', $this->getUser() ) ) {
-                       $messageName = 'searchmenu-new';
-               } else {
-                       $messageName = 'searchmenu-new-nocreate';
+
+               if ( !$title->isExternal() ) {
+                       if ( $title->isKnown() ) {
+                               $messageName = 'searchmenu-exists';
+                               $linkClass = 'mw-search-exists';
+                       } elseif ( $title->quickUserCan( 'create', $this->getUser() ) ) {
+                               $messageName = 'searchmenu-new';
+                       }
                }
+
                $params = array(
                        $messageName,
                        wfEscapeWikiText( $title->getPrefixedText() ),
@@ -1062,7 +1065,8 @@ class SpecialSearch extends SpecialPage {
                $out .= Html::hidden( 'fulltext', 'Search' ) . "\n";
                $out .= Html::submitButton(
                        $this->msg( 'searchbutton' )->text(),
-                       array(), array( 'mw-ui-progressive' )
+                       array( 'class' => 'mw-ui-button mw-ui-progressive' ),
+                       array( 'mw-ui-progressive' )
                ) . "\n";
 
                // Results-info
index f0e360e..1bbc2f3 100644 (file)
@@ -28,7 +28,7 @@
  * @ingroup SpecialPage
  */
 class SpecialStatistics extends SpecialPage {
-       private $views, $edits, $good, $images, $total, $users,
+       private $edits, $good, $images, $total, $users,
                $activeUsers = 0;
 
        public function __construct() {
@@ -38,13 +38,11 @@ class SpecialStatistics extends SpecialPage {
        public function execute( $par ) {
                global $wgMemc;
 
-               $disableCounters = $this->getConfig()->get( 'DisableCounters' );
                $miserMode = $this->getConfig()->get( 'MiserMode' );
 
                $this->setHeaders();
                $this->getOutput()->addModuleStyles( 'mediawiki.special' );
 
-               $this->views = SiteStats::views();
                $this->edits = SiteStats::edits();
                $this->good = SiteStats::articles();
                $this->images = SiteStats::images();
@@ -53,12 +51,6 @@ class SpecialStatistics extends SpecialPage {
                $this->activeUsers = SiteStats::activeUsers();
                $this->hook = '';
 
-               # Staticic - views
-               $viewsStats = '';
-               if ( !$disableCounters ) {
-                       $viewsStats = $this->getViewsStats();
-               }
-
                # Set active user count
                if ( !$miserMode ) {
                        $key = wfMemcKey( 'sitestats', 'activeusers-updated' );
@@ -83,12 +75,6 @@ class SpecialStatistics extends SpecialPage {
 
                # Statistic - usergroups
                $text .= $this->getGroupStats();
-               $text .= $viewsStats;
-
-               # Statistic - popular pages
-               if ( !$disableCounters && !$miserMode ) {
-                       $text .= $this->getMostViewedPages();
-               }
 
                # Statistic - other
                $extraStats = array();
@@ -237,63 +223,6 @@ class SpecialStatistics extends SpecialPage {
                return $text;
        }
 
-       private function getViewsStats() {
-               return Xml::openElement( 'tr' ) .
-                       Xml::tags( 'th', array( 'colspan' => '2' ), $this->msg( 'statistics-header-views' )->parse() ) .
-                       Xml::closeElement( 'tr' ) .
-                               $this->formatRow( $this->msg( 'statistics-views-total' )->parse(),
-                                       $this->getLanguage()->formatNum( $this->views ),
-                                               array( 'class' => 'mw-statistics-views-total' ), 'statistics-views-total-desc' ) .
-                               $this->formatRow( $this->msg( 'statistics-views-peredit' )->parse(),
-                                       $this->getLanguage()->formatNum( sprintf( '%.2f', $this->edits ?
-                                               $this->views / $this->edits : 0 ) ),
-                                               array( 'class' => 'mw-statistics-views-peredit' ) );
-       }
-
-       private function getMostViewedPages() {
-               $text = '';
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select(
-                       'page',
-                       array(
-                               'page_namespace',
-                               'page_title',
-                               'page_counter',
-                       ),
-                       array(
-                               'page_is_redirect' => 0,
-                               'page_counter > 0',
-                       ),
-                       __METHOD__,
-                       array(
-                               'ORDER BY' => 'page_counter DESC',
-                               'LIMIT' => 10,
-                       )
-               );
-
-               if ( $res->numRows() > 0 ) {
-                       $text .= Xml::openElement( 'tr' );
-                       $text .= Xml::tags(
-                               'th',
-                               array( 'colspan' => '2' ),
-                               $this->msg( 'statistics-mostpopular' )->parse()
-                       );
-                       $text .= Xml::closeElement( 'tr' );
-
-                       foreach ( $res as $row ) {
-                               $title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
-
-                               if ( $title instanceof Title ) {
-                                       $text .= $this->formatRow( Linker::link( $title ),
-                                               $this->getLanguage()->formatNum( $row->page_counter ) );
-                               }
-                       }
-                       $res->free();
-               }
-
-               return $text;
-       }
-
        /**
         * Conversion of external statistics into an internal representation
         * Following a ([<header-message>][<item-message>] = number) pattern
index ad149ad..4a41b42 100644 (file)
@@ -41,6 +41,7 @@
        'aa' => 'Qafár af',    # Afar
        'ab' => 'Аҧсшәа', # Abkhaz
        'ace' => 'Acèh',       # Aceh
+       'aeb' => 'زَوُن',  # Tunisian Arabic
        'af' => 'Afrikaans',    # Afrikaans
        'ak' => 'Akan',         # Akan
        'aln' => 'Gegë',       # Gheg Albanian
@@ -85,6 +86,7 @@
        'br' => 'brezhoneg',    # Breton
        'brh' => 'Bráhuí',    # Brahui
        'bs' => 'bosanski',             # Bosnian
+       'bto' => 'Iriga Bicolano',      # Rinconada Bikol
        'bug' => 'ᨅᨔ ᨕᨘᨁᨗ', # Buginese
        'bxr' => 'буряад',        # Buryat (Russia)
        'ca' => 'català',      # Catalan
        'sdc' => 'Sassaresu',   # Sassarese
        'se' => 'sámegiella',  # Northern Sami
        'sei' => 'Cmique Itom', # Seri
+       'ses' => 'Koyraboro Senni',     # Koyraboro Senni
        'sg' => 'Sängö',              # Sango/Sangho
        'sgs' => 'žemaitėška', # Samogitian
        'sh' => 'srpskohrvatski / српскохрватски', # Serbocroatian
index 3d2573b..cd26578 100644 (file)
@@ -27,6 +27,7 @@
        "tog-watchdefault": "منی اصلاح کتگین فایل و پیجانء چارگ لیستء توکا هوار کن",
        "tog-watchmoves": "منی سُرینتگین فایل و پیجانء چارگ لیستء توکا هوار کن",
        "tog-watchdeletion": "منی حذف کتگین فایل و پیجانء چارگ لیستء توکا هوار بکن",
+       "tog-watchrollback": "آ دیمانی آڈ کورتین که آوانا برگردان کورته اون په منی پیگیری لیستی هاتیرا",
        "tog-minordefault": "په طور پیش فرض کل اصلاحات آ په داب جزی مشخص کن",
        "tog-previewontop": "بازبین پیش دار پیش چه جعبه اصلاح",
        "tog-previewonfirst": "ته اولین اصلاح بازبینی پیش دار",
        "editfont-monospace": "فۆنت گۆن مالومێن پاسلگ",
        "editfont-sansserif": "بئ گۆشگێن فۆنت",
        "editfont-serif": "گۆشه دارێن فۆنت",
-       "sunday": "Û\8cÚ© Ø´Ù\86بÙ\87",
-       "monday": "دÙ\88Ø´Ù\86بÙ\87",
-       "tuesday": "سی شنبه",
-       "wednesday": "Ú\86ارشÙ\86بÙ\87",
-       "thursday": "Ù¾Ù\86Ú\86 Ø´Ù\86بÙ\87",
-       "friday": "آدینگ",
-       "saturday": "Ø´Ù\86بÙ\87",
-       "sun": "ی.شنبه",
-       "mon": "د.شنبه",
-       "tue": "س.شنبه",
-       "wed": "چ.شنبه",
-       "thu": "پ.شنبه",
-       "fri": "آدینگ",
-       "sat": "Ø´Ù\86بÙ\87",
-       "january": "ژانویه",
-       "february": "Ù\81Ù\88رÛ\8cÙ\87",
-       "march": "مارس",
+       "sunday": "Û\8cÚ© Ø´Ù\85بÛ\8c",
+       "monday": "دÙ\88Ø´Ù\85بÛ\8c",
+       "tuesday": "سئه شمبی",
+       "wednesday": "Ú\86ارشÙ\85بÛ\8c",
+       "thursday": "Ù¾Ù\86Ú\86 Ø´Ù\85بÛ\8c",
+       "friday": "آدینگ ٬جوما",
+       "saturday": "Ø´Ù\85بÛ\8c",
+       "sun": "یک شمی",
+       "mon": "دو شمبی",
+       "tue": "سئه شمبی",
+       "wed": "چار شمبی",
+       "thu": "پنچ شمبی",
+       "fri": "آدینگ٬ جوما",
+       "sat": "Ø´Ù\85بÛ\8c",
+       "january": "جنوری",
+       "february": "Ù¾Û\8cبرÙ\88رÛ\8c",
+       "march": "مارچ",
        "april": "آپریل",
        "may_long": "می",
        "june": "جون",
        "july": "جولای",
        "august": "آگوست",
-       "september": "سپتامبر",
-       "october": "اکتبر",
-       "november": "نومبر",
+       "september": "سپٹامبر",
+       "october": "اکتوبر",
+       "november": "نوامبر",
        "december": "دسمبر",
-       "january-gen": "ژانویه",
-       "february-gen": "Ù\81Ù\88رÛ\8cÙ\87",
-       "march-gen": "مارس",
+       "january-gen": "جنوری",
+       "february-gen": "Ù¾Û\8cبرÙ\88رÛ\8c",
+       "march-gen": "مارچ",
        "april-gen": "آپریل",
        "may-gen": "می",
        "june-gen": "جون",
        "july-gen": "جولای",
        "august-gen": "آگوست",
-       "september-gen": "سپتمبر",
-       "october-gen": "اکتبر",
-       "november-gen": "نومبر",
+       "september-gen": "سپٹامبر",
+       "october-gen": "اکتوبر",
+       "november-gen": "نوامبر",
        "december-gen": "دسمبر",
-       "jan": "جن",
-       "feb": "Ù\81ب",
-       "mar": "ما",
-       "apr": "آپر",
+       "jan": "جنوری",
+       "feb": "Ù¾Û\8cبرÙ\88رÛ\8c",
+       "mar": "مارچ",
+       "apr": "آپریل",
        "may": "می",
        "jun": "جون",
-       "jul": "جول",
-       "aug": "آگ",
-       "sep": "سپت",
-       "oct": "اکت",
-       "nov": "نو",
-       "dec": "دس",
-       "january-date": "جانری، بهارگاه $1",
-       "february-date": "Ù\81براری، اۆستپان $1",
+       "jul": "جولای",
+       "aug": "آگوست",
+       "sep": "سپٹ\tامبر",
+       "oct": "اکتوبر",
+       "nov": "نوامبر",
+       "dec": "دسمبر",
+       "january-date": "جنوری، بهارگاه $1",
+       "february-date": "Ù¾Û\8cبرÙ\88ری، اۆستپان $1",
        "march-date": "مارچ، مۆلمان $1",
        "april-date": "اپریل، کرا $1",
        "may-date": "مئ، سۆچکان $1",
        "june-date": "جون، جلکان $1",
-       "july-date": "جÙ\88Ù\84ئ، سهێل $1",
+       "july-date": "جÙ\88Ù\84اÛ\8c، سهێل $1",
        "august-date": "اگست، ساچان $1",
-       "september-date": "سپتمبر، تۆمشان $1",
+       "september-date": "سپٹامبر، تۆمشان $1",
        "october-date": "اکتۆبر، سارتان $1",
-       "november-date": "نومبر، گۆپشان $1",
+       "november-date": "نوامبر، گۆپشان $1",
        "december-date": "دسمبر، تاکشان $1",
        "pagecategories": "{{PLURAL:$1|دسته|دسته جات}}",
        "category_header": "صفحات ته دسته \"$1\"",
        "cancel": "کنسل",
        "moredotdotdot": "گیشتر...",
        "morenotlisted": "ائ لیست پکا نه انت",
-       "mypage": "تاک",
+       "mypage": "دÛ\8cÙ\85 Û\8cا ØªØ§Ú©",
        "mytalk": "گپ",
        "anontalk": "گپ کن گون ای آی پی",
        "navigation": "گردگ",
        "and": "&#32;و",
-       "qbfind": "درگیزگ",
+       "qbfind": "ودی کورتین",
        "qbbrowse": "بروز",
-       "qbedit": "اصلاح",
-       "qbpageoptions": "صÙ\81Ø­Ù\87",
-       "qbmyoptions": "Ù\85Ù\86Û\8c ØµÙ\81حات",
+       "qbedit": "ایڈیٹ",
+       "qbpageoptions": "اÛ\8c Ø¯Û\8cÙ\85",
+       "qbmyoptions": "Ù\85Ù\86Û\8c Ø¯Û\8cÙ\85اÙ\86",
        "faq": "ب.ج.س",
        "faqpage": "Project:ب.ج.س",
        "actions": "کاران",
        "help": "کمک",
        "search": "گردگ",
        "searchbutton": "گردگ",
-       "go": "برو",
-       "searcharticle": "برو",
-       "history": "تارÛ\8cØ­ ØµÙ\81Ø­Ù\87",
+       "go": "برا",
+       "searcharticle": "برا",
+       "history": "دÛ\8cÙ\85Û\8c ØªØ§Ø±Û\8cØ®",
        "history_short": "تاریح",
        "updatedmarker": "په روچ بیتگین چه منی اهری  اهری  چارگ",
        "printableversion": "نسخه چهاپی",
        "permalink": "دایمی لینک",
        "print": "چهاپ",
-       "view": "چارگ",
-       "view-foreign": "بÚ\86ار Ù\85اÙ\86 $1",
-       "edit": "اصلاح",
-       "edit-local": "لوکال دسکریپشنء اصلاح کن",
-       "create": "شرکتن",
-       "create-local": "لوکال دسکریپشنء هوار کن",
-       "editthispage": "اÛ\8c ØµÙ\81Ø­Ù\87 Ø§ØµÙ\84اح Ú©ن",
-       "create-this-page": "اÛ\8c ØµÙ\81Ø­Ù\87 Ø´Ø±Ú©ØªÙ\86 Ú©ن",
-       "delete": "حذف",
-       "deletethispage": "اÛ\8c ØµÙ\81Ø­Ù\87 Ø­Ø°Ù\81 Ú©ن",
-       "undeletethispage": "ائ تاکء دلیت مکن",
-       "undelete_short": "حذف مکن {{PLURAL:$1|one edit|$1 edits}}",
-       "viewdeleted_short": "چارگ {{باز،زیاتیگ:$1|یکین حذف بوتگین اصلاح|$1 اصلاح کتگانء حذف بکن}}",
-       "protect": "Ø­Ù\81اظت",
-       "protect_change": "عÙ\88ض Ú©ن",
-       "protectthispage": "اÛ\8c ØµÙ\81Ø­Ù\87 Ø­Ù\81اظت Ú©Ù\86",
+       "view": "دیستین",
+       "view-foreign": "بگÛ\8cÙ\86د Ø¨Û\8c $1",
+       "edit": "ایڈیٹ",
+       "edit-local": "لوکال دسکریپشنء ایڈیٹ کورتین",
+       "create": "جÙ\88Ú\91 Ú©Ù\88رتÛ\8cن",
+       "create-local": "لوکال دسکریپشنء اڈ کورتین",
+       "editthispage": "اÛ\8c Ø¯Û\8cÙ\85ا Ø§Û\8cÚ\88Û\8cÙ¹ Ú©Ù\88رتÛ\8cن",
+       "create-this-page": "اÛ\8c Ø¯Û\8cÙ\85Û\8c Ø¬Ù\88Ú\91 Ú©Ù\88رتÛ\8cن",
+       "delete": "پاک کورتین",
+       "deletethispage": "اÛ\8c Ø¯Û\8cÙ\85Û\8c Ù¾Ø§Ú© Ú©Ù\88رتÛ\8cن",
+       "undeletethispage": "ای دیما پاک مکن",
+       "undelete_short": "پاک مکن {{PLURAL:$1|one edit|$1 edits}}",
+       "viewdeleted_short": "نمایش داتین {{PLURAL:$1|یک پاک بوتینوکین ای\tڈیٹی |$1 پاک بوتینوکین ای\tڈیٹ}}",
+       "protect": "ساتÛ\8cتÛ\8cÙ\86",
+       "protect_change": "بدÙ\84 Ú©Ù\88رتÛ\8cن",
+       "protectthispage": "اÛ\8c Ø¯Û\8cÙ\85ا Ø¨Ø³Ø§Øª",
        "unprotect": "پروتکشنء ٹگل بدئ",
        "unprotectthispage": "ائ تاکء پروتکشنء ٹگل بدئ",
-       "newpage": "Ù\86Ù\88Ú©Û\8cÙ\86 ØµÙ\81Ø­Ù\87",
-       "talkpage": "اÛ\8c ØµÙ\81Ø­Ù\87 بحث کن",
+       "newpage": "Ù\86Ù\88Ú©Û\8cÙ\86 Ø¯Û\8cÙ\85",
+       "talkpage": "اÛ\8c Ø¯Û\8cÙ\85ا بحث کن",
        "talkpagelinktext": "گپ کن",
-       "specialpage": "حاصین صفحه",
+       "specialpage": "هاسین دیم",
        "personaltools": "شخصی وسایل",
        "articlepage": "محتوا صفحه به گند",
-       "talk": "بحث",
+       "talk": "گپ",
        "views": "چارگان",
        "toolbox": "ابزار",
        "userpage": "به گند صفحه کاربر",
        "projectpage": "به گند صفحه",
-       "imagepage": "به چار فایل صفحه ءَ",
-       "mediawikipage": "به گند صفحه کوله",
-       "templatepage": "به گند صفحه تمپلت آ",
-       "viewhelppage": "به گند صفحه کمک آ",
-       "categorypage": "به گند صفحه دسته آ",
+       "imagepage": "بگیند پایلی دیما",
+       "mediawikipage": "بگیند پیامی دیما",
+       "templatepage": "بگیند تیملیتی دیما",
+       "viewhelppage": "بگیند کومکی دیما",
+       "categorypage": "بگیند کتیگوریی دیما",
        "viewtalkpage": "به گند بحث آ",
-       "otherlanguages": "تÙ\87 Ø¯Ú¯Ø± Ø²Ø¨Ø§Ù\86",
+       "otherlanguages": "بÛ\8c Ø¯Ú¯Ù\87 Ø²Ø¨Ø§Ù\86اÙ\86Û\8c ØªØ§",
        "redirectedfrom": "(غیر مستقیم بوتگ چه $1)",
        "redirectpagesub": "صفحه غیر مستقیم",
+       "redirectto": "مسیری ٹگل داتین بی:",
        "lastmodifiedat": "  $2, $1.ای صفحه اهری تغییر دهگ بیته",
        "viewcount": "ای صفحه دسترسی بیتگ {{PLURAL:$1|بار|$1رند}}.",
        "protectedpage": "صفحه محافظتی",
        "disclaimers": "بی میاری گیان",
        "disclaimerpage": "Project:عمومی بی میاریگان",
        "edithelp": "کمک اصلاح",
-       "mainpage": "صÙ\81Ø­Ù\87 Ø§ØµÙ\84Û\8c",
-       "mainpage-description": "صÙ\81Ø­Ù\87 Ø§ØµÙ\84Û\8c",
+       "mainpage": "بÙ\8fÙ\86Û\8cادÛ\8c Ø¯Û\8cÙ\85",
+       "mainpage-description": "بÙ\8fÙ\86Û\8cادÛ\8c Ø¯Û\8cÙ\85",
        "policy-url": "Project:سیاست",
        "portal": "پرتال انجمن",
        "portal-url": "Project:پرتال انجمن",
        "newmessageslinkplural": "{{PLURAL:$1|نوکین کله|999=نوکین کله هان}}",
        "newmessagesdifflinkplural": "$1 {{PLURAL:$1|ٹگل داتن|پهکین ٹگل}}",
        "youhavenewmessagesmulti": "شما را نوکین کوله یان هست ته   $1",
-       "editsection": "اصلاح",
-       "editold": "اصلاح",
+       "editsection": "ایڈیٹ",
+       "editold": "ایڈیٹ",
        "viewsourceold": "به گند منبع ا",
-       "editlink": "اصلاح",
+       "editlink": "ایڈیٹ",
        "viewsourcelink": "چارگ منبع",
        "editsectionhint": ": $1اصلاح انتخاب",
        "toc": "محتوا",
        "page-atom-feed": "منبع \"$1\" Atom",
        "feed-atom": "اتم",
        "feed-rss": "ار اس اس",
-       "red-link-title": "$1 (هنگت  نیستن)",
+       "red-link-title": "$1 (ای دیم وجود نداریت)",
        "sort-descending": "نزولی نز آرتن",
        "sort-ascending": "صعودی نز آرتن",
-       "nstab-main": "صÙ\81Ø­Ù\87",
-       "nstab-user": "صفحه کاربر",
-       "nstab-media": "صفحه مدیا",
+       "nstab-main": "دÛ\8cÙ\85 Û\8cا ØªØ§Ú©",
+       "nstab-user": "کار زوروکی دیم",
+       "nstab-media": "میڈیای دیم",
        "nstab-special": "حاصین صفحات",
        "nstab-project": "صفحه پروژه",
-       "nstab-image": "Ù\81ایل",
+       "nstab-image": "Ù¾ایل",
        "nstab-mediawiki": "کوله",
        "nstab-template": "تمپلت",
        "nstab-help": "صفحه کمک",
        "invalidtitle-knownnamespace": "نامهتبرین عنوان گون نامء جاگاه «$2» ءُ تکست «$3»",
        "invalidtitle-unknownnamespace": "نامهتبرین نام گون ناشناسین نامء جاگاه نمبر $1 ءُ تکست «$2»",
        "exception-nologin": "مان نبیتگ ات",
-       "exception-nologin-text": "دزبندی انت سیستمء تها [[Special:Userlogin|مان بئیت]] تانکه بتوان ات ائ تاکء بگند ات.",
+       "exception-nologin-text": "مهربانی بکنیت بی سامانه یی [[Special:Userlogin|لوگین بیبیت]] تا که بتوانیت بی ای دیما دسترسی داشته به ئیت.",
        "exception-nologin-text-manual": "دزبندی انت  $1  تانکه شمارء پر ائ تاک یانکه اکشنء دزرس ببیت انت.",
        "virus-badscanner": "تنظیم بد: ناشناسین اسکنر ویروس: ''$1''",
        "virus-scanfailed": "اسکن پروش وارت(کد $1)",
        "nav-login-createaccount": "ورود/شرکتن حساب",
        "userlogin": "ورود/شرکتن حساب",
        "userloginnocreate": "لاگین",
-       "logout": "در بیگ",
-       "userlogout": "در بیگ",
+       "logout": "در بوتین",
+       "userlogout": "در بوتین",
        "notloggedin": "وارد نهت",
        "userlogin-noaccount": "شما رء اکانت نه انت؟",
        "userlogin-joinproject": "مان {{SITENAME}} ناملکی بکن ات!",
        "nologin": "حسابء  نیستن؟ '''$1'''.",
-       "nologinlink": "شرکتن یک حساب",
+       "nologinlink": "یک حسابی جوڑ کورتین",
        "createaccount": "حساب شرکن",
        "gotaccount": "یک حساب الان هست؟'''$1'''.",
        "gotaccountlink": "ورود",
        "createacct-another-email-ph": "ایمیلء ادرسء بلک ات",
        "createaccountmail": "کارمرز چه وتکارین موقتین پسورد ءُ رندا آئی دیم داتن پر مالومین ایمیل",
        "createacct-realname": "شمئی اصلیگین نام (ایهتیاری)",
+       "createaccountreason": "دلیل:",
+       "createacct-reason": "دلیل:",
        "createacct-reason-ph": "پرچا شما ادگر نوکین اکانتء اڈ کن ات",
        "createacct-captcha": "سکیوریتی چک",
        "createacct-imgcaptcha-ph": "برزین سیاهگء ادان بلک ات",
        "createaccount-text": "یکی یک حساب په شمی آدرس ایمیل ته  {{SITENAME}} گون نام ($4)  \"$2\"، گون کلمه رمز \"$3\" شرکتت.\nشما بایدن وارد بیت و وتی کلمه رمز الان عوض کنیت.\n\nشما شاید ای پیام شموشیت اگه ای ای حساب گون حطا شر بوتت.",
        "login-throttled": "شما انیگ پر لاگین کتنء چنت بار جهد کتگ ات. دزبندی انت پیسر چه پدایین جهدء $1 موه بداریت.",
        "login-abort-generic": "شمئی لاگینء پکا نبیت - Aborted",
+       "login-migrated-generic": "شمی کاربرین حساب منتکل بوته ، و شمی کاربری نام دیگه ای ویکی تا وجود نداریت .",
        "loginlanguagelabel": "زبان: $1",
        "suspicious-userlogout": "شمئی لوٹ پر در شتن چه سیستمء رد بوت پرچا که چوش که پیداگ انت ائ لوٹ چه هرابین بروزر یانکه پراکسیء راهیگ بیتگ انت.",
        "createacct-another-realname-tip": "اصلیگین نام ایهتیاری انت.\nاگان آئرا بلک ات رهشونء درگتء پر شمئی سیاهگان چه اصلیگین نام کارمرز بیت انت.",
        "preview": "بازبین",
        "showpreview": "بازبین پیش دار",
        "showdiff": "تغییرات پیش دار",
-       "anoneditwarning": "'''هوژاری:''' شما وارد نه بیتگیت.\nشمی آی پی ته تاریح اصلاح ای صفحه ثبت بیت.",
+       "blankarticle": "<strong>هشتار:</strong> شما بی یک هالی دیمی جوڑ\t کورتینا ئالاتا ویت.\nاگه \"{{int:savearticle}}\" ها پدا کلیک کنیت، بدون مئتواین دیمی جوڑ\tا بیت .",
+       "anoneditwarning": "<strong>هشتار:</strong> شما لوگین نه بوته ایت . شمی آی پی نشانی په موچان دیستینی وڑ\tا بیت اگه هر \tٹگلی جوڑ\t بداریت . اگه <strong>[$1 لوگین بئیت]</strong> یا <strong>[$2 یک کاربرین حسابی جوڑ بکنیت]</strong>، شمی ایڈیت بی شمی کاربرین نام نسبت داته آ بینت، لوڑ گون دیگرین مزایایان .",
        "anonpreviewwarning": "''شما مان سیستمء لاگین نکتگ. ذخیره کتنء حالت شمئی آی‌پیء نشانیگ مان ائ پیجء هاپزگ سبت بیت انت.''",
        "missingsummary": "'''یادآوری:''' شما یک خلاصه چه اصلاح وارد نه کرت.\nاگر دگه کلیک کنیت ذخیره آ، شمی اصلاح به بی آی ذخیره بنت.",
        "missingcommenttext": "لطفا یک نظری وارد کنیت جهل آ",
        "content-model-text": "سادگین سیاهگ",
        "content-model-javascript": "جاوا اسکریپٹ",
        "content-model-css": "سی اس اس",
+       "duplicate-args-category": "آ دیمان که گٹ زورته بوته انت گون تکرارین دلیلان بی تماس تیمپلیتی تا",
        "expensive-parserfunction-warning": "هوژاری: ای صفحه شامل بازگین توار عملگر تجریه کنوک سنگیننت.\nآیی بایدن کمتر چه  $2{{PLURAL:$2|توار|توار}}, داشته بیت ادان هنو  $1 هست.",
        "expensive-parserfunction-category": " صفحات گونبازگین توار عملگر تجریه کنوک",
        "post-expand-template-inclusion-warning": "هوژاری: اندازه شامل تمپلت باز مزننت.\nلهتی تمپلتان هور نه بینت.",
        "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)",
        "rev-deleted-event": "(کار آمار زورگ بیتت)",
        "rev-deleted-user-contribs": "[یوزرنام یانکه یانکه آی پی ادرس هزپ بیتگ انت  - ویرایش چیرداتگین مان هواربیتگان]",
        "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}}/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}}}} هزپانی سیاهگ]. موجوت بیت انت.",
        "mergehistory-same-destination": "صفحهٔ مبدأ و مقصد نمی‌تواند یکی باشد",
        "mergehistory-reason": "دلیل:",
        "mergelog": "آمار چن وبند",
-       "pagemerge-logentry": "چن و بند بوت [[$1]] په  [[$2]] (بازبینی ان تا$3)",
        "revertmerge": "بی چن وبند",
        "mergelogpagetext": "جهلء یک لیست چه نوکترین چن وبندان یکی تاریح صفحه په دگری هست.",
        "history-title": "$1: ویرایش انی دپتر",
        "searchall": "کل",
        "showingresults": "جهل پیش دارگنت تا  {{PLURAL:$1|'''1'''نتیجه|'''$1''' نتایج}} شروع بنت گون #'''$2'''.",
        "showingresultsinrange": "پیش دارگ مان جهلء تان {{PLURAL:$1|<strong>1</strong> نتیجگ|<strong>$1</strong> نتیجگ}} in range #<strong>$2</strong> تان #<strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|نتایج <strong>$1</strong> شه <strong>$3</strong>|نتایج <strong>$1 - $2</strong> شه <strong>$3</strong>}}",
        "search-nonefound": "نتیجه هم دپ په درخواست نیست",
        "powersearch-legend": "گردگ پیشرفته",
        "powersearch-ns": "گردگ ته نام فضا آن",
        "preferences": "ترجیحات",
        "mypreferences": "ترجیحات",
        "prefs-edits": "تعداد اصلاحات:",
-       "prefsnologintext2": "دزبندی انت  $1  پر ترجیحاتء تنظیم کتن.",
+       "prefsnologintext2": "منتوارون شمی که په ٹگل داتین تنزیماتانی هاتبرا لوگین بئیت .",
        "prefs-skin": "پوست",
        "skin-preview": "بازین",
        "datedefault": "هچ ترجیح",
        "prefs-tokenwatchlist": "نشانگ",
        "prefs-diffs": "پرک",
        "prefs-help-prefershttps": "ائ ترجیحء تاثیر رند چه شمئی رندی لاگینء کارمرز بیت انت.",
+       "prefswarning-warning": "شمی ٹگل داتینوکین ترجیئات تا انون زاپاس نه بوته انت .\nاگه ای دیم بدون شه کلیک کورتینا بی «$1» ایلا بیت شمی ترجیئات زاپاسا نه بیینت .",
        "prefs-tabs-navigation-hint": "بزان: شما توان ات چه چپی و راستی پیشداروکین بٹن ان  پر حرکت زبانگ انی توکا مان زبانگانی لیست کارمرز بکن ات.",
        "email-address-validity-valid": "شمئی ایمیل ادرس پر درستی پیداگ انت",
        "email-address-validity-invalid": "مهتبرین ایمیل ادرسء بلک ات",
        "right-browsearchive": "گردگ صفحات حذفی",
        "right-undelete": "حذف مکن یک صفحه ایء",
        "right-suppressrevision": "بازبینی و ترینگ بازبینی آن پناهین چه مدیران سیستم",
+       "right-viewsuppressed": "دیستین آ نسهه هانی که شه کار زوروکان چیهر داته بوته انت",
        "right-suppressionlog": "به گند خصوصی آماران",
        "right-block": "دگ کابران چه اصلاح محدود کن",
        "right-blockemail": "یک کاربری چه ایمیل دیم دهگ منع کن",
        "recentchanges-label-plusminus": "تاکء سایز همگرنچ گون ائ بایت انی انداجگ ٹگل وارتگ انت",
        "recentchanges-legend-heading": "'''اختصاران:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (هنچوش پر [[Special:NewPages|نوکین تاکانء فهرست]] بچار ات)",
-       "rcnotefrom": "جÙ\87Ù\84Û\8cگء ØªØºÛ\8cÛ\8cرات Ú\86Ù\87 <strong>$2</strong> (تاÙ\86 <strong>$1</strong> Ù¾Û\8cØ´ Ø¯Ø§Ø±Ú¯ Ø¨Û\8cتگ Ø§Ù\86ت).",
+       "rcnotefrom": "بÛ\8c Ø¬Ù\87Ù\84گا Ù¹Ú¯Ù\84اÙ\86 Ø´Ù\87 <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|Ù\86شاÙ\86 Ø¯Ø§ØªÙ\87 Ø¨Ù\88تÙ\87 Ø§Ù\86ت|Ù\86شاÙ\86 Ø¯Ø§ØªÙ\87 Ø¨Ù\88تÙ\87 Ø§Ù\86ت}}).",
        "rclistfrom": "پیش دار نوکین تغییراتآ چه $3 $2",
        "rcshowhideminor": "$1 هوردین تغییرات",
        "rcshowhideminor-show": "پیش دارگ",
        "reuploaddesc": "کنسل آپلودء و ترر په فرم آپلود",
        "upload-tryagain": "فایلء ٹگا وارتگین توضیحاتء راهیگ بکن ات",
        "uploadnologin": "وارد نهیت",
-       "uploadnologintext": "شما بایدن [[Special:UserLogin|واردبیت]] په آپلود کتن فایل.",
+       "uploadnologintext": "په اپلوڈ\t کورتین پایلی هاتیرا باید $1.",
        "upload_directory_missing": "مسیر آپلود ($1)  گارنت و گون وب سرور شر گنگ نه بیت.",
        "upload_directory_read_only": "مسیر آپلود ($1)  قابل نوشتن گون وب سرور نهنت.",
        "uploaderror": "حطا آپلود",
+       "upload-recreate-warning": "'''هشتار: پایلی بی ناما ڈ\tیلیت یا اینتیکال بوته .'''\n\nپه آسانی هاتیرا، ڈ\tیلیتی چالگ و انتیکالی دیم بی جهلگا آته :",
        "uploadtext": "چه جهلگین فرم په آپلود فایلان استفاده کنت.\nپه دیستن یا گشتن پیشگین آپلودی فایلان برو  [[Special:FileList|لیست فایلان آپلودی]], آپلودان و حذفیات هنچو هستن ته [[Special:Log/upload|آمار آپلود]].\n\nپه وارد کتن فایل ته یک صفحه ای، چه لینک ته فرم استفاده کن\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' په استفاده چه نسخه کامل فایل\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' په استفاده چه ۲۰۰ پیکسل پهنات ته یک جعبه ته چپ\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''  په مسیری لینک دهگ په فایل بی پیش دارگ فایل",
        "upload-permitted": "مجازین نوع فایل:  $1.",
        "upload-preferred": "ترجیحی نوع فایل:  $1.",
        "ignorewarnings": "هردابین هوژاری شموش",
        "minlength1": "نام فایل باید یک حرفی حداقل بیت",
        "illegalfilename": "نام فایل  \"$1\"  شامل کاراکترانی انت که مجاز نهنت ته ای عناوین صفحه.\nلطفا نام فایل بدل کنیت و دگه آپلود آزمایش کنیت.",
+       "filename-toolong": "پایلی نام نباید شه ۲۴۰ بایتا تچکتیر بیت .",
        "badfilename": "نام فایل عوض بوتت په \"$1\".",
+       "filetype-mime-mismatch": "پایلی پدوند «$1.‎» گون آیی  MIME رکما ($2) متابیکت نداریت.",
        "filetype-badmime": "فایلان نوع مایم  \"$1\" مجاز په آپلود بیگ نهنت.",
        "filetype-bad-ie-mime": "نه تونیت ای فایلءَ آپلود کنیت په چی که اینترنت ایکسپلورر آییءَ په دا ب \"$1\" جاه کاریت که شی غیرمجازین نوع فایلینت و حطرناک انت.",
        "filetype-unwanted-type": "'''\".$1\"' یک نه لوٹتگین نوع فایل انت. انواع فایل ترجیحی  $2 انت.\nنوع ترجیحی {{PLURAL:$3|نوع فایلنت|انواع فایلان انت}} $2.",
        "filetype-banned-type": "'''\".$1\"''' یک نوع مجازی ان فایلی نهنت. مجازین {{PLURAL:$3|نوع فایل|انواع فایلان}}  $2.",
        "filetype-missing": " (په داب \".jpg\").فایل هچ بندی نیست",
+       "empty-file": "پایلی که دیم داتیت هالی اینت.",
+       "file-too-large": "پایلی که دیم داته ایت باز ٹو اینت .",
+       "filename-tooshort": "پایلی نام بی شه اندازهگا گونڈ اینت.",
+       "filetype-banned": "ای رکمی پایل اجازه نداریت.",
+       "verification-error": "پایل شه تائید تستا در نه بوت.",
        "large-file": "توصیه بیت که فایلان مزنتر چه  $1 مبنت;\nای فایل $2 انت.",
        "largefileserver": "ای فایل مزنتر چه حدی انت که سرور تنظیم بوتت په اجازه دهگ.",
        "emptyfile": "فایلی که شما آپلود کتت هالیک انت. شاید شی په خاطر اشتباه نه نام فایل بیت.\nلطفا کتنرل کنیت که آیا واقعا شما لوٹیت ای فایلء آپلود کنیت.",
        "php-uploaddisabledtext": "آپلود کتن فایل ته پی‌اچ‌پی فعال نهنت. تنظیم file_uploads کنترل کنیت.",
        "uploadscripted": "ای فایل شامل کد HTML یا اسکریپت انت که شاید گون وب بروزر اشتباهی وانگ بیت.",
        "uploadvirus": "فایل یک ویروسی داریتن! جزییات: $1",
+       "upload-source": "پرونده منبع",
        "sourcefilename": "منبع نام فایل:",
+       "sourceurl": "نشانی منبع:",
        "destfilename": "مقصد نام فایل",
        "upload-maxfilesize": "آهرین هد اندازه فایل : $1",
+       "upload-description": "توضیحات پرونده",
+       "upload-options": "گزینه‌های بارگذاری",
        "watchthisupload": "ای فایل بچار",
        "filewasdeleted": "یک فایلی گو ای نام پیشتر آپلود بوتت و رندا حذف بوت.\nشما بایدن کنترل کنیت  $1 پیش چه شی که دگه آپلود کنیت.",
        "filename-bad-prefix": "نام  فایلی که آپلود بیت شروع بیت گون '''\"$1\"''', که یک نام بی توضیحی هنچکا اتوماتیکی گون دوربین دیجیتال دهگ بوتت.\nلطفا یک تشریحی ترین نامی په وتی فایل بزرویت.",
        "filename-prefix-blacklist": "#<!-- leave this line exactly as it is --> <pre>\n# Syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment\n#   * Every non-blank line is a prefix for typical file names assigned automatically by digital cameras\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # some mobil phones\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- leave this line exactly as it is -->",
        "upload-success-subj": "آپلود موفق",
+       "upload-success-msg": "بارگذاری شما از [$2] موفق بود. این پرونده در اینجا قابل دسترسی است: [[:{{ns:file}}:$1]]",
+       "upload-failure-subj": "مشکل در بارگذاری",
+       "upload-failure-msg": "مشکلی در بارگذاری شما از [$2] وجود داشت:\n\n$1",
+       "upload-warning-subj": "هشدار بارگذاری",
+       "upload-warning-msg": "فرم بارگذاری مشکلی داشت [$2]. شما می‌توانید به [[Special:Upload/stash/$1|فرم بارگذاری]] بازگردید تا این اشکال را رفع کنید.",
        "upload-proto-error": "اشتباه پروتوکل",
        "upload-proto-error-text": "آپلود دراین نیاز په URL آنی داریت که شروع بیت گون  <code>http://</code> یا <code>ftp://</code>.",
        "upload-file-error": "حطا درونی",
        "upload-misc-error-text": "یک ناشناسین حطا وهد آپلود کتن پیش آتک.\nلطفا تایید کنیت که URL معتبرانت و دسترسی بیت و دگه سعی کنیت.\nاگر مشکل ادامه داشت، گون [[Special:ListUsers/sysop|مدیر]]ء تماس گریت.",
        "upload-too-many-redirects": "ای لینک بازگین غیرمستقیم ی هستن",
        "upload-http-error": "یک ارور اچ‌تی‌تی‌پی پیش آتک : $1",
+       "upload-copy-upload-invalid-domain": "بارگذاری کپی پرونده‌ها از این دامنه امکان‌پذیر نیست.",
+       "backend-fail-stream": "نمی‌توان پروندهٔ $1 را ارسال کرد.",
+       "uploadstash": "اپلوڈی سٹاش",
        "upload-curl-error6": "نه تونیت په URL برسیت",
        "upload-curl-error6-text": "داتگین URL دسترسی نه بیت.\nلطفا دگه کنترل کنیت که URL درستنت و سایت په راه انت.",
        "upload-curl-error28": "وهد آپلود هلت",
        "listfiles_size": "اندازه",
        "listfiles_description": "توضیح",
        "listfiles_count": "نسخ",
+       "listfiles-latestversion-yes": "هان",
+       "listfiles-latestversion-no": "نه",
        "file-anchor-link": "فایل",
        "filehist": "تاریح فایل",
        "filehist-help": "اور تاریح/زمان کلیک کنیت دان فایلا په داب هما تاریح بگندیت",
        "statistics": "آمار",
        "statistics-header-pages": "صفحه ی آمار",
        "statistics-header-edits": "اصلاح آمار",
-       "statistics-header-views": "چارگ آمار",
        "statistics-header-users": "آمار کاربر",
        "statistics-articles": "صفحات محتوا",
        "statistics-pages": "صفحات",
        "statistics-files": "آپلود بیتگین فایلان",
        "statistics-edits": "اصلاح صفحات چه وهدی که {{SITENAME}} شر بوتت",
        "statistics-edits-average": "میانگین اصلاحات ته هر صفحه ای",
-       "statistics-views-total": "چارگان کل",
-       "statistics-views-peredit": "چارگ ته هر اصلاح",
        "statistics-users": "ثبت نامی [[Special:ListUsers|users]]",
        "statistics-users-active": "فعالین کاربر",
        "statistics-users-active-desc": "کاربرانی که ته پیشگین {{PLURAL:$1|روچ|$1 روچان}} کاری اش کتت",
-       "statistics-mostpopular": "باز چار تگین صفحات",
+       "pageswithprop-submit": "برا",
+       "pageswithprop-prophidden-long": "جزییات مخفی متن طولانی ($1)",
+       "pageswithprop-prophidden-binary": "جزییات مقدار مخفی باینری ($1)",
        "doubleredirects": "دوبل غیر مستقیم",
        "doubleredirectstext": "ای صفحه لیست کنت صفحاتی که غیر مستقیم رونت په دگه صفحات. هر ردیف شامل لینکانی انت به اولی و دومی غیر مستقیم، و هدف دومی غیر مستقیم، که معمولا استفاده بیت \"real\" صفحه هدف، که بایدن اولی غیر مستقیم پیش داریت.",
        "double-redirect-fixed-move": "[[$1]] انتقال دهگ بوتت، و الان تغییر مسیری په [[$2]] انت",
+       "double-redirect-fixed-maintenance": "رفع خودکار تغییرمسیر دوتایی از [[$1]] به [[$2]] در روند نگهداری.",
        "double-redirect-fixer": "تعمیرکنوک غیر مستقیم",
        "brokenredirects": "پروشتگین غیر مستقیمان",
        "brokenredirectstext": "جهلیگین غیر مستقیم لینک بوتگن په صفحات نیستن:",
        "fewestrevisions": "صفحات گون کمترین بازبینی",
        "nbytes": "$1 {{PLURAL:$1|بایت|بایت}}",
        "ncategories": "$1 {{PLURAL:$1|دسته|دسته جات}}",
+       "ninterwikis": "$1 {{PLURAL:$1|میان‌ویکی|میان‌ویکی}}",
        "nlinks": "$1 {{PLURAL:$1|link|لینک}}",
        "nmembers": "$1 {{PLURAL:$1|member|اعضا}}",
+       "nmemberschanged": "$1 → $2   {{PLURAL:$2| عضو|عضو}}",
        "nrevisions": "$1 {{PLURAL:$1|بازبینی|بازبینی ان}}",
        "nviews": "$1 {{PLURAL:$1|دیستن|دیستن}}",
+       "nimagelinks": "$1 × $2, $3 {{PLURAL:$3|صفحه|صفحات}}",
        "specialpage-empty": "په ای گزارش هچ نتیجه ای نیست ان.",
        "lonelypages": "صفحات یتیم",
        "lonelypagestext": "جهلیگین صفحات چه دگه صفحات لینک یا داهل نه بوتگنت ته {{SITENAME}}.",
        "uncategorizedtemplates": "تمپلتان بی دسته",
        "unusedcategories": "بی استفاده این دسته جات",
        "unusedimages": "بی استفاده این فایلان",
-       "popularpages": "مردمی صفحات",
        "wantedcategories": "لوٹتگین دسته جات",
        "wantedpages": "لوٹتگین صفحات",
        "wantedpages-badtitle": "عنوان غیر مجازین ته جمع نتایج: $1",
        "protectedpages-indef": "فقط محافظت نامحدود",
        "protectedpages-cascade": "محافظتان آبشاری فقط",
        "protectedpagesempty": "هچ صفحه ای گون ای پارامترآن",
+       "protectedpages-page": "دیم یا تاک",
        "protectedtitles": "عناوین محافظتی",
        "protectedtitlesempty": "هچ عنوانی هنو گو ای پارامتران محافظت نهنت.",
        "listusers": "لیست کاربر",
        "spam_reverting": "عوض کتن په آهری نسحه که شامل لینکان می بیت په $1",
        "spam_blanking": "کل بازبینی آن شامل لینکان په $1, بوتت  هالیکی",
        "simpleantispam-label": "کنترل ضد اسپم.\nای شیء پر ''مکن''",
+       "pageinfo-firstuser": "تاکدیمی جوڑ کنوک",
+       "pageinfo-category-info": "تهرِ مئلومات",
        "markaspatrolleddiff": "نشان کن په داب نظارت بوتگین",
        "markaspatrolledtext": "ای صفحه نشان کن په داب نظارت بوتگین",
        "markedaspatrolled": "نشاننت په داب نظارتی",
        "seconds-abbrev": "$1س",
        "minutes-abbrev": "$1م",
        "hours-abbrev": "$1ه",
+       "just-now": "همی انون",
+       "hours-ago": "$1 سائت دیمتیرا",
+       "minutes-ago": "$1 دکیکه دیمتیرا",
+       "seconds-ago": "$1 {{PLURAL:$1|سانیه|سانیه}} دیمتیرا",
+       "monday-at": "دوشمبی $1",
+       "tuesday-at": "سئه شمبی $1",
+       "wednesday-at": "چارشمبی $1",
+       "thursday-at": "پنج‌شمبی $1",
+       "friday-at": "جوما",
+       "saturday-at": "شمبی",
+       "sunday-at": "یک‌شمبی $1",
+       "yesterday-at": "زئ بی $1",
        "bad_image_list": "فرمت په داب جهلیگی انت:\n\nفقط ایتمان لیست چارگ بنت(خطانی که گون * شروع بنت).\nاولین لینک ته یک خط باید یک لینکی په یک بدین فایلی بیت.\nهر لینکی که کیت ته هما خط اسنثتا بینت.",
        "variantname-zh-hans": "هانس",
        "variantname-zh-hant": "هانت",
        "metadata-help": "ای فایل شامل مزیدین اطلاعاتنیت، شاید چه یک دوربین یا اسکنر په شرکتن و دیجیتالی کتن هور بیتت.\nاگه فایل چه اولیگین حالتی تغییر داته بوته شاید لهتی کل جزییات شر پیش مداریت.",
        "metadata-expand": "پیش دار گیشترین جزییات",
        "metadata-collapse": "پناه کن مزیدین جزییاتا",
-       "metadata-fields": "EXIF Ù\85تادÛ\8cتا Ù\81Û\8cÙ\84داÙ\86 Ù\84سÛ\8cت Ø¨Ù\88تگÙ\86 ØªÙ\87 Ø§Û\8c Ú©Ù\88Ù\84Ù\87 Ø´Ø§Ù\85Ù\84 Ø¨Û\8cÙ\86ت ØªØ¹  Ø¹کس  صفحه پیش داریت وهخهدی کهجدول متادیتا is هراب بیت.\nدگران پناه بنت په طور پیش فرض.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "EXIF Ù\85تادÛ\8cتا Ù\81Û\8cÙ\84داÙ\86 Ù\84سÛ\8cت Ø¨Ù\88تگÙ\86 ØªÙ\87 Ø§Û\8c Ú©Ù\88Ù\84Ù\87 Ø´Ø§Ù\85Ù\84 Ø¨Û\8cÙ\86ت ØªØ¹  Ø§کس  صفحه پیش داریت وهخهدی کهجدول متادیتا is هراب بیت.\nدگران پناه بنت په طور پیش فرض.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "پهنات",
        "exif-imagelength": "بلندی",
        "exif-bitspersample": "بیت ته جز",
        "exif-gpsareainformation": "نام منطقه جی پی اس",
        "exif-gpsdatestamp": "تاریح جی پی اس",
        "exif-gpsdifferential": "اصلاح متفاوت جی پی اس",
+       "exif-countrydest": "نشان داته بوته گین ملک",
+       "exif-countrycodedest": "نشان داته بوته گین ملکِ کود",
+       "exif-provinceorstatedest": "نشان داته بوته گین ولایت یا ایالت",
+       "exif-citydest": "نشان داته بوته گین شار",
+       "exif-sublocationdest": "نشان داته بوته گین مئل",
+       "exif-writer": "نویسوک",
+       "exif-languagecode": "زبان",
+       "exif-iimcategory": "تهر",
        "exif-compression-1": "کمپرس نه بوتت",
        "exif-compression-6": "جیی پی ای جی",
        "exif-photometricinterpretation-2": "آی جی بی",
        "version-software": "نصبین برنامه",
        "version-software-product": "محصول",
        "version-software-version": "نسخه",
+       "redirect-submit": "برا",
        "fileduplicatesearch": "گردگ په کپی  فایلان",
        "fileduplicatesearch-summary": "گردگ په کپی فایلان په اساس درهمین ارزش.",
        "fileduplicatesearch-legend": "گردگ په  کپی",
        "revdelete-unrestricted": "به زور چه مدیران سیستم محدودیتان",
        "rightsnone": "(هچ یک)",
        "revdelete-summary": "خلاصه اصلاح",
+       "limitreport-templateargumentsize": "تراشوانِ ارگومینت اندازه",
        "expandtemplates": "پچ کن تمپلیت آنء",
-       "expand_templates_intro": "اÛ\8c ØµÙ\81Ø­Ù\87 حاص لهتی متنء گریت و کل تمپلتان ته آییء برگشتی مزنش کنت.\nآیی هنچوش عمگر تجزیه کنوکء مزن کنت په داب\n<nowiki>{{</nowiki>#language:…}}, و متغییرانی په داب\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash; در حقیقت هر چیزی که ته دو براکتن.\nآیی ای کارء گون توار کنگ تجزیه کنوک مناسب چه مدیا وی کی وت انجام دنت.",
+       "expand_templates_intro": "اÛ\8c ØªØ§Ú© حاص لهتی متنء گریت و کل تمپلتان ته آییء برگشتی مزنش کنت.\nآیی هنچوش عمگر تجزیه کنوکء مزن کنت په داب\n<nowiki>{{</nowiki>#language:…}}, و متغییرانی په داب\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash; در حقیقت هر چیزی که ته دو براکتن.\nآیی ای کارء گون توار کنگ تجزیه کنوک مناسب چه مدیا وی کی وت انجام دنت.",
        "expand_templates_title": "عنوان متن په {{FULLPAGENAME}} و دگه.:",
        "expand_templates_input": "ورودی متن",
        "expand_templates_output": "نتیجه",
index 80c12a7..a92960e 100644 (file)
        "viewsourcetext": "Вы можаце праглядаць і капіяваць крынічны тэкст гэтай старонкі:",
        "viewyourtext": "Вы можаце праглядзець і скапіяваць крынічны тэкст '''вашых рэдагаваньняў''' на гэтую старонку:",
        "protectedinterface": "Гэтая старонка ўтрымлівае інтэрфэйснае паведамленьне праграмнага забесьпячэньня, і яе зьмена забаронена. Каб дадаць ці зьмяніць пераклад ва ўсіх праектах, зьвярніцеся на [//translatewiki.net/ translatewiki.net], праект для перакладу MediaWiki.",
-       "editinginterface": "'''Увага:''' Вы рэдагуеце старонку, якая ўтрымлівае сыстэмнае паведамленьне MediaWiki.\nЯе зьмена паўплывае на вонкавы выгляд інтэрфэйсу іншых удзельнікаў у гэтай вікі.\nКаб дадаць ці зьмяніць пераклад ва ўсіх праектах, зьвярніцеся на [//translatewiki.net/wiki/Main_Page?setlang=be-tarask translatewiki.net] — праект для лякалізацыі MediaWiki.",
+       "editinginterface": "<strong>Увага:</strong> Вы рэдагуеце старонку, якая ўтрымлівае тэкст інтэрфэйсу праграмнага забесьпячэньня.\nЯе зьмена паўплывае на вонкавы выгляд інтэрфэйсу іншых удзельнікаў у гэтай вікі.",
+       "translateinterface": "Каб дадаць ці зьмяніць пераклады для ўсіх вікі, калі ласка, крыстаецеся [//translatewiki.net/ translatewiki.net], лякалізацыйным праектам MediaWiki.",
        "cascadeprotected": "Гэтая старонка абароненая ад рэдагаваньня, таму што яна ўключаная ў {{PLURAL:$1|1=наступную старонку, якая была абароненая|наступныя старонкі, якія былі абароненыя}} з актывізаванай опцыяй «каскаднай абароны»:\n$2",
        "namespaceprotected": "Вы ня маеце правоў на рэдагаваньне старонак у прасторы назваў '''$1'''.",
        "customcssprotected": "Вы ня маеце правоў на рэдагаваньне гэтай CSS-старонкі, таму што яна ўтрымлівае пэрсанальныя налады іншага ўдзельніка.",
        "content-model-text": "просты тэкст",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Старонкі, на якіх у шаблёнах выкарыстоўваюцца парамэтры-дублікаты",
+       "duplicate-args-category-desc": "Старонкі, якія ўтрымліваюць шаблёны з парамэтрамі-дублікатамі, напрыклад, <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> або <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Папярэджаньне: гэтая старонка ўтрымлівае зашмат працаёмістых зваротаў да функцыяў парсэра.\n\nПавінна быць ня болей за $2 {{PLURAL:$2|зварот|звароты|зваротаў}}, а цяпер ўтрымліваецца {{PLURAL:$1|$1 зварот|$1 звароты|$1 зваротаў}}.",
        "expensive-parserfunction-category": "Старонкі, якія ўтрымліваюць зашмат працаёмістых зваротаў да функцыяў парсэра",
        "post-expand-template-inclusion-warning": "Папярэджаньне: Памер уключаемых шаблёнаў занадта вялікі.\nНекаторыя шаблёны ня будуць уключаныя.",
        "mergehistory-same-destination": "Крынічная і мэтавая старонкі ня могуць супадаць",
        "mergehistory-reason": "Прычына:",
        "mergelog": "Журнал аб’яднаньняў",
-       "pagemerge-logentry": "аб’яднаная [[$1]] ў [[$2]] (гісторыя рэдагаваньняў да $3)",
        "revertmerge": "Разьяднаць",
        "mergelogpagetext": "Ніжэй знаходзіцца сьпіс апошніх аб'яднаньняў гісторыяў старонак.",
        "history-title": "$1 — гісторыя зьменаў",
        "gender-female": "Яна рэдагуе вікістаронкі",
        "prefs-help-gender": "Вызначаць гэта неабавязкова.\nАпраграмаваньне выкарыстоўвае гэтае значэньне толькі для граматычна карэктнага звароту да вас.\nГэтая інфармацыя будзе агульнадаступнай.",
        "email": "Электронная пошта",
-       "prefs-help-realname": "Сапраўднае імя паведамляць неабавязкова.\nКалі Вы яго пазначыце, яно будзе выкарыстоўвацца для пазначэньня Вашай працы.",
+       "prefs-help-realname": "Сапраўднае імя паведамляць неабавязковае.\nКалі Вы яго пазначыце, яно можа быць выкарыстанае для пазначэньня Вашай працы.",
        "prefs-help-email": "Адрас электроннай пошты неабавязковы, але ён дае магчымасьць даслаць Вам пароль, калі Вы забылі яго.",
        "prefs-help-email-others": "Вы можаце таксама дазволіць іншым удзельнікам кантактаваць з Вамі праз Вашую асабістую старонку гутарак безь неабходнасьці раскрыцьця адрасу электроннай пошты.",
        "prefs-help-email-required": "Патрабуецца адрас электроннай пошты.",
        "statistics": "Статыстыка",
        "statistics-header-pages": "Статыстыка старонак",
        "statistics-header-edits": "Статыстыка рэдагаваньняў",
-       "statistics-header-views": "Статыстыка праглядаў",
        "statistics-header-users": "Статыстыка ўдзелу",
        "statistics-header-hooks": "Іншая статыстыка",
        "statistics-articles": "Колькасьць старонак са зьместам",
        "statistics-files": "Колькасьць загружаных файлаў",
        "statistics-edits": "Агульная колькасьць рэдагаваньняў",
        "statistics-edits-average": "Сярэдняя колькасьць рэдагаваньняў на старонку",
-       "statistics-views-total": "Агульная колькасьць праглядаў",
-       "statistics-views-total-desc": "Прагляды неіснуючых старонак і спэцыяльных старонак не ўлічаныя",
-       "statistics-views-peredit": "Колькасьць праглядаў на рэдагаваньне",
        "statistics-users": "[[Special:ListUsers|Зарэгістраваныя ўдзельнікі]]",
        "statistics-users-active": "Актыўныя ўдзельнікі",
        "statistics-users-active-desc": "Удзельнікі, якія выканалі нейкае дзеяньне цягам {{PLURAL:$1|апошняга $1 дня|апошніх $1 дзён|апошніх $1 дзён}}",
-       "statistics-mostpopular": "Найпапулярнейшыя старонкі",
        "pageswithprop": "Старонкі з уласьцівасьцямі старонак",
        "pageswithprop-legend": "Старонкі з уласьцівасьцямі старонак",
        "pageswithprop-text": "На гэтай старонцы адлюстроўваюцца старонкі, якія ўжываюць пэўныя ўласьцівасьці старонак",
        "uncategorizedtemplates": "Некатэгарызаваныя шаблёны",
        "unusedcategories": "Катэгорыі, якія не выкарыстоўваюцца",
        "unusedimages": "Файлы, якія не выкарыстоўваюцца",
-       "popularpages": "Папулярныя старонкі",
        "wantedcategories": "Запатрабаваныя катэгорыі",
        "wantedpages": "Запатрабаваныя старонкі",
        "wantedpages-badtitle": "Няслушная назва сярод вынікаў: $1",
        "suppress": "Рэвізаваць",
        "querypage-disabled": "Гэта спэцыяльная старонка адключаная для падвышэньня прадукцыйнасьці",
        "apihelp": "Даведка API",
+       "apihelp-no-such-module": "Модуль «$1» ня знойдзены.",
        "booksources": "Пошук кніг",
        "booksources-search-legend": "Пошук кніг",
        "booksources-isbn": "ISBN:",
        "tooltip-pt-mycontris": "Ваш унёсак",
        "tooltip-pt-login": "Вас запрашаюць увайсьці, хаця гэта і неабавязкова.",
        "tooltip-pt-logout": "Выйсьці",
+       "tooltip-pt-createaccount": "Мы прапануем вам стварыць рахунак і ўвайсьці, але гэта не абавязкова",
        "tooltip-ca-talk": "Абмеркаваньне зьместу старонкі",
        "tooltip-ca-edit": "Вы можаце рэдагаваць гэтую старонку. Калі ласка, ужывайце кнопку прагляду перад захаваньнем.",
        "tooltip-ca-addsection": "Пачаць новую сэкцыю",
        "tooltip-feed-atom": "Atom-стужка для гэтай старонкі",
        "tooltip-t-contributions": "Паказаць унёсак гэтага удзельніка/гэтай удзельніцы",
        "tooltip-t-emailuser": "Даслаць ліст гэтаму ўдзельніку/гэтай удзельніцы па электроннай пошце",
+       "tooltip-t-info": "Болей інфармацыі пра гэтую старонку",
        "tooltip-t-upload": "Загрузіць файл",
        "tooltip-t-specialpages": "Сьпіс усіх спэцыяльных старонак",
        "tooltip-t-print": "Вэрсія гэтай старонкі для друку",
        "pageinfo-robot-policy": "Індэксацыя пашукавікамі",
        "pageinfo-robot-index": "Дазволеная",
        "pageinfo-robot-noindex": "Не дазволеная",
-       "pageinfo-views": "Колькасьць праглядаў",
        "pageinfo-watchers": "Колькасьць назіральнікаў і назіральніц",
        "pageinfo-few-watchers": "Менш за $1 {{PLURAL:$1|назіральніка|назіральнікі|назіральнікаў}}",
        "pageinfo-redirects-name": "Перанакіраваньняў на гэтую старонку",
        "unknown_extension_tag": "Невядомы тэг пашырэньня «$1»",
        "duplicate-defaultsort": "Папярэджаньне: Ключ сартыроўкі па змоўчваньні «$2» замяняе папярэдні ключ сартыроўкі па змоўчваньні «$1».",
        "duplicate-displaytitle": "<strong>Папярэджаньне:</strong> назва для адлюстраваньня «$2» перапісвае ранейшую назву для адлюстраваньня «$1».",
+       "invalid-indicator-name": "<strong>Памылка:</strong> атрыбут <code>name</code> індыкатараў статусу старонкі ня мусіць быць пустым.",
        "version": "Вэрсія",
        "version-extensions": "Усталяваныя пашырэньні",
        "version-skins": "Усталяваныя тэмы афармленьня",
        "revdelete-uname-unhid": "імя ўдзельніка адкрытае",
        "revdelete-restricted": "ужыць абмежаваньні для адміністратараў",
        "revdelete-unrestricted": "зьнятыя абмежаваньні для адміністратараў",
+       "logentry-merge-merge": "$1 {{GENDER:$2|аб’яднаў|аб’яднала}} $3 у $4 (вэрсіі да $5)",
        "logentry-move-move": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 без пакінутага перанакіраваньня",
        "logentry-move-move_redir": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 паўзьверх перанакіраваньня",
index cade0c3..3b4f98b 100644 (file)
        "mergehistory-same-destination": "উৎস এবং গন্তব্য পাতা একই হতে পারবে না",
        "mergehistory-reason": "কারণ:",
        "mergelog": "একত্রীকরণ লগ",
-       "pagemerge-logentry": "[[$1]]-কে [[$2]]-এ একত্র করা হয়েছে ($3 পর্যন্ত সংশোধনগুলিসহ)",
        "revertmerge": "একত্রীকরণ বাতিল",
        "mergelogpagetext": "নিচে সবচেয়ে সাম্প্রতিক ঘটা এক পাতার ইতিহাসের সাথে অন্য পাতার ইতিহাসের একত্রীকরণের একটি তালিকা দেওয়া হল।",
        "history-title": "\"$1\" এর সংশোধনের ইতিহাস",
        "statistics": "পরিসংখ্যান",
        "statistics-header-pages": "পাতার পরিসংখ্যান",
        "statistics-header-edits": "সম্পাদনার পরিসংখ্যান",
-       "statistics-header-views": "প্রদর্শনের পরিসংখ্যান",
        "statistics-header-users": "ব্যবহারকারীর পরিসংখ্যান",
        "statistics-header-hooks": "অন্য পরিসংখ্যান",
        "statistics-articles": "বিষয়বস্তুর পাতা",
        "statistics-files": "আপলোডকৃত ফাইল",
        "statistics-edits": "{{SITENAME}} চালু করার পর থেকে পাতার সম্পাদনাসমূহ",
        "statistics-edits-average": "প্রতি পাতার গড় সম্পাদনা",
-       "statistics-views-total": "সর্বোমোট প্রদর্শন",
-       "statistics-views-total-desc": "অপসারিত হয়েছে এবং বিশেষ পাতার প্রদর্শন এখানে যোগ করা হয়নি",
-       "statistics-views-peredit": "প্রতি সম্পাদনায় পরিদর্শন",
        "statistics-users": "নিবন্ধিত [[Special:ListUsers|ব্যবহারকারী]]",
        "statistics-users-active": "সক্রিয় ব্যবহারকারী",
        "statistics-users-active-desc": "ব্যবহারকারী যারা বিগত {{PLURAL:$1|দিনে|$1 দিনে}} একটি কাজ করেছেন।",
-       "statistics-mostpopular": "সবচেয়ে বেশী বার দেখা পাতাসমূহ",
        "pageswithprop": "পাতার উপাদান সম্বলিত পৃষ্ঠাসমূহ",
        "pageswithprop-legend": "পাতার উপাদান সম্বলিত পৃষ্ঠাসমূহ",
        "pageswithprop-text": "একটি নির্দিষ্ট পাতার বৈশিষ্ট রয়েছে এমন পাতাসমূহের তালিকা।",
        "uncategorizedtemplates": "যেসব টেমপ্লেটের বিষয়শ্রেণী নেই",
        "unusedcategories": "অব্যবহৃত বিষয়শ্রেণীসমূহ",
        "unusedimages": "অব্যবহৃত ফাইলসমূহ",
-       "popularpages": "জনপ্রিয় পাতাসমূহ",
        "wantedcategories": "বাঞ্ছনীয় বিষয়শ্রেণীগুলি",
        "wantedpages": "বাঞ্ছনীয় পাতাগুলি",
        "wantedpages-badtitle": "ফলাফলে ভুল শিরনাম: $1",
        "tooltip-feed-atom": "এই পাতার জন্য অ্যাটম ফিড",
        "tooltip-t-contributions": "এই ব্যবহারকারীর অবদানগুলির তালিকা দেখুন",
        "tooltip-t-emailuser": "এই ব্যবহারকারীকে একটি ই-মেইল পাঠান",
+       "tooltip-t-info": "এই পাতা সম্পর্কে আরো তথ্য",
        "tooltip-t-upload": "ফাইল আপলোড করুন",
        "tooltip-t-specialpages": "সব বিশেষ পাতার তালিকা",
        "tooltip-t-print": "এ পাতার ছাপানোর উপযোগী সংস্করণ",
        "pageinfo-robot-policy": "রোবটের মাধ্যমে ইন্ডেক্স করা হচ্ছে",
        "pageinfo-robot-index": "অনুমোদিত",
        "pageinfo-robot-noindex": "অনুনমোদিন",
-       "pageinfo-views": "পরিদর্শন সংখ্যা",
        "pageinfo-watchers": "পাতাটি প্রদর্শনের সংখ্যা",
        "pageinfo-few-watchers": "$1 জন {{PLURAL:$1|নজরকারীও}} কম",
        "pageinfo-redirects-name": "এই পাতায় পুননির্দেশনাসমূহের সংখ্যা",
index 06edf40..912ae86 100644 (file)
        "mergehistory-same-destination": "Les pàgines d'origen i de destinació no poden ser la mateixa",
        "mergehistory-reason": "Motiu:",
        "mergelog": "Registre de fusions",
-       "pagemerge-logentry": "s'ha fusionat [[$1]] en [[$2]] (revisions fins a $3)",
        "revertmerge": "Desfusiona",
        "mergelogpagetext": "A sota hi ha una llista de les fusions més recents d'una pàgina d'historial en una altra.",
        "history-title": "«$1»: Historial de revisions",
        "gender-female": "Femení",
        "prefs-help-gender": "Opcional: s'usa perquè el programari se us adreci amb missatges amb el gènere adient. Aquesta informació serà pública.",
        "email": "Correu electrònic",
-       "prefs-help-realname": "<nowiki>*</nowiki> Nom real (opcional): si escolliu donar aquesta informació es utilitzarà per a donar-vos l’atribució de la vostra feina.",
+       "prefs-help-realname": "El nom real és opcional.\nSi escolliu donar aquesta informació, s'utilitzarà per a donar-vos l'atribució del vostre treball.",
        "prefs-help-email": "L'adreça electrònica és opcional, però permet l'enviament d'una nova contrasenya en cas que oblideu l'actual.",
        "prefs-help-email-others": "També podeu optar per deixar que els altres contactin amb vós a través de la pàgina personal de discussió, sense necessitat de desvetllar la vostra identitat.",
        "prefs-help-email-required": "Cal una adreça de correu electrònic.",
        "statistics": "Estadístiques",
        "statistics-header-pages": "Estadístiques de pàgines",
        "statistics-header-edits": "Estadístiques d'edicions",
-       "statistics-header-views": "Visualitza estadístiques",
        "statistics-header-users": "Estadístiques d'usuari",
        "statistics-header-hooks": "Altres estadístiques",
        "statistics-articles": "Pàgines de contingut",
        "statistics-files": "Fitxers carregats",
        "statistics-edits": "Edicions en pàgines des que el projecte {{SITENAME}} fou instal·lat",
        "statistics-edits-average": "Edicions per pàgina de mitjana",
-       "statistics-views-total": "Visualitzacions totals",
-       "statistics-views-total-desc": "No hom inclou l'accès a pàgines inexistents o pàgines especials",
-       "statistics-views-peredit": "Visualitzacions per modificació",
        "statistics-users": "[[Special:ListUsers|Usuaris]] registrats",
        "statistics-users-active": "Usuaris actius",
        "statistics-users-active-desc": "Usuaris que han dut a terme alguna acció en {{PLURAL:$1|l'últim dia|els últims $1 dies}}",
-       "statistics-mostpopular": "Pàgines més visualitzades",
        "pageswithprop": "Pàgines amb una propietat de pàgina",
        "pageswithprop-legend": "Pàgines amb una propietat de pàgina",
        "pageswithprop-text": "Aquesta pàgina llista les pàgines que utilitzen una propietat de pàgina en particular.",
        "uncategorizedtemplates": "Plantilles sense categoria",
        "unusedcategories": "Categories sense cap ús",
        "unusedimages": "Fitxers no utilitzats",
-       "popularpages": "Pàgines populars",
        "wantedcategories": "Categories demanades",
        "wantedpages": "Pàgines demanades",
        "wantedpages-badtitle": "Títol invàlid al conjunt de resultats: $1",
        "pager-older-n": "{{PLURAL:$1|anterior|$1 anteriors}}",
        "suppress": "Oversight",
        "querypage-disabled": "Aquesta pàgina especial està desactivada per a no perjudicar el rendiment.",
+       "apihelp": "Ajuda de l'API",
+       "apihelp-no-such-module": "No s'ha trobat el mòdul \"$1\".",
        "booksources": "Obres de referència",
        "booksources-search-legend": "Cerca fonts de llibres",
        "booksources-search": "Cerca",
        "pageinfo-robot-policy": "Indexació per robots",
        "pageinfo-robot-index": "Permès",
        "pageinfo-robot-noindex": "No permès",
-       "pageinfo-views": "Número de visites",
        "pageinfo-watchers": "Número d'usuaris que vigilen la pàgina",
        "pageinfo-few-watchers": "Menys de $1 {{PLURAL:$1|observador|observadors}}",
        "pageinfo-redirects-name": "Nombre de redireccions a aquesta pàgina",
index 4bade64..9c3e014 100644 (file)
        "mainpage": "دەستپێک",
        "mainpage-description": "دەستپێک",
        "policy-url": "Project: سیاسەت",
-       "portal": "دەروازەی بەکارھێنەران",
-       "portal-url": "Project: دەروازەی بەکارھێنەران",
+       "portal": "دەروازەی کۆمەڵگا",
+       "portal-url": "Project:دەروازەی کۆمەڵگا",
        "privacy": "سیاسەتی تایبەتێتی",
        "privacypage": "Project:پاراستنی زانیارییەکان",
        "badaccess": "ھەڵە لە بە دەست ھێنان",
        "mergehistory-same-destination": "پەڕەی سەرچاوە و مەبەست نابێ یەک بن.",
        "mergehistory-reason": "هۆکار:",
        "mergelog": "لۆگی کردنەیەک",
-       "pagemerge-logentry": "[[$1]]ی لەگەڵ [[$2]] کردە یەک (پێداچوونەوەکان ھەتا $3)",
        "revertmerge": "ھەڵوەشاندنەوەی کردنەیەک",
        "mergelogpagetext": "لە خوارەوە دوایین مێژووی‌لاپەڕە خستنە سەر لاپەڕەیەکی‌تر، دەبینی.",
        "history-title": "مێژووی پێداچوونەوەکانی «$1»",
        "statistics": "ئامارەکان",
        "statistics-header-pages": "ئامارەکانی پەڕەکان",
        "statistics-header-edits": "ئامارەکانی گۆڕانکارییەکان",
-       "statistics-header-views": "ئامارەکانی سەردانەکان",
        "statistics-header-users": "ئامارەکانی بەکارھێنەران",
        "statistics-header-hooks": "ئامارەکانی دیکە",
        "statistics-articles": "پەڕە بە ناوەڕۆکەکان",
        "statistics-files": "پەڕگە بارکراوەکان",
        "statistics-edits": "دەستکارییەکانی پەڕەکان لە کاتی دامەزراندنی {{SITENAME}}",
        "statistics-edits-average": "ناونجیی دەستکارییەکان بۆ ھەر پەڕە",
-       "statistics-views-total": "دیتنی هەموو",
-       "statistics-views-peredit": "دیتنی هەر دەستکارییەک",
        "statistics-users": "[[Special:ListUsers|بەکارھێنەر]]ە تۆمارکراوەکان",
        "statistics-users-active": "ئەندامە چالاکەکان",
        "statistics-users-active-desc": "ئەو بەکارھێنەرانەی لە {{PLURAL:$1|ڕۆژ|$1 ڕۆژ}}ی ڕابردوودا کردەوەیەکیان بەڕێوە بردووە",
-       "statistics-mostpopular": "زۆرترین لاپەڕە بینراوەکان",
        "pageswithprop": "پەڕەکان بە تایبەتمەندیی پەڕە",
        "pageswithprop-legend": "پەڕەکان بە تایبەتمەندیی پەڕە",
        "pageswithprop-text": "ئەم پەڕەیە ئەو پەڕانەی تایبەتمەندییەکی پەرەیەکی دیاریکراو بەکاردەھێنن پێرست دەکا.",
        "uncategorizedtemplates": "داڕێژە پۆلێن نەکراوەکان",
        "unusedcategories": "پۆلە بەکارنەھێنراوەکان",
        "unusedimages": "پەڕگە بەکارنەھاتووەکان",
-       "popularpages": "پەڕە مەحبووبەکان",
        "wantedcategories": "پۆلە داواکراوەکان",
        "wantedpages": "پەڕە داواکراوەکان",
        "wantedpages-badtitle": "سەردێڕی نەگونجاو لە سەرجەمی ئەنجامەکان: $1",
        "pageinfo-robot-policy": "پێرستکردن بە بۆتەکان",
        "pageinfo-robot-index": "ڕێ پێدراو",
        "pageinfo-robot-noindex": "ڕێ پێنەدراوه",
-       "pageinfo-views": "ژمارەی بینینەکان",
        "pageinfo-watchers": "ژمارەی چاودێرانی پەڕە",
        "pageinfo-few-watchers": "کەمتر لە $1 {{PLURAL:$1|چاودێر}}",
        "pageinfo-redirects-name": "ژمارەی ڕەوانەکەرەکان بۆ ئەم پەڕەیە",
index 36664d5..bf46a9a 100644 (file)
        "content-model-text": "čistý text",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Stránky s duplicitními argumenty ve voláních šablon",
+       "duplicate-args-category-desc": "Stránka obsahuje volání šablony, které používá duplicitní argumenty, např. <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> nebo <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Varování:''' Tato stránka obsahuje příliš mnoho volání výkonnostně náročných funkcí syntaktického analyzátoru.\n\nPovolený limit je $2, v současné chvíli však {{PLURAL:$1|zde jedno volání je|zde jsou $1 volání|zde je $1 volání}}.",
        "expensive-parserfunction-category": "Stránky s příliš mnoho voláními náročných funkcí syntaktického analyzátoru",
        "post-expand-template-inclusion-warning": "Varování: Objem vkládaných šablon je příliš velký.\nNěkteré šablony nebudou vloženy.",
        "mergehistory-same-destination": "Zdrojová a cílová stránka se nemůžou shodovat",
        "mergehistory-reason": "Důvod:",
        "mergelog": "Kniha slučování",
-       "pagemerge-logentry": "slučuje stránku [[$1]] se stránkou [[$2]] (verze do $3)",
        "revertmerge": "Zrušit sloučení",
        "mergelogpagetext": "Níže je seznam nejnovějších sloučení historie jedné stránky s jinou.",
        "history-title": "Historie verzí stránky „$1“",
        "gender-female": "Ona upravila článek.",
        "prefs-help-gender": "Toto nastavení je nepovinné.\nSoftware ho používá pro volbu gramatického rodu, když vás oslovuje nebo vás zmiňuje.\nTato informace je veřejná.",
        "email": "E-mail",
-       "prefs-help-realname": "Skutečné jméno je nepovinné.\nPokud se ho rozhodnete uvést, bude použito pro označení autorství vaší práce.",
+       "prefs-help-realname": "Skutečné jméno je nepovinné.\nPokud ho uvedete, může být použito pro označení autorství vaší práce.",
        "prefs-help-email": "Uvedení e-mailu není povinné, ale umožní zaslání nového hesla v případě, že své heslo zapomenete.",
        "prefs-help-email-others": "Také můžete dovolit ostatním uživatelům vás prostřednictvím uživatelské stránky kontaktovat.\nVaše adresa v takovém případě není prozrazena.",
        "prefs-help-email-required": "Je vyžadována e-mailová adresa.",
        "statistics": "Statistika",
        "statistics-header-pages": "Statistika stránek",
        "statistics-header-edits": "Statistika editací",
-       "statistics-header-views": "Statistika zobrazení",
        "statistics-header-users": "O uživatelích",
        "statistics-header-hooks": "Další statistiky",
        "statistics-articles": "Obsahové stránky",
        "statistics-files": "Načtené soubory",
        "statistics-edits": "Počet editací od založení wiki",
        "statistics-edits-average": "Průměrný počet editací na stránku",
-       "statistics-views-total": "Celkový počet zobrazení",
-       "statistics-views-total-desc": "Zobrazení neexistujících a speciálních stránek se nepočítají",
-       "statistics-views-peredit": "Počet zobrazení na editaci",
        "statistics-users": "Registrovaní [[Special:ListUsers|uživatelé]]",
        "statistics-users-active": "Aktivní uživatelé",
        "statistics-users-active-desc": "Uživatelé, kteří v {{PLURAL:$1|posledním dni|posledních $1 dnech}} provedli nějakou operaci",
-       "statistics-mostpopular": "Nejčtenější stránky",
        "pageswithprop": "Stránky s vlastností",
        "pageswithprop-legend": "Stránky s vlastností",
        "pageswithprop-text": "Tato stránka obsahuje seznam stránek, které používají zadanou vlastnost stránky.",
        "uncategorizedtemplates": "Nekategorizované šablony",
        "unusedcategories": "Nepoužívané kategorie",
        "unusedimages": "Nepoužívané soubory",
-       "popularpages": "Nejnavštěvovanější stránky",
        "wantedcategories": "Chybějící kategorie",
        "wantedpages": "Chybějící stránky",
        "wantedpages-badtitle": "Výsledky obsahují neplatný název: $1",
        "pager-older-n": "{{PLURAL:$1|1 starší|$1 starší|$1 starších}}",
        "suppress": "Dozor",
        "querypage-disabled": "Tato speciální stránka je z výkonnostních důvodů vypnuta.",
+       "apihelp": "Nápověda k API",
+       "apihelp-no-such-module": "Modul „$1“ nebyl nalezen.",
        "booksources": "Zdroje knih",
        "booksources-search-legend": "Vyhledat knižní zdroje",
        "booksources-search": "Hledat",
        "noindex-category-desc": "Stránka není indexována roboty, protože obsahuje kouzelné slovo <code><nowiki>__NOINDEX__</nowiki></code> a je ve jmenném prostoru, ve kterém je tento příznak dovolen.",
        "index-category-desc": "Stránka obsahuje kouzelné slovo <code><nowiki>__INDEX__</nowiki></code> (a je ve jmenném prostoru, ve kterém je tento příznak dovolen), takže je indexována roboty, přestože by normálně nebyla.",
        "post-expand-template-inclusion-category-desc": "Stránka je po rozbalení všech šablon větší než <code>$wgMaxArticleSize</code>, takže některé šablony rozbaleny nebyly.",
-       "post-expand-template-argument-category-desc": "Stránka je po rozbalení argumentu šablony (něco v trojitých závorkách, např. <code>{{{Foo}}})</code> větší než <code>$wgMaxArticleSize</code>.",
+       "post-expand-template-argument-category-desc": "Stránka je po rozbalení argumentu šablony (něco v trojitých závorkách, např. <code>{{{Foo}}}</code>) větší než <code>$wgMaxArticleSize</code>.",
        "expensive-parserfunction-category-desc": "Stránka používá příliš mnoho náročných funkcí syntaktického analyzátoru (jako <code>#ifexist</code>). Vizte [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "Stránka obsahuje nefunkční odkaz na soubor (odkaz pro vložení souboru, který neexistuje).",
        "hidden-category-category-desc": "Kategorie ve svém textu obsahuje <code><nowiki>__HIDDENCAT__</nowiki></code>, což způsobuje, že se na stránkách implicitně nezobrazuje v rámečku odkazů na kategorie.",
        "tooltip-pt-mycontris": "Seznam vašich příspěvků",
        "tooltip-pt-login": "Doporučujeme vám přihlásit se, ovšem není to povinné.",
        "tooltip-pt-logout": "Odhlásit se",
+       "tooltip-pt-createaccount": "Doporučujeme vytvořit si účet a přihlásit se, není to však povinné",
        "tooltip-ca-talk": "Diskuse ke stránce",
        "tooltip-ca-edit": "Tuto stránku můžete editovat. Prosíme použijte tlačítko Ukázat náhled před uložením.",
        "tooltip-ca-addsection": "Začít novou sekci",
        "tooltip-feed-atom": "Atom kanál pro tuto stránku",
        "tooltip-t-contributions": "Prohlédnout si seznam příspěvků tohoto uživatele",
        "tooltip-t-emailuser": "Poslat e-mail tomuto uživateli",
+       "tooltip-t-info": "Více informací o této stránce",
        "tooltip-t-upload": "Nahrát obrázky či jiná multimédia",
        "tooltip-t-specialpages": "Seznam všech speciálních stránek",
        "tooltip-t-print": "Tato stránka v podobě vhodné k tisku",
        "pageinfo-robot-policy": "Indexování roboty",
        "pageinfo-robot-index": "Dovoleno",
        "pageinfo-robot-noindex": "Zakázáno",
-       "pageinfo-views": "Počet zobrazení",
        "pageinfo-watchers": "Počet sledujících",
        "pageinfo-few-watchers": "Méně než $1 {{PLURAL:$1|sledující|sledující|sledujících}}",
        "pageinfo-redirects-name": "Počet přesměrování na tuto stránku",
index 223f7d1..4c992a8 100644 (file)
        "mergehistory-same-destination": "Ni all y tudalen gwreiddiol a'r cyrchfan fod yr un enw",
        "mergehistory-reason": "Rheswm:",
        "mergelog": "Lòg cyfuno",
-       "pagemerge-logentry": "llyncwyd [[$1]] gan [[$2]] (golygiadau hyd at $3)",
        "revertmerge": "Daduno",
        "mergelogpagetext": "Fe ddilyn rhestr o'r achosion diweddaraf o hanes tudalen yn cael ei gyfuno a hanes tudalen arall.",
        "history-title": "$1: hanes golygu",
        "statistics": "Ystadegau",
        "statistics-header-pages": "Ystadegau tudalennau",
        "statistics-header-edits": "Ystadegau golygiadau",
-       "statistics-header-views": "Ystadegau ymweliadau",
        "statistics-header-users": "Ystadegau defnyddwyr",
        "statistics-header-hooks": "Ystadegau eraill",
        "statistics-articles": "Tudalennau pwnc",
        "statistics-files": "Ffeiliau wedi eu huwchlwytho",
        "statistics-edits": "Golygiadau ers y dechrau ar {{SITENAME}}",
        "statistics-edits-average": "Golygiadau'r dudalen, ar gyfartaledd",
-       "statistics-views-total": "Cyfanswm yr ymweliadau",
-       "statistics-views-total-desc": "Ni chynhwysir ymweliadau â thudalennau nad ydynt yn bod na thudalennau arbennig",
-       "statistics-views-peredit": "Ymweliadau wrth y golygiad:",
        "statistics-users": "[[Special:ListUsers|Defnyddwyr]] cofrestredig",
        "statistics-users-active": "Defnyddwyr gweithgar",
        "statistics-users-active-desc": "Defnyddwyr sydd wedi gweithredu unwaith neu ragor yn ystod y {{PLURAL:$1||diwrnod|deuddydd|tridiau|$1 diwrnod|$1 diwrnod}} diwethaf",
-       "statistics-mostpopular": "Tudalennau sy'n derbyn ymweliad amlaf",
        "pageswithprop": "Tudalennau a chanddynt nodwedd arbennig",
        "pageswithprop-legend": "Tudalennau a chanddynt nodwedd arbennig",
        "pageswithprop-text": "Mae'r dudalen hon yn rhestru tudalennau sydd yn defnyddio nodwedd arbennig yn y dudalen.",
        "uncategorizedtemplates": "Nodiadau heb eu categoreiddio",
        "unusedcategories": "Categorïau gwag",
        "unusedimages": "Lluniau na ddefnyddiwyd eto",
-       "popularpages": "Erthyglau poblogaidd",
        "wantedcategories": "Categorïau sydd eu hangen",
        "wantedpages": "Erthyglau sydd eu hangen",
        "wantedpages-badtitle": "Mae teitl annilys ymhlith y canlyniadau, sef: $1",
        "tooltip-feed-atom": "Porthiant atom ar gyfer y dudalen hon",
        "tooltip-t-contributions": "Gwelwch restr o gyfraniadau'r defnyddiwr hwn",
        "tooltip-t-emailuser": "Anfonwch e-bost at y defnyddiwr hwn",
+       "tooltip-t-info": "Mwy o wybodaeth am y dudalen hon",
        "tooltip-t-upload": "Uwchlwythwch ffeil delwedd, sain, fideo, ayb",
        "tooltip-t-specialpages": "Rhestr o'r holl dudalennau arbennig",
        "tooltip-t-print": "Cynhyrchwch fersiwn o'r dudalen yn barod at ei hargraffu",
        "pageinfo-robot-policy": "Rhestrwyd gan robot",
        "pageinfo-robot-index": "Caniateir",
        "pageinfo-robot-noindex": "Gwrthodedig",
-       "pageinfo-views": "Nifer yr ymweliadau",
        "pageinfo-watchers": "Nifer gwylwyr y dudalen",
        "pageinfo-few-watchers": "Llai na $1 {{PLURAL:$1|gwyliwr|gwyliwr|wyliwr|gwyliwr|o wylwyr}}",
        "pageinfo-redirects-name": "Nifer yr ailgyfeiriadau i'r dudalen hon",
index e51aaa1..0f49dca 100644 (file)
@@ -92,7 +92,7 @@
        "tog-watchdefault": "Selbst geänderte Seiten und Dateien automatisch beobachten",
        "tog-watchmoves": "Selbst verschobene Seiten und Dateien automatisch beobachten",
        "tog-watchdeletion": "Selbst gelöschte Seiten und Dateien automatisch beobachten",
-       "tog-watchrollback": "Seiten, bei denen ich eine Zurücksetzung durchgeführt habe, der Beobachtungsliste hinzufügen.",
+       "tog-watchrollback": "Seiten, bei denen ich eine Zurücksetzung durchgeführt habe, automatisch beobachten",
        "tog-minordefault": "Eigene Änderungen standardmäßig als geringfügig markieren",
        "tog-previewontop": "Vorschau oberhalb des Bearbeitungsfensters anzeigen",
        "tog-previewonfirst": "Beim ersten Bearbeiten immer die Vorschau anzeigen",
        "tog-watchlisthidepatrolled": "Kontrollierte Änderungen in der Beobachtungsliste ausblenden",
        "tog-ccmeonemails": "Schicke mir Kopien der E-Mails, die ich anderen Benutzern sende",
        "tog-diffonly": "Beim Versionsvergleich nur die Unterschiede und nicht die vollständige Seite anzeigen",
-       "tog-showhiddencats": "Anzeige versteckter Kategorien",
+       "tog-showhiddencats": "Versteckte Kategorien anzeigen",
        "tog-norollbackdiff": "Unterschied nach dem Zurücksetzen unterdrücken",
        "tog-useeditwarning": "Warnen, sofern eine zur Bearbeitung geöffnete Seite verlassen wird, die nicht gespeicherte Änderungen enthält",
        "tog-prefershttps": "Wenn angemeldet, immer eine sichere Verbindung benutzen.",
        "viewsourcetext": "Du kannst den Quelltext dieser Seite betrachten und kopieren:",
        "viewyourtext": "Du kannst den Quelltext '''deiner Bearbeitung''' dieser Seite betrachten und kopieren:",
        "protectedinterface": "Diese Seite enthält Text für die Benutzeroberfläche der Software auf diesem Wiki und ist geschützt, um Missbrauch vorzubeugen.\nNutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
-       "editinginterface": "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.\nNutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
+       "editinginterface": "<strong>Warnung:</strong> Diese Seite enthält von der MediaWiki-Software genutzten Text.\nÄnderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.",
+       "translateinterface": "Um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern, verwende bitte [//translatewiki.net/ translatewiki.net], das MediaWiki-Lokalisierungsprojekt.",
        "cascadeprotected": "Diese Seite ist zur Bearbeitung gesperrt. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, die mittels der Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}:\n$2",
        "namespaceprotected": "Du hast nicht die erforderliche Berechtigung, um Seiten im Namensraum '''$1''' bearbeiten zu können.",
        "customcssprotected": "Du hast nicht die Berechtigung, diese CSS enthaltende Seite zu bearbeiten, da sie die persönlichen Einstellungen eines anderen Benutzers enthält.",
        "content-model-text": "Klartext",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Seiten, die doppelte Argumente in Vorlagenaufrufe verwenden",
+       "duplicate-args-category-desc": "Die Seite enthält Vorlagenaufrufe, die Duplikate von Argumenten verwenden, wie <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> oder <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Achtung:''' Diese Seite enthält zu viele Aufrufe aufwändiger Parserfunktionen.\n\nSie darf nicht mehr als $2 {{PLURAL:$2|Aufruf|Aufrufe}} haben, es {{PLURAL:$1|ist aktuell $1 Aufruf|sind aktuell $1 Aufrufe}}.",
        "expensive-parserfunction-category": "Seiten, die aufwändige Parserfunktionen zu oft aufrufen",
        "post-expand-template-inclusion-warning": "Warnung: Die Größe eingebundener Vorlagen ist zu groß, einige Vorlagen können nicht eingebunden werden.",
        "mergehistory-same-destination": "Ausgangs- und Zielseite dürfen nicht identisch sein",
        "mergehistory-reason": "Grund:",
        "mergelog": "Vereinigungs-Logbuch",
-       "pagemerge-logentry": "vereinigte [[$1]] in [[$2]] (Versionen bis $3)",
        "revertmerge": "Vereinigung rückgängig machen",
        "mergelogpagetext": "Dies ist das Logbuch der vereinigten Versionsgeschichten.",
        "history-title": "$1: Versionsgeschichte",
        "gender-female": "Ich bin weiblich",
        "prefs-help-gender": "Dies ist eine freiwillige Angabe.\nDie Software nutzt sie, um dich anzureden sowie als Hinweis für andere durch Verwendung des zutreffenden grammatikalischen Geschlechts.\nDiese Information ist öffentlich.",
        "email": "E-Mail",
-       "prefs-help-realname": "Dies ist eine freiwillige Angabe. Damit kann dein bürgerlicher Name deinen Beiträgen zugeordnet werden.",
+       "prefs-help-realname": "Der bürgerliche Name ist optional.\nFalls angegeben, kann er verwendet werden, um dir eine Zuordnung für deine Beiträge zu geben.",
        "prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern du dein Passwort vergessen hast.",
        "prefs-help-email-others": "Mit anderen Benutzern kannst du auch über die Benutzerdiskussionsseiten Kontakt aufnehmen, ohne dass du deine Identität offenlegen musst.",
        "prefs-help-email-required": "Es wird eine gültige E-Mail-Adresse benötigt.",
        "statistics": "Statistik",
        "statistics-header-pages": "Seitenstatistik",
        "statistics-header-edits": "Bearbeitungsstatistik",
-       "statistics-header-views": "Seitenaufrufstatistik",
        "statistics-header-users": "Benutzerstatistik",
        "statistics-header-hooks": "Andere Statistiken",
        "statistics-articles": "Inhaltsseiten",
        "statistics-files": "Hochgeladene Dateien",
        "statistics-edits": "Seitenbearbeitungen",
        "statistics-edits-average": "Bearbeitungen pro Seite im Durchschnitt",
-       "statistics-views-total": "Seitenaufrufe gesamt",
-       "statistics-views-total-desc": "Aufrufe nicht vorhandener Seiten und von Spezialseiten werden nicht berücksichtigt.",
-       "statistics-views-peredit": "Seitenaufrufe pro Bearbeitung",
        "statistics-users": "Registrierte [[Special:ListUsers|Benutzer]]",
        "statistics-users-active": "Aktive Benutzer",
        "statistics-users-active-desc": "Benutzer mit Bearbeitungen {{PLURAL:$1|während der letzten 24 Stunden|während der vergangenen $1 Tage}}",
-       "statistics-mostpopular": "Meistbesuchte Seiten",
        "pageswithprop": "Seiten mit einer Seiteneigenschaft",
        "pageswithprop-legend": "Seiten mit einer Seiteneigenschaft",
        "pageswithprop-text": "Diese Spezialseite listet Seiten auf, die eine bestimmte Seiteneigenschaft verwenden.",
        "uncategorizedtemplates": "Nicht kategorisierte Vorlagen",
        "unusedcategories": "Verwaiste Kategorien",
        "unusedimages": "Verwaiste Dateien",
-       "popularpages": "Beliebteste Seiten",
        "wantedcategories": "Gewünschte Kategorien",
        "wantedpages": "Gewünschte Seiten",
        "wantedpages-badtitle": "Ungültiger Titel im Ergebnis: $1",
        "pageinfo-robot-policy": "Indizierung durch Suchmaschinen",
        "pageinfo-robot-index": "Erlaubt",
        "pageinfo-robot-noindex": "Nicht erlaubt",
-       "pageinfo-views": "Anzahl der Seitenaufrufe",
        "pageinfo-watchers": "Anzahl der Beobachter der Seite",
        "pageinfo-few-watchers": "Weniger als {{PLURAL:$1|ein|$1}} Beobachter",
        "pageinfo-redirects-name": "Anzahl der Weiterleitungen zu dieser Seite",
        "unknown_extension_tag": "Unbekanntes Parsertag „$1“",
        "duplicate-defaultsort": "Achtung: Der Sortierungsschlüssel „$2“ überschreibt den vorher verwendeten Schlüssel „$1“.",
        "duplicate-displaytitle": "<strong>Warnung:</strong> Der Anzeigetitel „$2“ überschreibt den früheren Anzeigetitel „$1“.",
+       "invalid-indicator-name": "<strong>Fehler:</strong> Das Attribut <code>name</code> des Seitenstatusindikators darf nicht leer sein.",
        "version": "Version",
        "version-extensions": "Installierte Erweiterungen",
        "version-skins": "Installierte Benutzeroberflächen",
        "revdelete-uname-unhid": "Benutzername freigegeben",
        "revdelete-restricted": "Einschränkungen gelten auch für Administratoren",
        "revdelete-unrestricted": "Einschränkungen für Administratoren aufgehoben",
+       "logentry-merge-merge": "$1 {{GENDER:$2|vereinigte}} $3 in die Seite „$4“ (Versionen bis zum $5)",
        "logentry-move-move": "$1 {{GENDER:$2|verschob}} die Seite $3 nach $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|verschob}} die Seite $3 nach $4, ohne dabei eine Weiterleitung anzulegen",
        "logentry-move-move_redir": "$1 {{GENDER:$2|verschob}} die Seite $3 nach $4 und überschrieb dabei eine Weiterleitung",
index ca5d41c..9eb301f 100644 (file)
        "mergehistory-reason": "Sebeb:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Qeydé zew kerdışi",
-       "pagemerge-logentry": "[[$1]] u [[$2]] yew kerd (revizyonî heta $3)",
        "revertmerge": "Abırnê",
        "mergelogpagetext": "Cêr de yew liste esta ke mocnena ra, raya tewr peyêne kamci pela tarixi be a bine ra şanawa pê.",
        "history-title": "Tarixê çımraviyarnayışê \"$1\"",
        "statistics": "İstatistiki",
        "statistics-header-pages": "İstatistikê pele",
        "statistics-header-edits": "Îstatistikê vurnayîşî",
-       "statistics-header-views": "Îstatistiksê vînayîşî",
        "statistics-header-users": "Îstatistiksê karberî",
        "statistics-header-hooks": "Îstatistiksê binî",
        "statistics-articles": "Pelanê tedesteyî",
        "statistics-files": "Dosyayê bar biye",
        "statistics-edits": "{{SITENAME}} saz kerdış ra hetana newke amora vırnayışan",
        "statistics-edits-average": "Her pele sero nısbi vurnayış",
-       "statistics-views-total": "Yekunî bivîne",
-       "statistics-views-total-desc": "Peleyê ke çınyê yana xısusiyê e nina zerre nêkerdê",
-       "statistics-views-peredit": "Ser her vurnayîşî de vînayîşî",
        "statistics-users": "Qeyd biye [[Special:ListUsers|karberî]]",
        "statistics-users-active": "Karberê aktifi",
        "statistics-users-active-desc": "{{PLURAL:$1|roco peyin de|$1 roco peyin de}} karber ê ke kar kerdê.",
-       "statistics-mostpopular": "Pelayanê ke tewr zafî vînî biye",
        "pageswithprop": "Peli be yew xısusiyetê pele",
        "pageswithprop-legend": "Peli be yew xısusiyetê pele",
        "pageswithprop-text": "Na per pimanen pera kena liste.",
        "uncategorizedtemplates": "Şablonê ke bêkategoriyê",
        "unusedcategories": "Kategoriyê ke nêgureniyê",
        "unusedimages": "Dosyeyê ke nê xebtênê",
-       "popularpages": "Pelî ke populer o.",
        "wantedcategories": "Kategoriyê ke waziyayê",
        "wantedpages": "Peleye ke waştênê",
        "wantedpages-badtitle": "sernuşte meqbul niyo: $1",
        "categoriesfrom": "Kategoriyê ke be ninan dest pêkenê, bımocne:",
        "special-categories-sort-count": "goreyê çendi rêz ker.",
        "special-categories-sort-abc": "alfabetik rêz ker",
-       "deletedcontributions": "İştiraqê karberan de besternayına",
-       "deletedcontributions-title": "İştıraqé karberan de besterneyınan",
+       "deletedcontributions": "İştırakê karberi esterdi",
+       "deletedcontributions-title": "İştırakê karberi esterdi",
        "sp-deletedcontributions-contribs": "iştıraqi",
        "linksearch": "Gıreyê teberi cı geyrê",
        "linksearch-pat": "bıgêr motif:",
        "sp-contributions-newbies-sub": "Qe hesebê newe",
        "sp-contributions-newbies-title": "Îştîrakê karberî ser hesabê neweyî",
        "sp-contributions-blocklog": "Qeydê blokey",
-       "sp-contributions-deleted": "İştırakê karberi esterd",
+       "sp-contributions-deleted": "iştırakê karberi esterdi",
        "sp-contributions-uploads": "barkerdey",
        "sp-contributions-logs": "qeydi",
        "sp-contributions-talk": "werênayış",
        "pageinfo-robot-policy": "Weziyetê motor de cıgeyrayışi",
        "pageinfo-robot-index": "İndeksbiyayen",
        "pageinfo-robot-noindex": "İndeksnêbiyayen",
-       "pageinfo-views": "Amarina mocnayışan",
        "pageinfo-watchers": "Amariya pela serykeran",
        "pageinfo-few-watchers": "$1 ra tayê {{PLURAL:$1|seyrker|seyrkeri}}",
        "pageinfo-redirects-name": "Hetenayışê na perer",
index 3b33a5e..1d019f4 100644 (file)
        "no-null-revision": "An pōl èser fât 'na versiòun mìa vâlida per la pàgina \"$1\"",
        "badtitle": "Tétol mìa curèt.",
        "badtitletext": "Al tétol ed la pàgina serchêda l'é vōd, şbaliê opór al deşvîn da 'n erōr int i colegamèint di côdis o int i colegamèint druvê in wiki. In pió al pré avèir ûn o pió carâter ch'an pōlen mìa èser druvê int i tétol.",
-       "perfcached": "Al j infurmasiòun ché sòta vînen registrêdi int la \"cache\" dal databêş e an pōlen mìa èser arnuvê. Int la \"cache\" a gh'é  un mâsim ed {{PLURAL:$1|un rişultêt |$1 rişultêt}} ch' es pōl/en druvêr.",
-       "perfcachedts": "Al j infurmasiòun ché sòta vînen registrêdi int la \"cache\" dal databêş e l'ûltma vôlta l' è stê arnuvê al  $ 1. Int la \"cache\" a gh'é  un mâsim ed {{PLURAL:$4|un rişultêt |$4 rişultêt}} ch' es pōl/en druvêr.",
+       "perfcached": "Al j infurmasiòun ché sòta vînen registrêdi int la \"cache\" dal databêş e an pōlen mìa èser arnuvê. Int la \"cache\" a gh'é  un mâsim ed {{PLURAL:$1|un rişultêt |$1 rişultêt}} ch' es pōlen druvêr.",
+       "perfcachedts": "Al j infurmasiòun ché sòta vînen registrêdi int la cache dal databêş e l'ûltma vôlta l' è stê arnuvê al  $1. Int la cache a gh'é  un mâsim ed {{PLURAL:$4|un rişultêt |$4 rişultêt}} ch' es pōlen druvêr.",
        "querypage-no-updates": "J arnuvamèint ed la pàgina în p'r al mumèint fērom. Al j infurmasiòun dèinter a la pàgina a gnirân mia arnuvêdi.",
        "viewsource": "Guêrda la surzéia",
        "viewsource-title": "Guêrda la surzéia 'd $1",
        "mergehistory-same-destination": "Al pàgini 'd urégin e 'd arîv an pōlen mìa cumbinêr",
        "mergehistory-reason": "Mutîv:",
        "mergelog": "Uniòun",
-       "pagemerge-logentry": "l'à unî [[$1]] a [[$2]] (versiòun fîn a $3)",
        "revertmerge": "Scanşèla l'uniòun",
        "mergelogpagetext": "Ed sègvit în elenchêdi la j ûltmi operasiòun 'd uniòun ed la stòria ed dō pàgini.",
        "history-title": "$1 stòria dal mudéfichi",
        "searchrelated": "coleghê",
        "searchall": "tót",
        "showingresults": "Ed sègvit {{PLURAL:$1|a vîn preşentê al mâsim <strong>1</strong> rişultêt| a vînen preşentê al mâsim <strong>$1</strong> rişultêt}} a partîr dal nómer #<strong>$2</strong>.",
-       "showingresultsinrange": "{{PLURAL:$1|A vîn mustrê| a vînen mustrê}} sòta {{PLURAL:$1|<strong>1</strong> rişultêt|<strong>$1</strong> rişultêt}} dal #<strong>$2</strong> al #<strong>$3</strong>.",
+       "showingresultsinrange": "{{PLURAL:$1|Sòt a vîn mustrê| Sòt a vînen mustrê}}  {{PLURAL:$1|<strong>1</strong> rişultêt|<strong>$1</strong> rişultêt}} dal <strong>$2</strong> al <strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Rişultêt <strong>$1</strong> ed <strong>$3</strong>|Rişultêt <strong>$1 - $2</strong> ed <strong>$3</strong>}}",
        "search-nonefound": "La sērca an n'à mìa dê di rişultê.",
        "powersearch-legend": "Sèirca specêla",
        "gender-female": "L'é registrêda in sém a {{SITENAME}}",
        "prefs-help-gender": "L'impustasiòun ed cla preferèinsa ché l'é a siēlta. Al progrâma al drōva cól valōr ché per parlêr cun tè e numinêret cun chiêter cun al druvêr al gèner ed gramâtica gióst. Cl'infurmasiòun ché la srà póblica.",
        "email": "E-mail",
-       "prefs-help-realname": "Druvêr al nòm vèira l'é 'na siēlta personêla; s' es pèinsa 'd druvêrel al gnirâ uşê per dêr la paternitê di lavōr spidî.",
+       "prefs-help-realname": "Al nòm vèira l'é da druvêr a piaşèir. Se druvê, al pōl èser uşê per dêr la paternitê al lavōr fât.",
        "prefs-help-email": "Mèter l'indéris ed la tó pôsta eletrônica an n'é mia necesâri, mó al permèt ed ricêver la cêva 'd ingrès se per chêş ét la scurdés.",
        "prefs-help-email-others": "Ét pō ânca sernîr ed lasêr che chiêter a 's mèten in cuntât  tēgh cun la pôsta eletrônica cun al colegamèint da la tó pàgina utèint o da còla 'd discusiòun.  Al tó indirés al vîn mìa fât savèir a quî ch'ét 's mèten in cuntât tēgh.",
        "prefs-help-email-required": "L'indirés ed pôsta eletrônica l'é ubligatôri.",
        "tooltip-summary": "Mèt dèinter un sût cèch.",
        "others": "êter",
        "pageinfo-header-edits": "Stòria dal mudéfichi",
-       "pageinfo-views": "Nómer dal vîşiti",
        "pageinfo-watchers": "Nómer  'd utèint che gh'àn la pàgina sòt ôc.",
        "pageinfo-edits": "Nómer totêl dal mudéfichi",
        "pageinfo-authors": "Nómer totêl di divêrs avtôr",
index 7935e31..b6ee3c7 100644 (file)
        "viewsourcetext": "You can view and copy the source of this page:",
        "viewyourtext": "You can view and copy the source of <strong>your edits</strong> to this page:",
        "protectedinterface": "This page provides interface text for the software on this wiki, and is protected to prevent abuse.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
-       "editinginterface": "<strong>Warning:</strong> You are editing a page that is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
+       "editinginterface": "<strong>Warning:</strong> You are editing a page that is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.",
+       "translateinterface": "To add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
        "cascadeprotected": "This page has been protected from editing because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the \"cascading\" option turned on:\n$2",
        "namespaceprotected": "You do not have permission to edit pages in the <strong>$1</strong> namespace.",
        "customcssprotected": "You do not have permission to edit this CSS page because it contains another user's personal settings.",
        "content-model-text": "plain text",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pages using duplicate arguments in template calls",
+       "duplicate-args-category-desc": "The page contains template calls that use duplicates of arguments, such as <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "<strong>Warning:</strong> This page contains too many expensive parser function calls.\n\nIt should have less than $2 {{PLURAL:$2|call|calls}}, there {{PLURAL:$1|is now $1 call|are now $1 calls}}.",
        "expensive-parserfunction-category": "Pages with too many expensive parser function calls",
        "post-expand-template-inclusion-warning": "<strong>Warning:</strong> Template include size is too large.\nSome templates will not be included.",
        "gender-female": "She edits wiki pages",
        "prefs-help-gender": "Setting this preference is optional.\nThe software uses its value to address you and to mention you to others using the appropriate grammatical gender.\nThis information will be public.",
        "email": "Email",
-       "prefs-help-realname": "Real name is optional.\nIf you choose to provide it, this will be used for giving you attribution for your work.",
+       "prefs-help-realname": "Real name is optional.\nIf provided, it may be used to give you attribution for your work.",
        "prefs-help-email": "Email address is optional, but is needed for password resets, should you forget your password.",
        "prefs-help-email-others": "You can also choose to let others contact you by email through a link on your user or talk page.\nYour email address is not revealed when other users contact you.",
        "prefs-help-email-required": "Email address is required.",
        "statistics-summary": "",
        "statistics-header-pages": "Page statistics",
        "statistics-header-edits": "Edit statistics",
-       "statistics-header-views": "View statistics",
        "statistics-header-users": "User statistics",
        "statistics-header-hooks": "Other statistics",
        "statistics-articles": "Content pages",
        "statistics-files": "Uploaded files",
        "statistics-edits": "Page edits since {{SITENAME}} was set up",
        "statistics-edits-average": "Average edits per page",
-       "statistics-views-total": "Views total",
-       "statistics-views-total-desc": "Views to non-existing pages and special pages are not included",
-       "statistics-views-peredit": "Views per edit",
        "statistics-users": "Registered [[Special:ListUsers|users]]",
        "statistics-users-active": "Active users",
        "statistics-users-active-desc": "Users who have performed an action in the last {{PLURAL:$1|day|$1 days}}",
-       "statistics-mostpopular": "Most viewed pages",
        "statistics-footer": "",
        "pageswithprop": "Pages with a page property",
        "pageswithprop-summary": "",
        "unusedcategories-summary": "",
        "unusedimages": "Unused files",
        "unusedimages-summary": "",
-       "popularpages": "Popular pages",
-       "popularpages-summary": "",
        "wantedcategories": "Wanted categories",
        "wantedcategories-summary": "",
        "wantedpages": "Wanted pages",
        "pageinfo-robot-policy": "Indexing by robots",
        "pageinfo-robot-index": "Allowed",
        "pageinfo-robot-noindex": "Disallowed",
-       "pageinfo-views": "Number of views",
        "pageinfo-watchers": "Number of page watchers",
        "pageinfo-few-watchers": "Fewer than $1 {{PLURAL:$1|watcher|watchers}}",
        "pageinfo-redirects-name": "Number of redirects to this page",
        "unknown_extension_tag": "Unknown extension tag \"$1\"",
        "duplicate-defaultsort": "<strong>Warning:</strong> Default sort key \"$2\" overrides earlier default sort key \"$1\".",
        "duplicate-displaytitle": "<strong>Warning:</strong> Display title \"$2\" overrides earlier display title \"$1\".",
+       "invalid-indicator-name": "<strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.",
        "version": "Version",
        "version-summary": "",
        "version-extensions": "Installed extensions",
        "revdelete-uname-unhid": "username unhidden",
        "revdelete-restricted": "applied restrictions to administrators",
        "revdelete-unrestricted": "removed restrictions for administrators",
+       "logentry-merge-merge": "$1 {{GENDER:$2|merged}} $3 into $4 (revisions up to $5)",
        "logentry-move-move": "$1 {{GENDER:$2|moved}} page $3 to $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|moved}} page $3 to $4 without leaving a redirect",
        "logentry-move-move_redir": "$1 {{GENDER:$2|moved}} page $3 to $4 over redirect",
index 9df939c..7845e7b 100644 (file)
        "mergehistory-same-destination": "Fontaj kaj destinaj paĝoj ne povas esti la samon",
        "mergehistory-reason": "Kialo:",
        "mergelog": "Protokolo de kunigoj",
-       "pagemerge-logentry": "kunigis [[$1]] en [[$2]] (versioj ĝis $3)",
        "revertmerge": "Malkunigi",
        "mergelogpagetext": "Jen listo de la plej lastatempaj kunigoj de unu paĝhistorio en alian.",
        "history-title": "Revizio-historio de \"$1\"",
        "statistics": "Statistiko",
        "statistics-header-pages": "Paĝaj statistikoj",
        "statistics-header-edits": "Redaktaj statistikoj",
-       "statistics-header-views": "Vidi statistikojn",
        "statistics-header-users": "Pri la uzantaro",
        "statistics-header-hooks": "Aliaj statistikoj",
        "statistics-articles": "Enhavaj paĝoj",
        "statistics-files": "Alŝutitaj dosieroj",
        "statistics-edits": "Paĝaj redaktoj ekde {{SITENAME}} estis starigita",
        "statistics-edits-average": "Averaĝa kvanto de redaktoj je paĝo",
-       "statistics-views-total": "Vidoj entutaj",
-       "statistics-views-total-desc": "Ne inkluzivante vidojn al ne-ekzistantaj paĝoj kaj specialaj paĝoj",
-       "statistics-views-peredit": "Po rigardoj por redakto",
        "statistics-users": "Registritaj [[Special:ListUsers|uzantoj]]",
        "statistics-users-active": "Aktivaj uzantoj",
        "statistics-users-active-desc": "Uzantoj kiuj faris agon en la {{PLURAL:$1|lasta tago|lastaj $1 tagoj}}",
-       "statistics-mostpopular": "Plej ofte montrataj paĝoj",
        "pageswithprop": "Paĝoj kun paĝa atributo",
        "pageswithprop-legend": "Paĝoj kun paĝa atributo",
        "pageswithprop-text": "Ĉi tiu paĝo listigas paĝoj kiu uzas iajn paĝajn ecojn.",
        "uncategorizedtemplates": "Neenkategoriigitaj ŝablonoj",
        "unusedcategories": "Neuzitaj kategorioj",
        "unusedimages": "Neuzataj bildoj",
-       "popularpages": "Plej vizitataj paĝoj",
        "wantedcategories": "Dezirataj kategorioj",
        "wantedpages": "Dezirataj paĝoj",
        "wantedpages-badtitle": "Malvalida titolo en rezulta aro: $1",
        "pageinfo-robot-policy": "Indeksado per robotoj",
        "pageinfo-robot-index": "Permesata",
        "pageinfo-robot-noindex": "Malpermesata",
-       "pageinfo-views": "Nombro de rigardoj",
        "pageinfo-watchers": "Nombro de paĝatentantoj",
        "pageinfo-few-watchers": "Malpli ol $1 {{PLURAL:$1|atentanto|atentantoj}}",
        "pageinfo-redirects-name": "Nombro da alidirektiloj al ĉi tiu paĝo",
index e69205a..8fddc08 100644 (file)
        "viewsourcetext": "Puedes ver y copiar el código fuente de esta página:",
        "viewyourtext": "Puedes ver y copiar el código de <strong>tus ediciones</strong> a esta página:",
        "protectedinterface": "Esta página proporciona el texto de la interfaz del software en este wiki, y está protegida para prevenir el abuso.\nPara agregar o cambiar las traducciones para todos los wikis, por favor, usa [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
-       "editinginterface": "<strong>Advertencia:</strong> Estás editando una página usada para proporcionar el texto de la interfaz para el software. \nLos cambios en esta página afectarán la apariencia de la interfaz para los demás usuarios de este wiki. \nPara añadir o cambiar las traducciones de todos los wikis utiliza [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
+       "editinginterface": "<strong>Advertencia:</strong> Estás editando una página usada para proporcionar el texto de la interfaz para el software. \nLos cambios en esta página afectarán la apariencia de la interfaz para los demás usuarios de este wiki.",
        "cascadeprotected": "Esta página ha sido protegida para su edición, porque está incluida en {{PLURAL:$1|la siguiente página|las siguientes páginas}}, que están protegidas con la opción de «cascada»:\n$2",
        "namespaceprotected": "No tienes permiso para editar las páginas del espacio de nombres <strong>$1</strong>.",
        "customcssprotected": "No tienes permiso para editar esta página CSS, porque contiene configuraciones personales de otro usuario.",
        "mergehistory-same-destination": "Las páginas de origen y destino no pueden ser la misma",
        "mergehistory-reason": "Motivo:",
        "mergelog": "Registro de fusiones",
-       "pagemerge-logentry": "fusionó [[$1]] en [[$2]] (revisiones hasta $3)",
        "revertmerge": "Deshacer fusión",
        "mergelogpagetext": "Debajo está una lista de las fusiones más recientes de historial de una página en otra.",
        "history-title": "Historial de revisiones de «$1»",
        "statistics": "Estadísticas",
        "statistics-header-pages": "Estadísticas de páginas",
        "statistics-header-edits": "Estadísticas de ediciones",
-       "statistics-header-views": "Estadísticas de visitas",
        "statistics-header-users": "Estadísticas de usuario",
        "statistics-header-hooks": "Otras estadísticas",
        "statistics-articles": "Páginas de contenido",
        "statistics-files": "Archivos subidos",
        "statistics-edits": "Ediciones en páginas desde que {{SITENAME}} fue instalado",
        "statistics-edits-average": "Media de ediciones por página",
-       "statistics-views-total": "Visitas totales",
-       "statistics-views-total-desc": "No se incluyen accesos a páginas no existentes ni páginas especiales",
-       "statistics-views-peredit": "Visitas por edición",
        "statistics-users": "[[Special:ListUsers|Usuarios]] registrados",
        "statistics-users-active": "Usuarios activos",
        "statistics-users-active-desc": "Usuarios que han ejecutado una acción en {{PLURAL:$1|el último día|los últimos $1 días}}",
-       "statistics-mostpopular": "Páginas más vistas",
        "pageswithprop": "Páginas con una propiedad de página",
        "pageswithprop-legend": "Páginas con una propiedad de página",
        "pageswithprop-text": "Esta página muestra las páginas que usan la propiedad de una página en particular",
        "uncategorizedtemplates": "Plantillas sin categorizar",
        "unusedcategories": "Categorías sin uso",
        "unusedimages": "Imágenes sin uso",
-       "popularpages": "Páginas populares",
        "wantedcategories": "Categorías requeridas",
        "wantedpages": "Páginas requeridas",
        "wantedpages-badtitle": "Título inválido en conjunto de resultados: $1",
        "pageinfo-robot-policy": "Indización por robots",
        "pageinfo-robot-index": "Permitido",
        "pageinfo-robot-noindex": "No permitido",
-       "pageinfo-views": "Número de vistas",
        "pageinfo-watchers": "Número de usuarios que vigilan la página",
        "pageinfo-few-watchers": "Menos de $1 {{PLURAL:$1|vigilante|vigilantes}}",
        "pageinfo-redirects-name": "Número de redirecciones a esta página",
index bfe82f4..81f156b 100644 (file)
@@ -66,7 +66,7 @@
        "tog-prefershttps": "Kasuta sisselogimisel alati turvalist ühendust",
        "underline-always": "Alati",
        "underline-never": "Mitte kunagi",
-       "underline-default": "Kujunduse või võrgulehitseja vaikeväärtus",
+       "underline-default": "Kujunduse või brauseri vaikeväärtus",
        "editfont-style": "Redigeerimisala kirjatüüp:",
        "editfont-default": "Veebilehitseja vaikesäte",
        "editfont-monospace": "Püsisammuga font",
        "viewsourcetext": "Saad vaadata ja kopeerida lehekülje lähteteksti:",
        "viewyourtext": "Saad vaadata ja kopeerida sellel leheküljel tehtud '''enda muudatuste '''lähteteksti:",
        "protectedinterface": "Sellel leheküljel on selle viki tarkvara kasutajaliidese tekst. Väärtarvituse vältimiseks on lehekülg kaitstud.\nEt lisada ja muuta tõlkeid kõigi vikide jaoks, kasuta palun MediaWiki lokaliseerimisprojekti [//translatewiki.net/ translatewiki.net].",
-       "editinginterface": "'''Hoiatus:''' Redigeerid tarkvara kasutajaliidese tekstiga lehekülge.\nMuudatused siin mõjutavad kõikide selle viki kasutajate kasutajaliidest.\nEt lisada ja muuta tõlkeid kõigi vikide jaoks, kasuta palun MediaWiki lokaliseerimisprojekti [//translatewiki.net/ translatewiki.net].",
+       "editinginterface": "<strong>Hoiatus:</strong> Redigeerid lehekülge, mille teksti kasutatakse tarkvaraliideses.\nMuudatused siin mõjutavad kõikide selle viki kasutajate kasutajaliidest.",
+       "translateinterface": "Et lisada või muuta tõlkeid kõigi vikide jaoks, kasuta palun MediaWiki lokaliseerimisprojekti [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "See lehekülg on muutmise eest kaitstud, sest see on osa {{PLURAL:$1|järgmisest leheküljest|järgmistest lehekülgedest}}, mis on kaskaadkaitse all:\n$2",
        "namespaceprotected": "Sul pole õigust redigeerida lehekülgi nimeruumis '''$1'''.",
        "customcssprotected": "Sul pole õigust seda CSS-lehekülge redigeerida, sest see sisaldab teise kasutaja isiklikke sätteid.",
        "content-model-text": "lihttekst",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Leheküljed, kus mallikutses on topeltargument",
+       "duplicate-args-category-desc": "Lehekülg sisaldab mallikutseid, kus mõnd argumenti on kasutatud mitu korda, näiteks <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> või <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Hoiatus:''' See lehekülg kasutab liialt palju aeglustavaid laiendusfunktsioone. Neid võiks kasutada vähem kui {{PLURAL:$2|ühel|$2}} korral, praegu on kasutatud {{PLURAL:$1|ühel|$1}} korral.",
        "expensive-parserfunction-category": "Leheküljed, kus on liiga palju kulukaid parserifunktsioone",
        "post-expand-template-inclusion-warning": "'''Hoiatus:''' Väljakutsutavate mallide hulk on liiga suur, mõningaid malle ei näidata.",
        "mergehistory-same-destination": "Allik- ja sihtlehekülg ei saa olla samad.",
        "mergehistory-reason": "Põhjus:",
        "mergelog": "Liitmislogi",
-       "pagemerge-logentry": "liitis lehekülje [[$1]] leheküljega [[$2]] (kuni redaktsioonini $3)",
        "revertmerge": "Tühista liitmine",
        "mergelogpagetext": "Allpool on hiljuti üksteisega liidetud leheküljeajalugude logi.",
        "history-title": "Lehekülje \"$1\" muudatuste ajalugu",
        "gender-female": "Naine",
        "prefs-help-gender": "Selle eelistuse määramine on valikuline.\nTarkvara kasutab valitud väärtust mõnes keeles, et pöörduda sinu poole ja mainida sind teistele, kasutades soole vastavat sõna või sõnavormi.\nSee teave on avalik.",
        "email": "E-post",
-       "prefs-help-realname": "Vabatahtlik. Kui otsustad päris nime avaldada, kasutatakse seda sinu kaastöö seostamiseks sinuga.",
+       "prefs-help-realname": "Tegelik nimi on valikuline.\nKui avaldatud, võidakse seda kasutada sinu kaastöö seostamiseks sinuga.",
        "prefs-help-email": "E-posti aadressi sisestamine pole kohustuslik, kuid võimaldab sul tellida parooli meeldetuletuse, kui peaksid oma parooli unustama.",
        "prefs-help-email-others": "Võid ka paluda teistel sinu kasutaja- või aruteluleheküljel sinuga ühendust võtta, selle asemel, et peaksid oma isikuandmeid avaldama.",
        "prefs-help-email-required": "E-posti aadress on vajalik.",
        "statistics": "Arvandmestik",
        "statistics-header-pages": "Lehekülgede arvandmed",
        "statistics-header-edits": "Redigeerimise arvandmed",
-       "statistics-header-views": "Vaatamise statistika",
        "statistics-header-users": "Kasutajate arvandmed",
        "statistics-header-hooks": "Muud arvandmed",
        "statistics-articles": "Sisulehekülgi",
        "statistics-files": "Üleslaaditud faile",
        "statistics-edits": "Redigeerimisi alates {{GRAMMAR:genitive|{{SITENAME}}}} loomisest",
        "statistics-edits-average": "Keskmiselt redigeerimisi lehekülje kohta",
-       "statistics-views-total": "Lehekülje vaatamisi kokku",
-       "statistics-views-total-desc": "Olematute lehekülgede või erilehekülgede vaatamised on välja arvatud",
-       "statistics-views-peredit": "Vaatamisi redaktsiooni kohta",
        "statistics-users": "Registreeritud [[Special:ListUsers|kasutajaid]]",
        "statistics-users-active": "Aktiivseid kasutajaid",
        "statistics-users-active-desc": "Kasutajad, kes on viimase {{PLURAL:$1|päeva|$1 päeva}} jooksul tegutsenud",
-       "statistics-mostpopular": "Enim vaadatud leheküljed",
        "pageswithprop": "Leheatribuudiga leheküljed",
        "pageswithprop-legend": "Leheatribuudiga leheküljed",
        "pageswithprop-text": "Sellel leheküljel on loetletud mõnd leheatribuuti kasutavad leheküljed.",
        "uncategorizedtemplates": "Kategoriseerimata mallid",
        "unusedcategories": "Kasutamata kategooriad",
        "unusedimages": "Kasutamata failid",
-       "popularpages": "Loetumad leheküljed",
        "wantedcategories": "Kõige oodatumad kategooriad",
        "wantedpages": "Kõige oodatumad leheküljed",
        "wantedpages-badtitle": "Tulemuste seas on vigane pealkiri: $1",
        "pager-older-n": "{{PLURAL:$1|vanem 1|vanemad $1}}",
        "suppress": "Varjamine",
        "querypage-disabled": "See erilehekülg on keelatud, et jõudlust hoida.",
+       "apihelp": "API abi",
+       "apihelp-no-such-module": "Moodulit \"$1\" ei leitud.",
        "booksources": "Raamatuotsimine",
        "booksources-search-legend": "Raamatuotsimine",
        "booksources-search": "Otsi",
        "noindex-category-desc": "Robotid ei indekseeri lehekülge, sest sellel on võlusõna <code><nowiki>__NOINDEX__</nowiki></code> ja lehekülg on nimeruumis, kus see silt on lubatud.",
        "index-category-desc": "Leheküljel on <code><nowiki>__INDEX__</nowiki></code> ja lehekülg on nimeruumis, kus see silt on lubatud ning seetõttu indekseerivad robotid lehekülge seal, kus nad muidu seda ei teeks.",
        "post-expand-template-inclusion-category-desc": "Kõigi mallide hõrendamise järel on lehekülg suurem kui <code>$wgMaxArticleSize</code>, mistõttu jäid mõned mallid hõrendamata.",
-       "post-expand-template-argument-category-desc": "Malli argumendi (midagi kolmekordsete looksulgude vahel, näiteks <code>{{{Foo}}})</code> hõrendamise järel on lehekülg suurem kui <code>$wgMaxArticleSize</code>.",
+       "post-expand-template-argument-category-desc": "Malli argumendi (midagi kolmekordsete looksulgude vahel, näiteks <code>{{{Foo}}}</code>) hõrendamise järel on lehekülg suurem kui <code>$wgMaxArticleSize</code>.",
        "expensive-parserfunction-category-desc": "Lehekülg kasutab liiga palju kulukaid parserifunktsioone nagu <code>#ifexist</code>. Vaata [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit dokumentatsiooni].",
        "broken-file-category-desc": "Leheküljel on katkine pildilink, millega manustatakse fail, mida pole olemas.",
        "hidden-category-category-desc": "Selle kategooria leheküljel on <code><nowiki>__HIDDENCAT__</nowiki></code>, mis vaikimisi ei lase näidata seda kategooriat lehekülgedel kategoorialinkide kastis.",
        "tooltip-pt-preferences": "Sinu eelistused",
        "tooltip-pt-watchlist": "Loend lehekülgedest, mille muudatusi jälgid",
        "tooltip-pt-mycontris": "Sinu kaastööde loend",
-       "tooltip-pt-login": "Me julgustame teid sisse logima, kuid see pole kohustuslik.",
+       "tooltip-pt-login": "See pole küll kohustuslik, aga sul tasub sisse logida.",
        "tooltip-pt-logout": "Logi välja",
+       "tooltip-pt-createaccount": "See pole küll kohustuslik, aga sul tasub konto luua ja sisse logida.",
        "tooltip-ca-talk": "Selle artikli arutelu",
        "tooltip-ca-edit": "Sa saad seda lehekülge muuta. Palun kasuta enne salvestamist eelvaadet.",
        "tooltip-ca-addsection": "Lisa uus alaosa",
        "tooltip-feed-atom": "Selle lehekülje Atom-voog",
        "tooltip-t-contributions": "Kuva selle kasutaja kaastöö",
        "tooltip-t-emailuser": "Saada sellele kasutajale e-kiri",
+       "tooltip-t-info": "Lisateave selle lehekülje kohta",
        "tooltip-t-upload": "Laadi faile üles",
        "tooltip-t-specialpages": "Erilehekülgede loend",
        "tooltip-t-print": "Selle lehe trükiversioon",
        "pageinfo-robot-policy": "Robotindekseering",
        "pageinfo-robot-index": "Lubatud",
        "pageinfo-robot-noindex": "Keelatud",
-       "pageinfo-views": "Vaatamiste arv",
        "pageinfo-watchers": "Lehekülje jälgijate arv",
        "pageinfo-few-watchers": "Alla {{PLURAL:$1|ühe jälgija|$1 jälgija}}",
        "pageinfo-redirects-name": "Sellele leheküljele suunavate lehekülgede arv",
        "unknown_extension_tag": "Tundmatu lisa silt \"$1\".",
        "duplicate-defaultsort": "'''Hoiatus:''' Järjestamisvõti \"$2\" tühistab eespool oleva järjestamisvõtme \"$1\".",
        "duplicate-displaytitle": "<strong>Hoiatus:</strong> Kuvatava pealkirjaga \"$2\" kirjutatakse üle varasem kuvatav pealkiri \"$1\".",
+       "invalid-indicator-name": "<strong>Tõrge:</strong> Lehekülje olekunäidu juures ei tohi atribuudi <code>name</code> väärtus puududa.",
        "version": "Versioon",
        "version-extensions": "Paigaldatud lisad",
        "version-skins": "Paigaldatud kujundused",
        "revdelete-uname-unhid": "nähtavaks tehti kasutajanimi",
        "revdelete-restricted": "kehtestati piirangud administraatoritele",
        "revdelete-unrestricted": "eemaldati administraatoritelt piirangud",
+       "logentry-merge-merge": "$1 {{GENDER:$2|liitis}} lehekülje $3 leheküljega $4 (kuni redaktsioonini $5)",
        "logentry-move-move": "$1 {{GENDER:$2|teisaldas}} lehekülje $3 pealkirja $4 alla",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|teisaldas}} lehekülje $3 pealkirja $4 alla ümbersuunamist maha jätmata",
        "logentry-move-move_redir": "$1 {{GENDER:$2|teisaldas}} lehekülje $3 ümbersuunamise $4 asemele",
index 14fbbee..d17634d 100644 (file)
        "viewsourcetext": "Voit katsoa ja kopioida tämän sivun lähdetekstiä:",
        "viewyourtext": "Voit tarkastella ja kopioida lähdekoodin '''tekemistäsi muutoksista''' tähän sivuun:",
        "protectedinterface": "Tämä sivu sisältää ohjelmiston käyttöliittymätekstiä ja on suojattu häiriköinnin estämiseksi.\nViestien kääntäminen tulisi tehdä [//translatewiki.net/ translatewiki.netissä] – MediaWikin kotoistusprojektissa.",
-       "editinginterface": "'''Varoitus:''' Muokkaat sivua, joka sisältää ohjelmiston käyttöliittymätekstiä.\nMuutokset tähän sivuun vaikuttavat muiden käyttäjien käyttöliittymän ulkoasuun tässä wikissä.\nViestien kääntäminen tulisi tehdä [//translatewiki.net/ translatewiki.netissä] – MediaWikin kotoistusprojektissa.",
+       "editinginterface": "<strong>Varoitus:</strong> Olet muokkaamassa sivua, joka sisältää ohjelmiston käyttöliittymän tekstiä.\nMuutokset tähän sivuun vaikuttavat muiden käyttäjien käyttöliittymän ulkoasuun tässä wikissä.",
+       "translateinterface": "Jos haluat lisätä tai muuttaa käännöksiä kaikissa wikeissä, käytä siihen MediaWikin kääntämistä varten rakennettua sivustoa [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "Tämä sivu on suojattu muokkauksilta, koska se on sisällytetty {{PLURAL:$1|seuraavaan tarttuvasti suojattuun sivuun|seuraaviin tarttuvasti suojattuihin sivuihin}}:\n$2",
        "namespaceprotected": "Et voi muokata sivuja nimiavaruudessa '''$1'''.",
        "customcssprotected": "Sinulla ei ole oikeutta muuttaa tätä CSS-sivua, koska se sisältää toisen käyttäjän henkilökohtaisia asetuksia.",
        "longpageerror": "'''Virhe: Lähettämäsi tekstin pituus on {{PLURAL:$1|kilotavu|$1 kilotavua}}. Tekstiä ei voida tallentaa, koska se on pitempi kuin sallittu enimmäispituus {{PLURAL:$2|yksi kilotavu|$2 kilotavua}}.'''",
        "readonlywarning": "'''Varoitus: Tietokanta on lukittu huoltoa varten, joten et pysty tallentamaan muokkauksiasi juuri nyt.'''\nSaattaa olla paras leikata ja liimata tekstisi omaan tekstitiedostoosi ja tallentaa se tänne myöhemmin.\n\nLukitsemisen syy: $1",
        "protectedpagewarning": "'''Varoitus: Tämä sivu on suojattu niin, että vain ylläpitäjät voivat muokata sitä.'''\nAlla on viimeisin lokitapahtuma:",
-       "semiprotectedpagewarning": "'''Huomautus:''' Tämä sivu on suojattu niin, että vain rekisteröityneet käyttäjät voivat muokata sitä.\nAlla on viimeisin lokitapahtuma:",
+       "semiprotectedpagewarning": "<strong>Huomaa:</strong> Tämä sivu on suojattu niin, että vain rekisteröityneet käyttäjät voivat muokata sitä.\nAlla on viimeisin lokitapahtuma:",
        "cascadeprotectedwarning": "<strong>Varoitus:</strong> Vain ylläpitäjät voivat muokata tätä sivua, koska se on sisällytetty {{PLURAL:$1|seuraavaan tarttuvasti suojattuun sivuun|seuraaviin tarttuvasti suojattuihin sivuihin}}:",
        "titleprotectedwarning": "'''Varoitus: Tämä sivunimi on suojattu niin, että sivun luomiseen tarvitaan [[Special:ListGroupRights|erityisiä oikeuksia]].'''\nAlla on viimeisin lokitapahtuma:",
        "templatesused": "Tällä sivulla {{PLURAL:$1|käytetty malline|käytetyt mallineet}}:",
        "content-model-text": "pelkkä teksti",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Sivut, jotka käyttävät kaksinkertaisia argumentteja mallinekutsuissa",
        "expensive-parserfunction-warning": "Tällä sivulla on liian monta hitaiden laajennusfunktioiden kutsua.\nKutsuja pitäisi olla alle $2 {{PLURAL:$2|kappale|kappaletta}}, mutta nyt niitä on $1 {{PLURAL:$1|kappale|kappaletta}}.",
        "expensive-parserfunction-category": "Sivut, joissa on liian monta vaativaa jäsenninfunktiota",
        "post-expand-template-inclusion-warning": "'''Varoitus:''' Sisällytettyjen mallineiden koko on liian suuri.\nJoitakin mallineita ei ole sisällytetty.",
        "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]] (versiot $3 saakka)",
        "revertmerge": "Peru yhdistäminen",
        "mergelogpagetext": "Alla on loki viimeisimmistä muutoshistorioiden yhdistämisistä.",
        "history-title": "Sivun ”$1” muutoshistoria",
        "searchall": "kaikki",
        "showingresults": "Alla on vain {{PLURAL:$1|<strong>1</strong> hakutulos|<strong>$1</strong> hakutulosta}} alkaen tuloksesta nro <strong>$2</strong>.",
        "showingresultsinrange": "Alla näytetään {{PLURAL:$1|<strong>1</strong> tulos|<strong>$1</strong> tulosta}} väliltä <strong>$2</strong> – <strong>$3</strong>.",
-       "search-showingresults": "{{PLURAL:$4|Tulos <strong>$1</strong> enimmäismäärästä <strong>$3</strong>|Tulokset <strong>$1 - $2</strong> enimmäismäärästä <strong>$3</strong>}}",
+       "search-showingresults": "{{PLURAL:$4|Tulos <strong>$1</strong> enimmäismäärästä <strong>$3</strong>|Tulokset <strong>$1  $2</strong> enimmäismäärästä <strong>$3</strong>}}",
        "search-nonefound": "Hakusi ei tuottanut tulosta.",
        "powersearch-legend": "Laajennettu haku",
        "powersearch-ns": "Hae nimiavaruuksista:",
        "gender-female": "Nainen",
        "prefs-help-gender": "Tämän asetuksen määrittäminen on vapaaehtoista.\nOhjelmisto käyttää annettua arvoa viitaten sinuun oikealla kieliopillisella suvulla.\nTämä tieto on julkinen.",
        "email": "Sähköpostitoiminnot",
-       "prefs-help-realname": "Vapaaehtoinen. Nimesi näytetään käyttäjätunnuksesi sijasta sivun tekijäluettelossa.",
+       "prefs-help-realname": "Oikean nimen ilmoittaminen on vapaaehtoista.\nJos ilmoitettu, sitä voidaan käyttää tekijän mainitsemiseen.",
        "prefs-help-email": "Vapaaehtoinen, mutta tarvitaan uuden salasanan pyytämiseen, jos unohdat salasanasi.",
        "prefs-help-email-others": "Voit myös antaa muiden käyttäjien ottaa yhteyttä sinuun sähköpostilla. Osoitteesi ei paljastu toisen käyttäjän ottaessa sinuun yhteyttä.",
        "prefs-help-email-required": "Sähköpostiosoite on pakollinen.",
        "statistics": "Tilastot",
        "statistics-header-pages": "Sivutilastot",
        "statistics-header-edits": "Muokkaustilastot",
-       "statistics-header-views": "Katselutilastot",
        "statistics-header-users": "Käyttäjätilastot",
        "statistics-header-hooks": "Muut tilastot",
        "statistics-articles": "Sisältösivuja",
        "statistics-files": "Tallennettuja tiedostoja",
        "statistics-edits": "Muokkauksia {{GRAMMAR:genitive|{{SITENAME}}}} perustamisen jälkeen",
        "statistics-edits-average": "Keskimäärin yhtä sivua muokattu",
-       "statistics-views-total": "Sivuja katsottu yhteensä",
-       "statistics-views-total-desc": "Näyttökertoihin eivät sisälly toimintosivut eikä sivut, joita ei ole olemassa",
-       "statistics-views-peredit": "Sivuja katsottu muokkausta kohden",
        "statistics-users": "Rekisteröityneitä [[Special:ListUsers|käyttäjiä]]",
        "statistics-users-active": "Aktiivisia käyttäjiä",
        "statistics-users-active-desc": "Käyttäjät, jotka ovat suorittaneet jonkin toiminnon {{PLURAL:$1|edellisen päivän|edellisten $1 päivän}} aikana.",
-       "statistics-mostpopular": "Katsotuimmat sivut",
        "pageswithprop": "Sivut sivun ominaisuuden mukaan",
        "pageswithprop-legend": "Sivut sivun ominaisuuden mukaan",
        "pageswithprop-text": "Tällä sivulla on lueteltu sivut, jotka käyttävät erityistä sivun ominaisuutta.",
        "uncategorizedtemplates": "Luokittelemattomat mallineet",
        "unusedcategories": "Käyttämättömät luokat",
        "unusedimages": "Käyttämättömät tiedostot",
-       "popularpages": "Suositut sivut",
        "wantedcategories": "Halutut luokat",
        "wantedpages": "Halutut sivut",
        "wantedpages-badtitle": "Virheellinen otsikko tuloksissa: $1",
        "pager-older-n": "{{PLURAL:$1|1 vanhempi|$1 vanhempaa}} →",
        "suppress": "Häivytys",
        "querypage-disabled": "Tämä toimintosivu on poistettu käytöstä suorituskykysyistä.",
-       "apihelp-no-such-module": "Moduulia \"$1\" ei löydy.",
+       "apihelp": "API-apu",
+       "apihelp-no-such-module": "Moduulia ”$1” ei löydy.",
        "booksources": "Kirjalähteet",
        "booksources-search-legend": "Etsi kirjalähteitä",
        "booksources-isbn": "ISBN",
        "tooltip-pt-mycontris": "Lista omista muokkauksista",
        "tooltip-pt-login": "Kirjaudu sisään tai luo tunnus",
        "tooltip-pt-logout": "Kirjaudu ulos",
+       "tooltip-pt-createaccount": "On suositeltavaa luoda käyttäjätunnus ja kirjautua sisään. Se ei kuitenkaan ole pakollista.",
        "tooltip-ca-talk": "Keskustele sisällöstä",
        "tooltip-ca-edit": "Muokkaa tätä sivua",
        "tooltip-ca-addsection": "Aloita keskustelu uudesta aiheesta",
        "tooltip-feed-atom": "Atom-syöte tälle sivulle",
        "tooltip-t-contributions": "Näytä lista tämän käyttäjän muokkauksista",
        "tooltip-t-emailuser": "Lähetä sähköpostia tälle käyttäjälle",
+       "tooltip-t-info": "Enemmän tietoa tästä sivusta",
        "tooltip-t-upload": "Tallenna tiedostoja",
        "tooltip-t-specialpages": "Näytä toimintosivut",
        "tooltip-t-print": "Tulostettava versio",
        "pageinfo-robot-policy": "Hakukonemerkinnät",
        "pageinfo-robot-index": "Indeksoitava",
        "pageinfo-robot-noindex": "Ei indeksoitava",
-       "pageinfo-views": "Katselukertojen määrä",
        "pageinfo-watchers": "Sivun tarkkailijoiden lukumäärä",
        "pageinfo-few-watchers": "Vähemmän kuin $1 {{PLURAL:$1|tarkkailija|tarkkailijaa}}",
        "pageinfo-redirects-name": "Sivulle johtavat ohjaukset",
        "unknown_extension_tag": "Tuntematon laajennuskoodi ”$1”.",
        "duplicate-defaultsort": "'''Varoitus:''' Oletuslajitteluavain ”$2” korvaa aiemman oletuslajitteluavaimen ”$1”.",
        "duplicate-displaytitle": "<strong>Varoitus:</strong> Näytettävä otsikko \"$2\" päällekirjoittaa edellisen otsikon \"$1\".",
+       "invalid-indicator-name": "<strong>Virhe:</strong> Sivun tilan osoittimien attribuutti <code>name</code> ei saa olla tyhjä.",
        "version": "Versio",
        "version-extensions": "Asennetut laajennukset",
        "version-skins": "Asennetut ulkoasut",
        "revdelete-uname-unhid": "käyttäjätunnus palautettu näkyviin",
        "revdelete-restricted": "asetti rajoitukset ylläpitäjille",
        "revdelete-unrestricted": "poisti rajoitukset ylläpitäjiltä",
+       "logentry-merge-merge": "$1 {{GENDER:$2|yhdisti}} sivun $3 sivuun $4 (versiot $5 saakka)",
        "logentry-move-move": "$1 {{GENDER:$2|siirsi}} sivun $3 uudelle nimelle $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|siirsi}} sivun $3 uudelle nimelle $4 luomatta ohjausta",
        "logentry-move-move_redir": "$1 {{GENDER:$2|siirsi}} sivun $3 ohjauksen $4 päälle",
index 3e47489..e2dbb14 100644 (file)
        "viewsourcetext": "Vous pouvez voir et copier le contenu de la page :",
        "viewyourtext": "Vous pouvez voir et copier le contenu de '''vos modifications''' à cette page :",
        "protectedinterface": "Cette page fournit du texte d'interface pour le logiciel sur ce wiki, et est protégée pour éviter les abus.\nPour ajouter ou modifier des traductions sur tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MediaWiki.",
-       "editinginterface": "'''Attention''' : vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel. Les changements sur cette page se répercuteront sur l’apparence de l’interface utilisateur pour les autres utilisateurs de ce wiki.\nPour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet d’internationalisation de MediaWiki.",
+       "editinginterface": "<strong>Attention</strong> vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel.\nLes changements sur cette page se répercuteront sur l’apparence de l’interface utilisateur pour les autres utilisateurs de ce wiki.",
+       "translateinterface": "Pour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MédiaWiki.",
        "cascadeprotected": "Cette page est protégée car elle est incluse par {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l’option « protection en cascade » activée :\n$2",
        "namespaceprotected": "Vous n'avez pas la permission de modifier les pages de l'espace de noms « '''$1''' ».",
        "customcssprotected": "Vous n'avez pas la permission de modifier cette page de CSS, car elle contient les paramètres personnels d'un autre utilisateur.",
        "content-model-text": "texte brut",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pages utilisant des arguments dupliqués dans les appels de modèle",
+       "duplicate-args-category-desc": "La page contient des appels de modèle qui utilisent des arguments dupliqués, comme <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Attention : cette page contient de trop nombreux appels à des fonctions coûteuses de l'analyseur syntaxique.\n\nIl devrait y avoir moins de $2 appel{{PLURAL:$2||s}}, alors qu'il y en a maintenant $1.",
        "expensive-parserfunction-category": "Pages avec trop d'appels dispendieux de fonctions de l'analyseur syntaxique",
        "post-expand-template-inclusion-warning": "Attention : Cette page contient trop d'inclusions de modèles. Certaines inclusions ne seront pas effectuées.",
        "mergehistory-reason": "Motif :",
        "mergehistory-revisionrow": "$1 ($2) $3 — $4 $5 $6",
        "mergelog": "Journal des fusions",
-       "pagemerge-logentry": "[[$1]] fusionnée avec [[$2]] (versions jusqu'au $3)",
        "revertmerge": "Séparer",
        "mergelogpagetext": "Voici la liste des plus récentes fusions de l’historique d’une page dans celui d’une autre.",
        "history-title": "$1 : Historique des versions",
        "gender-female": "Elle modifie des pages du wiki",
        "prefs-help-gender": "Définir cette préférence est facultatif.\nCe logiciel utilise sa valeur pour s’adresser à vous et vous mentionner aux autres en utilisant le bon genre grammatical.\nCette information sera publique.",
        "email": "Courriel",
-       "prefs-help-realname": "Facultatif : si vous le spécifiez, il sera utilisé pour vous attribuer vos contributions.",
+       "prefs-help-realname": "Le vrai nom est facultatif.\nS’il est fourni, il sera utilisé pour vous attribuer vos contributions.",
        "prefs-help-email": "L'adresse de courriel est facultative, mais elle est nécessaire pour réinitialiser votre mot de passe, si vous veniez à l'oublier.",
        "prefs-help-email-others": "Vous pourriez aussi choisir de laisser les autres vous contacter sur votre page de discussion utilisateur sans que soit nécessaire de révéler votre identité.",
        "prefs-help-email-required": "Une adresse de courriel est requise.",
        "statistics": "Statistiques",
        "statistics-header-pages": "Statistiques des pages",
        "statistics-header-edits": "Statistiques des modifications",
-       "statistics-header-views": "Statistiques des visites",
        "statistics-header-users": "Statistiques des utilisateurs",
        "statistics-header-hooks": "Autres statistiques",
        "statistics-articles": "Pages de contenu",
        "statistics-files": "Fichiers importés",
        "statistics-edits": "Modifications de pages depuis l'installation de {{SITENAME}}",
        "statistics-edits-average": "Nombre moyen de modifications par page",
-       "statistics-views-total": "Visites",
-       "statistics-views-total-desc": "Les vues des pages non existantes et des pages spéciales ne sont pas incluses",
-       "statistics-views-peredit": "Visites par modification",
        "statistics-users": "[[Special:ListUsers|Utilisateurs]] enregistrés",
        "statistics-users-active": "Utilisateurs actifs",
        "statistics-users-active-desc": "Utilisateurs ayant fait au moins une action durant {{PLURAL:$1|le dernier jours|les $1 derniers jours}}",
-       "statistics-mostpopular": "Pages les plus consultées",
        "pageswithprop": "Pages avec une propriété de page",
        "pageswithprop-legend": "Pages avec une propriété de page",
        "pageswithprop-text": "Cette page liste les pages qui utilisent une propriété de page particulière.",
        "uncategorizedtemplates": "Modèles sans catégories",
        "unusedcategories": "Catégories inutilisées",
        "unusedimages": "Fichiers orphelins",
-       "popularpages": "Pages les plus consultées",
        "wantedcategories": "Catégories les plus demandées",
        "wantedpages": "Pages les plus demandées",
        "wantedpages-badtitle": "Titre invalide dans les résultats : $1",
        "tooltip-feed-atom": "Flux Atom pour cette page",
        "tooltip-t-contributions": "Voir la liste des contributions de cet utilisateur",
        "tooltip-t-emailuser": "Envoyer un courriel à cet utilisateur",
+       "tooltip-t-info": "Plus d’information sur cette page",
        "tooltip-t-upload": "Envoyer une image ou fichier média sur le serveur",
        "tooltip-t-specialpages": "Liste de toutes les pages spéciales",
        "tooltip-t-print": "Version imprimable de cette page",
        "pageinfo-robot-policy": "Indexation par robots",
        "pageinfo-robot-index": "Autorisée",
        "pageinfo-robot-noindex": "Interdite",
-       "pageinfo-views": "Nombre de vues",
        "pageinfo-watchers": "Nombre de contributeurs ayant la page dans leur liste de suivi",
        "pageinfo-few-watchers": "Moins de $1 {{PLURAL:$1|observateur|observateurs}}",
        "pageinfo-redirects-name": "Nombre de redirections vers cette page",
        "unknown_extension_tag": "Balise d’extension « $1 » inconnue",
        "duplicate-defaultsort": "Attention : la clé de tri par défaut « $2 » écrase la précédente clé « $1 ».",
        "duplicate-displaytitle": "<strong>Attention :</strong> Le titre d'affichage «$2» remplace l'ancien titre d'affichage «$1».",
+       "invalid-indicator-name": "<strong>Erreur :</strong> L’attribut <code>name</code> des indicateurs d’état de la page ne doit pas être vide.",
        "version": "Version",
        "version-extensions": "Extensions installées",
        "version-skins": "Habillages installés",
        "revdelete-uname-unhid": "nom d'utilisateur affiché",
        "revdelete-restricted": "restrictions appliquées aux administrateurs",
        "revdelete-unrestricted": "restrictions retirées pour les administrateurs",
+       "logentry-merge-merge": "$1 {{GENDER:$2|a fusionné}} $3 en $4 (révisions jusqu’à $5)",
        "logentry-move-move": "$1 {{GENDER:$2|a déplacé}} la page $3 vers $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a déplacé}} la page $3 vers $4 sans laisser de redirection",
        "logentry-move-move_redir": "$1 {{GENDER:$2|a déplacé}} la page $3 vers $4 par-dessus une redirection",
index fdcf3e2..e3af5e2 100644 (file)
@@ -26,7 +26,8 @@
                        "פדיחה",
                        "שומבלע",
                        "תומר ט",
-                       "Matanya"
+                       "Matanya",
+                       "GilCahana"
                ]
        },
        "tog-underline": "סימון קישורים בקו תחתי:",
        "viewsourcetext": "באפשרותך לצפות בטקסט המקור של הדף ולהעתיקו:",
        "viewyourtext": "באפשרותך לצפות בטקסט המקור של <strong>העריכות שלך</strong> בדף הזה ולהעתיקו:",
        "protectedinterface": "דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה באתר ויקי זה, ומוגן כדי למנוע השחתות.\nכדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
-       "editinginterface": "'''אזהרה:''' הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.\nשינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים באתר ויקי זה.\nכדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
+       "editinginterface": "<strong>אזהרה:</strong> הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.\nשינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים באתר ויקי זה.",
+       "translateinterface": "כדי להוסיף או לשנות תרגומים עבור כל אתרי הוויקי, יש להשתמש ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
        "cascadeprotected": "דף זה מוגן מעריכה כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:\n$2",
        "namespaceprotected": "אין לך הרשאה לערוך דפים במרחב השם <strong>$1</strong>.",
        "customcssprotected": "אינך מורשה לערוך דף CSS זה כיוון שהוא כולל הגדרות אישיות של משתמש אחר.",
        "bold_sample": "טקסט מודגש",
        "bold_tip": "טקסט מודגש",
        "italic_sample": "טקסט נטוי",
-       "italic_tip": "טקסט נטוי (לא מומלץ בעברית)",
+       "italic_tip": "טקסט נטוי",
        "link_sample": "קישור",
        "link_tip": "קישור פנימי",
        "extlink_sample": "http://www.example.com כותרת הקישור לתצוגה",
        "content-model-text": "טקסט פשוט",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "דפים שמשתמשים בפרמטרים כפולים בקריאות לתבניות",
+       "duplicate-args-category-desc": "הדף מכיל קריאות לתבניות שמשתמשות בפרמטרים כפולים, כגון <code><nowiki>{{תאריך|יום=1|יום=2}}</nowiki></code> או <code><nowiki>{{שעה|חמש|1=שש}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''אזהרה:''' דף זה כולל יותר מדי קריאות לפונקציות מפענח שגוזלות משאבים.\n\nנדרש {{PLURAL:$2|שתהיה בו לכל היותר קריאה אחת|שתהיינה בו לכל היותר $2 קריאות}} לפונקציות כאלה, אך כרגע יש בו {{PLURAL:$1|קריאה אחת|$1 קריאות}}.",
        "expensive-parserfunction-category": "דפים עם יותר מדי קריאות למשתנים הגוזלים משאבים",
        "post-expand-template-inclusion-warning": "'''אזהרה:''' התבניות המוכללות בדף זה גדולות מדי.\nחלק מהתבניות לא יוכללו.",
        "mergehistory-same-destination": "דפי המקור והיעד זהים",
        "mergehistory-reason": "סיבה:",
        "mergelog": "יומן מיזוגים",
-       "pagemerge-logentry": "מיזג את [[$1]] לתוך [[$2]] (גרסאות עד $3)",
        "revertmerge": "ביטול המיזוג",
        "mergelogpagetext": "זוהי רשימה של המיזוגים האחרונים של גרסאות מדף אחד לתוך דף שני.",
        "history-title": "היסטוריית גרסאות של הדף \"$1\"",
        "nextn-title": "{{PLURAL:$1|התוצאה הבאה|$1 התוצאות הבאות}}",
        "shown-title": "הצגת {{PLURAL:$1|תוצאה אחת|$1 תוצאות}} בדף",
        "viewprevnext": "צפייה ב: ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-exists": "'''קיים דף בשם \"[[:$1]]\" באתר זה.'''",
-       "searchmenu-new": "<strong>'''יצירת הדף \"[[:$1]]\" באתר הוויקי הזה.'''</strong>\n{{PLURAL:$2|0=|ר' גם את הדף שנמצא בחיפוש.|ר' גם את תוצאות החיפוש.}}",
+       "searchmenu-exists": "<strong>קיים דף בשם \"[[:$1]]\" באתר הוויקי הזה.</strong> {{PLURAL:$2|0=|ר' גם את הדפים האחרים שנמצאו בחיפוש.}}",
+       "searchmenu-new": "<strong>ליצירת הדף \"[[:$1]]\" באתר הוויקי הזה.</strong> {{PLURAL:$2|0=|ר' גם את הדף שנמצא בחיפוש.|ר' גם את הדפים שנמצאו בחיפוש.}}",
        "searchprofile-articles": "דפי תוכן",
        "searchprofile-images": "מולטימדיה",
        "searchprofile-everything": "הכול",
        "gender-female": "היא עורכת דפים בוויקי",
        "prefs-help-gender": "אין חובה למלא העדפה זו.\nהמערכת משתמשת במידע זה כדי לפנות אליך/אלייך ולציין את שם המשתמש שלך במין הדקדוקי הנכון.\nהמידע יהיה ציבורי.",
        "email": "דוא\"ל",
-       "prefs-help-realname": "×\94ש×\9d ×\94×\90×\9e×\99ת×\99 ×\94×\95×\90 ×\90×\95פצ×\99×\95× ×\90×\9c×\99.\n×\90×\9d ×ª×\91×\97ר×\95 ×\9cספק×\95, ×\94×\95×\90 ×\99ש×\9eש ×\9c×\99×\99×\97×\95ס ×¢×\91×\95×\93ת×\9b×\9d ×\90×\9c×\99×\9b×\9d.",
+       "prefs-help-realname": "×\90×\99×\9f ×\97×\95×\91×\94 ×\9c×\9e×\9c×\90 ×\90ת ×\94ש×\9d ×\94×\90×\9e×\99ת×\99.\n×\94ש×\9d ×\94×\90×\9e×\99ת×\99 ×¢×©×\95×\99 ×\9cש×\9eש ×\9b×\93×\99 ×\9c×\99×\99×\97ס ×\9c×\9a ×\90ת ×¢×\91×\95×\93ת×\9a.",
        "prefs-help-email": "כתובת דואר אלקטרוני היא אופציונאלית, אבל היא חיונית לאיפוס הסיסמה במקרה שתשכחו אותה.",
        "prefs-help-email-others": "באפשרותך גם לבחור לאפשר לאחרים ליצור איתך קשר באמצעות דוא\"ל דרך קישור בדף המשתמש או בדף השיחה שלך.\nכתובת הדוא\"ל שלך לא תיחשף כשמשתמשים אחרים ייצרו קשר איתך.",
        "prefs-help-email-required": "כתובת דואר אלקטרוני נדרשת לכתיבה באתר.",
        "statistics": "סטטיסטיקות",
        "statistics-header-pages": "סטטיסטיקות דפים",
        "statistics-header-edits": "סטטיסטיקות עריכה",
-       "statistics-header-views": "סטטיסטיקות צפייה",
        "statistics-header-users": "סטטיסטיקות משתמשים",
        "statistics-header-hooks": "סטטיסטיקות אחרות",
        "statistics-articles": "דפי תוכן",
        "statistics-files": "קבצים שהועלו",
        "statistics-edits": "עריכות של דפים מאז התקנת {{SITENAME}}",
        "statistics-edits-average": "מספר העריכות הממוצע לדף",
-       "statistics-views-total": "מספר הצפיות הכולל",
-       "statistics-views-total-desc": "צפיות בדפים שאינם קיימים ובדפים מיוחדים אינן כלולות",
-       "statistics-views-peredit": "מספר הצפיות לעריכה",
        "statistics-users": "ה[[Special:ListUsers|משתמשים]] הרשומים",
        "statistics-users-active": "המשתמשים הפעילים",
        "statistics-users-active-desc": "משתמשים שביצעו פעולה כלשהי {{PLURAL:$1|ביום האחרון|ביומיים האחרונים|ב־$1 הימים האחרונים}}",
-       "statistics-mostpopular": "הדפים הנצפים ביותר",
        "pageswithprop": "דפים עם מאפיין דף",
        "pageswithprop-legend": "דפים עם מאפיין דף",
        "pageswithprop-text": "בדף זה מופיעה רשימת דפים שמשתמשים במאפיין דף מסוים.",
        "uncategorizedtemplates": "תבניות חסרות קטגוריה",
        "unusedcategories": "קטגוריות שאינן בשימוש",
        "unusedimages": "קבצים שאינם בשימוש",
-       "popularpages": "הדפים הנצפים ביותר",
        "wantedcategories": "קטגוריות מבוקשות",
        "wantedpages": "דפים מבוקשים",
        "wantedpages-badtitle": "כותרת בלתי תקינה ברשימת התוצאות: $1",
        "tooltip-n-randompage": "צפייה בדף תוכן אקראי",
        "tooltip-n-help": "עזרה בשימוש באתר",
        "tooltip-t-whatlinkshere": "רשימת כל הדפים המקושרים לכאן",
-       "tooltip-t-recentchangeslinked": "×\94ש×\99× ×\95×\99×\99×\9d ×\94×\90×\97ר×\95× ×\99×\9d ×©×\91×\95צע×\95 ×\91×\93פ×\99×\9d ×\94×\9eק×\95שר×\99×\9d ×\9c×\9b×\90×\9f",
+       "tooltip-t-recentchangeslinked": "×\94ש×\99× ×\95×\99×\99×\9d ×\94×\90×\97ר×\95× ×\99×\9d ×©×\91×\95צע×\95 ×\91×\93פ×\99×\9d ×\94×\9eק×\95שר×\99×\9d ×\9e×\93×£ ×\96×\94",
        "tooltip-feed-rss": "הזנת RSS עבור דף זה",
        "tooltip-feed-atom": "הזנת Atom עבור דף זה",
        "tooltip-t-contributions": "תרומותיו של משתמש זה",
        "tooltip-t-emailuser": "שליחת דואר אלקטרוני למשתמש זה",
+       "tooltip-t-info": "מידע נוסף על דף זה",
        "tooltip-t-upload": "העלאת קבצים",
        "tooltip-t-specialpages": "רשימת כל הדפים המיוחדים",
        "tooltip-t-print": "גרסה להדפסה של דף זה",
        "pageinfo-robot-policy": "איסוף על־ידי רובוטים של מנועי חיפוש",
        "pageinfo-robot-index": "מותר",
        "pageinfo-robot-noindex": "אסור",
-       "pageinfo-views": "מספר הצפיות",
        "pageinfo-watchers": "מספר העוקבים אחר הדף",
        "pageinfo-few-watchers": "פחות מ{{PLURAL:$1|עוקב אחד|־$1 עוקבים}}",
        "pageinfo-redirects-name": "מספר ההפניות לדף זה",
        "unknown_extension_tag": "תגית בלתי ידועה: \"$1\"",
        "duplicate-defaultsort": "'''אזהרה:''' המיון הרגיל \"$2\" דורס את המיון הרגיל המוקדם ממנו \"$1\".",
        "duplicate-displaytitle": "<strong>אזהרה:</strong> כותרת התצוגה \"$2\" דורסת את כותרת התצוגה הקודמת \"$1\".",
+       "invalid-indicator-name": "<strong>שגיאה:</strong> התכונה <code>name</code> של מצייני מצב הדף אינה יכולה להיות ריקה.",
        "version": "גרסת התוכנה",
        "version-extensions": "הרחבות מותקנות",
        "version-skins": "עיצובים מותקנים",
        "revdelete-uname-unhid": "הסתרת שם המשתמש בוטלה",
        "revdelete-restricted": "נוספו הגבלות למפעילי מערכת",
        "revdelete-unrestricted": "הוסרו הגבלות ממפעילי מערכת",
+       "logentry-merge-merge": "$1 {{GENDER:$2|מיזג|מיזגה}} את $3 לתוך $4 (גרסאות עד $5)",
        "logentry-move-move": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}}",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} בלי להשאיר הפניה",
        "logentry-move-move_redir": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה",
index ffb77f5..5d84b17 100644 (file)
        "showpreview": "Előnézet megtekintése",
        "showdiff": "Változtatások megtekintése",
        "blankarticle": "<strong>Figyelem:</strong> A létrehozandó szócikk üres.\nHa ismét a \"{{int:savearticle}}\" gombra kattintasz, a szócikket tartalom nélkül fogod létrehozni.",
-       "anoneditwarning": "'''Figyelem:''' Nem vagy bejelentkezve. Ha szerkesztesz, az IP-címed látható lesz a laptörténetben.",
+       "anoneditwarning": "<strong>Figyelem:</strong> Nem vagy bejelentkezve. Ha szerkesztesz, az IP-címed nyilvánosan látható lesz a laptörténetben. Ha <strong>[$1 bejelentkezel]</strong> vagy <strong>[$2 regisztrálsz]</strong>, a szerkesztéseid a felhasználónevedhez lesznek társítva, egyéb hasznos dolgok mellett.",
        "anonpreviewwarning": "''Nem vagy bejelentkezve. A mentéskor az IP-címed rögzítve lesz a laptörténetben.''",
        "missingsummary": "'''Emlékeztető:''' Nem adtál meg szerkesztési összefoglalót. Ha összefoglaló nélkül akarod elküldeni a szöveget, kattints újra a mentésre.",
        "missingcommenttext": "Kérjük, írj összefoglalót a szerkesztésedhez.",
        "parser-template-recursion-depth-warning": "A sablon rekurzív beillesztésének mélysége átlépte a határérékét ($1)",
        "language-converter-depth-warning": "A nyelvátalakító rekurzióinak száma túllépve ($1)",
        "node-count-exceeded-category": "Lapok, ahogy a csomópontszám túl nagy",
-       "node-count-exceeded-category-desc": "Azon oldalaknak a kategóriája, ahol a csomópontszám túl nagy.",
-       "node-count-exceeded-warning": "Az oldal meghaladta a csomópont számot",
+       "node-count-exceeded-category-desc": "A lap túllépi a maximális csomópontszámot.",
+       "node-count-exceeded-warning": "Az oldal meghaladta a csomópontszámot",
        "expansion-depth-exceeded-category": "Lapok, melyeken a sablonok kibontása meghaladja a megengedett szintet",
        "expansion-depth-exceeded-warning": "A lap meghaladta az engedélyezett kiterjesztési mélységet",
        "parser-unstrip-loop-warning": "Unstrip hurok észlelve",
        "mergehistory-same-destination": "A forrás- és a céllap nem egyezhet meg",
        "mergehistory-reason": "Ok:",
        "mergelog": "Egyesítési napló",
-       "pagemerge-logentry": "[[$1]] és [[$2]] egyesítve ($3 változatig)",
        "revertmerge": "Szétválasztás",
        "mergelogpagetext": "A lapok egyesítéséről szóló napló. Szűkítheted a listát a műveletet végző szerkesztő, vagy az érintett oldal megadásával.",
        "history-title": "A(z) „$1” laptörténete",
        "search-result-category-size": "$1 oldal, $2 alkategória, $3 fájl",
        "search-redirect": "(átirányítva innen: $1)",
        "search-section": "($1 szakasz)",
+       "search-file-match": "(fájl tartalma egyezik)",
        "search-suggest": "Keresési javaslat: $1",
        "search-interwiki-caption": "Társlapok",
        "search-interwiki-default": "$1 találatok:",
        "randompage-nopages": "A következő {{PLURAL:$2|névtérben|névterekben}} nincsenek lapok: $1.",
        "randomincategory": "Véletlen lap egy kategóriából",
        "randomincategory-invalidcategory": "\"$1\" nem egy érvényes kategória neve.",
+       "randomincategory-nopages": "Nincsenek lapok a [[:Category:$1|$1]] kategóriában.",
        "randomincategory-category": "Kategória:",
        "randomincategory-legend": "Véletlen lap a kategóriából",
        "randomredirect": "Átirányítás találomra",
        "statistics": "Statisztika",
        "statistics-header-pages": "Lapstatisztikák",
        "statistics-header-edits": "Szerkesztési statisztika",
-       "statistics-header-views": "Látogatási statisztika",
        "statistics-header-users": "Szerkesztői statisztika",
        "statistics-header-hooks": "További statisztikák",
        "statistics-articles": "Tartalommal rendelkező lapok",
        "statistics-files": "Feltöltött fájlok",
        "statistics-edits": "Szerkesztések száma a(z) {{SITENAME}} indulása óta",
        "statistics-edits-average": "Szerkesztések átlagos száma laponként",
-       "statistics-views-total": "Összes megtekintés",
-       "statistics-views-total-desc": "A nem létező és speciális lapok megtekintési adatai nincsenek beleszámolva.",
-       "statistics-views-peredit": "Megtekintések szerkesztésenként",
        "statistics-users": "Regisztrált [[Speciális:Szerkesztők listája|szerkesztők]]",
        "statistics-users-active": "Aktív szerkesztők",
        "statistics-users-active-desc": "Szerkesztők, akik csináltak valamit az elmúlt {{PLURAL:$1|egy|$1}} napban",
-       "statistics-mostpopular": "Legtöbbször megtekintett lapok",
        "pageswithprop-prop": "Tulajdonságnév:",
        "pageswithprop-submit": "Ugrás",
        "doubleredirects": "Dupla átirányítások",
        "uncategorizedtemplates": "Kategorizálatlan sablonok",
        "unusedcategories": "Nem használt kategóriák",
        "unusedimages": "Nem használt fájlok",
-       "popularpages": "Népszerű lapok",
        "wantedcategories": "Keresett kategóriák",
        "wantedpages": "Keresett lapok",
        "wantedpages-badtitle": "Érvénytelen cím található az eredményhalmazban: $1",
        "pager-older-n": "{{PLURAL:$1|1 régebbi|$1 régebbi}}",
        "suppress": "adatvédelmi biztos",
        "querypage-disabled": "Ez a speciális lap a megfelelő teljesítmény fenntartása érdekében le van tiltva.",
+       "apihelp": "API segítség",
+       "apihelp-no-such-module": "A(z) „$1\" modul nem található.",
        "booksources": "Könyvforrások",
        "booksources-search-legend": "Könyvforrások keresése",
        "booksources-search": "Keresés",
        "listgrouprights-removegroup-self-all": "az összes csoporból eltávolíthatja a saját fiókját",
        "listgrouprights-namespaceprotection-header": "Névtér korlátozások",
        "listgrouprights-namespaceprotection-namespace": "Névtér",
+       "trackingcategories-name": "Üzenetnév",
        "trackingcategories-nodesc": "Nem található leírás.",
        "trackingcategories-disabled": "A kategória le van tiltva",
        "mailnologin": "Nincs feladó",
        "protect-locked-dblock": "A védelmi szinteket egy aktív adatbázis zárolás miatt nem változtathatod meg.\nItt vannak a(z) '''$1''' lap jelenlegi beállításai:",
        "protect-locked-access": "A fiókod számára nem engedélyezett a védelmi szintek megváltoztatása.\nItt vannak a(z) '''$1''' lap jelenlegi beállításai:",
        "protect-cascadeon": "A lap jelenleg le van védve, mert {{PLURAL:$1|tartalmazza az alábbi lap, amelyen|tartalmazzák az alábbi lapok, amelyeken}} be van kapcsolva a kaszkád védelem.\nEzen lap védelmi szintjének megváltoztatása nem lesz hatással a kaszkád védelemre.",
-       "protect-default": "Minden szerkesztő számára engedélyezett",
-       "protect-fallback": "\"$1\" engedély szükséges hozzá",
-       "protect-level-autoconfirmed": "Csak automatikusan megerősített szerkesztőknek engedélyezett (nem vagy frissen regisztráltaknak nem)",
+       "protect-default": "minden szerkesztő számára engedélyezett",
+       "protect-fallback": "„$1”-i engedély szükséges hozzá",
+       "protect-level-autoconfirmed": "automatikusan megerősített szerkesztők számára",
        "protect-level-sysop": "csak adminisztrátoroknak engedélyezett",
        "protect-summary-cascade": "kaszkád védelem",
        "protect-expiring": "lejár: $1 (UTC)",
        "pageinfo-robot-policy": "Indexelés robottal",
        "pageinfo-robot-index": "Engedélyezett",
        "pageinfo-robot-noindex": "Nem engedélyezett",
-       "pageinfo-views": "Megtekintések száma",
        "pageinfo-watchers": "Figyelők száma",
        "pageinfo-few-watchers": "Kevesebb mint $1 szerkesztő figyeli",
        "pageinfo-redirects-name": "Átirányítások száma erre a lapra",
        "version-entrypoints-header-entrypoint": "Belépési pont",
        "version-entrypoints-header-url": "URL",
        "redirect": "Átirányítás fájl, szerkesztő, oldal vagy oldalváltozat alapján",
+       "redirect-legend": "Átirányítás egy fájlra vagy lapra",
+       "redirect-submit": "Mehet",
        "redirect-lookup": "Keresés:",
        "redirect-value": "Érték:",
        "redirect-user": "Felhasználói azonosító",
        "action-pagelang": "oldal nyelvének módosítása",
        "log-name-pagelang": "Nyelvváltoztatások naplója",
        "log-description-pagelang": "Ebben a naplóban a lap nyelvének változásait követheted nyomon.",
+       "mediastatistics": "Feltöltött fájlok statisztikája",
+       "mediastatistics-summary": "Az alábbi statisztika a feltöltött fájlok alapján készült, mely a fájlok legfrissebb változatát tartalmazza a régi, vagy törölt fájlok kivételével.",
        "mediastatistics-table-mimetype": "MIME-típus",
        "mediastatistics-table-extensions": "Lehetséges kiterjesztések",
        "mediastatistics-table-count": "Fájlok száma",
        "mediastatistics-header-drawing": "Rajzok (vektoros képek)",
        "mediastatistics-header-audio": "Hang",
        "mediastatistics-header-video": "Videók",
-       "mediastatistics-header-office": "Iroda",
+       "mediastatistics-header-multimedia": "Interaktív média",
+       "mediastatistics-header-office": "Dokumentumok",
        "mediastatistics-header-text": "Szöveges",
        "mediastatistics-header-executable": "Futtatható",
        "mediastatistics-header-archive": "Tömörített formátumok",
+       "json-error-unknown": "Hiba volt a JSON-ban. Hiba: $1",
        "json-error-state-mismatch": "Érvénytelen vagy hibás JSON",
        "json-error-syntax": "Szintaktikai hiba",
        "json-error-utf8": "Hibás UTF-8 karakter, esetleg helytelenül kódolt"
index 18aaf20..3b5ceb2 100644 (file)
        "permalink": "Varanlegur tengill",
        "print": "Prenta",
        "view": "Skoða",
+       "view-foreign": "Skoða á $1",
        "edit": "Breyta",
        "create": "Skapa",
        "editthispage": "Breyta þessari síðu",
        "otherlanguages": "Á öðrum tungumálum",
        "redirectedfrom": "(Tilvísað frá $1)",
        "redirectpagesub": "Tilvísunarsíða",
+       "redirectto": "Tilvísun á",
        "lastmodifiedat": "Þessari síðu var síðast breytt $1 klukkan $2.",
        "viewcount": "Þessi síða hefur verið skoðuð $1 {{PLURAL:$1|sinni|sinnum}}.",
        "protectedpage": "Vernduð síða",
        "hidetoc": "fela",
        "collapsible-collapse": "Fela",
        "collapsible-expand": "Sýna",
+       "confirmable-confirm": "Ert {{GENDER:$1|þú}} viss?",
+       "confirmable-yes": "Já",
+       "confirmable-no": "Nei",
        "thisisdeleted": "Endurvekja eða skoða $1?",
        "viewdeleted": "Skoða $1?",
        "restorelink": "$1 {{PLURAL:$1|eydd breyting|eyddar breytingar}}",
        "gotaccountlink": "Skráðu þig inn",
        "userlogin-resetlink": "Gleymdir þú notendaupplýsingunum þínum?",
        "userlogin-resetpassword-link": "Gleymdiru lykilorðinu þínu?",
+       "userlogin-helplink2": "Hjálp við innskráningu",
        "userlogin-loggedin": "Þú ert búin(n) að skrá þig inn sem {{GENDER:$1|$1}}.\nNotaðu eyðablaðið fyrir neðan til að skrá þig inn sem annar notandi.",
        "userlogin-createanother": "Stofna annan aðgang",
        "createacct-emailrequired": "Netfang",
        "createaccount-text": "Einhver bjó til aðgang fyrir netfangið þitt á {{SITENAME}} ($4) undir nafninu „$2“, með lykilorðið „$3“.\nÞú ættir að skrá þig inn og breyta lykilorðinu núna.\n\nÞú getur hunsað þessi skilaboð, ef villa hefur átt sér stað.",
        "login-throttled": "Þér hefur mistekist að skrá þig inn undir þessu notendanafni of oft.\nVinsamlegast bíðið $1 áður en þú reynir aftur.",
        "login-abort-generic": "Innskráningin misheppnaðist - hætt var við hana.",
+       "login-migrated-generic": "Aðgangurinn þinn hefur verið sameinaður og notendanafnið þitt finnst ekki lengur á þessum wiki.",
        "loginlanguagelabel": "Tungumál: $1",
        "suspicious-userlogout": "Beiðni um útskráningu hafnað því hún var líklegast send frá biluðum vafra eða vefseli sem hefur vistað vefsíðuna í flýtiminni.",
        "createacct-another-realname-tip": "Alvöru nafn er valfrjálst. Ef þú kýst að gefa það upp, verður það notað til að gefa þér heiður af verkum þínum.",
+       "pt-login": "Innskrá",
+       "pt-login-button": "Innskrá",
        "pt-createaccount": "Stofna aðgang",
        "pt-userlogout": "Útskrá",
        "php-mail-error-unknown": "Óþekkt villa í PHP mail() aðgerð.",
        "retypenew": "Endurtaktu nýja lykilorðið:",
        "resetpass_submit": "Skrifaðu aðgangsorðið og skráðu þig inn",
        "changepassword-success": "Það tókst að breyta lykilorðinu þínu!",
+       "changepassword-throttled": "Þú hefur gert of margar tilraunir til innskráningar.\nVinsamlegast bíddu í $1 áður en þú reynir aftur.",
        "resetpass_forbidden": "Ekki er hægt að breyta lykilorðum",
        "resetpass-no-info": "Þú verður að vera skráð(ur) inn til að hafa aðgang að þessari síðu.",
        "resetpass-submit-loggedin": "Breyta lykilorði",
        "content-model-text": "hreinn texti",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Síður með eins gildi í ítengingu sniðs",
        "expensive-parserfunction-warning": "'''Viðvörun:''' Þessi síða inniheldur of mörg vinnslufrek aðgerðar þáttunar köll.\n\nHún ætti að innihalda minna en $2 {{PLURAL:$2|kall|köll}}, en {{PLURAL:$1|er nú $1 kall|eru nú $1 köll}}.",
        "expensive-parserfunction-category": "Síður með of mörg vinnslufrek aðgerðar þáttunar köll",
        "post-expand-template-inclusion-warning": "'''Viðvörun:''' Sniðið tekur of mikið pláss.\nHluti sniðsins verður ekki með.",
        "mergehistory-same-destination": "Upprunasíðan og marksíðan mega ekki vera sú sama",
        "mergehistory-reason": "Ástæða:",
        "mergelog": "Sameiningar skrá",
-       "pagemerge-logentry": "sameinaði [[$1]] við [[$2]] (útgáfur frá $3)",
        "revertmerge": "Taka aftur sameiningu",
        "mergelogpagetext": "Þetta er skrá yfir síðustu sameiningar einnar síðu við aðra.",
        "history-title": "$1: Breytingaskrá",
        "searchrelated": "tengt",
        "searchall": "öllum",
        "showingresults": "Sýni <strong>$1</strong> {{PLURAL:$1|niðurstöðu|niðurstöður}} frá og með #<strong>$2</strong>.",
+       "showingresultsinrange": "Sýni allt að <strong>$1</strong> {{PLURAL:$1|niðurstöðu|niðurstöður}} á bilinu <strong>$2</strong> til <strong>$3</strong>.",
        "search-nonefound": "Engar niðurstöður pössuðu við fyrirspurnina.",
        "powersearch-legend": "Ítarlegri leit",
        "powersearch-ns": "Leita í nafnrýmum:",
        "powersearch-togglelabel": "Athuga:",
        "powersearch-toggleall": "Allt",
        "powersearch-togglenone": "Ekkert",
+       "powersearch-remember": "Muna val fyrir leitir í framtíðinni",
        "search-external": "Ytri leit",
        "searchdisabled": "{{SITENAME}}-leit er óvirk.\nÞú getur leitað í genum Google á meðan.\nAthugaðu að skrár þeirra yfir {{SITENAME}}-efni kunna að vera úreltar.",
        "search-error": "Villa kom upp við leit að: $1",
        "recentchanges-label-minor": "Þetta er minniháttar breyting",
        "recentchanges-label-bot": "Þessi breyting var gerð af vélmenni",
        "recentchanges-label-unpatrolled": "Þessi breyting hefur ekki verið yfirfarin",
+       "recentchanges-label-plusminus": "Stærð síðunnar breyttist um svona mörg bæti",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sjá einng [[Special:NewPages|lista yfir nýjar síður]])",
        "rcnotefrom": "Að neðan {{PLURAL:$5|er breyting síðan|eru breytingar síðan}} <strong>$3, $4</strong> (allt að <strong>$1</strong> sýndar).",
        "rclistfrom": "Sýna breytingar frá og með $3 $2",
        "fileexists-shared-forbidden": "Skrá með þessu nafni er þegar til í sameiginlega myndasafninu.\nEf þú villt hlaða inn skránni þinni engu að síður, farðu þá til baka og veldu annað skráarnafn.\n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Þessi skrá er afrit eftirfarandi {{PLURAL:$1|skráar|skráa}}:",
        "file-deleted-duplicate": "Afriti þessarar skráar ([[:$1]]) hefur verið eytt.\nÞú ættir að fara yfir eyðingarsögu skráarinnar áður en þú velur að hlaða skránni aftur inn.",
+       "file-deleted-duplicate-notitle": "Skrá sem er eins og þessi skrá hefur verið hlaðið inn áður og titll hennar hefur verið falinn.\nÞú ættir að spurja einhvern með réttindi til að skoða földu skránna til að fara yfir málið áður en þú hleður skránni inn.",
        "uploadwarning": "Aðvörun",
        "uploadwarning-text": "Vinsamlegast breyttu myndalýsingunni hér fyrir neðan og reyndu aftur.",
        "savefile": "Vista",
        "license": "Leyfisupplýsingar:",
        "license-header": "Leyfisupplýsingar:",
        "nolicense": "Ekkert valið",
+       "licenses-edit": "Breyta leyfisvali",
        "license-nopreview": "(Forskoðun ekki fáanleg)",
        "upload_source_url": "(þín valda skrá frá gildri, aðgengilegri vefslóð)",
        "upload_source_file": "(þín valda skrá frá tölvunni þinni)",
        "download": "Hlaða niður",
        "unwatchedpages": "Óvaktaðar síður",
        "listredirects": "Tilvísanir",
+       "listduplicatedfiles": "Listi yfir afritaðar skrár",
+       "listduplicatedfiles-summary": "Þetta er listi yfir skrár þar sem nýjasta útgáfa hennar er afrit af nýjustu útgáfu einhverrar annarar skrár. Aðeins staðbundnar skrár eru taldar með.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] hefur $2 [[$3|{{PLURAL:$2|afrit}}]].",
        "unusedtemplates": "Ónotuð snið",
        "unusedtemplatestext": "Þetta er listi yfir allar síður í {{ns:snið}} nafnrýminu sem ekki eru notaðar í neinum öðrum síðum. Munið að gá að öðrum tenglum í sniðin áður en þeim er eytt.",
        "unusedtemplateswlh": "aðrir tenglar",
        "statistics": "Tölfræði",
        "statistics-header-pages": "Síðutölfræði",
        "statistics-header-edits": "Breytingatölfræði",
-       "statistics-header-views": "Uppflettitölfræði",
        "statistics-header-users": "Notandatölfræði",
        "statistics-header-hooks": "Önnur tölfræði",
        "statistics-articles": "Greinar alls",
        "statistics-files": "Skráafjöldi",
        "statistics-edits": "Síðubreytingar frá því {{SITENAME}} byrjaði",
        "statistics-edits-average": "Meðal breytingafjöldi á síðu",
-       "statistics-views-total": "Uppflettingar alls",
-       "statistics-views-total-desc": "Flettingar á síður sem eru ekki til eða kerfisíður eru ekki innifaldar.",
-       "statistics-views-peredit": "Uppflettingar á hverja breytingu (meðaltal)",
        "statistics-users": "Skráðir  [[Special:ListUsers|notendur]]",
        "statistics-users-active": "Virkir notendur",
        "statistics-users-active-desc": "Notendur sem hafa framkvæmt aðgerð {{PLURAL:$1|síðusta $1 dag|síðustu $1 daga}}",
-       "statistics-mostpopular": "Mest skoðuðu síður",
        "pageswithprop": "Síður með eiginleika",
        "pageswithprop-legend": "Síður með síðueiginleika",
        "pageswithprop-text": "Á þessari síðu er listi yfir síður sem hafa ákveðna síðueiginleika.",
        "uncategorizedtemplates": "Óflokkuð snið",
        "unusedcategories": "Ónotaðir flokkar",
        "unusedimages": "Munaðarlausar skrár",
-       "popularpages": "Vinsælar síður",
        "wantedcategories": "Eftirsóttir flokkar",
        "wantedpages": "Eftirsóttar síður",
        "wantedpages-badtitle": "Ógildur titill í listanum: $1",
        "deadendpagestext": "Eftirfarandi síður tengjast ekki við aðrar síður á {{SITENAME}}.",
        "protectedpages": "Verndaðar síður",
        "protectedpages-indef": "Aðeins óendanlegar verndanir",
+       "protectedpages-summary": "Þessi skrá sýnir lista yfir síður sem eru til og eru verndaðar í auknablikinu. Til að sjá lista yfir titla sem eru verndaðir gegn stofnun þeirra, sjáðu [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Keðjuverndun eingöngu",
+       "protectedpages-noredirect": "Fela tilvísanir",
        "protectedpagesempty": "Engar síður eru verndaðar með þessum stikum.",
+       "protectedpages-timestamp": "Tímastimpill",
+       "protectedpages-page": "Síða",
+       "protectedpages-expiry": "Rennur út",
+       "protectedpages-performer": "Vernduð af",
+       "protectedpages-params": "Verndunar stikar",
+       "protectedpages-reason": "Ástæða",
+       "protectedpages-unknown-timestamp": "Óþekktur",
+       "protectedpages-unknown-performer": "Óþekktur notandi",
        "protectedtitles": "Verndaðir titlar",
        "protectedtitlesempty": "Engir titlar eru verndaðir með þessum stikum.",
        "listusers": "Notendalisti",
        "querypage-disabled": "Þessi kerfisíða er óvirk til að minnka ekki afköst vefþjónsins.",
        "booksources": "Bókaleit",
        "booksources-search-legend": "Leita að bókaverslunum",
+       "booksources-search": "Leita",
        "booksources-text": "Fyrir neðan er listi af tenglum í aðrar síður sem selja nýjar og notaðar bækur og gætu einnig haft nánari upplýsingar í sambandi við bókina sem þú varst að leita að:",
        "booksources-invalid-isbn": "ISBN gildið virðist ekki vera gilt; leitaðu eftir villum við innslátt eða afritun gildisins frá upsprettu þess.",
        "specialloguserlabel": "Gerandi:",
        "protect-edit-reasonlist": "Breyta verndarástæðum",
        "protect-expiry-options": "1 tími:1 hour,1 dag:1 day,1 viku:1 week,2 vikur:2 weeks,1 mánuð:1 month,3 mánuði:3 months,6 mánuði:6 months,1 ár:1 year,aldrei:infinite",
        "restriction-type": "Réttindi:",
-       "restriction-level": "Takmarkaði við:",
+       "restriction-level": "Takmarkað við:",
        "minimum-size": "Lágmarksstærð",
        "maximum-size": "Hámarksstærð:",
-       "pagesize": "(bæt)",
+       "pagesize": "(bæti)",
        "restriction-edit": "Breyta",
        "restriction-move": "Færa",
        "restriction-create": "Skapa",
        "pageinfo-robot-policy": "Attriðaskráning af vélmennum",
        "pageinfo-robot-index": "Heimilað",
        "pageinfo-robot-noindex": "Ekki heimilað",
-       "pageinfo-views": "Fjöldi innlita",
        "pageinfo-watchers": "Fjöldi notenda, sem vakta síðuna",
        "pageinfo-few-watchers": "Vöktuð af færri en $1 {{PLURAL:$1|notanda|notendum}}",
        "pageinfo-redirects-name": "Fjöldi tilvísana til þessarar síðu",
        "autosumm-replace": "Skipti út innihaldi með „$1“",
        "autoredircomment": "Tilvísun á [[$1]]",
        "autosumm-new": "Ný síða: $1",
+       "autosumm-newblank": "Bjó til tóma síðu",
        "lag-warn-normal": "Breytingar nýrri en $1 {{PLURAL:$1|sekúnda|sekúndur}} kunna að vera ekki á þessm lista.",
        "lag-warn-high": "Vegna mikils álags á vefþjónanna, kunna breytingar yngri en $1 {{PLURAL:$1|sekúnda|sekúndur}} ekki að vera á þessum lista.",
        "watchlistedit-normal-title": "Breyta vaktlistanum",
        "watchlistedit-raw-done": "Vaktlistinn þinn hefur verið uppfærður.",
        "watchlistedit-raw-added": "$1 {{PLURAL:$1|titli|titlum}} var bætt við:",
        "watchlistedit-raw-removed": "$1 {{PLURAL:$1|titill var fjarlægður|titlar voru fjarlægðir}}:",
+       "watchlistedit-clear-titles": "Titlar:",
        "watchlisttools-view": "Sýna viðeigandi breytingar",
        "watchlisttools-edit": "Skoða og breyta vaktlistanum",
        "watchlisttools-raw": "Breyta opnum vaktlistanum",
        "logentry-rights-rights": "$1 {{GENDER:$2|breytti}} réttindum $3 frá $4 í $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|breytti}} réttindum $3",
        "logentry-rights-autopromote": "$1 fékk sjálfvirkt {{GENDER:$2|aukin}} réttindi frá $4 til $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|hlóð inn}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|hlóð inn}} nýrri útgáfu af $3",
        "rightsnone": "(engum)",
        "revdelete-summary": "breytingarágrip",
        "feedback-bugornote": "Ef þú ert reiðubúinn að lýsa tæknilegri villu í smáatriðum, vinsamlegast [$1 tilkynntu villu].\nEf ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemdin þín verður bætt við síðuna \"[$3 $2]\" ásamt notendanafni og nafni vafrarans sem þú ert að nota.",
        "expand_templates_xml_output": "XML-úttak",
        "expand_templates_ok": "Í lagi",
        "expand_templates_remove_comments": "Fjarlægja athugasemdir",
-       "expand_templates_preview": "Forskoða"
+       "expand_templates_preview": "Forskoða",
+       "mediastatistics": "Margmiðlunar tölfræði",
+       "mediastatistics-summary": "Tölfræði um upphaldar skráar gerðir. Hún inniheldur eingöngu nýjustu útgáfu skráarinnar. Gamlar eða eyddar skrár eru ekki teknar með.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 bæti}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME tegund",
+       "mediastatistics-table-extensions": "Mögulegar skráargerðir",
+       "mediastatistics-table-count": "Fjöldi skráa",
+       "mediastatistics-table-totalbytes": "Heildarstærð",
+       "mediastatistics-header-unknown": "Óþekkt",
+       "mediastatistics-header-bitmap": "Bitmap myndir",
+       "mediastatistics-header-drawing": "Teikningar (vector-myndir)",
+       "mediastatistics-header-audio": "Hljóð",
+       "mediastatistics-header-video": "Myndbönd",
+       "mediastatistics-header-text": "Textar",
+       "mediastatistics-header-executable": "Uppsetninga skrár",
+       "mediastatistics-header-archive": "Þjappaðar skrár",
+       "json-warn-trailing-comma": "$1 eftirfylgjandi {{PLURAL:$1|komma var fjarlægð|kommur voru fjarlægðar}} úr JSON",
+       "json-error-unknown": "Það varð villa í JSON. Villa: $1",
+       "json-error-state-mismatch": "Ógild eða ranglega uppsett JSON",
+       "json-error-syntax": "málfræði villa",
+       "json-error-utf8": "Gallaðir UTF-8 stafir, líklega vitlaust kótaðir",
+       "json-error-unsupported-type": "Gildi af gerð sem ekki er hægt að kóta var gefin."
 }
index fa6adab..c8d0498 100644 (file)
        "protectedpagetext": "Questa pagina è stata protetta per impedirne la modifica o altre operazioni.",
        "viewsourcetext": "È possibile visualizzare e copiare il codice sorgente di questa pagina:",
        "viewyourtext": "È possibile visualizzare e copiare il codice sorgente delle '''tue modifiche''' a questa pagina:",
-       "protectedinterface": "Questa pagina contiene un elemento che fa parte dell'interfaccia utente del software di questo sito ed è protetta per evitare possibili abusi.\nPer aggiungere o modificare traduzioni per tutti i wiki usare [//translatewiki.net/ translatewiki.net], il progetto di localizzazione di MediaWiki.",
-       "editinginterface": "'''Attenzione:''' Il testo di questa pagina fa parte dell'interfaccia utente del sito. Tutte le modifiche apportate a questa pagina si riflettono sui messaggi visualizzati per tutti gli utenti su questo wiki.\nPer aggiungere o modificare le traduzioni valide su tutti i wiki, considera la possibilità di usare [//translatewiki.net/wiki/Main_Page?setlang=it translatewiki.net], il progetto MediaWiki per la localizzazione.",
+       "protectedinterface": "Questa pagina contiene un elemento che fa parte dell'interfaccia utente del software di questo sito ed è protetta per evitare possibili abusi.\nPer aggiungere o modificare le traduzioni valide su tutti i wiki, usa [//translatewiki.net/ translatewiki.net], il progetto di localizzazione di MediaWiki.",
+       "editinginterface": "<strong>Attenzione:</strong> il testo di questa pagina fa parte dell'interfaccia utente del software di questo sito. Tutte le modifiche apportate a questa pagina si riflettono sui messaggi visualizzati per tutti gli utenti su questo wiki.",
+       "translateinterface": "Per aggiungere o modificare le traduzioni valide su tutti i wiki, usa [//translatewiki.net/ translatewiki.net], il progetto MediaWiki per la localizzazione.",
        "cascadeprotected": "Su questa pagina non è possibile effettuare modifiche perché è stata inclusa {{PLURAL:$1|nella pagina indicata di seguito, che è stata protetta|nelle pagine indicate di seguito, che sono state protette}} selezionando la protezione \"ricorsiva\":\n$2",
        "namespaceprotected": "Non si dispone dei permessi necessari per modificare le pagine del namespace '''$1'''.",
        "customcssprotected": "Non si dispone dei permessi necessari alla modifica di questa pagina CSS, in quanto contiene le impostazioni personali di un altro utente.",
        "content-model-text": "testo normale",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pagine che usano argomenti duplicati in chiamate a template",
+       "duplicate-args-category-desc": "La pagina contiene chiamate a template che utilizzano argomenti duplicati, come ad esempio <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Attenzione:''' Questa pagina contiene troppe chiamate alle parser functions.\n\nDovrebbe averne meno di $2, al momento ce {{PLURAL:$1|n'è $1|ne sono $1}}.",
        "expensive-parserfunction-category": "Pagine con troppe chiamate alle funzioni parser",
        "post-expand-template-inclusion-warning": "<strong>Attenzione:</strong> la dimensione dei template inclusi è troppo grande.\nAlcuni template non verranno inclusi.",
        "mergehistory-same-destination": "Le pagine di origine e di destinazione non possono coincidere",
        "mergehistory-reason": "Motivo:",
        "mergelog": "Unioni",
-       "pagemerge-logentry": "ha unito [[$1]] a [[$2]] (versioni fino a $3)",
        "revertmerge": "Annulla unioni",
        "mergelogpagetext": "Di seguito sono elencate le ultime operazioni di unione della cronologia di due pagine.",
        "history-title": "$1: cronologia delle modifiche",
        "gender-female": "È registrata su {{SITENAME}}",
        "prefs-help-gender": "L'impostazione di questa preferenza è opzionale.\nIl software utilizza questo valore per rivolgersi a te e menzionarti agli altri usando il genere grammaticale appropriato.\nQuesta informazione sarà pubblica.",
        "email": "Indirizzo email",
-       "prefs-help-realname": "L'indicazione del proprio nome vero è opzionale; se si sceglie di inserirlo, verrà utilizzato per attribuire la paternità dei contenuti inviati.",
+       "prefs-help-realname": "Il vero nome è facoltativo.\nSe fornito, può essere usato per attribuirvi la paternità del vostro lavoro.",
        "prefs-help-email": "L'inserimento del proprio indirizzo email è facoltativo, ma permette di ricevere la propria password qualora venisse dimenticata.",
        "prefs-help-email-others": "Puoi anche scegliere di lasciare che gli altri ti contattino via posta elettronica con un collegamento dalla tua pagina utente o di discussione.\nIl tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.",
        "prefs-help-email-required": "L'indirizzo email è obbligatorio.",
        "statistics": "Statistiche",
        "statistics-header-pages": "Statistiche relative alle pagine",
        "statistics-header-edits": "Statistiche relative alle modifiche",
-       "statistics-header-views": "Statistiche relative alle visualizzazioni",
        "statistics-header-users": "Statistiche relative agli utenti",
        "statistics-header-hooks": "Altre statistiche",
        "statistics-articles": "Pagine di contenuti",
        "statistics-files": "File caricati",
        "statistics-edits": "Modifiche a partire dall'installazione di {{SITENAME}}",
        "statistics-edits-average": "Media delle modifiche per pagina",
-       "statistics-views-total": "Visualizzazioni totali",
-       "statistics-views-total-desc": "Visualizzazioni di pagine inesistenti e pagine speciali non sono incluse",
-       "statistics-views-peredit": "Visualizzazioni per modifica",
        "statistics-users": "[[Special:ListUsers|Utenti]] registrati",
        "statistics-users-active": "Utenti attivi",
        "statistics-users-active-desc": "Utenti che hanno effettuato un'azione {{PLURAL:$1|nell'ultimo giorno|negli ultimi $1 giorni}}",
-       "statistics-mostpopular": "Pagine più visitate",
        "pageswithprop": "Pagine con una proprietà di pagina",
        "pageswithprop-legend": "Pagine con una proprietà di pagina",
        "pageswithprop-text": "Questa pagina elenca le pagine che utilizzano una particolare proprietà di pagina.",
        "uncategorizedtemplates": "Template privi di categorie",
        "unusedcategories": "Categorie vuote",
        "unusedimages": "File non utilizzati",
-       "popularpages": "Pagine più visitate",
        "wantedcategories": "Categorie richieste",
        "wantedpages": "Pagine più richieste",
        "wantedpages-badtitle": "Titolo non valido nel gruppo di risultati: $1",
        "tooltip-feed-atom": "Feed Atom per questa pagina",
        "tooltip-t-contributions": "Lista dei contributi di questo utente",
        "tooltip-t-emailuser": "Invia un messaggio email a questo utente",
+       "tooltip-t-info": "Ulteriori informazioni su questa pagina",
        "tooltip-t-upload": "Carica file multimediali",
        "tooltip-t-specialpages": "Lista di tutte le pagine speciali",
        "tooltip-t-print": "Versione stampabile di questa pagina",
        "pageinfo-robot-policy": "Indicizzazione per i robot",
        "pageinfo-robot-index": "Consentito",
        "pageinfo-robot-noindex": "Non consentito",
-       "pageinfo-views": "Numero di visualizzazioni",
        "pageinfo-watchers": "Numero di utenti che hanno la pagina nei loro osservati speciali",
        "pageinfo-few-watchers": "Meno di $1 {{PLURAL:$1|osservatore|osservatori}}",
        "pageinfo-redirects-name": "Numero di redirect a questa pagina",
        "unknown_extension_tag": "Tag estensione sconosciuto: \"$1\"",
        "duplicate-defaultsort": "Attenzione: la chiave di ordinamento predefinita \"$2\" sostituisce la precedente \"$1\".",
        "duplicate-displaytitle": "<strong>Attenzione:</strong> il titolo visualizzato \"$2\" sostituisce il precedente titolo \"$1\".",
+       "invalid-indicator-name": "<strong>Errore:</strong> attributo <code>name</code> degli indicatori dello stato della pagina non può essere vuoto.",
        "version": "Versione",
        "version-extensions": "Estensioni installate",
        "version-skins": "Skin installate",
        "revdelete-uname-unhid": "nome utente ripristinato",
        "revdelete-restricted": "limitazioni ai soli amministratori attivate",
        "revdelete-unrestricted": "limitazioni ai soli amministratori rimosse",
+       "logentry-merge-merge": "$1 {{GENDER:$2|ha unito}} $3 in $4 (versioni fino al $5)",
        "logentry-move-move": "$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4 senza lasciare redirect",
        "logentry-move-move_redir": "$1 {{GENDER:$2|ha spostato}} la pagina $3 a $4 tramite redirect",
index a7391a8..9f260f9 100644 (file)
        "protectedpagetext": "このページは編集や他の操作ができないように保護されています。",
        "viewsourcetext": "このページのソースの閲覧やコピーができます:",
        "viewyourtext": "このページへの<strong>あなたの編集</strong>のソースの閲覧やコピーができます:",
-       "protectedinterface": "このページにはこのウィキのソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。\nすべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/ translatewiki.net] を使用してください。",
-       "editinginterface": "<strong>警告:</strong> ソフトウェアのインターフェイスに使用されるテキストのページを編集しています。\nこのページを変更すると、このウィキの他の利用者のユーザーインターフェイスの外観に影響します。\nすべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] を使用してください。",
+       "protectedinterface": "このページにはこのウィキのソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。\nすべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] を使用してください。",
+       "editinginterface": "<strong>警告:</strong> ソフトウェアのインターフェイスに使用されるテキストのページを編集しています。\nこのページを変更すると、このウィキの他の利用者のユーザーインターフェイスの外観に影響します。",
+       "translateinterface": "すべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] を使用してください。",
        "cascadeprotected": "このページは、「カスケード保護」が指定された状態で保護されている以下の{{PLURAL:$1|ページ|ページ群}}で読み込まれているため、編集できないように保護されています:\n$2",
        "namespaceprotected": "<strong>$1</strong>名前空間にあるページを編集する権限がありません。",
        "customcssprotected": "この CSS ページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。",
        "content-model-text": "プレーンテキスト",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "テンプレート呼び出しで引数が重複しているページ",
+       "duplicate-args-category-desc": "引数が重複したテンプレート呼び出しを含むページ。例: <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code>、<code><nowiki>{{foo|bar|1=baz}}</nowiki></code>",
        "expensive-parserfunction-warning": "<strong>警告:</strong> このページでは、高負荷なパーサー関数の呼び出し回数が多過ぎます。\n\n{{PLURAL:$2|呼び出しを $2 回}}未満にしてください ({{PLURAL:$1|現在は $1 回}})。",
        "expensive-parserfunction-category": "高負荷な構文解析関数の呼び出しが多過ぎるページ",
        "post-expand-template-inclusion-warning": "<strong>警告:</strong> テンプレートの読み込みサイズが大き過ぎます。\nいくつかのテンプレートは読み込まれません。",
        "mergehistory-same-destination": "統合元と統合先のページを同じにはできません",
        "mergehistory-reason": "理由:",
        "mergelog": "統合記録",
-       "pagemerge-logentry": "[[$1]]を[[$2]]に統合 ($3 版まで)",
        "revertmerge": "統合解除",
        "mergelogpagetext": "以下は、最近行われたあるページから別のページへの統合の一覧です。",
        "history-title": "「$1」の変更履歴",
        "searchprofile-images-tooltip": "ファイルを検索",
        "searchprofile-everything-tooltip": "全本文ページ (トークページを含む) 内を検索",
        "searchprofile-advanced-tooltip": "特定の名前空間内を検索",
-       "search-result-size": "$1 ({{PLURAL:$2|$2 語}})",
+       "search-result-size": "$1 ({{PLURAL:$2|$2 語}})",
        "search-result-category-size": "{{PLURAL:$1|$1 件}} ({{PLURAL:$2|$2 下位カテゴリ}}、{{PLURAL:$3|$3 ファイル}})",
        "search-redirect": "($1からのリダイレクト)",
        "search-section": "($1の節)",
        "gender-female": "女",
        "prefs-help-gender": "この項目の設定は省略できます。\nソフトウェアが利用者向けの画面表示であなたに言及する際に、適切な文法的性を選択するために使用されます。\nこの情報は公開されます。",
        "email": "メール",
-       "prefs-help-realname": "本名は省略できます。\n入力すると、あなたの著作物の帰属表示に使れます。",
+       "prefs-help-realname": "本名は省略できます。\n入力すると、あなたの著作物の帰属表示に使用されます。",
        "prefs-help-email": "メールアドレスは省略できますが、パスワードを忘れた際にパスワードをリセットするのに必要です。",
        "prefs-help-email-others": "利用者ページやトークページ上のリンクを通じて、他の利用者があなたにメールで連絡を取れるようにすることもできます。\n他の利用者が連絡を取る際にあなたのメールアドレスが開示されることはありません。",
        "prefs-help-email-required": "メールアドレスが必要です。",
        "statistics": "統計",
        "statistics-header-pages": "ページに関する統計",
        "statistics-header-edits": "編集に関する統計",
-       "statistics-header-views": "閲覧に関する統計",
        "statistics-header-users": "利用者に関する統計",
        "statistics-header-hooks": "その他の統計",
        "statistics-articles": "記事数",
        "statistics-files": "アップロードされたファイル数",
        "statistics-edits": "{{SITENAME}}の開設以降の編集回数の総計",
        "statistics-edits-average": "1ページあたりの編集回数",
-       "statistics-views-total": "総閲覧回数",
-       "statistics-views-total-desc": "存在しないページと特別ページに対する閲覧は含まれていません",
-       "statistics-views-peredit": "1編集あたりの閲覧回数",
        "statistics-users": "[[Special:ListUsers|利用者]]",
        "statistics-users-active": "活動中の利用者",
        "statistics-users-active-desc": "過去 {{PLURAL:$1|$1 日間}}に何らかの操作をした利用者",
-       "statistics-mostpopular": "最も閲覧されているページ",
        "pageswithprop": "ページプロパティがあるページ",
        "pageswithprop-legend": "ページプロパティがあるページ",
        "pageswithprop-text": "このページでは、特定のページプロパティを持つページを列挙します。",
        "uncategorizedtemplates": "カテゴリ分類されていないテンプレート",
        "unusedcategories": "使われていないカテゴリ",
        "unusedimages": "使われていないファイル",
-       "popularpages": "人気のページ",
        "wantedcategories": "カテゴリページが存在しないカテゴリ",
        "wantedpages": "ページが存在しないリンク",
        "wantedpages-badtitle": "結果が、無効なページ名を含んでいます: $1",
        "pager-older-n": "{{PLURAL:$1|以前の$1件}}",
        "suppress": "秘匿する",
        "querypage-disabled": "パフォーマンスに悪影響を与えるおそれがあるため、この特別ページは無効になっています。",
+       "apihelp": "API のヘルプ",
+       "apihelp-no-such-module": "モジュール「$1」が見つかりません。",
        "booksources": "書籍情報源",
        "booksources-search-legend": "書籍情報源を検索",
        "booksources-isbn": "ISBN:",
        "tooltip-feed-atom": "このページのAtomフィード",
        "tooltip-t-contributions": "この利用者の投稿の一覧",
        "tooltip-t-emailuser": "この利用者にメールを送信する",
+       "tooltip-t-info": "このページについての詳細情報",
        "tooltip-t-upload": "ファイルをアップロードする",
        "tooltip-t-specialpages": "特別ページの一覧",
        "tooltip-t-print": "このページの印刷用ページ",
        "pageinfo-robot-policy": "ロボットによるインデックス作成",
        "pageinfo-robot-index": "許可",
        "pageinfo-robot-noindex": "不許可",
-       "pageinfo-views": "閲覧回数",
        "pageinfo-watchers": "ページをウォッチリストに入れている人数",
        "pageinfo-few-watchers": "ウォッチしている利用者 $1 {{PLURAL:$1|人未満}}",
        "pageinfo-redirects-name": "このページへのリダイレクトの数",
index 7d56808..330bd8c 100644 (file)
        "mergehistory-same-destination": "원본 문서 이름과 대상 문서 이름은 달라야 합니다",
        "mergehistory-reason": "이유:",
        "mergelog": "합치기 기록",
-       "pagemerge-logentry": "사용자가 [[$1]]을 [[$2]]에 합쳤습니다 ($3판이 위로 옮겨짐)",
        "revertmerge": "합치기 해제",
        "mergelogpagetext": "다음은 한 문서의 역사를 다른 문서의 역사와 합친 최근 기록입니다.",
        "history-title": "\"$1\"의 편집 역사",
        "prefs-changeemail": "이메일 주소 바꾸기",
        "prefs-setemail": "이메일 주소 설정하기",
        "prefs-email": "이메일 설정",
-       "prefs-rendering": "문서 보기 설정",
+       "prefs-rendering": "문서 보기 설정",
        "saveprefs": "저장",
        "restoreprefs": "(모든 부분에서) 모두 기본 설정으로 되돌리기",
        "prefs-editing": "편집 상자",
        "gender-female": "위키 문서를 편집하는 여자입니다",
        "prefs-help-gender": "이 환경 설정은 선택 사항입니다.\n소프트웨어는 적절한 성별 문법을 사용하여 다른 사용자에게 당신을 언급하는 것을 해결하기 위해 사용됩니다.\n이 정보는 공개됩니다.",
        "email": "이메일",
-       "prefs-help-realname": "ì\8b¤ëª\85ì\9d\80 ì\84 í\83\9d ì\82¬í\95­ì\9e\85ë\8b\88ë\8b¤.\nì\8b¤ëª\85ì\9d\84 ì\9e\85ë ¥í\95\98ë©´ ë¬¸ì\84\9c ê¸°ì\97¬ì\97\90 ì\9e\90ì\8b ì\9d\98 ì\9d´ë¦\84ì\9d´ ë\93¤ì\96´ê°\80ê²\8c ë\90©니다.",
+       "prefs-help-realname": "ì\8b¤ëª\85ì\9d\80 ì\84 í\83\9d ì\82¬í\95­ì\9e\85ë\8b\88ë\8b¤.\nì\8b¤ëª\85ì\9d\84 ì\9e\85ë ¥í\95\98ë©´ ë\8b¹ì\8b ì\9d\98 ê¸°ì\97¬ì\97\90 ë\8c\80í\95\9c ì \80ì\9e\91ì\9e\90í\91\9cì\8b\9cì\97\90 ì\93°ì\9d´ê²\8c ë\90  ì\88\98 ì\9e\88ì\8aµ니다.",
        "prefs-help-email": "이메일 주소 입력은 선택 사항입니다. 다만 비밀번호를 잊었을 때 비밀번호를 재설정하기 위해 필요합니다.",
        "prefs-help-email-others": "자신의 문서나 토론 문서에 있는 이메일 보내기 링크로 다른 사용자가 연락할 수 있게 할 수도 있습니다.\n이 경우에도 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.",
        "prefs-help-email-required": "이메일 주소가 필요합니다.",
        "filerevert-legend": "파일 되돌리기",
        "filerevert-intro": "'''[[Media:$1|$1]]''' 파일을 [$4 $2 $3 버전]으로 되돌립니다.",
        "filerevert-comment": "이유:",
-       "filerevert-defaultcomment": "$1 $2 버전으로 되돌림",
+       "filerevert-defaultcomment": "$1 $2 으로 되돌림",
        "filerevert-submit": "되돌리기",
        "filerevert-success": "'''[[Media:$1|$1]]''' 파일을 [$4 $2 $3 버전]으로 되돌렸습니다.",
        "filerevert-badversion": "입력된 시간 기록을 가진 파일의 로컬 버전이 없습니다.",
        "statistics": "통계",
        "statistics-header-pages": "문서 통계",
        "statistics-header-edits": "편집 통계",
-       "statistics-header-views": "방문 통계",
        "statistics-header-users": "사용자 통계",
        "statistics-header-hooks": "기타 통계",
        "statistics-articles": "본문",
        "statistics-files": "올려져 있는 파일",
        "statistics-edits": "{{SITENAME}} 설치 이후 문서의 전체 편집 수",
        "statistics-edits-average": "문서당 평균 편집 수",
-       "statistics-views-total": "총 방문 수",
-       "statistics-views-total-desc": "존재하지 않는 문서나 특수 문서에 대한 방문 수는 포함하지 않았습니다",
-       "statistics-views-peredit": "편집당 방문 횟수",
        "statistics-users": "등록된 [[Special:ListUsers|사용자]]",
        "statistics-users-active": "활동적인 사용자",
        "statistics-users-active-desc": "최근 {{PLURAL:$1|$1일}} 동안 활동한 사용자",
-       "statistics-mostpopular": "가장 많이 읽힌 문서",
        "pageswithprop": "문서 속성이 있는 문서",
        "pageswithprop-legend": "문서 속성이 있는 문서",
        "pageswithprop-text": "이 문서는 특정 문서 속성을 사용한 문서를 나타냅니다.",
        "uncategorizedtemplates": "분류되지 않은 틀 목록",
        "unusedcategories": "사용하지 않는 분류 목록",
        "unusedimages": "사용하지 않는 파일 목록",
-       "popularpages": "인기 있는 문서 목록",
        "wantedcategories": "필요한 분류 목록",
        "wantedpages": "필요한 문서 목록",
        "wantedpages-badtitle": "문서 제목이 잘못되었습니다: $1",
        "pager-older-n": "{{PLURAL:$1|이전 1개|이전 $1개}}",
        "suppress": "오버사이트",
        "querypage-disabled": "이 특수 문서는 성능상의 이유로 비활성화되었습니다.",
+       "apihelp": "API 도움말",
        "booksources": "책 찾기",
        "booksources-search-legend": "책 원본 검색",
        "booksources-isbn": "ISBN:",
        "dellogpage": "삭제 기록",
        "dellogpagetext": "아래의 목록은 최근에 삭제된 문서입니다.",
        "deletionlog": "삭제 기록",
-       "reverted": "이전 버전으로 되돌렸습니다.",
+       "reverted": "이전 판으로 되돌렸습니다",
        "deletecomment": "이유:",
        "deleteotherreason": "다른 이유/추가적인 이유:",
        "deletereasonotherlist": "다른 이유",
        "cantrollback": "편집을 되돌릴 수 없습니다.\n문서를 편집한 사용자가 한 명뿐입니다.",
        "alreadyrolled": "[[:$1]]에서 [[User:$2|$2]] ([[User talk:$2|토론]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])의 편집을 되돌릴 수 없습니다.\n누군가가 이미 문서를 고치거나 되돌렸습니다.\n\n마지막으로 이 문서를 편집한 사용자는 [[User:$3|$3]] ([[User talk:$3|토론]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])입니다.",
        "editcomment": "편집 요약: \"$1\"",
-       "revertpage": "[[Special:Contributions/$2|$2]]([[User talk:$2|토론]])의 편집을 [[User:$1|$1]]의 마지막 버전으로 되돌림",
+       "revertpage": "[[Special:Contributions/$2|$2]]([[User talk:$2|토론]])의 편집을 [[User:$1|$1]]의 마지막 으로 되돌림",
        "revertpage-nouser": "숨긴 사용자의 편집을 {{GENDER:$1|[[User:$1|$1]]}}의 마지막 판으로 되돌림",
-       "rollback-success": "$1의 편집을 $2의 마지막 버전으로 되돌렸습니다.",
+       "rollback-success": "$1의 편집을 되돌렸습니다.\n$2의 마지막 판으로 바뀌었습니다.",
        "sessionfailure-title": "세션 실패",
        "sessionfailure": "로그인 세션에 문제가 발생한 것 같습니다.\n세션 하이재킹을 막기 위해 동작이 취소되었습니다.\n브라우저의 뒤로 버튼을 누르고 문서를 새로 고침한 후에 다시 시도해 주세요.",
        "protectlogpage": "문서 보호 기록",
        "pageinfo-robot-policy": "로봇에 의한 색인",
        "pageinfo-robot-index": "허용됨",
        "pageinfo-robot-noindex": "불허됨",
-       "pageinfo-views": "읽은 수",
        "pageinfo-watchers": "문서를 주시하는 사용자 수",
        "pageinfo-few-watchers": "{{PLURAL:$1|주시하는 사용자}} $1명 미만",
        "pageinfo-redirects-name": "이 문서의 넘겨주기 수",
index b33c180..2dcc17b 100644 (file)
        "viewsourcetext": "Dir kënnt de Quelltext vun dëser Säit kucken a kopéieren:",
        "viewyourtext": "Dir kënnt de Quelltext vun '''Ären Ännerungen''' op dëser Säit kucken a kopéieren:",
        "protectedinterface": "Op dëser Säit fannt Dir Text fir de Sprooch-Interface vun der Software op dëser Wiki an dofir ass si gespaart fir Mëssbrauch ze verhënneren.\n\nFir Iwwersetzungen fir all Wikien bäizesetzen oder z'änneren gitt w.e.g. op [//translatewiki.net/ translatewiki.net], de MediaWiki-Lokalisatiouns-Projet.",
-       "editinginterface": "'''Opgepasst:''' Dir sidd am Gaang, eng Säit z'änneren, déi do ass, fir Interface-Text fir d'Software ze liwweren. \nÄnnerungen op dëser Säit änneren den Interface-Text, jee no Kontext, op allen oder verschiddene Säiten, déi vun alle Benotzer op dëser Wiki gesi ginn. \nFir d'Iwwersetzunge fir all Wikien derbäizesetzen oder z'änneren gitt w.e.g. op [//translatewiki.net translatewiki.net], de MediaWiki-Lokalisatiouns-Projet.",
+       "editinginterface": "<strong>Opgepasst:</strong> Dir sidd am Gaang, eng Säit z'änneren, déi do ass, fir Interface-Text fir d'Software ze liwweren. \nÄnnerungen op dëser Säit änneren den Interface-Text, jee no Kontext, op allen oder verschiddene Säiten, déi vun alle Benotzer op dëser Wiki gesi ginn.",
        "cascadeprotected": "Dës Säit gouf fir Ännerunge gespaart, well se duerch Cascadeprotectioun vun {{PLURAL:$1|dëser Säit|dëse Säite}} gespaart ass mat der Cascadenoptioun:\n$2",
        "namespaceprotected": "Dir hutt net déi néideg Rechter fir d'Säiten am Nummraum '''$1''' ze änneren.",
        "customcssprotected": "Dir hutt net d'Recht dës CSS-Säit z'änneren, well dorop déi perséinlech Astellunge vun engem anere Benotzer gespäichert sinn.",
        "page_last": "lescht",
        "histlegend": "Fir d'Ännerungen unzeweisen: Klickt déi zwou Versiounen un, déi solle verglach ginn.<br />\n*(aktuell) = Ënnerscheed mat der aktueller Versioun,\n*(lescht) = Ënnerscheed mat der aler Versioun,\n*k = Kleng Ännerung.",
        "history-fieldset-title": "An de Versioune sichen",
-       "history-show-deleted": "nëmmen déi geläschten",
+       "history-show-deleted": "nëmmen déi geläscht",
        "histfirst": "eelst",
        "histlast": "neist",
        "historysize": "({{PLURAL:$1|1 Byte|$1 Byten}})",
        "mergehistory-same-destination": "Ausgangs- an Zilsäit däerfen net déi selwescht sinn",
        "mergehistory-reason": "Grond:",
        "mergelog": "Fusiouns-Logbuch",
-       "pagemerge-logentry": "[[$1]] zesummegeluecht an [[$2]] (Versioune bis $3)",
        "revertmerge": "Zesummeféieren ophiewen",
        "mergelogpagetext": "Lëscht vun de rezenten Zesummeféierunge vu Versiounsgeschichten.",
        "history-title": "$1: Historique vun de Versiounen",
        "gender-female": "Si ännert Wikisäiten",
        "prefs-help-gender": "Fakultativ:\nD'Software benotzt seng Wäerter fir Iech unzeschwätzen a fir vun Iech vis-a-vis vun Aneren grammatesch ''Gender-korrekt'' ze schwätzen. \n\nDës Informatioun ass ëffentlech.",
        "email": "E-Mail",
-       "prefs-help-realname": "Äre richtegen Numm ass fakultativ. Wann Dir en ugitt, gëtt e benotzt fir Iech Är Kontributiounen zouzeuerdnen.",
+       "prefs-help-realname": "De richtegen Numm ass fakultativ.\nWann en ugi gouf, gëtt e benotzt fir Iech Är Kontributiounen zouzeuerdnen.",
        "prefs-help-email": "D'E-Mailadress ass fakultativ, awer si gëtt gebraucht fir Iech Äert Passwuert ze mailen, wann Dir et géift vergiessen.",
        "prefs-help-email-others": "Dir kënnt Iech och dofir decidéieren datt Anerer Iech iwwer Är Diskussiounssäit kontaktéieren ouni datt Dir derbäi Är Identitéit verrode musst.",
        "prefs-help-email-required": "Eng gëlteg E-Mail-Adress gëtt heifir gebraucht.",
        "statistics": "Statistik",
        "statistics-header-pages": "Säitestatistiken",
        "statistics-header-edits": "Statistik vun den Ännerungen",
-       "statistics-header-views": "Statistiken iwwer d'Visitten",
        "statistics-header-users": "Benotzerstatistik",
        "statistics-header-hooks": "Aner Statistiken",
        "statistics-articles": "Säite mat Inhalt",
        "statistics-files": "Eropgeluede Fichieren",
        "statistics-edits": "Säitenännerungen zanter datt et {{SITENAME}} gëtt",
        "statistics-edits-average": "Duerchschnëttlech Zuel vun Ännerunge pro Säit",
-       "statistics-views-total": "Total vun den Oprif",
-       "statistics-views-total-desc": "Kucke vu Säiten déi et net gëtt a vu Spezialsäite sinn net mat dran",
-       "statistics-views-peredit": "Affichage pro Ännerung",
        "statistics-users": "Registréiert [[Special:ListUsers|Benotzer]]",
        "statistics-users-active": "Aktiv Benotzer",
        "statistics-users-active-desc": "Benotzer déi während {{PLURAL:$1|dem leschten Dag|de leschten $1 Deeg}} eppes gemaach hunn",
-       "statistics-mostpopular": "Am meeschte gekuckte Säiten",
        "pageswithprop": "Säite mat enger Säiteneegeschaft",
        "pageswithprop-legend": "Säite mat enger Säiteneegeschaft",
        "pageswithprop-text": "Op dëser Säit sti Säiten déi eng speziell Säiteneegeschaft benotzen.",
        "uncategorizedtemplates": "Schablounen ouni Kategorie",
        "unusedcategories": "Net benotzt Kategorien",
        "unusedimages": "Net benotzt Fichieren",
-       "popularpages": "Populär Säiten",
        "wantedcategories": "Gewënscht Kategorien",
        "wantedpages": "Gewënscht Säiten",
        "wantedpages-badtitle": "Net valabelen Titel am Resultat: $1",
        "pager-older-n": "{{PLURAL:$1|vireg|vireg $1}}",
        "suppress": "Iwwersiicht",
        "querypage-disabled": "Dës Spezialsäit ass aus Performance-Grënn ausgeschalt.",
+       "apihelp": "API-Hëllef",
+       "apihelp-no-such-module": "Modul \"$1\" net fonnt.",
        "booksources": "Bicherreferenzen",
        "booksources-search-legend": "No Bicherreferenze sichen",
        "booksources-search": "Sichen",
        "wlheader-enotif": "E-Mail-Notifikatioun ass ageschalt.",
        "wlheader-showupdated": "Säiten déi zanter Ärer leschter Visite geännert goufen, si '''fett''' geschriwwen",
        "wlnote": "Hei {{PLURAL:$1|ass déi lescht Ännerung|sinn déi lescht <strong>$1</strong> Ännerunge}} vun {{PLURAL:$2|der leschter Stonn|de leschte(n) <strong>$2</strong> Stonnen}}, Stand: $3 ëm $4 Auer.",
-       "wlshowlast": "D'Ännerunge vun de leschte(n) $1 Stonnen, $2 Deeg oder  (an de leschten 30 Deeg) weisen.",
+       "wlshowlast": "Déi lescht $1 Stonnen $2 Deeg weisen",
        "watchlist-options": "Optioune vun der Iwwerwaachungslëscht",
        "watching": "Iwwerwaachen …",
        "unwatching": "Net méi iwwerwaachen …",
        "tooltip-feed-atom": "Atom-Feed fir dës Säit",
        "tooltip-t-contributions": "Lëscht vun de Kontributioune vun dësem Benotzer",
        "tooltip-t-emailuser": "Dësem Benotzer eng E-Mail schécken",
+       "tooltip-t-info": "Méi Informatiounen iwwer dës Säit",
        "tooltip-t-upload": "Biller oder Mediefichieren eroplueden",
        "tooltip-t-specialpages": "Lëscht vun alle Spezialsäiten",
        "tooltip-t-print": "Versioun vun dëser Säit fir auszedrécken",
        "pageinfo-robot-policy": "Indexéierung duerch Botten",
        "pageinfo-robot-index": "Erlaabt",
        "pageinfo-robot-noindex": "Net erlaabt",
-       "pageinfo-views": "Zuel vun de Kéieren déi dës Säit gekuckt gouf",
        "pageinfo-watchers": "Zuel vun de Benotzer déi d'Säit iwwerwaachen",
        "pageinfo-few-watchers": "Manner wéi $1 {{PLURAL:$1|Benotzer deen iwwerwaacht|Benotzer déi iwwerwaachen}}",
        "pageinfo-redirects-name": "Zuel vun de Viruleedungen op dës Säit",
        "log-description-pagelang": "Dëst ass a Log mat den Ännerunge vun de Sprooche vun de Säiten.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktivéiert)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desaktivéiert''')",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 Byte|$1 Byten}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME-Typ",
        "mediastatistics-table-extensions": "Méiglech Erweiderungen",
        "mediastatistics-table-count": "Zuel vun de Fichieren",
        "mediastatistics-header-unknown": "Onbekannt",
        "mediastatistics-header-audio": "Audio",
        "mediastatistics-header-video": "Videoen",
        "mediastatistics-header-office": "Office",
+       "mediastatistics-header-text": "Textuell",
        "json-error-unknown": "Et gouf e Problem mam JSON. Feeler: $1",
        "json-error-syntax": "Syntaxfeeler"
 }
index 3efb97f..5c82cef 100644 (file)
        "mergehistory-reason": "دليل:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "سریک سازی پهرستنومه",
-       "pagemerge-logentry": " [[$1]] وا [[$2]] سریک سازی بی (وانیریا که د $3 فره تر هئن)",
        "revertmerge": "بی لوئه",
        "mergelogpagetext": "شما د هار نوم گه آخرین چیا وه یک شیوسن ویرگار یه بلگه نه د بلگه تر میئنیت.",
        "history-title": "دوواره دیئن ویرگار$1",
        "statistics": "آماريا",
        "statistics-header-pages": "بلگه آماریا",
        "statistics-header-edits": "آماریا نه ویرایشت بکید",
-       "statistics-header-views": "آماریا نه بوینیت",
        "statistics-header-users": "آماریا کاریار",
        "statistics-header-hooks": "آماریا هنی",
        "statistics-articles": "بلگه یا مینونه",
        "statistics-files": "جانیا یا سوار بیه",
        "statistics-edits": "ویرایشت بلگه یا د گاتی که  {{SITENAME}} دروس بیه",
        "statistics-edits-average": "میانگین ویرایشت یا سی هر بلگه",
-       "statistics-views-total": "همه نه بوینیت",
-       "statistics-views-total-desc": "دیئن بلگه یایی که وجود نارن و بلگه یا ویجه د ور گرته نئ",
-       "statistics-views-peredit": "هر ویرایشت نه بوینیت",
        "statistics-users": "ثوت نام بیه [[ویجه:نوم گه کاریاریا|کاریاریا]]",
        "statistics-users-active": "کاروریا کارکو",
        "statistics-users-active-desc": "کاریاریایی که د {{PLURAL:$1|رو|$1 رو}} دماتر کنشتگر بینه",
-       "statistics-mostpopular": "بلگه یایی که بیشتر دیئه بینه",
        "pageswithprop": "بلگه یایی که خاصیت صفحه ها دشو",
        "pageswithprop-legend": "بلگه یایی که خاصیت صفحه ها دشو",
        "pageswithprop-text": "ای بلگه نومگه ای یه د بلگه یایی که یه گل ویجه گی د یه بلگه خاص نه وه کار می بنن.",
        "uncategorizedtemplates": "قالویا دسه بنی نبیه",
        "unusedcategories": "دسه یا استفاده نبیه",
        "unusedimages": "فایلیا استفاده نبیه",
-       "popularpages": "بلگه یا حاستنی",
        "wantedcategories": "بلگه یا حاستنی",
        "wantedpages": "بلگه یا حاستنی",
        "wantedpages-badtitle": "سرون نامعتور د کومله نتیجه یا:$1",
        "tooltip-feed-atom": "تغذيه كؤچك سی ای بلگه",
        "tooltip-t-contributions": "یه نوم گه د هومیاریا ای کارور",
        "tooltip-t-emailuser": "سی ای كارور ايميل كل كو",
+       "tooltip-t-info": "دونسمنیا بیشتر دباره ای بلگه",
        "tooltip-t-upload": "بلم گير كردن فايلا",
        "tooltip-t-specialpages": "سيائه تمؤم بلگيا خاص",
        "tooltip-t-print": "نسقه چاپ بيئنی سی ای بلگه",
        "pageinfo-robot-policy": "نومگه کاری وا رباتیا",
        "pageinfo-robot-index": "صلادار",
        "pageinfo-robot-noindex": "بی صلا",
-       "pageinfo-views": "شماره دیئن یا",
        "pageinfo-watchers": "شماره سیل کننه بلگه یا",
        "pageinfo-few-watchers": "کمتر د $1 {{PLURAL:$1|سیل کننه|سیل کننه یا}}",
        "pageinfo-redirects-name": "شماره واگردونیا ای بلگه",
        "exif-serialnumber": "نوم شماره دیربین",
        "exif-cameraownername": "مالک دیربین",
        "exif-label": "ری دیار",
+       "exif-nickname": "نوم نامرتوط سی عسگ",
+       "exif-copyrighted": "حال و بال کپی رایت",
+       "exif-copyrightowner": "مالک کپی رایت",
+       "exif-usageterms": "کلیمه یا وه کار گرتن",
        "exif-pngfilecomment": "ویر و باور فایل جی پی ان جی",
        "exif-giffilecomment": "ویر و باور فایل جی آی اف",
        "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
        "exif-meteringmode-0": "نادیار",
        "exif-meteringmode-1": "میانگین",
        "exif-meteringmode-3": "نقطه جا",
+       "exif-meteringmode-4": "چن جاگه ای",
        "exif-meteringmode-5": "الگو",
        "exif-meteringmode-255": "هنی",
        "exif-lightsource-0": "نادیار",
        "exif-lightsource-1": "روشنایی روز",
        "exif-lightsource-2": "فلورسنت",
        "exif-lightsource-4": "فلش",
+       "exif-lightsource-9": "هوا خو",
+       "exif-lightsource-10": "هوا اوری",
        "exif-lightsource-11": "سایه",
        "exif-flash-mode-3": "مد خودانجوم",
        "exif-focalplaneresolutionunit-2": "ائنج",
+       "exif-customrendered-0": "پردازشت خو",
+       "exif-customrendered-1": "پردازشت همیشه ای",
+       "exif-scenecapturetype-0": "استاندارد",
+       "exif-scenecapturetype-2": "نیمری کشین",
        "exif-scenecapturetype-3": "چی شو",
        "exif-gaincontrol-0": "هیش کوم",
        "exif-contrast-0": "عادی",
        "exif-sharpness-2": "سفت",
        "exif-subjectdistancerange-0": "نادیار",
        "exif-subjectdistancerange-1": "گپ",
+       "exif-subjectdistancerange-2": "نما بسته",
+       "exif-subjectdistancerange-3": "نما د دیر",
        "exif-gpsaltitude-above-sealevel": "$1 {{جمی:$1|متر|متریا}} وارؤ د ریتراز دریا",
        "exif-gpsaltitude-below-sealevel": "$1 {{جمی:$1|متر|متریا}} وارؤ د ریتراز دریا",
        "exif-gpsspeed-k": "کلومتر سی هر ساعت",
        "exif-gpsdestdistance-k": "کلومتر",
        "exif-gpsdestdistance-m": "مایل",
        "exif-gpsdop-good": "خو ($1)",
+       "exif-dc-contributor": "هومیارا",
+       "exif-dc-publisher": "درتیجن",
+       "exif-dc-relation": "وارسگر مرتوط",
+       "exif-dc-rights": "حقوق",
        "exif-dc-source": "سرچشمه وارسگر",
        "exif-dc-type": "نوع وارسگر",
        "exif-rating-rejected": "رد بیه",
+       "exif-isospeedratings-overflow": "گپتر د 65535",
        "exif-iimcategory-ace": "هنریا، رهزیشت و زیستگه",
        "exif-iimcategory-clj": "جرم و قانون",
        "exif-iimcategory-fin": "اموری و کسم کار",
        "exif-iimcategory-evn": "زئشت گه",
        "exif-iimcategory-hth": "تن آزایی",
        "exif-iimcategory-lab": "کار",
+       "exif-iimcategory-pol": "سیاستا",
+       "exif-iimcategory-rel": "دین و ائتقات",
+       "exif-iimcategory-sci": "دونسمنی و سازیاری",
+       "exif-iimcategory-soi": "جریانیا اشتمائی",
+       "exif-iimcategory-spo": "ورزشتا",
+       "exif-iimcategory-war": "جئن، تضاد و لیزشیوسن",
+       "exif-iimcategory-wea": "هوا",
+       "exif-urgency-normal": "خو($1)",
+       "exif-urgency-low": "هار ($1)",
+       "exif-urgency-high": "بلنگ ($1)",
        "namespacesall": "همه شو",
        "monthsall": "همه",
+       "confirmemail": "پشت راس کردن تیرنشون انجومانامه",
        "confirmemail_send": "کل کردن رازینه پشت راس کاری",
+       "invalidateemail": "انجومشیو کردن پشت راس کردن انجومانامه",
+       "scarytranscludetoolong": "[یو آر ال فره گپه]",
        "recreate": "د نو راس کردن",
        "confirm_purge_button": "خوئه",
        "confirm-watch-button": "خوئه",
        "imgmultipageprev": "بلگه دمايی",
        "imgmultipagenext": "بلگه نهایی",
        "imgmultigo": "رؤ!",
+       "imgmultigoto": "رو د بلگه $1",
        "img-lang-opt": "$2 ($1)",
        "img-lang-default": "(زون پیش زمینه)",
        "img-lang-go": "رو",
        "table_pager_prev": "بلگه دمايی",
        "table_pager_first": "سرآسونه",
        "table_pager_last": "بلگه آخری",
+       "table_pager_limit_label": "آیتم سی هر بلگه:",
        "table_pager_limit_submit": "رو",
+       "table_pager_empty": "هیچ نتیجه ای نئ",
+       "autosumm-blank": "بلگه حالی",
        "autosumm-replace": "مینونه وا \"َ$1\" جاگزین بی",
        "autoredircomment": "بلگه واگردونی بیه سی[[$1]]",
+       "autosumm-new": "راست کردن بلگه وه دس \"$1\"",
+       "autosumm-newblank": "بلگه حالی دروس بیه",
        "watchlistedit-normal-title": "ویرایشت سیل برگ",
+       "watchlistedit-normal-legend": "ؤرداشتن سرونیا د سیل برگ",
+       "watchlistedit-normal-submit": "ؤرداشتن سرونیا",
+       "watchlistedit-raw-title": "سیل برگ نه ردیفی ویرایشت کو",
+       "watchlistedit-raw-legend": "سیل برگ نه ردیفی ویرایشت کو",
+       "watchlistedit-raw-titles": "داسون:",
+       "watchlistedit-raw-submit": "وه هنگوم سازی سیل برگ",
+       "watchlistedit-raw-done": "سیل برگتون وه هنگوم سازی بیه.",
+       "watchlistedit-clear-title": "سیل برگ دروس بیه",
+       "watchlistedit-clear-legend": "پاک کردن سیل برگ",
+       "watchlistedit-clear-titles": "داسون:",
+       "watchlistedit-clear-done": "سیل برگتون وه پاک بیه.",
        "watchlisttools-clear": "پاک کردن سیل برگ",
        "watchlisttools-view": "آلشتیا مرتوط نه بوینیت",
        "watchlisttools-edit": "سیل برگ بوینیتو و ویرایشت بکید",
        "version-ext-colheader-description": "شرح",
        "version-ext-colheader-credits": "نیسنه یا",
        "version-poweredby-others": "دیه رون",
+       "version-software-product": "نتجه",
        "version-software-version": "نسقه",
        "version-entrypoints-header-url": "يو آر ال",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Article path]",
        "redirect-page": "نوم دیار کن بلگه",
        "redirect-revision": "وانئری بلگه",
        "redirect-file": "نوم جانیا",
+       "redirect-not-exists": "انازه که پیدا نبی",
        "fileduplicatesearch-filename": "نوم جانیا:",
        "fileduplicatesearch-submit": "پی جوری",
        "fileduplicatesearch-info": "$1 × $2 pixel<br />انازه جانیا: $3<br />MIME type: $4",
        "specialpages": "بلگيا ويجه",
+       "specialpages-group-other": "بلگه یا ویجه هنی",
+       "specialpages-group-login": " اومائن د سيستم/راس كردن حساو",
        "specialpages-group-changes": "آلشتیا تازه و پهرستنومه یا",
        "specialpages-group-media": "گزارشتیا رسانه و سوارکردیا",
        "specialpages-group-users": "کاروریا و حقوق",
        "specialpages-group-pagetools": "اوزاریا بلگه",
        "specialpages-group-wiki": "رسینه و اوزاریا",
        "specialpages-group-redirects": "بلگه ویجه واگردونی بیه",
+       "specialpages-group-spam": "اوزاریا اسپم",
        "blankpage": "بلگه حالی",
        "external_image_whitelist": "یه خط نه ول بکید چی وه<pre>",
+       "tags": "سردیسیا آلشت دئن خو",
        "tag-filter": "فيلتر [[Special:Tags|Tag]]:",
        "tag-filter-submit": "فيلتر",
        "tags-title": "سردیسیا",
        "limitreport-expansiondepth-value": "$1/$2",
        "limitreport-expensivefunctioncount-value": "$1/$2",
        "expand_templates_output": "نتیجه",
+       "expand_templates_xml_output": "درده ایکس ام ال",
        "expand_templates_ok": "خوئه",
        "expand_templates_remove_comments": "جا وه جا بیئن ویر و باوریا",
        "expand_templates_preview": "پيش سيل",
index bfd8856..d9758a0 100644 (file)
        "print": "Spausdinti",
        "view": "Žiūrėti",
        "view-foreign": "Rodyti $1",
-       "edit": "Redaguoti",
+       "edit": "Keisti",
        "edit-local": "Redaguoti vietos aprašymą",
        "create": "Sukurti",
        "create-local": "Pridėti vietos aprašymą",
        "otherlanguages": "Kitomis kalbomis",
        "redirectedfrom": "(Nukreipta iš $1)",
        "redirectpagesub": "Nukreipimo puslapis",
+       "redirectto": "Nukreipti į:",
        "lastmodifiedat": "Šis puslapis paskutinį kartą keistas $1 $2.",
        "viewcount": "Šis puslapis buvo atvertas $1 {{PLURAL:$1|kartą|kartus|kartų}}.",
        "protectedpage": "Užrakintas puslapis",
        "newmessageslinkplural": "{{PLURAL:$1|nauja žinutė|999=naujos žinutės}}",
        "newmessagesdifflinkplural": "paskutinis {{PLURAL:$1|pakeitimas|999=pakeitimai}}",
        "youhavenewmessagesmulti": "Turite naujų žinučių $1",
-       "editsection": "redaguoti",
+       "editsection": "keisti",
        "editold": "taisyti",
        "viewsourceold": "žiūrėti šaltinį",
        "editlink": "keisti",
        "nstab-media": "Media puslapis",
        "nstab-special": "Specialusis puslapis",
        "nstab-project": "Projekto puslapis",
-       "nstab-image": "Failas",
+       "nstab-image": "Rinkmena",
        "nstab-mediawiki": "Pranešimas",
        "nstab-template": "Šablonas",
        "nstab-help": "Pagalbos puslapis",
        "nowiki_sample": "Čia įterpkite neformuotą tekstą",
        "nowiki_tip": "Ignoruoti wiki formatą",
        "image_sample": "Pavyzdys.jpg",
-       "image_tip": "Įdėti failą",
+       "image_tip": "Įterpta rinkmena",
        "media_sample": "Pavyzdys.ogg",
-       "media_tip": "Nuoroda į failą",
+       "media_tip": "Nuoroda į rinkmeną",
        "sig_tip": "Jūsų parašas bei laikas",
        "hr_tip": "Horizontali linija (naudokite taupiai)",
-       "summary": "Komentaras:",
+       "summary": "Paaiškinimas:",
        "subject": "Tema/antraštė:",
        "minoredit": "Tai smulkus pataisymas",
        "watchthis": "Stebėti šį puslapį",
        "editing": "Taisomas $1",
        "creating": "Kuriama $1",
        "editingsection": "Taisomas $1 (skyrelis)",
-       "editingcomment": "Taisomas $1 (komentaras)",
+       "editingcomment": "Taisomas $1 (naujas skyrius)",
        "editconflict": "Išpręskite konfliktą: $1",
        "explainconflict": "Kažkas kitas jau pakeitė puslapį nuo tada, kai jūs pradėjote jį redaguoti.\nViršutiniame tekstiniame lauke pateikta šiuo metu esanti puslapio versija.\nJūsų keitimai pateikti žemiau esančiame lauke.\nJums reikia sujungti jūsų pakeitimus su esančia versija.\nKai paspausite „{{int:savearticle}}“, bus įrašytas '''tik''' tekstas viršutiniame tekstiniame lauke.",
        "yourtext": "Jūsų tekstas",
        "edit-gone-missing": "Negalima atnaujinti puslapio.\nGreičiausiai jis yra ištrintas.",
        "edit-conflict": "Redagavimo konfliktas.",
        "edit-no-change": "Jūsų keitimas buvo ignoruotas kadangi nebuvo atlikta jokių teksto pakeitimų.",
+       "postedit-confirmation-created": "Puslapis sukurtas.",
        "postedit-confirmation-saved": "Jūsų pakeitimas išsaugotas.",
        "edit-already-exists": "Negalima sukurti naujo puslapio.\nJis jau egzistuoja.",
        "defaultmessagetext": "Numatytasis pranešimo tekstas",
        "mergehistory-same-destination": "Šaltinio ir tikslo puslapiai negali būti vienodi",
        "mergehistory-reason": "Priežastis:",
        "mergelog": "Sujungimų sąrašas",
-       "pagemerge-logentry": "sujungė [[$1]] su [[$2]] (versijos iki $3)",
        "revertmerge": "Atskirti",
        "mergelogpagetext": "Žemiau yra paskiausių vieno su kitu puslapių sujungimų sąrašas.",
        "history-title": "„$1“ versijų istorija",
        "searchrelated": "susiję",
        "searchall": "visi",
        "showingresults": "Žemiau rodoma iki '''$1''' {{PLURAL:$1|rezultato|rezultatų|rezultatų}} pradedant #'''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|Davinys <strong>$1</strong> iš <strong>$3</strong>|Daviniai <strong>$1 - $2</strong> iš <strong>$3</strong>}}",
        "search-nonefound": "Nėra rezultatų, atitinkančių užklausą.",
        "powersearch-legend": "Išplėstinė paieška",
        "powersearch-ns": "Ieškoti vardų srityse:",
        "powersearch-togglelabel": "Pažymėti:",
        "powersearch-toggleall": "Viską",
        "powersearch-togglenone": "Nieko",
+       "powersearch-remember": "Atsiminti pasirinkimą būsimoms paieškoms",
        "search-external": "Išorinė paieška",
        "searchdisabled": "Projekto {{SITENAME}} paieška yra uždrausta. Galite pamėginti ieškoti Google paieškos sistemoje. Paieškos sistemoje projekto {{SITENAME}} duomenys gali būti pasenę.",
        "preferences": "Nustatymai",
        "prefs-displayrc": "Rodymo nustatymai",
        "prefs-displaywatchlist": "Rodymo nuostatos",
        "prefs-diffs": "Skirtumai",
+       "prefs-help-prefershttps": "Šis nustatymas suveiks kitą kartą prisijungiant.",
        "email-address-validity-valid": "Panašu, kad E-pašto adresas yra teisingas",
        "email-address-validity-invalid": "Įveskite korektišką e-pašto adresą",
        "userrights": "Naudotojų teisių valdymas",
        "right-unblockself": "Atblokuoti pačius",
        "right-protect": "Pakeisti apsaugos lygius ir redaguoti apsaugotus puslapius",
        "right-editprotected": "Redaguoti apsaugotus puslapius (be pakopinės apsaugos)",
-       "right-editinterface": "Redaguoti naudotojo aplinką",
+       "right-editinterface": "Keisti naudotojo aplinką",
        "right-editusercssjs": "Redaguoti kitų naudotojų CSS ir JS failus",
        "right-editusercss": "Redaguoti kitų naudotojų CSS failus",
        "right-edituserjs": "Redaguoti kitų naudotojų JS failus",
        "rightslog": "Naudotojų teisių pakeitimai",
        "rightslogtext": "Pateikiamas naudotojų teisių pakeitimų sąrašas.",
        "action-read": "skaityti šį puslapį",
-       "action-edit": "redaguoti šį puslapį",
+       "action-edit": "keisti šį puslapį",
        "action-createpage": "kurti puslapius",
        "action-createtalk": "kurti aptarimų puslapius",
        "action-createaccount": "kurti šią naudotojo paskyrą",
        "action-move-subpages": "pervadinti šį puslapį ir jo subpuslapius",
        "action-move-rootuserpages": "perkelti pagrindinius naudotojų puslapius",
        "action-movefile": "perkelti šį failą",
-       "action-upload": "įkelti šį failą",
+       "action-upload": "įkelti šią rinkmeną",
        "action-reupload": "perrašyti šį esamą failą",
        "action-reupload-shared": "perrašyti šį failą bendrojoje saugykloje",
-       "action-upload_by_url": "įkelti šį failą iš URL adreso",
+       "action-upload_by_url": "įkelti šią rinkmeną iš URL adreso",
        "action-writeapi": "naudotis rašymo API",
        "action-delete": "ištrinti šį puslapį",
        "action-deleterevision": "ištrinti šią reviziją",
        "recentchanges-label-bot": "Šį keitimą atliko automatinė programa",
        "recentchanges-label-unpatrolled": "Šis keitimas dar nebuvo patikrintas",
        "recentchanges-label-plusminus": "Šiuo baitų skaičiumi pakeista puslapio apimtis",
+       "recentchanges-legend-heading": "'''Paaiškinimai:'''",
        "recentchanges-legend-newpage": "$1 - naujas puslapis",
        "rcnotefrom": "Žemiau yra pakeitimai pradedant <strong>$2</strong> (rodoma iki <strong>$1</strong> pakeitimų).",
        "rclistfrom": "Rodyti naujus pakeitimus pradedant $3 $2",
        "recentchangeslinked-summary": "Tai paskutinių keitimų, atliktų puslapiuose, į kuriuos yra nuoroda iš nurodyto puslapio (arba į nurodytos kategorijos narius), sąrašas.\nPuslapiai iš jūsų [[Special:Watchlist|stebimųjų sąrašo]] yra '''paryškinti'''.",
        "recentchangeslinked-page": "Puslapio pavadinimas:",
        "recentchangeslinked-to": "Rodyti su duotuoju puslapiu susijusių puslapių pakeitimus",
-       "upload": "Įkelti failą",
-       "uploadbtn": "Įkelti failą",
+       "upload": "Įkelti rinkmeną",
+       "uploadbtn": "Įkelti rinkmeną",
        "reuploaddesc": "Atšaukti įkėlimą ir grįžti į įkėlimo formą.",
        "upload-tryagain": "Siųsti pakeistą failo aprašymą",
        "uploadnologin": "Neprisijungęs",
        "uploaderror": "Įkėlimo klaida",
        "upload-recreate-warning": "'''Dėmėsio: Failas šiuo pavadinimu buvo ištrintas arba pervadintas.'''\n\nJūsų patogumui pateiktas įrašas apie šio puslapio trynimą ar pervadinimą:",
        "uploadtext": "Kad įkeltumėte failą, naudokitės žemiau pateikta forma.\nNorėdami peržiūrėti ar ieškoti anksčiau įkeltų paveikslėlių, eikite į [[Special:FileList|įkeltų failų sąrašą]], įkėlimai yra registruojami [[Special:Log/upload|įkėlimų sąraše]], trynimai — [[Special:Log/delete|trynimų sąraše]].\n\nNorėdami panaudoti įkeltą failą puslapyje, naudokite tokias nuorodas:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Failas.jpg]]</nowiki></code>''' norėdami naudoti pilną failo versiją\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Failas.png|200px|thumb|left|alternatyvusis tekstas]]</nowiki></code>''' norėdami naudoti 200 pikselių pločio paveikslėlį rėmelyje puslapio kairėje; „alternatyvus tekstas“ bus naudojamas paveikslėlio aprašymui.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Failas.ogg]]</nowiki></code>''' tiesioginei nuorodai į failą.",
-       "upload-permitted": "Leidžiami failų tipai: $1.",
+       "upload-permitted": "Leidžiami rinkmenų tipai: $1.",
        "upload-preferred": "Pageidautini failų tipai: $1.",
        "upload-prohibited": "Uždrausti failų tipai: $1.",
        "uploadlogpage": "Įkėlimų sąrašas",
        "uploadlogpagetext": "Žemiau pateikiamas paskutinių failų įkėlimų sąrašas.\nTaip pat galite peržvelgti [[Special:NewFiles|naujausių failų galeriją]].",
        "filename": "Failo vardas",
        "filedesc": "Aprašymas",
-       "fileuploadsummary": "Komentaras:",
+       "fileuploadsummary": "Aprašymas:",
        "filereuploadsummary": "Failo pakeitimai:",
        "filestatus": "Autorystės teisės:",
        "filesource": "Šaltinis:",
        "largefileserver": "Šis failas yra didesnis nei serveris yra sukonfigūruotas leisti.",
        "emptyfile": "Panašu, kad failas, kurį įkėlėte yra tuščias. Tai gali būti dėl klaidos failo pavadinime. Pasitikrinkite ar tikrai norite įkelti šitą failą.",
        "windows-nonascii-filename": "Ši viki neleidžia naudoti failų vardų su specialiais simboliais.",
-       "fileexists": "Failas tuo pačiu vardu jau egzistuoja, prašome pažiūrėti <strong>[[:$1]]</strong>, jei nesate tikras, ar norite perrašyti šį failą.\n[[$1|thumb]]",
+       "fileexists": "Rinkmena tokiu pačiu pavadinimu jau esti, prašome pažiūrėti <strong>[[:$1]]</strong>, jei nesate tikras, ar norite perrašyti šią rinkmeną.\n[[$1|thumb]]",
        "filepageexists": "Šio failo aprašymo puslapis jau buvo sukurtas <strong>[[:$1]]</strong>, bet šiuo metu nėra jokio failo šiuo pavadinimu.\nJūsų įvestas komentaras neatsiras aprašymo puslapyje.\nJei norite, kad jūsų komentaras ten atsirastų, jums reikia jį pakeisti pačiam.\n[[$1|thumb]]",
        "fileexists-extension": "Failas su panašiu pavadinimu jau yra: [[$2|thumb]]\n* Įkeliamo failo pavadinimas: <strong>[[:$1]]</strong>\n* Jau esančio failo pavadinimas: <strong>[[:$2]]</strong>\nPrašome pasirinkti kitą vardą.",
-       "fileexists-thumbnail-yes": "Failas turbūt yra sumažinto dydžio failas ''(miniatiūra)''. [[$1|thumb]]\nPrašome peržiūrėti failą <strong>[[:$1]]</strong>.\nJeigu tai yra toks pats pradinio dydžio paveikslėlis, tai įkelti papildomos miniatūros nereikia.",
+       "fileexists-thumbnail-yes": "Rinkmena turbūt yra sumažinto dydžio ''(miniatiūra)''. [[$1|thumb]]\nPrašome peržiūrėti rinkmeną <strong>[[:$1]]</strong>.\nJeigu tai yra toks pats pradinio dydžio paveikslėlis, tai įkelti papildomos miniatūros nereikia.",
        "file-thumbnail-no": "Failo pavadinimas prasideda  <strong>$1</strong>.\nAtrodo, kad yra sumažinto dydžio paveikslėlis ''(miniatiūra)''.\nJei jūs turite šį paveisklėlį pilna raiška, įkelkite šitą, priešingu atveju prašome pakeisti failo pavadinimą.",
        "fileexists-forbidden": "Failas tokiu pačiu vardu jau egzistuoja ir negali būti perrašytas;\nprašome eiti atgal ir įkelti šį failą kitu vardu. [[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Failas tokiu vardu jau egzistuoja bendrojoje failų saugykloje;\nJei visvien norite įkelti savo failą, prašome eiti atgal ir įkelti šį failą kitu vardu. [[File:$1|thumb|center|$1]]",
        "file-deleted-duplicate": "Failas, identiškas šiam failui ([[:$1]]), seniau buvo ištrintas. Prieš įkeldami jį vėl patikrinkite šio failo ištrynimo istoriją.",
        "uploadwarning": "Dėmesio",
        "uploadwarning-text": "Prašome pakeisti failo aprašymą ir bandykite dar kartą.",
-       "savefile": "Išsaugoti failą",
+       "savefile": "Išsaugoti rinkmeną",
        "uploaddisabled": "Įkėlimai uždrausti",
        "copyuploaddisabled": "Įkėlimas pagal URL išjungtas.",
        "uploaddisabledtext": "Failų įkėlimai yra uždrausti.",
        "uploadscripted": "Šis failas turi HTML arba programinį kodą, kuris gali būti klaidingai suprastas interneto naršyklės.",
        "uploadscriptednamespace": "Šis SVG failas turi neteisėtą vietą vardui '$1'",
        "uploadvirus": "Šiame faile yra virusas! Smulkiau: $1",
-       "uploadjava": "Failas yra ZIP failas, kuriame yra Java .class failas.\nĮkelti Java failus neleidžiama, nes jie gali padėti apeiti saugumo apribojimus.",
-       "upload-source": "Failo šaltinis",
-       "sourcefilename": "Įkeliamas failas:",
+       "uploadjava": "Ši rinkmena tai ZIP rinkmena, kurioje yra Java .class rinkmena.\nĮkelti Java rinkmenų neleidžiama, nes jos gali padėti apeiti saugumo apribojimus.",
+       "upload-source": "Pradinė rinkmena",
+       "sourcefilename": "Įkeliama rinkmena:",
        "sourceurl": "Šaltinio adresas:",
        "destfilename": "Norimas failo vardas:",
-       "upload-maxfilesize": "Didžiausias failo dydis: $1",
-       "upload-description": "Failo aprašymas",
+       "upload-maxfilesize": "Didžiausias rinkmenos dydis: $1",
+       "upload-description": "Rinkmenos aprašymas",
        "upload-options": "Įkėlimo nustatymai",
-       "watchthisupload": "Stebėti šį failą",
+       "watchthisupload": "Stebėti šią rinkmeną",
        "filewasdeleted": "Failas šiuo vardu anksčiau buvo įkeltas, o paskui ištrintas. Jums reikėtų patikrinti $1 prieš bandant įkelti jį vėl.",
        "filename-bad-prefix": "Jūsų įkeliamas failas prasideda su '''„$1“''', bet tai yra neapibūdinantis pavadinimas, dažniausiai priskirtas skaitmeninių kamerų. Prašome suteikti labiau apibūdinantį pavadinimą savo failui.",
        "upload-success-subj": "Įkelta sėkmingai",
        "nolicense": "Nepasirinkta",
        "license-nopreview": "(Peržiūra negalima)",
        "upload_source_url": " (tikras, viešai prieinamas URL)",
-       "upload_source_file": " (failas jūsų kompiuteryje)",
+       "upload_source_file": "(pasirinkta rinkmena jūsų kompiuteryje)",
        "listfiles-summary": "Šiame specialiame puslapyje rodomi visi įkelti failai.\nKai sąrašas susiaurinamas pagal naudotoją, rodomi tik tie failai, kurių naujausią versiją jis yra įkėlęs.",
        "listfiles_search_for": "Ieškoti failo pavadinimo:",
        "imgfile": "failas",
        "listfiles-latestversion": "Dabartinė versija",
        "listfiles-latestversion-yes": "Taip",
        "listfiles-latestversion-no": "Ne",
-       "file-anchor-link": "Failas",
+       "file-anchor-link": "Rinkmena",
        "filehist": "Paveikslėlio istorija",
        "filehist-help": "Paspauskite ant datos/laiko, kad pamatytumėte failą tokį, koks jis buvo tuo metu.",
        "filehist-deleteall": "trinti visus",
        "filehist-nothumb": "Nėra miniatiūros",
        "filehist-user": "Naudotojas",
        "filehist-dimensions": "Matmenys",
-       "filehist-filesize": "Failo dydis",
-       "filehist-comment": "Komentaras",
-       "imagelinks": "Failų panaudojimas",
+       "filehist-filesize": "Rinkmenos dydis",
+       "filehist-comment": "Paaiškinimas",
+       "imagelinks": "Rinkmenos naudojimas",
        "linkstoimage": "{{PLURAL:$1|Šis puslapis|Šie puslapiai}} nurodo į šį failą:",
        "linkstoimage-more": "Daugiau nei $1 {{PLURAL:$1|puslapis|puslapiai|puslapių}} rodo į šį failą.\nŠis sąrašas rodo tik {{PLURAL:$1|puslapio|pirmų $1 puslapių}} nuorodas į šį failą.\nYra pasiekiamas ir [[Special:WhatLinksHere/$2|visas sąrašas]].",
-       "nolinkstoimage": "Į failą nenurodo joks puslapis.",
+       "nolinkstoimage": "Į rinkmeną nenurodo joks puslapis.",
        "morelinkstoimage": "Žiūrėti [[Special:WhatLinksHere/$1|daugiau nuorodų]] į šį failą.",
        "linkstoimage-redirect": "$1 (failo peradresavimas) $2",
        "duplicatesoffile": "Šis failas turi {{PLURAL:$1|$1 dublikatą|$1 dublikatus|$1 dublikatų}} ([[Special:FileDuplicateSearch/$2|daugiau informacijos]]):",
-       "sharedupload": "Šis failas yra iš $1 ir gali būti naudojamas kituose projektuose.",
+       "sharedupload": "Ši rinkmena yra iš $1 ir gali būti naudojama kitose wiki svetainėse.",
        "sharedupload-desc-there": "Šis failas yra iš $1 ir gali būti naudojamas kituose projektuose.\nNorėdami sužinoti daugiau, žiūrėkite [$2 failo aprašymą].",
        "sharedupload-desc-here": "Šis failas yra iš $1 ir gali būti naudojamas kituose projektuose.\nInformacija iš [$2 failo aprašymo puslapio] yra pateikiama žemiau.",
        "filepage-nofile": "Joks failas su duotu pavadinimu neegzistuoja.",
        "filepage-nofile-link": "Joks failas su duotu pavadinimu neegzistuoja, bet vis dar galite [$1 jį įkelti].",
-       "uploadnewversion-linktext": "Įkelti naują failo versiją",
+       "uploadnewversion-linktext": "Įkelti naują šios rinkmenos atmainą",
        "shared-repo-from": "iš $1",
        "shared-repo": "bendrosios failų saugyklos",
        "shared-repo-name-wikimediacommons": "Vikiteka",
        "filerevert-success": "<span class=\"plainlinks\">'''[[Media:$1|$1]]''' buvo sugrąžintas į versiją $4 ($2, $3).</span>",
        "filerevert-badversion": "Nėra jokių ankstesnių vietinių šio failo versijų su pateiktu laiku.",
        "filedelete": "Trinti $1",
-       "filedelete-legend": "Trinti failą",
+       "filedelete-legend": "Trinti rinkmeną",
        "filedelete-intro": "Jūs ketinate ištrinti failą '''[[Media:$1|$1]]''' su visa istorija.",
        "filedelete-intro-old": "<span class=\"plainlinks\">Jūs trinate '''[[Media:$1|$1]]''' [$4 $3, $2] versiją.</span>",
        "filedelete-comment": "Priežastis:",
        "statistics": "Statistika",
        "statistics-header-pages": "Puslapių statistika",
        "statistics-header-edits": "Redagavimų statistika",
-       "statistics-header-views": "Peržiūrų statistika",
        "statistics-header-users": "Naudotojų statistika",
        "statistics-header-hooks": "Kita statistika",
        "statistics-articles": "Turinio puslapiai",
        "statistics-files": "Įkelti failai",
        "statistics-edits": "Puslapių redagavimų skaičius nuo {{SITENAME}} sukūrimo",
        "statistics-edits-average": "Vidutinis puslapio keitimų skaičius",
-       "statistics-views-total": "Iš viso peržiūrų",
-       "statistics-views-total-desc": "Neegzistuojančių ir specialiųjų puslapių parodymai neįtraukti",
-       "statistics-views-peredit": "Peržiūrų skaičius puslapio versijai",
        "statistics-users": "Registruotų [[Special:ListUsers|naudotojų]]",
        "statistics-users-active": "Aktyvių naudotojų",
        "statistics-users-active-desc": "Naudotojai, kurie per {{PLURAL:$1|paskutinę dieną|paskutines $1 dienų}} padarė keitimų",
-       "statistics-mostpopular": "Daugiausiai rodyti puslapiai",
        "pageswithprop": "Puslapiai su puslapio atributais",
        "pageswithprop-legend": "Puslapiai su puslapio atributais",
        "pageswithprop-text": "Šiame puslapyje pateikiami puslapiai, kurie ypač naudoja puslapio atributus.",
        "uncategorizedtemplates": "Šablonai, nepriskirti jokiai kategorijai",
        "unusedcategories": "Nenaudojamos kategorijos",
        "unusedimages": "Nenaudojami failai",
-       "popularpages": "Populiarūs puslapiai",
        "wantedcategories": "Geidžiamiausios kategorijos",
        "wantedpages": "Geidžiamiausi puslapiai",
        "wantedpages-badtitle": "Neleistinas pavadinimas rezultatų rinkinyje: $1",
        "wlheader-enotif": "El. pašto pranešimai yra įjungti.",
        "wlheader-showupdated": "Puslapiai pakeisti nuo tada, kai paskutinį kartą apsilankėte juose, yra pažymėti '''pastorintai'''",
        "wlnote": "{{PLURAL:$1|Rodomas '''$1''' paskutinis pakeitimas, atliktas|Rodomi '''$1''' paskutiniai pakeitimai, atlikti|Rodoma '''$1''' paskutinių pakeitimų, atliktų}} per '''$2''' {{PLURAL:$2|paskutinę valandą|paskutines valandas|paskutinių valandų}}, nuo $3 $4.",
-       "wlshowlast": "Rodyti paskutinių $1 valandų, $2 dienų ar  pakeitimus",
+       "wlshowlast": "Rodyti paskutinių $1 valandų, $2 dienų",
        "watchlist-options": "Stebimųjų sąrašo parinktys",
        "watching": "Įtraukiama į stebimųjų sąrašą...",
        "unwatching": "Šalinama iš stebimųjų sąrašo...",
        "rollbackfailed": "Atmetimas nepavyko",
        "cantrollback": "Negalima atmesti redagavimo; paskutinis keitęs naudotojas yra šio puslapio autorius.",
        "alreadyrolled": "Nepavyko atmesti paskutinio [[User:$2|$2]] ([[User talk:$2|Aptarimas]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) daryto puslapio [[:$1]] keitimo;\nkažkas jau pakeitė puslapį arba suspėjo pirmas atmesti keitimą.\n\nPaskutimas keitimas darytas naudotojo [[User:$3|$3]] ([[User talk:$3|Aptarimas]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Redagavimo komentaras: „''$1''“.",
+       "editcomment": "Pateiktas toks keitimo paaiškinimas: „''$1''“.",
        "revertpage": "Atmestas [[Special:Contributions/$2|$2]] ([[User talk:$2|Aptarimas]]) pakeitimas; sugrąžinta [[User:$1|$1]] versija",
        "revertpage-nouser": "Atversti pakeitimai paslėpto vartotojo, grąžino prieš tai buvusią versiją {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Atmesti $1 pakeitimai;\ngrąžinta prieš tai buvusi $2 versija.",
        "undelete-cleanup-error": "Klaida trinant nenaudotą archyvo failą „$1“.",
        "undelete-missing-filearchive": "Nepavyksta atkurti failo archyvo ID $1, nes jo nėra duomenų bazėje. Jis gali būti jau atkurtas.",
        "undelete-error": "Klaida panaikinant puslapį",
-       "undelete-error-short": "Klaida atkuriant failą: $1",
+       "undelete-error-short": "Klaida atkuriant rinkmeną: $1",
        "undelete-error-long": "Įvyko klaidų atkuriant failą:\n\n$1",
        "undelete-show-file-confirm": "Ar tikrai norite peržiūrėti ištrintą failo „<nowiki>$1</nowiki>“ $2 $3 versiją?",
        "undelete-show-file-submit": "Taip",
        "namespace_association": "Susijusi vardų sritis",
        "tooltip-namespace_association": "Įjunkite šią parinktį, kad taip pat įtrauktumėte aptarimų arba temos sritį, susijusią su pasirinkta sritimi",
        "blanknamespace": "(Pagrindinė)",
-       "contributions": "{{GENDER:$1|Naudotojo}} įndėlis",
+       "contributions": "{{GENDER:$1|Naudotojo}} indėlis",
        "contributions-title": "{{GENDER:$1|Naudotojo|Naudotojos}} $1 indėlis",
        "mycontris": "Įnašai",
        "contribsub2": "Dėl {{GENDER:$3|$1}} ($2)",
        "sp-contributions-search": "Ieškoti įnašo",
        "sp-contributions-username": "IP adresas arba naudotojo vardas:",
        "sp-contributions-toponly": "Rodyti tik paskutinius keitimus",
+       "sp-contributions-newonly": "Rodyti tik tuos keitimus, kuriais sukurti nauji straipsniai",
        "sp-contributions-submit": "Ieškoti",
        "whatlinkshere": "Susiję puslapiai",
        "whatlinkshere-title": "Puslapiai, kurie nurodo į „$1“",
        "move-leave-redirect": "Pervadinant palikti nukreipimą",
        "protectedpagemovewarning": "'''Dėmesio:''' Šis puslapis buvo užrakintas, kad tik naudotojai su administratoriaus teisėmis galėtų jį pervadinti.\nNaujausias įrašas žurnale yra pateiktas žemiau:",
        "semiprotectedpagemovewarning": "'''Pastaba''': Šis puslapis buvo užrakintas, kad tik registruoti naudotojai galėtų jį redaguoti.\nNaujausias įrašas žurnale yra pateiktas žemiau:",
-       "move-over-sharedrepo": "== Failas jau yra ==\n[[:$1]] egzistuoja bendrojoje saugykloje. Perkėlus failą į šį pavadinimą, jis pakeis bendrąjį failą.",
+       "move-over-sharedrepo": "== Rinkmena jau yra ==\n[[:$1]] esti bendrojoje saugykloje. Įkėlus rinkmeną šiuo pavadinimu, ji pakeis bendrąją rinkmeną.",
        "file-exists-sharedrepo": "Pasirinktas failo pavadinimas jau yra naudojamas bendrojoje saugykloje.\nPrašome pasirinkti kitą pavadinimą.",
        "export": "Eksportuoti puslapius",
        "exporttext": "Galite eksportuoti vieno puslapio tekstą ir istoriją ar kelių puslapių vienu metu tame pačiame XML atsakyme.\nŠie puslapiai galės būti importuojami į kitą projektą, veikiantį MediaWiki pagrindu, per [[Special:Import|importo puslapį]].\n\nNorėdami eksportuoti puslapius, įveskite pavadinimus žemiau esančiame tekstiniame lauke po vieną pavadinimą eilutėje, taip pat pasirinkite ar norite eksportuoti ir istoriją ar tik dabartinę versiją su paskutinio redagavimo informacija.\n\nPastaruoju atveju, jūs taip pat galite naudoti nuorodą, pvz. [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] puslapiui „[[{{MediaWiki:Mainpage}}]]“.",
        "allmessagestext": "Čia pateikiamas sisteminių pranešimų sąrašas, esančių MediaWiki vardų srityje.\nAplankykite [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation „MediaWiki“ lokaliziciją] ir [//translatewiki.net „translatewiki.net“], jei norite prisidėti prie bendrojo „MediaWiki“ lokalizavimo.",
        "allmessagesnotsupportedDB": "Šis puslapis nepalaikomas, nes nuostata '''$wgUseDatabaseMessages''' yra išjungtas.",
        "allmessages-filter-legend": "Filtras",
-       "allmessages-filter": "Filtruoti pagal būseną:",
+       "allmessages-filter": "Perkošti pagal būseną:",
        "allmessages-filter-unmodified": "Nepakeisti",
        "allmessages-filter-all": "Visi",
        "allmessages-filter-modified": "Pakeisti",
-       "allmessages-prefix": "Filtruoti pagal pradžią:",
+       "allmessages-prefix": "Perkošti pagal pradžią:",
        "allmessages-language": "Kalba:",
        "allmessages-filter-submit": "Rodyti",
        "thumbnail-more": "Padidinti",
        "import-interwiki-namespace": "Paskirties vardų sritis:",
        "import-interwiki-rootpage": "Paskirties namų puslapis (pasirinktinai):",
        "import-upload-filename": "Failo pavadinimas:",
-       "import-comment": "Komentaras:",
+       "import-comment": "Paaiškinimas:",
        "importtext": "Prašome eksportuoti iš projekto-šaltinio failo, naudojant [[Special:Export|eksportavimo pagalbininką.]]\nIšsaugokite jį savo kompiuteryje ir įkelkite jį čia.",
        "importstart": "Imporuojami puslapiai...",
        "import-revision-count": "$1 {{PLURAL:$1|versija|versijos|versijų}}",
        "pageinfo-robot-policy": "Paieškos variklio būsena",
        "pageinfo-robot-index": "Leidžiama",
        "pageinfo-robot-noindex": "Neleidžiama",
-       "pageinfo-views": "Peržiūrų skaičius",
        "pageinfo-watchers": "Puslapio stebėtojų skaičius",
        "pageinfo-redirects-name": "Nukreipimai į šį puslapį",
        "pageinfo-subpages-name": "Šio puslapio papuslapiai",
        "patrol-log-header": "Tai patvirtintų versijų sąrašas.",
        "log-show-hide-patrol": "$1 patvirtinimų sąrašą",
        "deletedrevision": "Ištrinta sena versija $1",
-       "filedeleteerror-short": "Klaida trinant failą: $1",
+       "filedeleteerror-short": "Klaida trinant rinkmeną: $1",
        "filedeleteerror-long": "Įvyko klaidų trinant failą:\n\n$1",
        "filedelete-missing": "Failas „$1“ negali būti ištrintas, nes jo nėra.",
        "filedelete-old-unregistered": "Nurodytos failo versijos „$1“ nėra duomenų bazėje.",
        "imagemaxsize": "Riboti paveikslėlių dydį:<br />''(failų aprašymo puslapiuose)''",
        "thumbsize": "Sumažintų paveikslėlių dydis:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|puslapis|puslapiai|puslapių}}",
-       "file-info": "failo dydis: $1, MIME tipas: $2",
+       "file-info": "rinkmenos dydis: $1, MIME tipas: $2",
        "file-info-size": "$1 × $2 taškų, failo dydis: $3, MIME tipas: $4",
-       "file-info-size-pages": "$1 × $2 taškų, failo dydis: $3, MIME tipas: $4, $5 {{PLURAL:$5|page|pages}}",
+       "file-info-size-pages": "$1 × $2 taškų, rinkmenos dydis: $3, MIME tipas: $4, $5 {{PLURAL:$5|puslapis|puslapiai|puslapių}}",
        "file-nohires": "Geresnė raiška negalima.",
        "svg-long-desc": "SVG failas, formaliai $1 × $2 taškų, failo dydis: $3",
        "svg-long-desc-animated": "Animuotas SVG failas, formaliai $1 × $2 pikselių, failo dydis: $3",
        "svg-long-error": "Neleistinas SVG failas: $1",
-       "show-big-image": "Originalus failas",
-       "show-big-image-preview": "Sumažintos iliustracijos dydis: $1 .",
+       "show-big-image": "Pradinė rinkmena",
+       "show-big-image-preview": "Šios peržiūros dydis: $1 .",
        "show-big-image-other": "{{PLURAL:$2|Kita rezoliucija|Kitos $2 rezoliucijos|Kitų $2 rezoliucijų}}: $1 .",
        "show-big-image-size": "$1 × $2 taškų",
        "file-info-gif-looped": "ciklinis",
        "exif-pngfilecomment": "JPEG failo komentaras",
        "exif-disclaimer": "Atsakomybės apribojimas",
        "exif-contentwarning": "Turinio įspėjimas",
-       "exif-giffilecomment": "GIF failo komentaras",
+       "exif-giffilecomment": "GIF rinkmenos paaiškinimas",
        "exif-intellectualgenre": "Elemento tipas",
        "exif-subjectnewscode": "Objektas kodas",
        "exif-scenecode": "IPTC scenos kodas",
        "watchlistedit-raw-done": "Jūsų stebimųjų sąrašas buvo atnaujintas.",
        "watchlistedit-raw-added": "$1 {{PLURAL:$1|puslapis buvo pridėtas|puslapiai buvo pridėti|puslapių buvo pridėta}}:",
        "watchlistedit-raw-removed": "$1 {{PLURAL:$1|puslapis buvo pašalintas|puslapiai buvo pašalinti|puslapių buvo pašalinta}}:",
+       "watchlisttools-clear": "Išvalyti stebimųjų sąrašą",
        "watchlisttools-view": "Rodyti susijusius keitimus",
        "watchlisttools-edit": "Rodyti ir redaguoti stebimųjų sąrašą",
        "watchlisttools-raw": "Redaguoti grynąjį sąrašą",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|pakeista}} narystė grupėje $3",
        "logentry-rights-autopromote": "$1 buvo automatiškai {{GENDER:$2|pervestas}} iš $4 į $5",
        "rightsnone": "(jokių)",
-       "revdelete-summary": "keitimo komentaras",
+       "revdelete-summary": "keitimo paaiškinimas",
        "feedback-bugornote": "Jei jūs esate pasirengę aprašyti techninę problemą išsamiau, [$1 praneškite apie programinę klaidą].\nKitu atveju, galite naudotis žemiau esančia paprastesne forma. Jūsų komentaras bus įtrauktas į puslapį „[$3 $2]“, kartu su jūsų naudotojo vardu ir jūsų naudojama naršykle.",
        "feedback-subject": "Tema:",
        "feedback-message": "Pranešimas:",
index d955332..923a446 100644 (file)
@@ -18,7 +18,8 @@
                        "Umeshberma",
                        "Vinitutpal",
                        "아라",
-                       "बिप्लब आनन्द"
+                       "बिप्लब आनन्द",
+                       "सरोज कुमार ढकाल"
                ]
        },
        "tog-underline": "लिंककेँ रेखांकित करू:",
        "otherlanguages": "दोसर भाषामे",
        "redirectedfrom": "(एतयसँ बहटारल $1)",
        "redirectpagesub": "पन्नाकेँ पठाउ",
+       "redirectto": "मे पुनर्निर्देश:",
        "lastmodifiedat": "ई पन्ना अंतिम बेर संवर्धित भेल $1, केँ  $2 बजे।",
        "viewcount": "ई पन्ना देखल गेल {{PLURAL:$1|एक बेर|$1 एतेक बेर}}",
        "protectedpage": "संरक्षित पन्ना",
        "mergehistory-same-destination": "स्रोत आ लक्ष्य पन्ना सभ एक्के नै भऽ सकैए",
        "mergehistory-reason": "कारण:",
        "mergelog": "मिज्झरबला वृत्तलेख",
-       "pagemerge-logentry": "मिज्झर केलौं [[$1]]केँ [[$2]] मे (संशोधन $3 धरि)",
        "revertmerge": "नै मिज्झर",
        "mergelogpagetext": "नीचाँ एक पन्ना इतिहासक दोसरमे अद्यतन मिश्रणक सूची अछि।",
        "history-title": "\"$1\" क संशोधन इतिहास",
        "unusedtemplateswlh": "दोसर लागि सभ",
        "randompage": "अव्यवस्थित पृष्ठ",
        "randompage-nopages": "ऐमे दोसर पन्ना नै अछि {{PLURAL:$2|namespace|namespaces}}: $1 ।",
+       "randomincategory-category": "श्रेणी:",
        "randomredirect": "मिज्झर बदलेनबला लागि",
        "randomredirect-nopages": "नामस्थान \"$1\" मे कोनो बदलेनबला लागि नै अछि।",
        "statistics": "सांख्यिकी",
        "statistics-header-pages": "पन्नाक सांख्यिकी",
        "statistics-header-edits": "सांख्यिकीक सम्पादन करू",
-       "statistics-header-views": "सांख्यिकी देखू",
        "statistics-header-users": "प्रयोक्ता सांख्यिकी",
        "statistics-header-hooks": "दोसर सांख्यिकी",
        "statistics-articles": "अनुक्रम पन्ना सभ",
        "statistics-files": "उपारोपित संचिका सभ",
        "statistics-edits": "{{अन्तर्जाल}} अएबासँ लऽ कऽ भेल पन्ना सम्पादन सभ।",
        "statistics-edits-average": "प्रति पन्ना औसत सम्पादन",
-       "statistics-views-total": "दृश्य आइ धरि",
-       "statistics-views-total-desc": "अस्तित्वहीन पन्ना आ विशेष पन्नाक दृश्य सम्मिलित नै अछि",
-       "statistics-views-peredit": "प्रति सम्पादन देखल गेल",
        "statistics-users": "[[Special:ListUsers|users]] छथि",
        "statistics-users-active": "सक्रिय प्रयोक्ता",
        "statistics-users-active-desc": "प्रयोक्ता जे अन्तिम {{PLURAL:$1|दिन|$1 दिन}} मे कोनो काज केने छथि",
-       "statistics-mostpopular": "सभसँ बेसी देखल गेल पन्ना",
        "doubleredirects": "द्वितीयक लागिबला बदलेन",
        "doubleredirectstext": "ई पन्ना ओइ पन्ना सभक संकलन छी जे बदलेन करैए दोसर बदलेनबला पन्नासँ।\nप्रत्येक पाँती पहिल आ दोसर बदलेनक लागि रखने अछि आ संगे दोसर बदलेनक लक्ष्य सेहो, जे वास्तवमे \"वास्तव\" लक्ष्य पन्ना अछि, जकरापर पहिल बदलेनकेँ जेबाक चाही। \n <del>Crossed out</del> प्रविष्टिक हल भेटल अछि।",
        "double-redirect-fixed-move": "[[$1]] घसकाएल गेल।\nई आब [[$2]] दिस जा रहल अछि।",
        "uncategorizedtemplates": "अवर्गीकृत नमूना सभ",
        "unusedcategories": "नै प्रयोग कएल संवर्ग सभ",
        "unusedimages": "बिना प्रयोगक संचिका सभ",
-       "popularpages": "लोकप्रिय पन्ना सभ",
        "wantedcategories": "आवश्यक संवर्ग सभ",
        "wantedpages": "आवश्यक पन्ना सभ",
        "wantedpages-badtitle": "परिणाम सूचीमे अमान्य शीर्षक:$1",
        "pager-older-n": "{{PLURAL:$1|साबिक 1|साबिक $1}}",
        "suppress": "नजरिपर नै आएल",
        "querypage-disabled": "ई विशिष्ट पन्ना कार्य दक्षता लेल अशक्त कएल गेल अछि।",
+       "apihelp": "API मद्दत",
        "booksources": "किताबक सन्दर्भ सभ",
        "booksources-search-legend": "किताबक सन्दर्भक लेल ताकू",
        "booksources-isbn": "आइ.एस.बी.एन.:",
+       "booksources-search": "ताकू",
        "booksources-text": "नीचाँ दोसर जालस्थलसँ लागि सभक सूची अछि जे नव आ प्रयोग कएल किताब बेचैए, आ ई पोथी सभक विषयमे ओहो सूचना दऽ सकैए जे अहाँ ताकि रहल छी:",
        "booksources-invalid-isbn": "देल आइ.एस.बी.एन. संख्या मान्य नै बुझाइत अछि; कृपा कऽ मूल स्रोतसँ द्वितीयक बनेबा काल भेल भ्रमकेँ जाँचू।",
        "specialloguserlabel": "कर्ता:",
        "alllogstext": "{{अन्तर्जाल}} क सभटा उपलब्ध वृत्तलेखक संयुक्त दृश्य।\nअहाँ दृश्यकेँ संकीर्ण करबा लेल वृत्तलेखक एकटा प्रकार चुनि सकै छी, प्रयोक्तानाम (ब्रह्मक्षर-लघ्वक्षर विचारणीय), वा प्रभावित पन्ना (एतौ ब्रह्मक्षर-लघ्वक्षर विचारणीय)।",
        "logempty": "वृत्तलेखमे कोनो मेल खाइबला बौस्तु नै।",
        "log-title-wildcard": "खोज शीर्षक सभ ऐ पाठसँ प्रारम्भ",
+       "showhideselectedlogentries": "देखाउ/ नुकाउ चयनित लग सभ",
        "allpages": "सभ पन्ना",
        "nextpage": "अगिला पन्ना ($1)",
        "prevpage": "पहिलुका पन्ना ($1)",
        "allpagesprefix": "उपसर्गक संग दृश्य पन्ना सभ:",
        "allpagesbadtitle": "देल पन्नाक शीर्षक गलत, गलत सम्बन्धित अन्तर-भाषा अन्तर विकी शीर्षक छी। ई एक वा बेशी कलाकार युक्त भऽ सकैए जे शीर्षकमे प्रयुक्त नै कएल जा सकैए।",
        "allpages-bad-ns": "{{जालस्थल}} मे \"$1\" नामगाम नै अछि।",
+       "allpages-hide-redirects": "पुनर्निर्देश नुकाऊँ",
        "cachedspecial-refresh-now": "लब्का देखु",
        "categories": "संवर्ग सभ",
        "categoriespagetext": "ई {{PLURAL:$1|संवर्गमे अछि|संवर्ग सभमे अछि}} पन्ना वा मीडिया।\n[[Special:UnusedCategories|Unused categories]] एतए देखाएल नै अछि।\nईहो देखू [[Special:WantedCategories|wanted categories]]।",
        "listgrouprights-namespaceprotection-namespace": "नामस्थान :",
        "listgrouprights-namespaceprotection-restrictedto": "सांच(सभ) के संपादन करए लेल",
        "trackingcategories": "श्रेणीके ट्रयाक करु",
+       "trackingcategories-msg": "श्रेणीके ट्रयाक करु",
+       "trackingcategories-name": "सन्देश नाम",
        "mailnologin": "कोनो पठेबाक पता नै",
        "mailnologintext": "अहाँ [[Special:UserLogin|सम्प्रवेशित]] हेबाक चाही आ अहाँक विकल्प [[Special:Preferences|preferences]]  मे एकटा मान्य ई-पत्र संकेत दोसर प्रयोक्ताकेँ पठेबा लेल हेबाक चाही।",
        "emailuser": "ऐ प्रयोक्ताकेँ ई-पत्र पठाउ",
        "file-exists-sharedrepo": "साझी बखारीमे ऐ नामसँ पहिनहियेसँ एकटा संचिका अछि।\nकृपा कऽ दोसर नाम चुनू।",
        "export": "पन्ना सभकेँ पठाउ",
        "exporttext": "अहाँ पाठ आ कोनो पन्ना/ वा पन्ना-सभक सम्पादन इतिहासकेँ दोसर ठाम कोनो एक्स.एम.एल. संचिकामे लपेट कऽ पठा सकै छी।\nई कोनो दोसर विकीमे मीडियाविकीक प्रयोग कऽ [[Special:Import|import page]] द्वारा आयात कएल जा सकैए।\n\nपन्ना सभक निर्यात लेल, नीचाँक पाठ बक्शामे शीर्षक सभ भरू, प्रति पाँती एक शीर्षक, आ चुनू जे अहाँ अखुनका आ पहिलुका सभटा संशोधन राखऽ चाहै छी, पन्ना इतिहास पाँतीक संग, आकि अखुनका संशोधन पछिला सम्पादनक सूचनाक संग।\n\nबादबला स्थितिमे अहाँ एकटा लागिक प्रयोग कऽ सकै छी, जेना \"[[{{MediaWiki:Mainpage}}]]\" पन्ना लेल [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]।",
+       "exportall": "पन्ना सभकेँ निर्यात करू",
        "exportcuronly": "अखुनका संशोधन मात्र लिअ, पूरा इतिहास नै।",
        "exportnohistory": "----\n'''सूचना:''' परिणाम कुशलताकेँ देखैत पन्नाक सम्पूर्ण इतिहासक निर्यात अशक्त कएल गेल अछि।",
        "exportlistauthors": "सभ पन्नाक सम्पूर्ण योगदानकर्ताक सूची जोड़ू",
        "allmessages-prefix": "उपसर्गक आधारपर छाँटू:",
        "allmessages-language": "भाषा:",
        "allmessages-filter-submit": "चलू",
+       "allmessages-filter-translate": "अनुवाद कर",
        "thumbnail-more": "पैघ",
        "filemissing": "संचिका हेराएल",
        "thumbnail_error": "लघुचित्र निर्माण कालमे भ्रम:$1",
        "import": "पन्ना सभकेँ आनू",
        "importinterwiki": "ट्रान्सविकी आनू",
        "import-interwiki-text": "एकटा विकी आ पन्ना शीर्षक अनबाले चुनू।\nसंशोधन तिथि आ सम्पादकक नाम सुरक्षित रहत।\nसभटा ट्रान्सविकी आयात क्रिया सम्प्रवेशित अछि [[Special:Log/import|import log]] पर।",
+       "import-interwiki-sourcewiki": "मूल विकि:",
+       "import-interwiki-sourcepage": "मूल पन्ना:",
        "import-interwiki-history": "अए पन्नाक सभटा इतिहास संशोधनक द्वितीयक बनाउ",
        "import-interwiki-templates": "सभटा नमूना शामिल करू",
        "import-interwiki-submit": "आनू",
        "tooltip-diff": "देखाऊ जे परिवर्त्तन अहाँ एहि लेखमे कएलहुँ।",
        "tooltip-compareselectedversions": "ऐ पन्नाक दू टा चयन कएल संशोधनक बीचक अन्तर देखू",
        "tooltip-watch": "ऐ पन्नाकेँ अपन साकांक्ष सूचीमे जोड़ू",
+       "tooltip-watchlistedit-normal-submit": "शीर्षक सभकेँ हटाउ",
+       "tooltip-watchlistedit-raw-submit": "साकांक्षसूची अद्यतन करू",
        "tooltip-recreate": "पन्ना फेरसँ बनाउ तखनो जँ ई मेटा देल गेल हुअए",
        "tooltip-upload": "उपारोपण करू",
        "tooltip-rollback": "\"प्रत्यावर्तन\" ऐ पन्नाक अन्तिम योगदा करैबलाक सम्पादन (सम्पादन सभ) केँ एक क्लिकमे पुरान जगहपर लऽ जाउ",
        "spam_reverting": "अन्तिम संशोधन लग घुरल जइमे $1 लागि नै अछि",
        "spam_blanking": "सभटा संशोधन $1 लागिसँ युक्त अि, खतम कऽ रहल छी",
        "pageinfo-title": "\"$1\"पृष्ठक लेल नब गप",
+       "pageinfo-header-basic": "न्यूनतम जानकारी",
        "pageinfo-header-edits": "संपादन",
        "pageinfo-header-restrictions": "पन्ना संरक्षण",
-       "pageinfo-views": "देखहि बला के संख्या",
+       "pageinfo-header-properties": "पन्ना जानकारी",
+       "pageinfo-display-title": "प्रदर्शन शिर्षक",
+       "pageinfo-robot-index": "मान्य",
+       "pageinfo-robot-noindex": "अमान्य",
        "pageinfo-watchers": "जानकारक संख्या",
+       "pageinfo-firstuser": "पन्ना सर्जक",
+       "pageinfo-lastuser": "अन्तिम सम्पादक",
        "pageinfo-edits": "सम्पादनक संख्या",
        "pageinfo-authors": "भिन्न लेखक संख्या",
+       "pageinfo-redirectsto": "मे पुनर्निर्देश:",
+       "pageinfo-redirectsto-info": "जानकारी",
+       "pageinfo-contentpage-yes": "हँ",
+       "pageinfo-protect-cascading-yes": "हँ",
        "markaspatrolleddiff": "देखि लेल गेल, एहन चिन्ह लगाऊ",
        "markaspatrolledtext": "देखि लेल गेल, एहन चिन्ह लगाऊ",
        "markedaspatrolled": "देखि लेल गेल, एहन चिन्ह लगाऊ",
index d1e368c..73c99d6 100644 (file)
        "view": "Преглед",
        "view-foreign": "Погл. на $1",
        "edit": "Уреди",
-       "edit-local": "УÑ\80еди Ð»Ð¾ÐºÐ°Ð»ен опис",
+       "edit-local": "УÑ\80еди Ð¼ÐµÑ\81ен опис",
        "create": "Создај",
-       "create-local": "Ð\94одаÑ\98 Ð»Ð¾ÐºÐ°Ð»ен опис",
+       "create-local": "Ð\94одаÑ\98 Ð¼ÐµÑ\81ен опис",
        "editthispage": "Уреди ја страницава",
        "create-this-page": "Создај ја страницава",
        "delete": "Избриши",
        "viewsourcetext": "Можете да го погледнете и копирате кодот на оваа страница:",
        "viewyourtext": "Можете да го погледнете и копирате кодот на '''вашите уредувања''' на оваа страница:",
        "protectedinterface": "Оваа страница содржи текст од посредникот на програмот на ова вики и е превентивно заштитена поради можна злоупотреба.\nЗа да додавате или менувате преводи на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?uselang=mk translatewiki.net] - проектот за локализација на МедијаВики.",
-       "editinginterface": "'''Предупредување:''' Уредувате страница која е дел од корисничкиот посредник на програмот МедијаВики.\nПромените на оваа страница ќе предизвикаат промени во корисничкиот посредник кај другите корисници на ова вики.\nЗа да додадете или измените превод на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?setlang=mk translatewiki.net] - проектот за локализација на МедијаВики.",
+       "editinginterface": "<strong>Предупредување:</strong> Уредувате страница која е дел од корисничкиот посредник на програмот МедијаВики.\nПромените на оваа страница ќе предизвикаат промени во корисничкиот посредник кај другите корисници на ова вики.",
+       "translateinterface": "За да додадете или измените превод на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?setlang=mk translatewiki.net] - проектот за локализација на МедијаВики.",
        "cascadeprotected": "Оваа страница е заштитена од уредувања бидејќи е вклучена во {{PLURAL:$1|следнава страница, којашто е заштитена|следниве страници, коишто се заштитени}} со можноста „каскадна заштита“:\n$2",
        "namespaceprotected": "Немате дозвола за уредување страници во именскиот простор '''$1'''.",
        "customcssprotected": "Немате дозвола да ја менувате оваа страница со CSS бидејќи содржи туѓи лични нагодувања.",
        "content-model-text": "прост текст",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Страници што користат дуплирани аргументи во повикувања на шаблони",
+       "duplicate-args-category-desc": "Страницава содржи повикувања на шаблони кои се дупликати на аргументи, како што се <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> или <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Предупредување: Оваа страница користи премногу повикувања на parser функции.\n\nТреба да има помалку од $2 {{PLURAL:$2|повикување|повикувања}} а сега има {{PLURAL:$1|$1 повикување|$1 повикувања}}.",
        "expensive-parserfunction-category": "Страници со премногу повикувања на парсер функции",
        "post-expand-template-inclusion-warning": "'''Предупредување:''' Големината на вклучените шаблони е преголема.\nНекои шаблони нема да бидат вклучени.",
        "mergehistory-same-destination": "Изворната и целната страница треба да се различни",
        "mergehistory-reason": "Причина:",
        "mergelog": "Дневник на спојувања на страници",
-       "pagemerge-logentry": "споено [[$1]] во [[$2]] (преработки до $3)",
        "revertmerge": "Одвојување",
        "mergelogpagetext": "Следи список на скорешни спојувања на истории на страници.",
        "history-title": "$1: Историја на измените",
        "prefs-help-watchlist-token2": "Ова е тајна шифра за вашиот канализиран список на набљудувања.\nСекој што ја знае ќе може да ја чита, па затоа ви препорачуваме да не ја кажувате никому.\n[[Special:ResetTokens|Стиснете тука ако треба да зададете нова]].",
        "savedprefs": "Вашите нагодувања се зачувани.",
        "timezonelegend": "Часовен појас:",
-       "localtime": "Ð\9bокално време:",
+       "localtime": "Ð\9cеÑ\81но време:",
        "timezoneuseserverdefault": "Од викито ($1)",
        "timezoneuseoffset": "Друго (посочете отстапување)",
        "servertime": "Време на опслужувачот:",
        "gender-female": "Таа уредува викистраници",
        "prefs-help-gender": "Оваа поставка е незадолжителна.\nПрограмот го користи посочениот род за да ве опишува согласно вашиот пол.\nИнформацијата ќе биде јавна.",
        "email": "Е-пошта",
-       "prefs-help-realname": "'''Вистинското име''' е незадолжително.\nДоколку изберете да го внесете, тоа може да се искористи за оддавање на заслуги за Вашата работа.",
+       "prefs-help-realname": "Вистинското име е незадолжително.\nДоколку изберете да го внесете, тоа може да се искористи за оддавање на заслуги за Вашата работа.",
        "prefs-help-email": "Е-поштата е незадолжителна, но ќе ви треба за добивање на нова лозинка ако си ја заборавите постоечката.",
        "prefs-help-email-others": "Можете да изберете другите да ве контактираат преку вашата корисничка страница без да го откриете вашиот идентитет.",
        "prefs-help-email-required": "Е-поштенска адреса е задолжително да се наведе.",
        "right-upload": "Подигни податотеки",
        "right-reupload": "Заменување на постоечки податотеки",
        "right-reupload-own": "Преснимување на постоечка податотека подигната од вас",
-       "right-reupload-shared": "Ð\9fÑ\80езапиÑ\81 Ð½Ð° ÐµÐ´Ð½Ð¸ Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ð²Ñ\80з Ð´Ñ\80Ñ\83ги Ð½Ð° Ð·Ð°ÐµÐ´Ð½Ð¸Ñ\87коÑ\82о Ð¼Ñ\83лÑ\82имедиÑ\98ално Ñ\81кладиÑ\88Ñ\82е Ð»Ð¾ÐºÐ°Ð»но",
+       "right-reupload-shared": "Ð\9fÑ\80езапиÑ\81 Ð½Ð° ÐµÐ´Ð½Ð¸ Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ð²Ñ\80з Ð´Ñ\80Ñ\83ги Ð½Ð° Ð·Ð°ÐµÐ´Ð½Ð¸Ñ\87коÑ\82о Ð¼Ñ\83лÑ\82имедиÑ\98ално Ñ\81кладиÑ\88Ñ\82е Ð¼ÐµÑ\81но",
        "right-upload_by_url": "Подигање на податотека од URL-адреса",
        "right-purge": "Бришење од опслужувачки меѓусклад на страницата без барање потврда за тоа",
        "right-autoconfirmed": "Без ограничувања на стапки за IP-адреса",
        "unwatchedpages": "Ненабљудувани страници",
        "listredirects": "Список на пренасочувања",
        "listduplicatedfiles": "Список на податотеки со дупликати",
-       "listduplicatedfiles-summary": "Ð\9eва Ðµ Ñ\81пиÑ\81ок Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ñ\87иÑ\98а Ð½Ð°Ñ\98нова Ð²ÐµÑ\80зиÑ\98а Ðµ Ð´Ñ\83пликаÑ\82 Ð½Ð° Ð½Ð°Ñ\98нова Ð²ÐµÑ\80зиÑ\98а Ð½Ð° Ð½ÐµÐºÐ¾Ñ\98а Ð´Ñ\80Ñ\83га Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека. Ð¡Ðµ Ð·ÐµÐ¼Ð°Ð°Ñ\82 Ð¿Ñ\80едвид Ñ\81амо Ð»Ð¾ÐºÐ°Ð»ни податотеки.",
+       "listduplicatedfiles-summary": "Ð\9eва Ðµ Ñ\81пиÑ\81ок Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ñ\87иÑ\98а Ð½Ð°Ñ\98нова Ð²ÐµÑ\80зиÑ\98а Ðµ Ð´Ñ\83пликаÑ\82 Ð½Ð° Ð½Ð°Ñ\98нова Ð²ÐµÑ\80зиÑ\98а Ð½Ð° Ð½ÐµÐºÐ¾Ñ\98а Ð´Ñ\80Ñ\83га Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека. Ð¡Ðµ Ð·ÐµÐ¼Ð°Ð°Ñ\82 Ð¿Ñ\80едвид Ñ\81амо Ð¼ÐµÑ\81ни податотеки.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] има [[$3|{{PLURAL:$2|дупликат|$2 дупликати}}]].",
        "unusedtemplates": "Неискористени шаблони",
        "unusedtemplatestext": "Оваа страница ги прикажува сите страници во именскиот простор {{ns:template}} кои не се вклучени во друга страница.\nНе заборавајте да ги проверите другите врски во шаблоните пред да ги избришете.",
        "statistics": "Статистики",
        "statistics-header-pages": "Статистики за страници",
        "statistics-header-edits": "Статистики на уредувања",
-       "statistics-header-views": "Статистики на посети",
        "statistics-header-users": "Статистики за корисници",
        "statistics-header-hooks": "Други статистики",
        "statistics-articles": "Статии",
        "statistics-files": "Подигнати податотеки",
        "statistics-edits": "Број на уредувања од започнувањето на {{SITENAME}}",
        "statistics-edits-average": "Просечен број на уредувања по страница",
-       "statistics-views-total": "Вкупно посети",
-       "statistics-views-total-desc": "Не се вклучени прегледувања на непостоечки и службени страници",
-       "statistics-views-peredit": "Посети по уредување",
        "statistics-users": "Регистрирани [[Special:ListUsers|корисници]]",
        "statistics-users-active": "Активни корисници",
        "statistics-users-active-desc": "Корисници кои имаат извршено некое дејство {{PLURAL:$1|претходниот ден|во претходните $1 дена}}",
-       "statistics-mostpopular": "Најпосетувани страници",
        "pageswithprop": "Страници со својство",
        "pageswithprop-legend": "Страници со својство",
        "pageswithprop-text": "На страницава се наведени страници што користат дадено својство.",
        "uncategorizedtemplates": "Некатегоризирани преуредувања",
        "unusedcategories": "Неискористени категории",
        "unusedimages": "Неискористени слики",
-       "popularpages": "Популарни страници",
        "wantedcategories": "Потребни категории",
        "wantedpages": "Потребни страници",
        "wantedpages-badtitle": "Невалиден наслов во резултатите: $1",
        "blocklist-params": "Параметри на блокот",
        "blocklist-reason": "Причина",
        "ipblocklist-submit": "Пребарај",
-       "ipblocklist-localblock": "Ð\9bокален блок",
+       "ipblocklist-localblock": "Ð\9cеÑ\81ен блок",
        "ipblocklist-otherblocks": "{{PLURAL:$1|друг блок|други блокови}}",
        "infiniteblock": "бесконечно",
        "expiringblock": "истекува на $1 во $2 ч.",
        "tooltip-feed-atom": "Atom емитување за оваа страница",
        "tooltip-t-contributions": "Список на придонеси на овој корисник",
        "tooltip-t-emailuser": "Испрати е-пошта на овој корисник",
+       "tooltip-t-info": "Повеќе информаици за страницава",
        "tooltip-t-upload": "Подигни податотеки",
        "tooltip-t-specialpages": "Список на сите службени страници",
        "tooltip-t-print": "Верзија на страницава наменета за печатење",
        "pageinfo-robot-policy": "Индексирање со роботи",
        "pageinfo-robot-index": "Дозволено",
        "pageinfo-robot-noindex": "Недозволено",
-       "pageinfo-views": "Број на посети",
        "pageinfo-watchers": "Број на набљудувачи",
        "pageinfo-few-watchers": "Помалку од $1 {{PLURAL:$1|набљудувач|набљудувачи}}",
        "pageinfo-redirects-name": "Пренасочувања кон страницата",
        "unknown_extension_tag": "Непозната ознака на додатокот „$1“",
        "duplicate-defaultsort": "Предупредување: Основниот клуч за подредување „$2“ го поништува претходниот основен клуч за подредување „$1“.",
        "duplicate-displaytitle": "<strong>Предупредување:</strong> Приказниот наслов „$2“ го заменува претходнито приказен наслов „$1“.",
+       "invalid-indicator-name": "<strong>Грешка:</strong> Атрибутот <code>name</code> што го покажува статусот на страницата не може да биде празен.",
        "version": "Верзија",
        "version-extensions": "Воспоставени додатоци",
        "version-skins": "Воспоставени рува",
        "revdelete-uname-unhid": "корисничкото име е скриено",
        "revdelete-restricted": "применети ограничувања на администратори",
        "revdelete-unrestricted": "отстранети ограничувања за систем оператори",
+       "logentry-merge-merge": "$1 {{GENDER:$2|ја припои}} $3 кон $4 (преработки сè до $5)",
        "logentry-move-move": "$1 {{GENDER:$2|ја премести}} страницата $3 на $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|ја премести}} страницата $3 на $4 без да остави пренасочување",
        "logentry-move-move_redir": "$1 {{GENDER:$2|ја премести}} страницата $3 на $4 презапишувајќи врз пренасочување",
index 4c7f52f..0ce2f94 100644 (file)
        "content-model-text": "വെറും എഴുത്ത്",
        "content-model-javascript": "ജാവാസ്ക്രിപ്റ്റ്",
        "content-model-css": "സി.എസ്.എസ്.",
+       "duplicate-args-category": "ഫലകങ്ങൾ വിളിക്കുമ്പോൾ ചരങ്ങൾ ആവർത്തിച്ചുപയോഗിക്കുന്ന താളുകൾ",
+       "duplicate-args-category-desc": "താളിൽ ഫലകങ്ങൾ വിളിക്കുമ്പോൾ ചരങ്ങൾ അതായത് <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> അല്ലെങ്കിൽ <code><nowiki>{{foo|bar|1=baz}}</nowiki></code> എന്ന രീതിയിൽ.",
        "expensive-parserfunction-warning": "'''മുന്നറിയിപ്പ്:''' ഈ താളിൽ വളരെക്കൂടുതൽ പാഴ്സർ ഫങ്ഷനുകൾ വിളിച്ചിരിക്കുന്നു.\n\n{{PLURAL:$2|ഒരു വിളി|$2 വിളികൾ}} മാത്രമുണ്ടാകേണ്ടയിടത്ത്, ഇപ്പോൾ {{PLURAL:$1|ഒരു വിളി|$1 വിളികൾ}} ഉണ്ട്.",
        "expensive-parserfunction-category": "വളരെയധികം ചിലവേറിയ പാഴ്സർ ഫങ്ഷൻ വിളികൾ ഉൾക്കൊള്ളുന്ന താളുകൾ",
        "post-expand-template-inclusion-warning": "'''അറിയിപ്പ്:''' ഫലകം ഉൾപ്പെടുത്താവുന്ന വലിപ്പത്തിലും വളരെ കൂടുതൽ ആയിരിക്കുന്നു.\nചില ഫലകങ്ങൾ ഉൾപ്പെടുത്തുകയില്ല.",
        "mergehistory-same-destination": "സ്രോതസ്സ് - ലക്ഷ്യ താളുകൾക്ക് ഒരേ പേര്‌ ഉണ്ടാകാൻ പാടില്ല",
        "mergehistory-reason": "കാരണം:",
        "mergelog": "താളുകൾ സം‌യോജിപ്പിച്ചതിന്റെ രേഖകൾ",
-       "pagemerge-logentry": "[[$1]] എന്ന താൾ [[$2]] എന്ന താളിലേയ്ക്ക് സംയോജിപ്പിച്ച് കൂട്ടിച്ചേർത്തു ($3 വരെയുള്ള പതിപ്പുകൾ)",
        "revertmerge": "വിയോജിപ്പിക്കുക",
        "mergelogpagetext": "രണ്ടു താളുകളുടെ നാൾവഴികൾ തമ്മിൽ സം‌യോജിപ്പിച്ചതിന്റെ പ്രവർത്തനരേഖകളുടെ ഏറ്റവും പുതിയ പട്ടിക താഴെ കാണാം.",
        "history-title": "\"$1\" എന്ന താളിന്റെ നാൾവഴി",
        "gender-female": "സ്ത്രീ",
        "prefs-help-gender": "ഈ സജ്ജീകരണം നിർബന്ധമല്ല.\nസോഫ്റ്റ്‌വെയർ ഉപയോഗിച്ച് സ്ത്രീകളേയും പുരുഷന്മാരേയും ശരിയായി സംബോധന ചെയ്യാൻ ഉപയോഗിക്കുന്നു.\nഈ വിവരം പരസ്യമായി ലഭ്യമായിരിക്കുന്നതാണ്‌.",
        "email": "ഇമെയിൽ",
-       "prefs-help-realname": "താങ്കളുടെ യഥാർത്ഥ പേര്‌ നൽകണമെന്നു നിർബന്ധമില്ല. എങ്കിലും അങ്ങനെ ചെയ്താൽ താങ്കളുടെ സംഭാവനകൾ ആ പേരിൽ അംഗീകരിക്കപ്പെടും.",
+       "prefs-help-realname": "താങ്കളുടെ യഥാർത്ഥ പേര്‌ നൽകണമെന്നു നിർബന്ധമില്ല.\nഎന്നാൽ അങ്ങനെ ചെയ്താൽ താങ്കളുടെ സംഭാവനകൾ ആ പേരിൽ അംഗീകരിക്കപ്പെടുന്നതാണ്.",
        "prefs-help-email": "ഇമെയിൽ വിലാസം നൽകണമെന്ന് നിർബന്ധമില്ല, പക്ഷേ താങ്കൾ രഹസ്യവാക്ക് മറന്നാൽ പുതിയത് അയച്ചു തരാൻ വിലാസം ആവശ്യമാണ്.",
        "prefs-help-email-others": "താങ്കൾക്കായുള്ള താളിൽ നിന്നോ, താങ്കൾക്കുള്ള സന്ദേശങ്ങളുടെ താളിൽ നിന്നോ മറ്റുപയോക്താക്കൾക്ക് താങ്കളുടെ വ്യക്തിത്വം മനസ്സിലാക്കാതെ തന്നെ താങ്കൾക്ക് സന്ദേശങ്ങളയയ്ക്കാനും ഈ സം‌വിധാനം അവസരം നൽകുന്നു.",
        "prefs-help-email-required": "ഇമെയിൽ വിലാസം ആവശ്യമാണ്‌.",
        "statistics": "സ്ഥിതിവിവരക്കണക്കുകൾ",
        "statistics-header-pages": "താൾ സ്ഥിതിവിവരക്കണക്കുകൾ",
        "statistics-header-edits": "തിരുത്തൽ സ്ഥിതിവിവരക്കണക്കുകൾ",
-       "statistics-header-views": "സന്ദർശനങ്ങളുടെ സ്ഥിതിവിവരക്കണക്കുകൾ",
        "statistics-header-users": "ഉപയോക്താക്കളുടെ സ്ഥിതിവിവരക്കണക്കുകൾ",
        "statistics-header-hooks": "മറ്റു സ്ഥിതിവിവരക്കണക്കുകൾ",
        "statistics-articles": "ലേഖനങ്ങൾ",
        "statistics-files": "അപ്‌ലോഡ് ചെയ്തിട്ടുള്ള പ്രമാണങ്ങൾ",
        "statistics-edits": "{{SITENAME}} സം‌രംഭത്തിന്റെ തുടക്കം മുതലുള്ള തിരുത്തുകൾ",
        "statistics-edits-average": "ഒരു താളിലെ ശരാശരി തിരുത്തുകൾ",
-       "statistics-views-total": "ആകെ സന്ദർശനങ്ങൾ",
-       "statistics-views-total-desc": "നിലവില്ലാത്ത താളുകളിലും പ്രത്യേക താളുകളിലും ഉള്ള എടുത്തുനോക്കലുകൾ ഉൾപ്പെടുത്തിയിട്ടില്ല",
-       "statistics-views-peredit": "ഓരോ തിരുത്തലിലും ഉള്ള എടുത്തുനോട്ടങ്ങൾ",
        "statistics-users": "അംഗത്വമെടുത്തിട്ടുള്ള [[Special:ListUsers|ഉപയോക്താക്കൾ]]",
        "statistics-users-active": "സജീവ ഉപയോക്താക്കൾ",
        "statistics-users-active-desc": "കഴിഞ്ഞ {{PLURAL:$1|ദിവസം|$1 ദിവസങ്ങൾക്കുള്ളിൽ}} പ്രവർത്തിച്ചിട്ടുള്ള ഉപയോക്താക്കൾ",
-       "statistics-mostpopular": "ഏറ്റവുമധികം സന്ദർശിക്കപ്പെട്ട താളുകൾ",
        "pageswithprop": "താളിന്റെ സവിശേഷതകളുള്ള താളുകൾ",
        "pageswithprop-legend": "ഒരു താൾ സവിശേഷതയുള്ള താളുകൾ",
        "pageswithprop-prop": "ഗുണം:",
        "uncategorizedtemplates": "വർഗ്ഗീകരിക്കാത്ത ഫലകങ്ങൾ",
        "unusedcategories": "ഉപയോഗത്തിലില്ലാത്ത വർഗ്ഗങ്ങൾ",
        "unusedimages": "ഉപയോഗിക്കപ്പെടാത്ത പ്രമാണങ്ങൾ",
-       "popularpages": "ജനപ്രിയ താളുകൾ",
        "wantedcategories": "അവശ്യ വർഗ്ഗങ്ങൾ",
        "wantedpages": "അവശ്യ താളുകൾ",
        "wantedpages-badtitle": "ഫലങ്ങളുടെ ഗണത്തിൽ അസാധുവായ തലക്കെട്ട്: $1",
        "tooltip-feed-atom": "ഈ താളിന്റെ ആറ്റം ഫീഡ്",
        "tooltip-t-contributions": "ഉപയോക്താവിന്റെ സംഭാവനകളുടെ പട്ടിക കാണുക",
        "tooltip-t-emailuser": "ഈ ഉപയോക്താവിനു ഇമെയിൽ അയക്കുക",
+       "tooltip-t-info": "ഈ താളിനെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾ",
        "tooltip-t-upload": "പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യുവാൻ",
        "tooltip-t-specialpages": "പ്രത്യേകതാളുകളുടെ പട്ടിക",
        "tooltip-t-print": "ഈ താളിന്റെ അച്ചടി രൂപം",
        "pageinfo-robot-policy": "റോബോട്ടുകളുടെ സൂചികാവത്കരണം",
        "pageinfo-robot-index": "അനുവദിച്ചിരിക്കുന്നു",
        "pageinfo-robot-noindex": "അനുവദിച്ചിട്ടില്ല",
-       "pageinfo-views": "എടുത്തുനോക്കലുകളുടെ എണ്ണം",
        "pageinfo-watchers": "താൾ ശ്രദ്ധിക്കുന്നവരുടെ എണ്ണം",
        "pageinfo-few-watchers": "{{PLURAL:$1|ശ്രദ്ധിക്കുന്നയാളുടെ|ശ്രദ്ധിക്കുന്നവരുടെ}} എണ്ണം $1 എണ്ണത്തിലും കുറവാണ്",
        "pageinfo-redirects-name": "ഈ താളിലേക്കുള്ള തിരിച്ചുവിടലുകളുടെ എണ്ണം",
index cc0a9d5..9f06965 100644 (file)
        "content-model-text": "teks biasa",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Laman yang menggunakan argumen pendua dalam panggilan templat",
+       "duplicate-args-category-desc": "Laman ini mengandungi panggilan templat yang menggunakan pendua argumen seperti <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> atau <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Amaran: Laman ini mengandungi terlalu banyak panggilan fungsi penghurai yang intensif.\n\nHad panggilan ialah $2, sekarang terdapat $1 panggilan.",
        "expensive-parserfunction-category": "Laman yang mengandungi terlalu banyak panggilan fungsi penghurai yang intensif",
        "post-expand-template-inclusion-warning": "Amaran: Saiz penyertaan templat terlalu besar.\nSesetengah templat tidak akan disertakan.",
        "mergehistory-same-destination": "Laman sasaran tidak boleh sama dengan laman sumber",
        "mergehistory-reason": "Sebab:",
        "mergelog": "Log penggabungan",
-       "pagemerge-logentry": "menggabungkan [[$1]] ke dalam [[$2]] (semakan sehingga $3)",
        "revertmerge": "Pisahkan",
        "mergelogpagetext": "Yang berikut ialah senarai terkini bagi penggabungan sejarah sesebuah laman ke dalam laman yang lain.",
        "history-title": "Sejarah semakan bagi \"$1\"",
        "gender-female": "Perempuan",
        "prefs-help-gender": "Pilihan: Digunakan oleh perisian ini untuk merujuk jantina anda dengan betul. Maklumat ini akan didedahkan kepada awam.",
        "email": "E-mel",
-       "prefs-help-realname": "Nama sebenar adalah tidak wajib. Jika dinyatakan, ia akan digunakan untuk mengiktiraf karya anda.",
+       "prefs-help-realname": "Nama sebenar adalah tidak wajib.\n\nJika dinyatakan, ia akan digunakan untuk mengiktiraf karya anda.",
        "prefs-help-email": "Alamat e-mail adalah tidak wajib, tapi diperlukan untuk set semula kata laluan jika anda terlupa kata laluan anda.",
        "prefs-help-email-others": "Anda juga boleh memilih untuk membolehkan pengguna lain menghubungi anda melalui e-mel melalui sebuah pautan pada laman pengguna atau perbincangan anda.\nAlamat e-mel anda tidak didedahkan apabila pengguna lain menghubungi anda.",
        "prefs-help-email-required": "Alamat e-mel adalah wajib.",
        "statistics": "Statistik",
        "statistics-header-pages": "Statistik halaman",
        "statistics-header-edits": "Statistik suntingan",
-       "statistics-header-views": "Statistik pandangan",
        "statistics-header-users": "Statistik pengguna",
        "statistics-header-hooks": "Statistik lain",
        "statistics-articles": "Laman kandungan",
        "statistics-files": "Fail dimuat naik",
        "statistics-edits": "Suntingan laman sejak {{SITENAME}} dibuka",
        "statistics-edits-average": "Purata suntingan bagi setiap laman",
-       "statistics-views-total": "Jumlah pandangan",
-       "statistics-views-total-desc": "Paparan ke laman-laman yang tidak wujud dan laman-laman khas tidak disertakan",
-       "statistics-views-peredit": "Pandangan setiap suntingan",
        "statistics-users": "[[Special:ListUsers|Pengguna]] berdaftar",
        "statistics-users-active": "Pengguna aktif",
        "statistics-users-active-desc": "Pengguna yang aktif sejak {{PLURAL:$1|semalam|$1 hari lalu}}",
-       "statistics-mostpopular": "Laman dilihat terbanyak",
        "pageswithprop": "Laman dengan sifat laman",
        "pageswithprop-legend": "Laman dengan sifat laman",
        "pageswithprop-text": "Halaman ini menyenaraikan halaman-halaman yang menggunakan sifat halaman yang tertentu.",
        "uncategorizedtemplates": "Templat tanpa kategori",
        "unusedcategories": "Kategori tidak digunakan",
        "unusedimages": "Imej tidak digunakan",
-       "popularpages": "Laman popular",
        "wantedcategories": "Kategori dikehendaki",
        "wantedpages": "Laman dikehendaki",
        "wantedpages-badtitle": "Tajuk tidak sah dalam set keputusan: $1",
        "tooltip-pt-mycontris": "Senarai sumbangan anda",
        "tooltip-pt-login": "Walaupun tidak wajib, anda digalakkan supaya log masuk.",
        "tooltip-pt-logout": "Log keluar",
+       "tooltip-pt-createaccount": "Anda digalakkan untuk membuka akaun dan log masuk; namun begitu ianya tidak diwajibkan",
        "tooltip-ca-talk": "Perbincangan mengenai laman kandungan",
        "tooltip-ca-edit": "Anda boleh menyunting laman ini. Sila tekan butang 'pralihat' terlebih dahulu sebelum menyimpan.",
        "tooltip-ca-addsection": "Buka bahagian baru",
        "tooltip-feed-atom": "Suapan Atom bagi laman ini",
        "tooltip-t-contributions": "Lihat senarai sumbangan pengguna ini",
        "tooltip-t-emailuser": "Kirim e-mel kepada pengguna ini",
+       "tooltip-t-info": "Maklumat lanjut mengenai laman ini",
        "tooltip-t-upload": "Muat naik imej atau fail media",
        "tooltip-t-specialpages": "Senarai laman khas",
        "tooltip-t-print": "Versi boleh cetak bagi laman ini",
        "pageinfo-robot-policy": "Indeks oleh robot",
        "pageinfo-robot-index": "Dibenarkan",
        "pageinfo-robot-noindex": "Tidak dibenarkan",
-       "pageinfo-views": "Bilangan kunjungan",
        "pageinfo-watchers": "Bilangan pemantau halaman",
        "pageinfo-few-watchers": "Kurang daripada $1 orang pemantau",
        "pageinfo-redirects-name": "Jumlah lencongan ke laman ini",
index 1a65990..6ac9530 100644 (file)
@@ -26,6 +26,7 @@
        "tog-watchdefault": "Żid il-paġni u l-fajls li nimmodifika fil-lista ta' osservazzjoni personali",
        "tog-watchmoves": "Żid il-paġni u fajls li mmexxi fil-lista ta' osservazzjoni tiegħi",
        "tog-watchdeletion": "Żid il-paġni u fajls li nħassar mal-lista ta' osservazzjoni tiegħi",
+       "tog-watchrollback": "Żid il-paġni fejn għamilt treġġigħ lura lejn il-paġna ta' segwimenti tiegħi",
        "tog-minordefault": "Immarka awtomatikament kull modifika bħala waħda minuri",
        "tog-previewontop": "Uri dehra proviżorja tal-paġna fuq il-kaxxa tal-immodifikar",
        "tog-previewonfirst": "Uri dehra proviżorja mal-ewwel modifika",
        "otherlanguages": "F'lingwi oħrajn",
        "redirectedfrom": "(Rindirizzat minn $1)",
        "redirectpagesub": "Paġna ta' rindirizz",
+       "redirectto": "Rindirizza lejn:",
        "lastmodifiedat": "L-aħħar modifika fuq il-paġna: $2, $1.",
        "viewcount": "Din il-paġna ġiet aċċessata {{PLURAL:$1|darba|$1 darba}}.",
        "protectedpage": "Paġna protetta",
        "viewsourcetext": "Tista' tara u tikkopja s-sors ta' din il-paġna:",
        "viewyourtext": "Tista' tara u tikkopja s-sors tal-'''modifiki tiegħek''' fuq din il-paġna:",
        "protectedinterface": "Din il-paġna tipprovdi test ta' interfaċċa għas-softwer fuq dan il-wiki, u għaldaqstant ġiet protetta sabiex ma jkunx hemm abbuż.\nBiex iżżid jew tibdel traduzzjonijiet għall-wikijiet kollha uża [//translatewiki.net/ translatewiki.net], il-proġett ta' lokalizzazzjoni ta' MediaWiki.",
-       "editinginterface": "'''Avviż:''' Qiegħed tagħmel modifiki lejn paġna li qiegħda tintuża biex tipprovdi interfaċċa għall-messaġġi tas-software. Kull modifika f'din il-paġna se taffetwa l-apparenza tal-faċċata tal-utenti kollha. Għat-traduzzjonijiet, ikkunsidra l-possibilità li tuża  [//translatewiki.net/wiki/Main_Page?setlang=mt translatewiki.net], il-proġett MediaWiki għal-lokalizzazzjoni.",
+       "editinginterface": "'''Avviż:''' Qiegħed timmodifika  paġna li qiegħda tintuża biex tipprovdi test ta' interfaċċa għas-software. Kull modifika f'din il-paġna se taffetwa l-apparenza tal-interfaċċata tal-utenti kollha ta' dan il-wiki.",
+       "translateinterface": "Biex iżżid jew tibdel it-traduzzjonijiet fuq il-wikijiet kollha, jekk jogħġbok uża [//translatewiki.net/ translatewiki.net], il-proġett ta' lokalizzazzjoni tal-MediaWiki.",
        "cascadeprotected": "Din il-paġna ġiet protetta mill-modifiki, minħabba li tinkludi {{PLURAL:$1|paġni, li huwa|paġni, li huma}} protetti bil-preferenza tal-\"kaskata\" mixewla:\n$2",
        "namespaceprotected": "Inti m'għandhekx il-permess li timodifika paġni fin-''namespace'' '''$1''.",
        "customcssprotected": "M'għandekx il-permessi neċessarji sabiex timmodifika din il-paġna tas-CSS, minħabba li għandha tqegħid personali ta' utent ieħor.",
        "customjsprotected": "M'għandekx il-permessi neċessarji sabiex timmodifika din il-paġna tal-JavaScript, minħabba li għandha tqegħid personali ta' utent ieħor.",
+       "mycustomcssprotected": "Ma għandekx permess biex timmodifika din il-paġna CSS.",
        "mycustomjsprotected": "Ma għandekx permess li teditja din il-paġna JavaScript.",
        "myprivateinfoprotected": "Ma għandekx permess li teditja l-informazzjoni privata tiegħek.",
        "mypreferencesprotected": "Ma għandekx permess li teditja l-preferenzi tiegħek.",
        "invalidtitle-knownnamespace": "Titolu validu bin-namespace \"$2\" u t-test\"$3\"",
        "invalidtitle-unknownnamespace": "Titolu validu b'numru tan-namespace mhux magħruf  $1 u t-test \"$2\"",
        "exception-nologin": "Mhux qiegħed fil-kont",
-       "exception-nologin-text": "Jekk jogħġbok [[Special:Userlogin|idħol fil-kont tiegħek]] biex tkun tista' taċċessa din il-paġna jew din l-azzjoni.",
+       "exception-nologin-text": "Jekk jogħġbok idħol fil-kont tiegħek biex tkun tista' taċċessa din il-paġna jew din l-azzjoni.",
        "exception-nologin-text-manual": "Jekk jogħġbok $1 sabiex tkuu tista' taċċessa din il-paġna jew din l-azzjoni.",
        "virus-badscanner": "Problema fil-konfigurazzjoni: antivirus mhux magħruf: ''$1''",
        "virus-scanfailed": "Tfittxija falliet (kodiċi $1)",
        "mergehistory-same-destination": "Il-paġni tas-sors u tad-destinazzjoni ma jistgħux ikunu l-istess",
        "mergehistory-reason": "Raġuni:",
        "mergelog": "Twaħħid",
-       "pagemerge-logentry": "waħħad [[$1]] ma' [[$2]] (reviżjonijiet sa $3)",
        "revertmerge": "Infired",
        "mergelogpagetext": "Hawn taħt hawn lista ta' l-aktar tgħaqqid riċenti ta' paġna waħda ta' storja f'oħra.",
        "history-title": "Kronoloġija tal-modifiki ta' \"$1\"",
        "statistics": "Statistika",
        "statistics-header-pages": "Statistika tal-paġna",
        "statistics-header-edits": "Statistika tal-immodifikar",
-       "statistics-header-views": "Statistika tal-viżwalizzazzjoni",
        "statistics-header-users": "Statistika tal-utent",
        "statistics-header-hooks": "Statistika oħra",
        "statistics-articles": "Paġni ta' kontenut",
        "statistics-files": "Fajls imtellgħa",
        "statistics-edits": "Total ta' modifiki minn mindu {{SITENAME}} bdiet fil-funzjon",
        "statistics-edits-average": "Medja ta' modifiki għal kull paġna",
-       "statistics-views-total": "Total ta' viżti",
-       "statistics-views-total-desc": "Viżti lejn paġni li ma jeżistux u paġna speċjali mhumiex inklużi.",
-       "statistics-views-peredit": "Viżti għal kull modifika",
        "statistics-users": "[[Special:ListUsers|Utenti]] reġistrati",
        "statistics-users-active": "Utenti attivi",
        "statistics-users-active-desc": "Utenti li wettqu azzjoni fl-aħħar {{PLURAL:$1|ġurnata|$1 ġurnata}}",
-       "statistics-mostpopular": "Il-paġni l-aktar miżjura",
        "pageswithprop": "Paġni bi proprjetà ta' paġna",
        "pageswithprop-legend": "Paġni bi proprjetà ta' paġna",
        "pageswithprop-text": "Din il-paġna telenka paġni li jużaw proprjetà ta' paġna partikulari.",
        "uncategorizedtemplates": "Templates mhux ikkategorizzati",
        "unusedcategories": "Kategoriji mhux użati",
        "unusedimages": "Fajls mhux użati",
-       "popularpages": "L-iktar paġni popolari",
        "wantedcategories": "Kategoriji rikjesti",
        "wantedpages": "Paġni rikjesti",
        "wantedpages-badtitle": "Titlu invalidu fil-grupp ta' riżultati: $1",
        "pageinfo-robot-policy": "Stat għall-muturi tat-tfittxija",
        "pageinfo-robot-index": "Indiċjabbli",
        "pageinfo-robot-noindex": "Mhux indiċjabbli",
-       "pageinfo-views": "Numru ta' viżti",
        "pageinfo-watchers": "Numru ta' osservaturi tal-paġna",
        "pageinfo-redirects-name": "Rindirizzi lejn din il-paġna",
        "pageinfo-subpages-name": "Sottopaġni ta' din il-paġna",
        "specialpages-group-other": "Paġni speċjali oħrajn",
        "specialpages-group-login": "Idħol / oħloq kont",
        "specialpages-group-changes": "L-Aħħar modifiki u reġistri",
-       "specialpages-group-media": "Fajls multimedjali - rapporti u tellgħar",
+       "specialpages-group-media": "Fajls multimedjali - tlugħ u rapporti",
        "specialpages-group-users": "Utenti u drittijiet",
        "specialpages-group-highuse": "Paġni użati ħafna",
-       "specialpages-group-pages": "Elenki ta' paġni",
+       "specialpages-group-pages": "Listi ta' paġni",
        "specialpages-group-pagetools": "Għodda tal-paġna",
        "specialpages-group-wiki": "Għodda u informazzjoni fuq il-proġett",
        "specialpages-group-redirects": "Paġni speċjali ta' rindirizz",
index 708c170..9f26158 100644 (file)
        "viewsourcetext": "Putisse vedé e copià 'o codece surgiva 'e sta paggena:",
        "viewyourtext": "Putisse vedé e copià 'o codice surgiva d' 'e <strong>cagnamiénte tuoje</strong> a sta paggena:",
        "protectedinterface": "Sta paggena nce appruviggióna 'e n'interfaccia testo p' 'o software dint'a sta wiki, e s'è prutetta pe' nce scanzà 'e cocch'abbuso.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
-       "editinginterface": "'''Attenziò:''' 'O testo 'e sta paggena ffà parte 'e ll'interfaccia utente d' 'o sito.\nTutt' 'e cagnamiénte fatte a sta paggena cumpareno dint' 'e mmasciate 'e ll'interfaccia veduta 'a tutte ll'utente dint'a sta wiki.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
+       "editinginterface": "<strong>Attenziò:</strong>  'O testo 'e sta paggena ffà parte 'e ll'interfaccia utente d' 'o sito.\nTutt' 'e cagnamiénte fatte a sta paggena cumpareno dint' 'e mmasciate 'e ll'interfaccia veduta 'a tutte ll'utente dint'a sta wiki.",
+       "translateinterface": "Si se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
        "cascadeprotected": "Sta paggena è stata prutetta 'a 'o cangamento pecché sta dint'a {{PLURAL:$1|sta paggena, che è prutetta|sti paggene, che songo prutette}} quann' 'a l'ozione \"ricurziva\" è attiva:\n$2",
        "namespaceprotected": "Nun avite permesso a cagnà 'e paggene dint'a stu namespace '''$1'''.",
        "customcssprotected": "Nun v'è permesso 'a cagnà sta paggena CSS, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.",
        "content-model-text": "testo nurmale",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Paggene c'ausano argomiente dupprecate dint' 'e chiammate a 'e mudelle",
+       "duplicate-args-category-desc": "'A paggena tene chiammate a mudelle c'ausassero argomiente dupprecate, comme p'esempio <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "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": "'''Attenzione:''' 'a diminsiona d' 'e template ionte ccà è troppo grossa.\nCocche template se lassarrà fore.",
        "mergehistory-same-destination": "'E paggene d'origgine e destinazione nun ponno essere eguale",
        "mergehistory-reason": "Mutivo:",
        "mergelog": "Riggistro d'aunione",
-       "pagemerge-logentry": "song'aunite [[$1]] int'a [[$2]] (verziune nfin'a $3)",
        "revertmerge": "Annulla aunione",
        "mergelogpagetext": "Ccà abbascio ce sta na lista cu ll'urdeme aunione int'a cronologgia d' 'e ddoje paggene.",
        "history-title": "$1: cronologgia d' 'e cagnamiente",
        "gender-female": "È riggistrata ncopp' 'a {{SITENAME}}",
        "prefs-help-gender": "Mpizzà sta preferenza è ozzionale.\n'O software aúsa stu valore pe' se vutà a vuje e v'anummenà a l'ati utente ausanno 'o gennere grammatecale buono.\nCheste nfurmaziune sarranno pubbreche.",
        "email": "E-mail",
-       "prefs-help-realname": "'O nomme overo vuosto è ozzionale.\nSi sciglite 'e nzertà 'o nomme overo, chesto s'ausarrà pe' dà l'utente l'attribuzione d' 'a fatica fatta.",
+       "prefs-help-realname": "'O nomme overo vuosto è opzionale.\nSi 'o scrivete, se putesse ausà pe' ve dà l'attribuzione d' 'a fatica fatta.",
        "prefs-help-email": "L'e-mail vuosto è ozzionale, ma permettesse 'e ricevere 'a password propria quanno v' 'a scurdate.",
        "prefs-help-email-others": "Putite pure scegliere 'e lassà che l'at'utente ve mannassero mmasciate via e-mail cu nu cullegamiento â paggena d'utente o chiacchiera.\nLl'indirizzo e-mail vuosto nun è scummigliato quanno l'at'utente ve cuntattano.",
        "prefs-help-email-required": "L'indirizzo e-mail è obbligatorio.",
        "statistics": "Statistiche",
        "statistics-header-pages": "Statistiche d' 'e paggene",
        "statistics-header-edits": "Cagna 'e statistiche",
-       "statistics-header-views": "Vide 'e statistiche",
        "statistics-header-users": "Statistiche 'e l'utente",
        "statistics-header-hooks": "Ati statistiche",
        "statistics-articles": "Paggene 'e cuntenute",
        "statistics-files": "File carrecate",
        "statistics-edits": "Cagnamiente d' 'e paggene 'a che {{SITENAME}} s'è accumminciata",
        "statistics-edits-average": "Cagnamiente medie pe' paggena",
-       "statistics-views-total": "Visite 'n totale",
-       "statistics-views-total-desc": "'E vviste a paggene ca nun esisteno e paggene speciale nun cuntano",
-       "statistics-views-peredit": "Visite pe' cagnamiento",
        "statistics-users": "[[Special:ListUsers|Utente riggistrate]]",
        "statistics-users-active": "Utente attive",
        "statistics-users-active-desc": "Utente c'hanno fatto coccosa dint' 'a {{PLURAL:$1|l'urdemo juorno|l'urdeme $1 juorne}}",
-       "statistics-mostpopular": "Pàggene cchiù visitate",
        "pageswithprop": "Paggene cu na prupietà 'e paggena",
        "pageswithprop-legend": "Paggene cu na prupietà 'e paggena",
        "pageswithprop-text": "Sta paggena alenca 'e paggene c'ausano na prupietà particolare 'e paggena.",
        "uncategorizedtemplates": "Template senza categurìa",
        "unusedcategories": "Categurìe ca nun s'ausano",
        "unusedimages": "File ca nun s'ausano",
-       "popularpages": "Paggene cchiù 'speziunate",
        "wantedcategories": "Categurìe addimannate",
        "wantedpages": "Paggene cchiù addemannate",
        "wantedpages-badtitle": "Titolo invalido mmiez' 'o nzieme 'e risultate: $1",
        "tooltip-feed-atom": "Atom feed pe sta pàggena",
        "tooltip-t-contributions": "Lista dde contributte 'e chisto utente",
        "tooltip-t-emailuser": "Manna 'nu email a chisto utente",
+       "tooltip-t-info": "Cchiù nfurmaziune ncopp'a sta paggena",
        "tooltip-t-upload": "Careca file",
        "tooltip-t-specialpages": "Lista 'e tutte e paggene speciale",
        "tooltip-t-print": "Vversione pe' stampa 'e chista paggena",
        "pageinfo-robot-policy": "Indicizzate 'a 'e robbot",
        "pageinfo-robot-index": "Permesso",
        "pageinfo-robot-noindex": "Nun permesso",
-       "pageinfo-views": "Nummero 'e visite",
        "pageinfo-watchers": "Nummero 'e visite â paggena",
        "pageinfo-few-watchers": "Meno 'e $1 {{PLURAL:$1|visita|visite}}",
        "pageinfo-redirects-name": "Nummero 'e redirect a sta paggena",
        "unknown_extension_tag": "Tag 'e stensione scanusciuto \"$1\"",
        "duplicate-defaultsort": "<strong>Attenziò:</strong> A chiave d'arricetto \"$2\" se miette ncuollo a nu valore 'e primma \"$1\".",
        "duplicate-displaytitle": "<strong>Attenziò:</strong> A chiave d'arricetto \"$2\" se scagna p' 'o valore 'e primma \"$1\".",
+       "invalid-indicator-name": "<strong>Errore:</strong> attribbuto <code>name</code> 'e ll'innecature d' 'o stato d' 'a paggena nu può rummanè abbacante.",
        "version": "Verziona",
        "version-extensions": "Estenziune installate",
        "version-skins": "Skin installate",
        "sqlite-no-fts": "$1 senza supporto 'e ricerche full-text",
        "logentry-delete-delete": "$1 {{GENDER:$2|scancellaje}} 'a paggena $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|arrepigliaje}} 'a paggena $3",
+       "logentry-delete-event": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà 'e {{PLURAL:$5|n'azione d' 'o riggistro|$5 aziune d' 'o riggistro}} ncopp' 'a 'a $3: $4",
+       "logentry-delete-revision": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà 'e {{PLURAL:$5|na verziona|$5 verziune}} ncopp' 'a 'a $3: $4",
+       "logentry-delete-event-legacy": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà 'e l'aziune dint' 'o riggistro ncopp' 'a $3: $4",
+       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà d' 'e verziune ncopp' 'a $3",
+       "logentry-suppress-delete": "$1 {{GENDER:$2|luvaje pe' sempe}} 'a paggena $3",
+       "logentry-suppress-event": "$1 {{GENDER:$2|annascunnuto cagnaie|annascunnuta cagnaie}} 'a vesibbiletà 'e {{PLURAL:$5|n'azione d' 'o riggistro|$5 aziune d' 'o riggistro}} ncopp' 'a 'a $3: $4",
+       "logentry-suppress-revision": "$1 {{GENDER:$2|annascunnuto cagnaie|annascunnuta cagnaie}} 'a vesibbiletà 'e {{PLURAL:$5|na verziona|$5 verziune}} ncopp' 'a 'a $3: $4",
+       "logentry-suppress-event-legacy": "$1 {{GENDER:$2|annascunnuto cagnaie|annascunnuta cagnaie}} 'a vesibbiletà 'e l'aziune 'e riggistro ncopp' 'a $3",
+       "logentry-suppress-revision-legacy": "$1 {{GENDER:$2|annascunnuto cagnaie|annascunnuta cagnaie}} 'a vesibbiletà d' 'e verziune ncopp' 'a $3",
+       "revdelete-content-hid": "cuntenute annascunnute",
+       "revdelete-summary-hid": "riepilego 'e cagnamiente annascunnute",
+       "revdelete-uname-hid": "nomme utente annascunnuto",
+       "revdelete-content-unhid": "cuntenute fatte avvedè",
+       "revdelete-summary-unhid": "riepilego 'e cagnamiente fatte avvedè",
+       "revdelete-uname-unhid": "nomme utente fatto avvedè",
+       "revdelete-restricted": "restriziune apprecate a ll'ammenistrature",
+       "revdelete-unrestricted": "restriziune luvate a ll'ammenistrature",
+       "logentry-merge-merge": "$1 {{GENDER:$2|aunito|aunita}} $3 int' 'a $4 (verziune nzin' 'a $5)",
+       "logentry-move-move": "$1 {{GENDER:$2|muvette}} paggena $3 a $4",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|muvette}} paggena $3 a $4 senza lassà nu redirezionamiento",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|muvette}} paggena $3 a $4 pe' copp' 'a nu redirezionamiento",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|muvette}} paggena $3 a $4 pe' copp' 'a nu redirezionamiento senza lassà nu redirezionamiento",
+       "logentry-patrol-patrol": "$1 verziona {{GENDER:$2|signata}} $4 'e paggena cuntrullata $3",
+       "logentry-patrol-patrol-auto": "$1 verziona automatecamente {{GENDER:$2|signata}} $4 'e paggena cuntrullata $3",
+       "logentry-newusers-newusers": "'O cunto utente $1 fuje {{GENDER:$2|criato|criata}}",
+       "logentry-newusers-create": "'O cunto utente $1 fuje {{GENDER:$2|criato|criata}}",
+       "logentry-newusers-create2": "'O cunto utente $3 fuje {{GENDER:$2|criato|criata}} pe' $1",
+       "logentry-newusers-byemail": "'O cunto utente $3 fuje {{GENDER:$2|criato|criata}} pe' $1 e 'a passuor è stata mannata pe' bbìa 'e na mmasciata e-mail",
+       "logentry-newusers-autocreate": "'O cunto utente $1 fuje {{GENDER:$2|criato|criata}} automatecamente",
+       "logentry-rights-rights": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3 'a $4 a $5",
+       "logentry-rights-rights-legacy": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3",
        "rightsnone": "(nisciuno)",
+       "revdelete-summary": "cagna 'o riepilego",
+       "feedback-bugornote": "Si site pronto/a a descrivere nu probblema tecnico ch' 'e dettaglie, pe' piacere [$1 mannate nu bug].\nSi nun site pronto/a, allora putite ausà 'o modulo semprice ca vedite ccà abbascio. 'O commento vuosto sarrà mpezzato dint' 'a paggena [$3 $2]\", seguenno 'o nomme utente vuosto e 'o navigatóre web ca state ausanno.",
+       "feedback-subject": "Suggietto:",
        "feedback-message": "Mmasciata:",
        "feedback-cancel": "Canciella",
+       "feedback-submit": "Manna nu Feedback, na segnalazione",
+       "feedback-adding": "Azzecca nu feedback/na segnalazione â paggena..",
+       "feedback-error1": "Errore: Risultato nun aspettato 'a ll'API",
+       "feedback-error2": "Errore: Cagnamiento scassato",
+       "feedback-error3": "Errore: Ll'API nun risponne",
+       "feedback-thanks": "Grazie! 'O feedback vuosto s'è mpizzato dint' 'a paggena \"[$2 $1]\".",
        "feedback-close": "Fatto",
+       "feedback-bugcheck": "Tutt'appost! Avite surtanto 'a cuntrullà ca chisto nun è unu d' 'e [$1 bug canusciute].",
+       "feedback-bugnew": "Aggio cuntrullato. Manna nu bug nuovo.",
        "searchsuggest-search": "Truova",
+       "searchsuggest-containing": "tène...",
+       "api-error-badaccess-groups": "Tun putite carrecà file ncopp' 'a sta wiki.",
+       "api-error-badtoken": "Errore interno: 'O token nun è buono.",
+       "api-error-copyuploaddisabled": "'A funzione carrcà 'e n'URL nun è appicciata dint'a stu server.",
        "api-error-filename-tooshort": "'O nomme d' 'o file è troppo curto.",
        "api-error-filetype-banned": "Stu tipo 'e file nun è permesso.",
        "duration-seconds": "$1 {{PLURAL:$1|secondo|seconde}}",
index 8b72bad..2c29847 100644 (file)
        "content-model-text": "Ren tekst",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Sider med like argumenter i malkall",
        "expensive-parserfunction-warning": "Advarsel: Denne siden inneholder for mange prosesskrevende parserfunksjoner.\n\nDet burde være mindre enn {{PLURAL:$2|$2|$2}}, men er nå {{PLURAL:$1|$1|$1}}..",
        "expensive-parserfunction-category": "Sider med for mange prosesskrevende parserfunksjoner",
        "post-expand-template-inclusion-warning": "Advarsel: Størrelsen på inkluderte maler er for stor.\nNoen maler vil ikke bli inkludert.",
        "mergehistory-same-destination": "Kilde- og målside kan ikke være den samme.",
        "mergehistory-reason": "Årsak:",
        "mergelog": "Flettingslogg",
-       "pagemerge-logentry": "flettet [[$1]] til [[$2]] (revisjoner fram til $3)",
        "revertmerge": "Omgjør fletting",
        "mergelogpagetext": "Nedenfor er en liste over de nyligste flettingene av sidehistorikker.",
        "history-title": "Revisjonshistorikk for «$1»",
        "statistics": "Statistikk",
        "statistics-header-pages": "Sidestatistikk",
        "statistics-header-edits": "Redigeringsstatistikk",
-       "statistics-header-views": "Visningsstatistikk",
        "statistics-header-users": "Brukerstatistikk",
        "statistics-header-hooks": "Øvrig statistikk",
        "statistics-articles": "Innholdssider",
        "statistics-files": "Opplastede filer",
        "statistics-edits": "Redigeringer siden {{SITENAME}} ble opprettet",
        "statistics-edits-average": "Gjennomsnittlig antall redigeringer per side",
-       "statistics-views-total": "Totalt antall visninger",
-       "statistics-views-total-desc": "Visninger av ikke-eksisterende sider og spesielsider inkluderes ikke",
-       "statistics-views-peredit": "Visninger per redigering",
        "statistics-users": "Registrerte [[Special:ListUsers|brukere]]",
        "statistics-users-active": "Aktive brukere",
        "statistics-users-active-desc": "Brukere som har utført handlinger {{PLURAL:$1|det siste døgnet|de siste $1 dagene}}",
-       "statistics-mostpopular": "Mest viste sider",
        "pageswithprop": "Sider med sideverdi",
        "pageswithprop-legend": "Sider med en sideverdi",
        "pageswithprop-text": "Denne siden lister opp sider som bruker en viss sideverdi.",
        "uncategorizedtemplates": "Ukategoriserte maler",
        "unusedcategories": "Ubrukte kategorier",
        "unusedimages": "Ubrukte filer",
-       "popularpages": "Populære sider",
        "wantedcategories": "Ønskede kategorier",
        "wantedpages": "Etterspurte sider",
        "wantedpages-badtitle": "Ugyldig tittel i resultatene: $1",
        "pager-older-n": "{{PLURAL:$1|1 eldre|$1 eldre}}",
        "suppress": "Historikkrydding",
        "querypage-disabled": "Denne spesialsiden er deaktivert av ytelsesårsaker.",
+       "apihelp": "API hjelp",
        "booksources": "Bokkilder",
        "booksources-search-legend": "Søk etter bokkilder",
        "booksources-search": "Søk",
        "pageinfo-robot-policy": "Bot-indeksering",
        "pageinfo-robot-index": "Tillatt",
        "pageinfo-robot-noindex": "Ikke tillatt",
-       "pageinfo-views": "Antall visninger",
        "pageinfo-watchers": "Antall overvåkere av siden",
        "pageinfo-few-watchers": "Færre enn $1 {{PLURAL:$1|overvåker|overvåkere}}",
        "pageinfo-redirects-name": "Antall omdirigeringer til denne siden",
        "mediastatistics-header-drawing": "Tegninger (vektor-bilder)",
        "mediastatistics-header-audio": "Lyd",
        "mediastatistics-header-video": "Videoer",
+       "mediastatistics-header-multimedia": "Rikt media",
+       "mediastatistics-header-office": "Kontor",
+       "mediastatistics-header-text": "Tekstlig",
        "mediastatistics-header-executable": "Kjørbare filer",
        "mediastatistics-header-archive": "Komprimerte formater",
        "json-warn-trailing-comma": "$1 etterfølgende {{PLURAL:$1|komma|kommaer}} ble fjernet fra JSON",
index fa1687c..b769f16 100644 (file)
        "content-model-text": "tekst zonder opmaak",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pagina's met dubbele sjabloonparameters",
        "expensive-parserfunction-warning": "'''Waarschuwing:''' deze pagina gebruikt te veel kostbare parserfuncties.\n\nNu {{PLURAL:$1|is|zijn}} het er $1, terwijl het er minder dan $2 {{PLURAL:$2|moet|moeten}} zijn.",
        "expensive-parserfunction-category": "Pagina's die te veel kostbare parserfuncties gebruiken",
        "post-expand-template-inclusion-warning": "Waarschuwing: de maximale transclusiegrootte voor sjablonen is overschreden.\nSommige sjablonen worden niet getranscludeerd.",
        "mergehistory-same-destination": "De bronpagina en doelpagina kunnen niet hetzelfde zijn",
        "mergehistory-reason": "Reden:",
        "mergelog": "Samenvoegingslogboek",
-       "pagemerge-logentry": "heeft [[$1]] naar [[$2]] samengevoegd (versies tot en met $3)",
        "revertmerge": "Samenvoeging ongedaan maken",
        "mergelogpagetext": "Hieronder ziet u een lijst van recente samenvoegingen van een paginageschiedenis naar een andere.",
        "history-title": "$1: versiegeschiedenis",
        "statistics": "Statistieken",
        "statistics-header-pages": "Paginastatistieken",
        "statistics-header-edits": "Bewerkingsstatistieken",
-       "statistics-header-views": "Paginaweergavestatistieken",
        "statistics-header-users": "Gebruikersstatistieken",
        "statistics-header-hooks": "Overige statistieken",
        "statistics-articles": "Inhoudelijke pagina's",
        "statistics-files": "Bestanden",
        "statistics-edits": "Paginabewerkingen sinds het begin van {{SITENAME}}",
        "statistics-edits-average": "Gemiddeld aantal bewerkingen per pagina",
-       "statistics-views-total": "Totaal aantal weergegeven pagina's",
-       "statistics-views-total-desc": "Het bekijken van niet-bestaande pagina's en speciale pagina's is niet inbegrepen",
-       "statistics-views-peredit": "Weergegeven pagina's per bewerking",
        "statistics-users": "Geregistreerde [[Special:ListUsers|gebruikers]]",
        "statistics-users-active": "Actieve gebruikers",
        "statistics-users-active-desc": "Gebruikers die in de afgelopen {{PLURAL:$1|dag|$1 dagen}} een handeling hebben uitgevoerd",
-       "statistics-mostpopular": "Meest bekeken pagina's",
        "pageswithprop": "Pagina's met een pagina-eigenschap",
        "pageswithprop-legend": "Pagina's met een pagina-eigenschap",
        "pageswithprop-text": "Op deze pagina worden pagina's weergegeven met een bepaalde pagina-eigenschap.",
        "uncategorizedtemplates": "Niet-gecategoriseerde sjablonen",
        "unusedcategories": "Ongebruikte categorieën",
        "unusedimages": "Ongebruikte bestanden",
-       "popularpages": "Veel bekeken pagina's",
        "wantedcategories": "Niet-bestaande categorieën met de meeste koppelingen",
        "wantedpages": "Niet-bestaande pagina's met koppelingen",
        "wantedpages-badtitle": "Ongeldige paginanaam in resultaat: $1",
        "tooltip-feed-atom": "Atom-feed voor deze pagina",
        "tooltip-t-contributions": "Een lijst met bijdragen van deze gebruiker",
        "tooltip-t-emailuser": "Een e-mail naar deze gebruiker verzenden",
+       "tooltip-t-info": "Meer informatie over deze pagina",
        "tooltip-t-upload": "Bestanden uploaden",
        "tooltip-t-specialpages": "Lijst met alle speciale pagina's",
        "tooltip-t-print": "Printvriendelijke versie van deze pagina",
        "pageinfo-robot-policy": "Indexering door robots",
        "pageinfo-robot-index": "Toegestaan",
        "pageinfo-robot-noindex": "Niet toegestaan",
-       "pageinfo-views": "Aantal weergaven",
        "pageinfo-watchers": "Aantal paginavolgers",
        "pageinfo-few-watchers": "Minder dan  {{PLURAL:$1|één volger|$1 volgers}}",
        "pageinfo-redirects-name": "Aantal doorverwijzingen naar deze pagina",
index 1d464d2..16ff0e2 100644 (file)
        "nospecialpagetext": "Du har bede om ei spesialside som ikkje finst. Lista over spesialsider finn du [[Special:SpecialPages|her]].",
        "error": "Feil",
        "databaseerror": "Databasefeil",
-       "databaseerror-text": "Ein spørjefeil mot databasa har oppstått.\nDette kan indikere ein feil i programvara.",
+       "databaseerror-text": "Ein spørjefeil mot databasen har oppstått.\nDette kan indikere ein feil i programvara.",
        "databaseerror-error": "Feil: $1",
        "laggedslavemode": "Åtvaring: Det er mogleg at sida ikkje er heilt oppdatert.",
        "readonly": "Databasen er skriveverna",
        "mergehistory-same-destination": "Kjelde- og målside kan ikkje vere den same.",
        "mergehistory-reason": "Årsak:",
        "mergelog": "Flettelogg",
-       "pagemerge-logentry": "fletta [[$1]] til [[$2]] (versjonar fram til $3)",
        "revertmerge": "Fjern fletting",
        "mergelogpagetext": "Nedanfor finn du ei liste over dei siste flettingane av ein sidehistorikk til ein annan.",
        "history-title": "$1: Versjonshistorikk",
        "statistics": "Statistikk",
        "statistics-header-pages": "Sidestatistikk",
        "statistics-header-edits": "Endringsstatistikk",
-       "statistics-header-views": "Visingsstatistikk",
        "statistics-header-users": "Brukarstatistikk",
        "statistics-header-hooks": "Anna statistikk",
        "statistics-articles": "Innhaldssider",
        "statistics-files": "Opplasta filer",
        "statistics-edits": "Endringar sidan {{SITENAME}} vart oppretta",
        "statistics-edits-average": "Gjennomsnittleg tal på endringar per side",
-       "statistics-views-total": "Totalt visningstal",
-       "statistics-views-total-desc": "Visingar av sider som ikkje finst og spesialsider er ikkje tekne med",
-       "statistics-views-peredit": "Visingar per endring",
        "statistics-users": "Registrerte [[Special:ListUsers|brukarar]]",
        "statistics-users-active": "Aktive brukarar",
        "statistics-users-active-desc": "Brukarar som har utført handlingar {{PLURAL:$1|i dag|dei siste $1 dagane}}",
-       "statistics-mostpopular": "Mest viste sider",
        "pageswithprop": "Sider med ein sideeigenskap",
        "pageswithprop-legend": "Sider med ein sideeigenskap",
        "pageswithprop-text": "Denne sida listar opp sider som nyttar ein viss sideeigenskap.",
        "uncategorizedtemplates": "Ukategoriserte malar",
        "unusedcategories": "Ubrukte kategoriar",
        "unusedimages": "Ubrukte filer",
-       "popularpages": "Populære sider",
        "wantedcategories": "Etterspurde kategoriar",
        "wantedpages": "Etterspurde sider",
        "wantedpages-badtitle": "Ugyldig tittel mellom resultata: $1",
        "pageinfo-robot-policy": "Botindeksering",
        "pageinfo-robot-index": "Tillate",
        "pageinfo-robot-noindex": "Ikkje tillate",
-       "pageinfo-views": "Tal på visningar",
        "pageinfo-watchers": "Tal på overvakarar av sida",
        "pageinfo-few-watchers": "Færre enn $1 {{PLURAL:$1|som overvakar}}",
        "pageinfo-redirects-name": "Tal på omdirigeringar til sida",
index f43c146..cb72b0a 100644 (file)
        "semiprotectedpagewarning": "'''ਨੋਟ:''' ਇਹ ਸਫ਼ਾ ਸੁਰੱਖਿਅਤ ਹੈ ਤਾਂ ਕਿ ਸਿਰਫ਼ ਰਜਿਸਟਰ ਹੋਏ ਮੈਂਬਰ ਹੀ ਇਸ ਨੂੰ ਸੋਧ ਸਕਣ।\nਚਿੱਠੇ ਵਿਚਲਾ ਨਵਾਂ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:",
        "titleprotectedwarning": "'''ਖ਼ਬਰਦਾਰ: ਇਹ ਸਫ਼ਾ ਸੁਰੱਖਿਅਤ ਹੈ ਸੋ ਇਸਨੂੰ ਬਣਾਉਣ ਲਈ [[Special:ListGroupRights|ਖ਼ਾਸ ਹੱਕਾਂ]] ਦੀ ਲੋੜ ਹੈ।'''\nਚਿੱਠੇ ਦਾ ਨਵਾਂ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:",
        "templatesused": "ਇਸ ਪੰਨੇ ’ਤੇ {{PLURAL:$1|ਵਰਤਿਆ ਸਾਂਚਾ|ਵਰਤੇ ਸਾਂਚੇ}}:",
-       "templatesusedpreview": "{{PLURAL:$1|ਟੈਪਲੇਟ|ਟੈਪਲੇਟ}} ਇਹ ਝਲਕ 'ਚ ਵਰਤੇ ਜਾਂਦੇ ਹਨ:",
+       "templatesusedpreview": "ਏਸ ਝਾਤ 'ਚ {{PLURAL:$1|ਵਰਤਿਆ ਗਿਆ ਫਰਮਾ|ਵਰਤੇ ਗਏ ਫਰਮੇ}}:",
        "templatesusedsection": "ਇਹ ਭਾਗ ਵਿੱਚ {{PLURAL:$1|ਸਾਂਚਾ|ਸਾਂਚੇ}} ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ:",
        "template-protected": "(ਸੁਰੱਖਿਅਤ)",
        "template-semiprotected": "(ਨੀਮ-ਸੁਰੱਖਿਅਤ)",
        "mergehistory-same-destination": "ਸਰੋਤ ਸਫ਼ਾ ਅਤੇ ਮੰਜ਼ਿਲ ਸਫ਼ਾ ਇੱਕੋ ਜਿਹੇ ਨਹੀਂ ਹੋ ਸਕਦੇ",
        "mergehistory-reason": "ਕਾਰਨ:",
        "mergelog": "ਰਲ਼ਾਉਣ ਦਾ ਚਿੱਠਾ",
-       "pagemerge-logentry": "[[$1]] ਨੂੰ [[$2]] ਵਿੱਚ ਰਲ਼ਾਇਆ ($3 ਤੱਕ ਦੀਆ ਰੀਵਿਜ਼ਨਾਂ)",
        "revertmerge": "ਅਨ-ਮਰਜ",
        "mergelogpagetext": "ਹੇਠਾਂ ਇੱਕ ਸਫ਼ੇ ਦੇ ਅਤੀਤ ਨੂੰ ਦੂਜੇ ਦੇ ਅਤੀਤ ਵਿਚ ਰਲ਼ਾਉਣ ਦੀ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਲਿਸਟ ਹੈ।",
        "history-title": "\"$1\" ਦੇ ਰੀਵਿਜਨ ਦਾ ਅਤੀਤ",
        "statistics": "ਅੰਕੜੇ",
        "statistics-header-pages": "ਸਫ਼ਾ ਅੰਕੜੇ",
        "statistics-header-edits": "ਸੋਧ ਅੰਕੜੇ",
-       "statistics-header-views": "ਅੰਕੜੇ ਵਿਖਾਓ",
        "statistics-header-users": "ਵਰਤੋਂਕਾਰ ਅੰਕੜੇ",
        "statistics-header-hooks": "ਹੋਰ ਅੰਕੜੇ",
        "statistics-articles": "ਸਮੱਗਰੀ ਸਫ਼ੇ",
        "statistics-pages-desc": "ਇਸ ਵਿਕੀ ਦੇ ਸਾਰੇ ਸਫ਼ੇ, ਗੱਲ-ਬਾਤ ਸਫ਼ਿਆਂ, ਰੀਡਾਇਰੈਕਟਾਂ ਇਤਿਆਦਿ ਨੂੰ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋਏ",
        "statistics-files": "ਅਪਲੋਡ ਕੀਤੀਆਂ ਗਈਆਂ ਫਾਈਲਾਂ",
        "statistics-edits-average": "ਪ੍ਰਤੀ ਸਫ਼ਾ ਔਸਤ ਸੋਧਾਂ",
-       "statistics-views-total": "ਕੁੱਲ ਫੇਰੀਆਂ",
-       "statistics-views-peredit": "ਪ੍ਰਤੀ ਸੋਧ ਫੇਰੀਆਂ",
        "statistics-users": "ਰਜਿਸਟਰਡ [[Special:ListUsers|ਵਰਤੋਂਕਾਰ]]",
        "statistics-users-active": "ਸਰਗਰਮ ਵਰਤੋਂਕਾਰ",
        "statistics-users-active-desc": "ਮੈਂਬਰ, ਜਿੰਨ੍ਹਾ ਨੇ ਆਖ਼ਰੀ {{PLURAL:$1|ਦਿਨ|$1 ਦਿਨਾਂ}} ਵਿਚ ਕੋਈ ਕੰਮ ਕੀਤਾ ਹੈ।",
-       "statistics-mostpopular": "ਸਭ ਤੋਂ ਵੱਧ ਵੇਖੇ ਸਫ਼ੇ",
        "pageswithprop-prop": "ਗੁਣ ਦਾ ਨਾਂ:",
        "pageswithprop-submit": "ਜਾਉ",
        "doubleredirects": "ਦੋਹਰੇ ਰੀਡਿਰੈਕਟ",
        "uncategorizedtemplates": "ਬਗ਼ੈਰ ਕੈਟੇਗਰੀਆਂ ਵਾਲ਼ੇ ਸਾਂਚੇ",
        "unusedcategories": "ਅਣਵਰਤੀਆਂ ਕੈਟਾਗਰੀਆਂ",
        "unusedimages": "ਅਣਵਰਤੀਆਂ ਫਾਇਲਾਂ",
-       "popularpages": "ਹਰਮਨਪਿਆਰੇ ਸਫ਼ੇ",
        "wantedcategories": "ਚਾਹੀਦੀਆਂ ਕੈਟੇਗਰੀਆਂ",
        "wantedpages": "ਚਾਹੀਦੇ ਸਫ਼ੇ",
        "wantedfiles": "ਚਾਹੀਦੀਆਂ ਫਾਇਲਾਂ",
        "pageinfo-robot-policy": "ਇੰਜਨ ਦੀ ਹਾਲਤ ਖੋਜੋ",
        "pageinfo-robot-index": "ਮਨਜ਼ੂਰ ਹੈ",
        "pageinfo-robot-noindex": "ਨਾ-ਮਨਜ਼ੂਰ",
-       "pageinfo-views": "ਵਖਾਵਿਆਂ ਦੀ ਗਿਣਤੀ",
        "pageinfo-watchers": "ਸਫ਼ੇ ’ਤੇ ਨਜ਼ਰ ਰੱਖਣ ਵਾਲਿਆਂ ਦੀ ਗਿਣਤੀ",
        "pageinfo-subpages-name": "ਇਸ ਸਫ਼ੇ ਦੇ ਉਪ-ਸਫ਼ੇ",
        "pageinfo-firstuser": "ਸਫ਼ੇ ਦਾ ਉਸਰਈਆ",
index 613dcfb..81124d0 100644 (file)
                        "아라",
                        "Matik7",
                        "Vengir",
-                       "Darellur"
+                       "Darellur",
+                       "Michał Sobkowski",
+                       "Py64"
                ]
        },
        "tog-underline": "Podkreślenie linków:",
-       "tog-hideminor": "Ukryj drobne edycje w ostatnich zmianach",
+       "tog-hideminor": "Ukryj drobne edycje z ostatnich zmian",
        "tog-hidepatrolled": "Ukryj sprawdzone edycje w ostatnich zmianach",
        "tog-newpageshidepatrolled": "Ukryj sprawdzone strony na liście nowych stron",
        "tog-extendwatchlist": "Pokaż na liście obserwowanych wszystkie zmiany, nie tylko ostatnie",
        "category_header": "Strony w kategorii „$1”",
        "subcategories": "Podkategorie",
        "category-media-header": "Pliki w kategorii „$1”",
-       "category-empty": "<em>Obecnie w tej kategorii brak stron oraz plików.</em>",
+       "category-empty": "<em>Obecnie w tej kategorii nie ma stron ani plików.</em>",
        "hidden-categories": "{{PLURAL:$1|Ukryta kategoria|Ukryte kategorie}}",
        "hidden-category-category": "Ukryte kategorie",
        "category-subcat-count": "{{PLURAL:$2|Ta kategoria ma tylko jedną podkategorię.|Poniżej wyświetlono $1 spośród wszystkich $2 podkategorii tej kategorii.}}",
        "personaltools": "Osobiste",
        "articlepage": "Artykuł",
        "talk": "Dyskusja",
-       "views": "Widok",
+       "views": "Wyświetleń",
        "toolbox": "Narzędzia",
        "userpage": "Strona użytkownika",
        "projectpage": "Strona projektu",
        "viewcount": "Tę stronę obejrzano {{PLURAL:$1|tylko raz|$1 razy}}.",
        "protectedpage": "Strona zabezpieczona",
        "jumpto": "Skocz do:",
-       "jumptonavigation": "nawigacji",
-       "jumptosearch": "wyszukiwania",
+       "jumptonavigation": "nawigacja",
+       "jumptosearch": "szukaj",
        "view-pool-error": "Niestety w chwili obecnej serwery są przeciążone.\nZbyt wielu użytkowników próbuje wyświetlić tę stronę.\nPoczekaj chwilę przed ponowną próbą dostępu do tej strony.\n\n$1",
        "generic-pool-error": "Niestety w chwili obecnej serwery są przeciążone.\nZbyt wielu użytkowników próbuje wyświetlić tę stronę.\nPoczekaj chwilę przed ponowną próbą dostępu do tej strony.",
        "pool-timeout": "Zbyt długi czas oczekiwania na blokadę",
        "viewsourcetext": "Tekst źródłowy strony można podejrzeć i skopiować.",
        "viewyourtext": "Tekst źródłowy '''zmodyfikowanej''' przez Ciebie strony możesz podejrzeć i skopiować",
        "protectedinterface": "Ta strona zawiera tekst interfejsu oprogramowania wiki i jest zabezpieczona przed nadużyciami.\nBy dodać lub zmienić tłumaczenia wszystkich serwisów wiki, użyj [//translatewiki.net/ translatewiki.net], projektu lokalizacji MediaWiki.",
-       "editinginterface": "'''Ostrzeżenie:''' Edytujesz stronę, która zawiera tekst interfejsu oprogramowania.\nZmiany na tej stronie zmienią wygląd interfejsu dla innych użytkowników tej wiki.\nBy dodać lub zmienić tłumaczenia wszystkich wiki, użyj [//translatewiki.net/wiki/Main_Page?setlang=pl translatewiki.net], specjalizowany projekt lokalizacji oprogramowania MediaWiki.",
+       "editinginterface": "<strong>Ostrzeżenie:</strong> Edytujesz stronę, która zawiera tekst interfejsu oprogramowania.\nZmiany na tej stronie zmienią wygląd interfejsu dla innych użytkowników tej wiki.",
+       "translateinterface": "Aby dodać lub zmienić tłumaczenia wszystkich wiki, użyj [//translatewiki.net/ translatewiki.net], projekt lokalizacji oprogramowania MediaWiki.",
        "cascadeprotected": "Ta strona została zabezpieczona przed edycją, ponieważ jest ona zawarta na {{PLURAL:$1|następującej stronie, która została zabezpieczona|następujących stronach, które zostały zabezpieczone}} z włączoną opcją dziedziczenia:\n$2",
        "namespaceprotected": "Nie masz uprawnień do edytowania stron w przestrzeni nazw '''$1'''.",
        "customcssprotected": "Nie jesteś uprawniony do edytowania tej strony CSS, ponieważ zawiera ona ustawienia osobiste innego użytkownika.",
        "showpreview": "Pokaż podgląd",
        "showdiff": "Podgląd zmian",
        "blankarticle": "<strong>Uwaga:</strong> Strona, którą masz zamiar utworzyć jest pusta.\nJeżeli klikniesz \"{{int:savearticle}}\" ponownie, strona zostanie utworzona bez jakiejkolwiek treści.",
-       "anoneditwarning": "'''Uwaga:''' Nie jesteś {{GENDER:|zalogowany|zalogowana}}.\nTwój adres IP zostanie zapisany w historii edycji strony.",
+       "anoneditwarning": "<strong>Uwaga:</strong> Nie jesteś zalogowany. Twój adres IP będzie publicznie widoczny jeśli zrobisz dowolną zmianę. Jeśli <strong>[$1 zalogujesz się]</strong> lub <strong>[$2 stworzysz konto]</strong>, Twoje zmiany zostaną przypisane do konta, wraz z innymi korzyściami.",
        "anonpreviewwarning": "''Nie jesteś zalogowany. Jeśli zapiszesz zmiany, w historii edycji strony zostanie umieszczony Twój adres IP.''",
        "missingsummary": "'''Uwaga:''' Nie wprowadz{{GENDER:|iłeś|iłaś|ono}} opisu zmian.\nJeżeli nie chcesz go wprowadzać, naciśnij przycisk „Zapisz” jeszcze raz.",
        "missingcommenttext": "Wprowadź komentarz poniżej.",
        "content-model-text": "zwykły tekst",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Strony używają duplikaty argumentów w odwołaniach do szablonów.",
+       "duplicate-args-category-desc": "Strona zawiera szablony, które używają duplikaty argumentów, jak <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> lub <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>",
        "expensive-parserfunction-warning": "Uwaga! Ta strona zawiera zbyt wiele wywołań złożonych obliczeniowo funkcji parsera.\n\nPowinno być mniej niż $2 {{PLURAL:$2|wywołanie|wywołania|wywołań}}, a obecnie {{PLURAL:$1|jest $1 wywołanie|są $1 wywołania|jest $1 wywołań}}.",
        "expensive-parserfunction-category": "Strony ze zbyt dużą liczbą wywołań kosztownych funkcji parsera",
        "post-expand-template-inclusion-warning": "Uwaga – zbyt duża wielkość wykorzystanych szablonów.\nNiektóre szablony nie zostaną użyte.",
        "mergehistory-same-destination": "Strona źródłowa i docelowa nie mogą być takie same",
        "mergehistory-reason": "Powód",
        "mergelog": "Scalone",
-       "pagemerge-logentry": "scala [[$1]] z [[$2]] (historia zmian aż do $3)",
        "revertmerge": "Rozdziel",
        "mergelogpagetext": "Poniżej znajduje się lista ostatnich scaleń historii zmian stron.",
        "history-title": "$1: Historia wersji",
        "gender-female": "kobieta",
        "prefs-help-gender": "Podanie płci nie jest obowiązkowe. Jeśli zdecydujesz się ją określić, oprogramowanie dostosuje do niej interfejs. Informacja o Twojej płci będzie widoczna dla wszystkich.",
        "email": "E‐mail",
-       "prefs-help-realname": "Wpisanie imienia i nazwiska nie jest obowiązkowe.\nJeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje autorstwo.",
+       "prefs-help-realname": "Imię i nazwisko jest opcjonalne.\nJeśli je podasz, to może być stosowane w celu przypisania Twojej pracy.",
        "prefs-help-email": "Podanie adresu e‐mail nie jest obowiązkowe, lecz jest konieczne do zresetowania zapomnianego hasła.",
        "prefs-help-email-others": "Możesz również umożliwić innym użytkownikom wysłanie do Ciebie e‐maila poprzez Twoją stronę użytkownika lub stronę dyskusji (bez ujawniania Twojego adresu).",
        "prefs-help-email-required": "Wymagany jest adres e‐mail.",
        "statistics": "Statystyki",
        "statistics-header-pages": "Statystyka stron",
        "statistics-header-edits": "Statystyka edycji",
-       "statistics-header-views": "Statystyka odwiedzin",
        "statistics-header-users": "Statystyka użytkowników",
        "statistics-header-hooks": "Inne statystyki",
        "statistics-articles": "Strony",
        "statistics-files": "Przesłane pliki",
        "statistics-edits": "Edycje wykonane od powstania {{GRAMMAR:D.lp|{{SITENAME}}}}",
        "statistics-edits-average": "Średnia liczba edycji na stronę",
-       "statistics-views-total": "Całkowita liczba odwiedzin",
-       "statistics-views-total-desc": "Odsłony stron nieistniejących oraz specjalnych nie zostały uwzględnione.",
-       "statistics-views-peredit": "Liczba odwiedzin na edycję",
        "statistics-users": "Zarejestrowanych [[Special:ListUsers|użytkowników]]",
        "statistics-users-active": "Aktywnych użytkowników",
        "statistics-users-active-desc": "Użytkownicy, którzy byli aktywni w ciągu {{PLURAL:$1|ostatniego dnia|ostatnich $1 dni}}",
-       "statistics-mostpopular": "Najczęściej odwiedzane strony",
        "pageswithprop": "Strony z właściwościami",
        "pageswithprop-legend": "Strony z właściwościami",
        "pageswithprop-text": "Ta strona zawiera listę stron korzystających z właściwości.",
        "uncategorizedtemplates": "Nieskategoryzowane szablony",
        "unusedcategories": "Puste kategorie",
        "unusedimages": "Nieużywane pliki",
-       "popularpages": "Najpopularniejsze strony",
        "wantedcategories": "Brakujące kategorie",
        "wantedpages": "Najpotrzebniejsze strony",
        "wantedpages-badtitle": "Nieprawidłowy tytuł wśród wyników – $1",
        "pager-older-n": "{{PLURAL:$1|1 starszy|$1 starsze|$1 starszych}}",
        "suppress": "Rewizor",
        "querypage-disabled": "Ta strona specjalna została wyłączona ze względu na ograniczenia wydajności.",
+       "apihelp": "Pomoc API",
+       "apihelp-no-such-module": "Moduł \"$1\" nie znaleziony.",
        "booksources": "Książki",
        "booksources-search-legend": "Szukaj informacji o książkach",
        "booksources-search": "Szukaj",
        "tooltip-pt-mycontris": "Lista moich edycji",
        "tooltip-pt-login": "Zachęcamy do zalogowania się, choć nie jest to obowiązkowe.",
        "tooltip-pt-logout": "Wyloguj",
+       "tooltip-pt-createaccount": "Zachęcamy do stworzenia konta i zalogowania, ale nie jest to konieczne.",
        "tooltip-ca-talk": "Dyskusja o zawartości tej strony",
        "tooltip-ca-edit": "Możesz edytować tę stronę. Przed zapisaniem zmian użyj przycisku podgląd.",
        "tooltip-ca-addsection": "Dodaj nowy wątek.",
        "tooltip-feed-atom": "Kanał Atom dla tej strony",
        "tooltip-t-contributions": "Pokaż listę edycji tego użytkownika",
        "tooltip-t-emailuser": "Wyślij e‐mail do tego użytkownika",
+       "tooltip-t-info": "Więcej informacji na temat tej strony",
        "tooltip-t-upload": "Prześlij plik",
        "tooltip-t-specialpages": "Lista wszystkich specjalnych stron",
        "tooltip-t-print": "Wersja do wydruku",
        "pageinfo-robot-policy": "Indeksowanie przez roboty",
        "pageinfo-robot-index": "Dozwolone",
        "pageinfo-robot-noindex": "Niedozwolone",
-       "pageinfo-views": "Odsłon",
        "pageinfo-watchers": "Liczba obserwujących",
        "pageinfo-few-watchers": "Mniej niż $1 {{PLURAL:$1|obserwujący|obserwujących}}",
        "pageinfo-redirects-name": "Liczba przekierowań do tej strony",
        "searchsuggest-search": "Szukaj",
        "searchsuggest-containing": "zawierające...",
        "api-error-badaccess-groups": "Nie masz uprawnień aby przesyłać pliki do tej wiki.",
-       "api-error-badtoken": "Błąd wewnętrzny – żeton wykorzystywany do identyfikacji użytkownika jest nieprawidłowy.",
+       "api-error-badtoken": "Błąd wewnętrzny – nieprawidłowy kod weryfikacyjny (token).",
        "api-error-copyuploaddisabled": "Przesyłanie poprzez podanie adresu URL zostało na tym serwerze wyłączone.",
        "api-error-duplicate": "{{PLURAL:$1|Jest już [$2 inny plik]|Są już [$2 inne pliki]}} o tej samej zawartości",
        "api-error-duplicate-archive": "{{PLURAL:$1|Był już [$2 inny plik]|Były już [$2 inne pliki]}} o takiej samej zawartości, ale {{PLURAL:$1|został usunięty|zostały usunięte}}.",
index 2fae44f..6c3b6e5 100644 (file)
        "viewsourcetext": "A peul vardé e copié la sorgiss dë sta pàgina:",
        "viewyourtext": "A peul vëdde e copié la sorgiss ëd '''soe modìfiche''' a costa pàgina-sì:",
        "protectedinterface": "Costa pàgina-sì a l'ha andrinta un cheicòs che a fa part dl'antërfacia dël programa che a deuvro tùit; donca a l'é proteta për evité che a-i rivo dle ròbe brute.\nPër gionté o modifiché dle tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/ translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
-       "editinginterface": "'''Dossman!''' A l'é dapress ch'a modìfica na pàgina ch'as deuvra për generé ël test dl'antërfacia dël programa. \nLe modìfiche a sta pàgina a toco l'aparensa ëd l'antërfacia utent a tuti j'utent dzora a sta wiki. \nPër gionté o cangé dle tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
+       "editinginterface": "<strong>Dossman!</strong> A l'é dapress ch'a modìfica na pàgina ch'as deuvra për generé ël test dl'antërfacia dël programa. \nLe modìfiche a sta pàgina a toco l'aparensa ëd l'antërfacia utent a tuti j'utent dzora a sta wiki.",
+       "translateinterface": "Për gionté o modifiché le tradussion për tute le wiki, për piasì ch'a deuvra [//translatewiki.net/ translatewiki.net], ël proget ëd localisassion ëd MediaWiki.",
        "cascadeprotected": "Ant sta pàgina-sì as peulo pa fé ëd modìfiche, përché a-i intra ant {{PLURAL:$1|la pàgina|le pàgine}} butà sot a protession con la fonsion «a tombé» viscà ansima a: $2",
        "namespaceprotected": "A l'ha nen ël përmess dë feje dle modìfiche a le pàgine dlë spassi nominal '''$1'''.",
        "customcssprotected": "Ch'a varda ch'a l'ha pa ël përmess ëd modifiché sta pàgina ëd CSS, për via ch'a l'ha andrinta ij gust ëd n'àutr utent.",
        "content-model-text": "mach test",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pàgine ch'a deuvro d'argoment dobi ant j'arceste dë stamp",
+       "duplicate-args-category-desc": "La pàgina a conten cj'arceste dë stamp che deuvro ëd duplicà d'argoment, tanme <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Atension:''' Costa pàgina a l'ha tròpe ciamà costose a le fonsions d'anàlisi sintàtica.\n\nA dovrìa essnie men che {{PLURAL:$2|$2}}, adess a-i na j'é {{PLURAL:$1|$1}}.",
        "expensive-parserfunction-category": "Pàgine con tròpe ciamà costose ëd fonsion ëd l'analisator sintàtich",
        "post-expand-template-inclusion-warning": "'''Atension:''' La dimension dj'anseriment dë stamp a l'é tròp gròssa.\nChèich stamp a saran nen anserì.",
        "mergehistory-same-destination": "La pagina ëd partensa e cola d'ariv a peulo nen esse le mideme",
        "mergehistory-reason": "Rason:",
        "mergelog": "Registr dj'union",
-       "pagemerge-logentry": "a l'ha butà [[$1]] ansema a [[$2]] (revision fin-a a la $3)",
        "revertmerge": "Gavé da ansema",
        "mergelogpagetext": "Ambelessì sota a-i é na lista dj'ùltime vire che la stòria ëd na pàgina a l'é stàita butà ansema a cola 'd n'àutra.",
        "history-title": "$1: Cronologìa dle modìfiche",
        "gender-female": "Chila a modìfica dle pàgine dla wiki",
        "prefs-help-gender": "Definì coste preferense a l'é opsional.\nËl programa a deuvra sò valor për adressesse a chiel e massionelo a j'àutri an dovrand ël géner gramatical giust.\nCosta anformassion a sarà pùblica.",
        "email": "Pòsta eletrònica",
-       "prefs-help-realname": "* Nòm vèir (opsional): se i sërne da butelo ambelessì a sarà dovrà për deve mérit ëd vòstr travaj.",
+       "prefs-help-realname": "Ël nòm ver a l'é opsional).\nSe a l'é butà, a podrà esse dovrà për deje mérit ëd sò travaj.",
        "prefs-help-email": "L'adrëssa ëd pòsta eletrònica a l'é opsional, ma a-i n'a j'é dabzògn për torna amposté la ciav, s'a dovèissa dësmentié soa ciav.",
        "prefs-help-email-others": "A peul ëdcò serne ëd lassé che j'àutri a lo contato a travers soa pàgina utent o ëd ciaciarada sensa ch'a-i sia da manca d'arvelé soa identità.",
        "prefs-help-email-required": "A-i va l'adrëssa ëd pòsta eletrònica.",
        "statistics": "Statìstiche",
        "statistics-header-pages": "Statìstiche dla pàgina",
        "statistics-header-edits": "Statìstiche dle modìfiche",
-       "statistics-header-views": "Statìstiche dle visualisassion",
        "statistics-header-users": "Statìstiche ëd {{SITENAME}}",
        "statistics-header-hooks": "Àutre statìstiche",
        "statistics-articles": "Pàgine ëd contnù",
        "statistics-files": "Archivi carià",
        "statistics-edits": "Pàgine modificà da quand ël {{SITENAME}} a l'é stàit tirà su",
        "statistics-edits-average": "Media dle modìfiche për pàgina",
-       "statistics-views-total": "Total dle visualisassion",
-       "statistics-views-total-desc": "Le visualisassion ëd le pàgine pa esistente e ëd le pàgine speciaj a son nen comprèise",
-       "statistics-views-peredit": "Visualisassion për modìfica",
        "statistics-users": "[[Special:ListUsers|Utent]] argistrà",
        "statistics-users-active": "Utent ativ",
        "statistics-users-active-desc": "Utent che a l'han fàit n'assion ant {{PLURAL:$1|l'ùltim di|j'ùltim $1 di}}",
-       "statistics-mostpopular": "Pàgine ch'a 'ncontro dë pì",
        "pageswithprop": "Pàgine con na propietà ëd pàgina",
        "pageswithprop-legend": "Pàgine con na propietà ëd pàgina",
        "pageswithprop-text": "Costa pàgina a lista le pàgine ch'a deuvro na propietà 'd pàgina particolar.",
        "uncategorizedtemplates": "Stamp sensa pa 'd categorìe",
        "unusedcategories": "Categorìe nen dovrà",
        "unusedimages": "Figure nen dovrà",
-       "popularpages": "Pàgine pì s-ciairà",
        "wantedcategories": "Categorìe dont a fa da manca",
        "wantedpages": "Artìcoj pì ciamà",
        "wantedpages-badtitle": "Tìtol nen vàlid ant l'ansema dj'arzultà: $1",
        "pager-older-n": "{{PLURAL:$1|1|$1}} pì vej",
        "suppress": "Supervisor",
        "querypage-disabled": "Sta pàgina special a l'é disabilità për dle rason ëd prestassion.",
+       "apihelp": "Agiut ëd l'API",
+       "apihelp-no-such-module": "Ël mòdol «$1» as treuva nen.",
        "booksources": "Andoa trové dij lìber",
        "booksources-search-legend": "Sërché antra ij lìber d'arferiment",
        "booksources-search": "Arserché",
        "tooltip-pt-mycontris": "Lista ëd soe contribussion",
        "tooltip-pt-login": "Un a l'é nen obligà a rintré ant al sistema, ma se a lo fa a l'é mej",
        "tooltip-pt-logout": "Seurte da",
+       "tooltip-pt-createaccount": "I-j consejoma ëd creé un cont e ëd rintré ant ël sistema; però a l'é nen obligatòri",
        "tooltip-ca-talk": "Discussion ansima a sta pàgina ëd contnù.",
        "tooltip-ca-edit": "A peul modifiché sa pàgina-sì. Për piasì, che as fasa na preuva anans che salvé.",
        "tooltip-ca-addsection": "Ancaminé na neuva session",
        "tooltip-feed-atom": "Fluss Atom për costa pàgina.",
        "tooltip-t-contributions": "Vardé la lista dle contribussion ëd cost utent",
        "tooltip-t-emailuser": "Mandeje un mëssagi ëd pòsta a st'utent",
+       "tooltip-t-info": "Pi d'anformassio su costa pàgina",
        "tooltip-t-upload": "Carié n'archivi ëd figure ò son.",
        "tooltip-t-specialpages": "Lista ëd tute le pàgine speciaj.",
        "tooltip-t-print": "Version bon-a da stampé dë sta pàgina",
        "pageinfo-robot-policy": "Indicisassion con robò",
        "pageinfo-robot-index": "Autorisà",
        "pageinfo-robot-noindex": "Vietà",
-       "pageinfo-views": "Nùmer ëd vìsite",
        "pageinfo-watchers": "Vàire utent ch'a ten-o sot-euj la pàgina",
        "pageinfo-few-watchers": "Men ëd $1 {{PLURAL:$1|osservator}}",
        "pageinfo-redirects-name": "Nùmer ëd ridiression vers costa pàgina-sì",
        "unknown_extension_tag": "Tichëtta d'estension «$1» pa conossùa",
        "duplicate-defaultsort": "'''Atension:''' La ciav d'ordinament ëstàndard «$2» a pija ël pòst ëd cola ëd prima «$1».",
        "duplicate-displaytitle": "<strong>Warning:</strong> ël tìtol ëd visualisassion «$2» a rampiassa ëd vej tìtol ëd visualisassion «$1».",
+       "invalid-indicator-name": "<strong>Eror:</strong> l'atribù <code>name</code> dj'andicator dlë statù dla pàgina a peul nen esse veuid.",
        "version": "Version",
        "version-extensions": "Estension anstalà",
        "version-skins": "Pel anstalà",
        "revdelete-uname-unhid": "stranòm dëscoatà",
        "revdelete-restricted": "restrission aplicà a j'aministrator",
        "revdelete-unrestricted": "restrission për j'aministrator gavà",
+       "logentry-merge-merge": "$1 {{GENDER:$2|a l'ha gionzù}} $3 an $4 (revision fin-a a $5)",
        "logentry-move-move": "$1 {{GENDER:$2|a l'ha tramudà}} la pàgina $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a l'ha tramudà}} la pàgina $3 a $4 sensa lassé na ridiression",
        "logentry-move-move_redir": "$1 {{GENDER:$2|a l'ha tramudà}} la pàgina $3 a $4 ansima a na ridiression",
index a734e03..2104dc8 100644 (file)
        "mergehistory-same-destination": "As páginas de origem e de destino não podem ser a mesma",
        "mergehistory-reason": "Motivo:",
        "mergelog": "Registo de fusão de históricos",
-       "pagemerge-logentry": "[[$1]] foi fundida em [[$2]] (até a edição $3)",
        "revertmerge": "Desfazer fusão",
        "mergelogpagetext": "Segue-se um registo das mais recentes fusões de históricos de páginas.",
        "history-title": "Histórico de edições de \"$1\"",
        "gender-female": "Ela edita páginas wiki",
        "prefs-help-gender": "Esta preferência é opcional.\nO software usa o seu valor para o endereçar e para o mencionar a outros usando o género gramatical apropriado.\nEsta informação será pública.",
        "email": "Correio eletrónico",
-       "prefs-help-realname": "O fornecimento do nome verdadeiro é opcional.\nSe optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu trabalho.",
+       "prefs-help-realname": "O fornecimento do nome verdadeiro é opcional.\nSe optar por revelá-lo, será utilizado para atribuir-lhe crédito pelo seu trabalho.",
        "prefs-help-email": "Opcional: o endereço de correio eletrónico é opcional, mas será necessário para redefinir a palavra-passe caso esqueça a antiga.",
        "prefs-help-email-others": "Também pode optar por permitir que outros entrem em contacto consigo por correio eletrónico, através de uma ligação nas suas páginas de utilizador ou de discussão, sem revelar o seu endereço de correio eletrónico.",
        "prefs-help-email-required": "É necessário o endereço de correio eletrónico.",
        "statistics": "Estatísticas",
        "statistics-header-pages": "Estatísticas de páginas",
        "statistics-header-edits": "Estatísticas de edições",
-       "statistics-header-views": "Ver estatísticas",
        "statistics-header-users": "Estatísticas de utilizadores",
        "statistics-header-hooks": "Outras estatísticas",
        "statistics-articles": "Páginas de conteúdo",
        "statistics-files": "Ficheiros carregados",
        "statistics-edits": "Edições de páginas desde que a {{SITENAME}} foi instalada",
        "statistics-edits-average": "Média de edições por página",
-       "statistics-views-total": "Total de visionamentos",
-       "statistics-views-total-desc": "Não estão incluídos os visionamentos de páginas inexistentes e páginas especiais",
-       "statistics-views-peredit": "Visionamentos por edição",
        "statistics-users": "[[Special:ListUsers|Utilizadores]] registados",
        "statistics-users-active": "Utilizadores ativos",
        "statistics-users-active-desc": "Utilizadores que efectuaram uma operação {{PLURAL:$1|no último dia|nos últimos $1 dias}}",
-       "statistics-mostpopular": "Páginas mais vistas",
        "pageswithprop": "Páginas com uma propriedade",
        "pageswithprop-legend": "Páginas com uma propriedade",
        "pageswithprop-text": "Esta página lista páginas que usam uma propriedade em particular.",
        "uncategorizedtemplates": "Predefinições não categorizadas",
        "unusedcategories": "Categorias não utilizadas",
        "unusedimages": "Ficheiros não utilizados",
-       "popularpages": "Páginas populares",
        "wantedcategories": "Categorias desejadas",
        "wantedpages": "Páginas desejadas",
        "wantedpages-badtitle": "Título inválido no conjunto de resultados: $1",
        "pager-older-n": "{{PLURAL:$1|1 anterior|$1 anteriores}}",
        "suppress": "Supervisor",
        "querypage-disabled": "Esta página especial está desativada para não prejudicar o desempenho.",
+       "apihelp": "Ajuda API",
+       "apihelp-no-such-module": "Módulo \"$1\" não encontrado.",
        "booksources": "Fontes bibliográficas",
        "booksources-search-legend": "Pesquisar referências bibliográficas",
        "booksources-search": "Pesquisar",
        "tooltip-pt-mycontris": "Lista das suas contribuições",
        "tooltip-pt-login": "É encorajado que inicie sessão, apesar de não ser obrigatório.",
        "tooltip-pt-logout": "Sair da conta",
+       "tooltip-pt-createaccount": "É encorajado a criar uma conta e iniciar sessão; no entanto, não é obrigatório",
        "tooltip-ca-talk": "Discussão sobre o conteúdo da página",
        "tooltip-ca-edit": "Pode editar esta página.\nUtilize o botão de antevisão do resultado antes de gravar, por favor.",
        "tooltip-ca-addsection": "Iniciar uma nova seção",
        "tooltip-feed-atom": "''Feed'' Atom desta página",
        "tooltip-t-contributions": "Ver as contribuições deste utilizador",
        "tooltip-t-emailuser": "Enviar uma mensagem de correio a este utilizador",
+       "tooltip-t-info": "Mais informações sobre esta página",
        "tooltip-t-upload": "Carregar ficheiros",
        "tooltip-t-specialpages": "Lista de páginas especiais",
        "tooltip-t-print": "Versão para impressão desta página",
        "pageinfo-robot-policy": "Indexação por robôs",
        "pageinfo-robot-index": "Permitida",
        "pageinfo-robot-noindex": "Não permitida",
-       "pageinfo-views": "Número de visitas",
        "pageinfo-watchers": "Número de vigilantes da página",
        "pageinfo-few-watchers": "Menos do que $1 {{PLURAL:$1|vigilante|vigilantes}}",
        "pageinfo-redirects-name": "Número de redirecionamentos para esta página",
index 99aecb0..edd522a 100644 (file)
        "viewyourtext": "Same as {{msg-mw|viewsourcetext}} but when showing the text submitted by the user, this happens e.g. when the user was blocked while he is editing the page",
        "protectedinterface": "Message shown if a user without the \"editinterface\" right tries to edit a page in the MediaWiki namespace.\n\nSee also {{msg-mw|editinginterface}}. Parameters:\n* $1 - (Unused) the action the user attempted to perform",
        "editinginterface": "A message shown when editing pages in the namespace MediaWiki:.\n\nSee also {{msg-mw|protectedinterface}}.",
+       "translateinterface": "A message shown when editing pages in the namespace MediaWiki:, which have a default message text.\n\nSee also:\n* {{msg-mw|Protectedinterface}}\n* {{msg-mw|Editinginterface}}",
        "cascadeprotected": "Parameters:\n* $1 - number of cascade-protected pages, used for PLURAL\n* $2 - list of cascade-protected pages\n* $3 - (Unused) the action the user attempted to perform",
        "namespaceprotected": "Parameters:\n* $1 - namespace name\n* $2 - (Unused) the action the user attempted to perform",
        "customcssprotected": "Used as error message. Parameters:\n* $1 - (Unused) the action the user attempted to perform",
        "content-model-text": "Name for the plain text content model, used when decribing what type of content a page contains.\n\nThis message is substituted in:\n*{{msg-mw|Bad-target-model}}\n*{{msg-mw|Content-not-allowed-here}}\n{{Identical|Plain text}}",
        "content-model-javascript": "Name for the JavaScript content model, used when decribing what type of content a page contains.\n\nThis message is substituted in:\n*{{msg-mw|Bad-target-model}}\n*{{msg-mw|Content-not-allowed-here}}",
        "content-model-css": "Name for the CSS content model, used when decribing what type of content a page contains.\n\nThis message is substituted in:\n*{{msg-mw|Bad-target-model}}\n*{{msg-mw|Content-not-allowed-here}}",
+       "duplicate-args-category": "This message is used as a category name for a [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages are placed automatically if they contain template calls that use duplicates of arguments, such as <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+       "duplicate-args-category-desc": "Duplicate arguments category description. Shown on [[Special:TrackingCategories]].\n\nSee also:\n* {{msg-mw|Duplicate-args-category}}",
        "expensive-parserfunction-warning": "On some (expensive) [[MetaWikipedia:Help:ParserFunctions|parser functions]] (e.g. <code><nowiki>{{#ifexist:}}</nowiki></code>) there is a limit of how many times it may be used. This is an error message shown when the limit is exceeded.\n\nParameters:\n* $1 - the current number of parser function calls\n* $2 - the allowed number of parser function calls\nSee also [[:mw:Manual:$wgExpensiveParserFunctionLimit|$wgExpensiveParserFunctionLimit in the MediaWiki manual]].\n\nSee also:\n* {{msg-mw|Expensive-parserfunction-category}}",
        "expensive-parserfunction-category": "This message is used as a category name for a [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages are placed automatically if they contain too many calls to expensive parser functions.\n\nSee also:\n* {{msg-mw|Expensive-parserfunction-category-desc}}\n* {{msg-mw|Expensive-parserfunction-warning}}",
        "post-expand-template-inclusion-warning": "When templates are expanded, there is a size limit for the number of bytes yielded. Usually that occurs from excessively nested templates, recursive templates, or ones having x-zillion of #if #case or similar contructs in them. When the wikicode parser detects this, it outputs a red warning message to the page.\n\n\nSee also:\n* {{msg-mw|Post-expand-template-inclusion-category}}",
        "mergehistory-reason": "{{Identical|Reason}}",
        "mergehistory-revisionrow": "{{Optional}}\nA revision row in the merge history page. Parameters:\n* $1 - a radio button to indicate a merge point\n* $2 - a link to the last revision of a page ({{msg-mw|Last}})\n* $3 - a page link\n* $4 - a user link\n* $5 - a revision size\n* $6 - a revision comment",
        "mergelog": "{{doc-logpage}}\n\nThis is the name of a log of merge actions done on [[Special:MergeHistory]]. This special page and this log is not enabled by default.",
-       "pagemerge-logentry": "This log message is used in a merge log entry.\n\nParameters:\n* $1 - the page name of the source of the content to be merged\n* $2 - the page into which the content is merged\n* $3 - a timestamp of limit\n\nThe log and its associated special page 'MergeHistory' is not enabled by default.\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
+       "pagemerge-logentry": "{{ignored}}This is ''logentry'' message only used on IRC.\n\nParameters:\n* $1 - the page name of the source of the content to be merged\n* $2 - the page into which the content is merged\n* $3 - a timestamp of limit\n\nThe log and its associated special page 'MergeHistory' is not enabled by default.\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
        "revertmerge": "Used as link text",
        "mergelogpagetext": "Description of the [{{canonicalurl:Special:Log|type=merge&user=&page=&year=&month=-1}} merge log], on the log. The associated [[Special:MergeHistory|Merge]] special page is not enabled by default.",
        "history-title": "Displayed as page title when you click on the \"history\" tab. Parameters:\n* $1 - the normal page title",
        "statistics-summary": "{{doc-specialpagesummary|statistics}}",
        "statistics-header-pages": "Used in [[Special:Statistics]]",
        "statistics-header-edits": "Used in [[Special:Statistics]]",
-       "statistics-header-views": "Used in [[Special:Statistics]]",
        "statistics-header-users": "Used in [[Special:Statistics]].\n{{Identical|User statistics}}",
        "statistics-header-hooks": "Header of a section on [[Special:Statistics]] containing data provided by MediaWiki extensions",
        "statistics-articles": "Used in [[Special:Statistics]].\n\nA 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For technical definition of 'content namespaces' see [[mw:Manual:Using_custom_namespaces#Content_namespaces|MediaWiki]].\n\nPossible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.\n\n{{Identical|Content page}}",
        "statistics-files": "Used in [[Special:Statistics]].\n{{Identical|Uploaded file}}",
        "statistics-edits": "Used in [[Special:Statistics]]",
        "statistics-edits-average": "Used in [[Special:Statistics]]",
-       "statistics-views-total": "Used in [[Special:Statistics]]",
-       "statistics-views-total-desc": "This message follows the message {{msg-mw|statistics-views-total}}, in [[Special:Statistics]].",
-       "statistics-views-peredit": "Used in [[Special:Statistics]]",
        "statistics-users": "{{doc-important|Do not translate \"Special:ListUsers\"}}\nUsed in [[Special:Statistics]].",
        "statistics-users-active": "Used in [[Special:Statistics]]",
        "statistics-users-active-desc": "Description shown beneath ''Active users'' in [[Special:Statistics]]. Parameters:\n* $1 - Value of <code>$wgRCMaxAge</code> in days",
-       "statistics-mostpopular": "Used in [[Special:Statistics]]",
        "statistics-footer": "{{notranslate}}",
        "pageswithprop": "{{doc-special|PagesWithProp}}\n{{Identical|Page with page property}}",
        "pageswithprop-summary": "{{doc-specialpagesummary|pageswithprop}}",
        "unusedcategories-summary": "{{doc-specialpagesummary|unusedcategories}}",
        "unusedimages": "{{doc-special|UnusedImages}}",
        "unusedimages-summary": "{{doc-specialpagesummary|unusedimages}}",
-       "popularpages": "{{doc-special|PopularPages}}",
-       "popularpages-summary": "{{doc-specialpagesummary|popularpages}}",
        "wantedcategories": "{{doc-special|WantedCategories}}",
        "wantedcategories-summary": "{{doc-specialpagesummary|wantedcategories}}",
        "wantedpages": "{{doc-special|WantedPages}}\n{{Identical|Wanted page}}",
        "pageinfo-robot-policy": "The search engine status of the page.\n\nUsed as label. Followed by any one of the following messages:\n*{{msg-mw|Pageinfo-robot-index}}\n*{{msg-mw|Pageinfo-robot-noindex}}",
        "pageinfo-robot-index": "An indication that the page is indexable by search engines, that is listed in their search results.\n\nPreceded by the label {{msg-mw|Pageinfo-robot-policy}}.",
        "pageinfo-robot-noindex": "An indication that the page is not indexable (that is, is not listed on the results page of a search engine).\n\nPreceded by the label {{msg-mw|Pageinfo-robot-policy}}.",
-       "pageinfo-views": "The number of times the page has been viewed.",
        "pageinfo-watchers": "Header of the row in the first table of the info action.",
        "pageinfo-few-watchers": "Message displayed when there are fewer than $wgUnwatchedPageThreshold watchers. $1 is the value of $wgUnwatchedPageThreshold.",
        "pageinfo-redirects-name": "Header of the row in the first table of the info action.\n\nFollowed by {{msg-mw|Pageinfo-redirects-value}}.\n\nUsed as link text. The link points to \"{{int:Whatlinkshere-title}}\" page ([[Special:WhatLinksHere]]).\n\nSee example: [{{canonicalurl:Main page|action=info}} Main page?action=info]",
        "unknown_extension_tag": "This is an error shown when you use an unknown extension tag name.\n\nThis feature allows tags like <code><nowiki><pre></nowiki></code> to be called with a parser like <code><nowiki>{{#tag:pre}}</nowiki></code>.\n\nParameters:\n* $1 - the unknown extension tag name",
        "duplicate-defaultsort": "See definition of [[w:Sorting|sort key]] on Wikipedia. Parameters:\n* $1 - old default sort key\n* $2 - new default sort key",
        "duplicate-displaytitle": "Warning shown when a page has its display title set multiple times. Parameters:\n* $1 - old display title\n* $2 - new display title",
+       "invalid-indicator-name": "Warning shown when the [https://www.mediawiki.org/wiki/Help:Page_status_indicators &lt;indicator name=\"''unique-identifier''\">''content''&lt;/indicator>] parser tag is used incorrectly.",
        "version": "{{doc-special|Version}}\n{{Identical|Version}}",
        "version-summary": "{{doc-specialpagesummary|version}}",
        "version-extensions": "Header on [[Special:Version]].",
        "revdelete-uname-unhid": "Used on\n* {{msg-mw|logentry-delete-event}}\n* {{msg-mw|logentry-delete-revision}}\n* {{msg-mw|logentry-suppress-event}}\n* {{msg-mw|logentry-suppress-event}}",
        "revdelete-restricted": "Used as <code>$4</code> in the following messages when setting visibility restrictions for administrators:\n* {{msg-mw|Logentry-delete-event}}\n* {{msg-mw|Logentry-delete-revision}}\n* {{msg-mw|Logentry-suppress-event}}\n* {{msg-mw|Logentry-suppress-event}}",
        "revdelete-unrestricted": "Used as <code>$4</code> in the following messages when setting visibility restrictions for administrators:\n* {{msg-mw|Logentry-delete-event}}\n* {{msg-mw|Logentry-delete-revision}}\n* {{msg-mw|Logentry-suppress-event}}\n* {{msg-mw|Logentry-suppress-event}}",
+       "logentry-merge-merge": "{{Logentry|[[Special:Log/merge]]}}\n* $4 - the page into which the content is merged\n* $5 - a timestamp of limit\n\nThe log and its associated special page 'MergeHistory' is not enabled by default.\n\nPlease note that the parameters in a log entry will appear in the log only in the default language of the wiki. View [[Special:Log]] for examples on translatewiki.net with English default language.",
        "logentry-move-move": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
        "logentry-move-move-noredirect": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
        "logentry-move-move_redir": "{{Logentry|[[Special:Log/move]]}}\nParameter $4, the target page, is also not visible to parser functions.",
index 8e10c40..e1b43d1 100644 (file)
        "viewsourcetext": "Se poate vizualiza și copia conținutul acestei pagini:",
        "viewyourtext": "Se poate vizualiza și copia conținutul '''modificărilor dumneavoastră''' efectuate asupra acestei pagini:",
        "protectedinterface": "Această pagină asigură textul interfeței pentru software și este protejată pentru a preveni abuzurile.\nPentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki de localizare.",
-       "editinginterface": "'''Avertizare''': Modificați o pagină care este folosită pentru a furniza textul interfeței software.\nModificările aduse acestei pagini vor afecta aspectul interfeței pentru alți utilizatori ai acestui wiki.\nPentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki de localizare.",
+       "editinginterface": "<strong>Avertizare</strong>: Modificați o pagină care este folosită pentru a furniza textul interfeței software.\nModificările aduse acestei pagini vor afecta aspectul interfeței pentru alți utilizatori ai acestui wiki.",
+       "translateinterface": "Pentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki pentru localizare.",
        "cascadeprotected": "Această pagină a fost protejată la scriere deoarece este inclusă în {{PLURAL:$1|următoarea pagină|următoarele pagini}}, care {{PLURAL:$1|este protejată|sunt protejate}} în cascadă:\n$2",
        "namespaceprotected": "Nu aveți permisiunea de a modifica pagini din spațiul de nume '''$1'''.",
        "customcssprotected": "Nu aveți permisiunea de a modifica această pagină CSS, deoarece conține setările personale ale altui utilizator.",
        "content-model-text": "text simplu",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Pagini care folosesc argumente duplicate în apelarea formatelor",
+       "duplicate-args-category-desc": "Pagina conține apelări ale formatelor care folosesc argumente duplicate, cum ar fi <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> sau <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Atenție: Această pagină conține prea multe apelări costisitoare ale funcțiilor parser.\n\nAr trebui să existe mai puțin de $2 {{PLURAL:$2|apelare|apelări}}, acolo există {{PLURAL:$1|$1 apelare|$1 apelări}}.",
        "expensive-parserfunction-category": "Pagini cu prea multe apelări costisitoare de funcții parser",
        "post-expand-template-inclusion-warning": "Atenție: Formatele incluse sunt prea mari.\nUnele formate nu vor fi incluse.",
        "mergehistory-same-destination": "Paginile sursă și destinație nu pot fi identice",
        "mergehistory-reason": "Motiv:",
        "mergelog": "Jurnal unificări",
-       "pagemerge-logentry": "combină [[$1]] cu [[$2]] (versiuni până la $3)",
        "revertmerge": "Anulează îmbinarea",
        "mergelogpagetext": "Mai jos este o listă a celor mai recente combinări ale istoricului unei pagini cu al alteia.",
        "history-title": "Istoricul versiunilor pentru „$1”",
        "gender-female": "Ea modifică pagini wiki",
        "prefs-help-gender": "Stabilirea acestei preferințe este opțională.\nAcest software folosește datele pentru a vi se adresa și pentru a face referire la dumneavoastră utilizând genul gramatical corespunzător.\nAceastă informație va fi publică.",
        "email": "E-mail",
-       "prefs-help-realname": "Numele real este opțional.\nDacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.",
+       "prefs-help-realname": "Numele real este opțional.\nDacă este furnizat, ar putea fi folosit pentru a vă atribui munca.",
        "prefs-help-email": "Adresa de e-mail este opțională, dar este necesară pentru recuperarea parolei în cazul în care o uitați.",
        "prefs-help-email-others": "Puteți de asemenea permite altora să vă contacteze prin intermediul paginii dumneavoastră de utilizator fără a vă divulga identitatea.",
        "prefs-help-email-required": "Adresa de e-mail este necesară.",
        "statistics": "Statistici",
        "statistics-header-pages": "Statistici pagini",
        "statistics-header-edits": "Statistici modificări",
-       "statistics-header-views": "Vizualizează statisticile",
        "statistics-header-users": "Statistici utilizatori",
        "statistics-header-hooks": "Alte statistici",
        "statistics-articles": "Articole",
        "statistics-files": "Fișiere încărcate",
        "statistics-edits": "Modificări de la instalarea proiectului {{SITENAME}}",
        "statistics-edits-average": "Media editărilor pe pagină",
-       "statistics-views-total": "Număr de vizualizări",
-       "statistics-views-total-desc": "Vizualizările paginilor inexistente și a paginilor speciale nu sunt incluse",
-       "statistics-views-peredit": "Vizualizări pe editare",
        "statistics-users": "[[Special:ListUsers|Utilizatori]] înregistrați",
        "statistics-users-active": "Utilizatori activi",
        "statistics-users-active-desc": "Utilizatori care au efectuat o acțiune în {{PLURAL:$1|ultima zi|ultimele $1 zile}}",
-       "statistics-mostpopular": "Paginile cele mai vizualizate",
        "pageswithprop": "Pagini cu o proprietate de pagină",
        "pageswithprop-legend": "Pagini cu o proprietate de pagină",
        "pageswithprop-text": "Această pagină listează paginile care utilizează o anumită proprietate de pagină.",
        "uncategorizedtemplates": "Formate necategorizate",
        "unusedcategories": "Categorii neutilizate",
        "unusedimages": "Pagini neutilizate",
-       "popularpages": "Pagini populare",
        "wantedcategories": "Categorii dorite",
        "wantedpages": "Pagini dorite",
        "wantedpages-badtitle": "Titlu invalid în rezultatele : $1",
        "pager-older-n": "{{PLURAL:$1|1|$1}} mai vechi",
        "suppress": "Oversight",
        "querypage-disabled": "Această pagină specială este dezactivată din motive de performanță.",
+       "apihelp": "Ajutor API",
+       "apihelp-no-such-module": "Modulul „$1” nu a fost găsit.",
        "booksources": "Surse de cărți",
        "booksources-search-legend": "Căutare surse pentru cărți",
        "booksources-search": "Caută",
        "tooltip-pt-mycontris": "Listă de contribuții",
        "tooltip-pt-login": "Sunteți încurajat să vă autentificați, deși acest lucru nu este obligatoriu.",
        "tooltip-pt-logout": "Închide sesiunea de lucru",
+       "tooltip-pt-createaccount": "Vă încurajăm să vă creați un cont și să vă autentificați; totuși, nu este obligatoriu",
        "tooltip-ca-talk": "Discuții despre această pagină",
        "tooltip-ca-edit": "Puteți modifica această pagină. Înainte de a o salva vă rugăm s-o previzualizați.",
        "tooltip-ca-addsection": "Adaugă o nouă secțiune.",
        "tooltip-feed-atom": "Alimentează fluxul Atom pentru această pagină",
        "tooltip-t-contributions": "Vezi lista de contribuții ale acestui utilizator",
        "tooltip-t-emailuser": "Trimite un e-mail acestui utilizator",
+       "tooltip-t-info": "Mai multe informații despre această pagină",
        "tooltip-t-upload": "Încărcare de fișiere",
        "tooltip-t-specialpages": "Lista tuturor paginilor speciale",
        "tooltip-t-print": "Versiunea de tipărit a acestei pagini",
        "pageinfo-robot-policy": "Indexare de către roboți",
        "pageinfo-robot-index": "Permisă",
        "pageinfo-robot-noindex": "Nepermisă",
-       "pageinfo-views": "Număr de vizualizări",
        "pageinfo-watchers": "Număr de utilizatori care urmăresc pagina",
        "pageinfo-few-watchers": "Mai puțin de {{PLURAL:$1|un urmăritor|$1 urmăritori|$1 de urmăritori}}",
        "pageinfo-redirects-name": "Număr de redirecționări către această pagină",
        "unknown_extension_tag": "Extensie etichetă necunoscută „$1”",
        "duplicate-defaultsort": "'''Atenție:''' Cheia de sortare implicită („$2”) o înlocuiește pe precedenta („$1”).",
        "duplicate-displaytitle": "<strong>Atenție:</strong> Titlul afișat „$2” înlocuieşte titlul afișat anterior, „$1”.",
+       "invalid-indicator-name": "<strong>Eroare:</strong> Parametrul <code>nume</code> al indicatorilor de stare a paginii nu trebuie să fie gol.",
        "version": "Versiune",
        "version-extensions": "Extensii instalate",
        "version-skins": "Aspecte instalate",
        "revdelete-uname-unhid": "numele de utilizator afișat",
        "revdelete-restricted": "restricții aplicate administratorilor",
        "revdelete-unrestricted": "restricții eliminate pentru administratori",
+       "logentry-merge-merge": "$1 {{GENDER:$2|a unificat}} $3 cu $4 (versiuni de până la $5)",
        "logentry-move-move": "$1 {{GENDER:$2|a redenumit}} pagina $3 în $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a redenumit}} pagina $3 în $4 fără a lăsa o redirecționare în loc",
        "logentry-move-move_redir": "$1 {{GENDER:$2|a redenumit}} pagina $3 în $4 înlocuind redirecționarea",
index b6d9584..3e851b8 100644 (file)
        "mergehistory-reason": "Mutive:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Archivije de le scuagghiaminde",
-       "pagemerge-logentry": "scuagghiate [[$1]] jndr'à [[$2]] (revisiune fine a $3)",
        "revertmerge": "Squascie",
        "mergelogpagetext": "Stte stè 'na liste de le cchiù recende scuagghiaminde de le cunde de le vosce jndr'à 'n'otre.",
        "history-title": "$1: Cunde de le revisiune",
        "statistics": "Statisteche",
        "statistics-header-pages": "Pàgene de le statisteche",
        "statistics-header-edits": "Cange le statisteche",
-       "statistics-header-views": "Vide le statisteche",
        "statistics-header-users": "Statisteche de l'utende",
        "statistics-header-hooks": "Otre statisteche",
        "statistics-articles": "Pàggene de le condenute",
        "statistics-files": "File carechete",
        "statistics-edits": "Cangiaminde de le pàggene da quanne sta {{SITENAME}} ha state ccrejete",
        "statistics-edits-average": "Cangiaminde medie pe pàgene",
-       "statistics-views-total": "Visite totele",
-       "statistics-views-total-desc": "Le viste cu le pàggene inesistende e le pàggene speciale non ge sonde ingluse",
-       "statistics-views-peredit": "Visite pe cangiaminde",
        "statistics-users": "[[Special:ListUsers|Utinde reggistrete]]",
        "statistics-users-active": "Utinde attive",
        "statistics-users-active-desc": "Sonde l'utinde ca onne fatte quacchecose jndr'à l'urteme {{PLURAL:$1|giurne|$1 giurne}}",
-       "statistics-mostpopular": "Pàggene cchiù visitete",
        "pageswithprop": "Pàggene cu 'na probbietà d'a pàgene",
        "pageswithprop-legend": "Pàggene cu 'na probbietà d'a pàgene",
        "pageswithprop-text": "Sta pàgene elenghe le pàggene ca ausane 'na particolare probbietà d'a pàgene.",
        "uncategorizedtemplates": "Template senza categorije",
        "unusedcategories": "Categorije ca non ge sonde ausete",
        "unusedimages": "Fail ca non g'avènene ausete",
-       "popularpages": "Pàggene cchiù canusciute",
        "wantedcategories": "Categorije cerchete",
        "wantedpages": "Pàggene cchiù cerchete",
        "wantedpages-badtitle": "Titele invalide in mmienze a l'inzieme de le resultate: $1",
        "pageinfo-robot-policy": "Indicizzate da le robbot",
        "pageinfo-robot-index": "Permesse",
        "pageinfo-robot-noindex": "Non permesse",
-       "pageinfo-views": "Numere de visite",
        "pageinfo-watchers": "Numere de visitature d'a pàgene",
        "pageinfo-few-watchers": "Mene de $1 {{PLURAL:$1|visitatore|visitature}}",
        "pageinfo-redirects-name": "Numere de redirezionaminde a sta pàgene",
index 7c68f08..ea44230 100644 (file)
        "viewsourcetext": "Вы можете просмотреть и скопировать исходный текст этой страницы:",
        "viewyourtext": "Вы можете просмотреть и скопировать исходный текст '''ваших правок''' на этой странице:",
        "protectedinterface": "Эта страница содержит интерфейсное сообщение программного обеспечения. Во избежание вандализма её изменение запрещено.\nЧтобы добавить или изменить перевод этого сообщения во всех вики, пожалуйста, используйте сайт локализации MediaWiki [//translatewiki.net/ translatewiki.net]",
-       "editinginterface": "'''Внимание:''' Вы редактируете страницу, содержащую текст интерфейса программного обеспечения.\nЕё изменение повлияет на внешний вид интерфейса для других пользователей этой вики.\nЧтобы добавить или изменить перевод этого сообщения, пожалуйста, используйте сайт локализации MediaWiki [//translatewiki.net/ translatewiki.net].",
+       "editinginterface": "<strong>Внимание:</strong> Вы редактируете страницу, содержащую текст интерфейса программного обеспечения.\nЕё изменение повлияет на внешний вид интерфейса для других пользователей этой вики.",
+       "translateinterface": "Чтобы добавить или изменить перевод этого сообщения, пожалуйста, используйте сайт локализации MediaWiki [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "Страница защищена от изменений, поскольку она включена в {{PLURAL:$1|1=следующую страницу, для которой|следующие страницы, для которых}} включена каскадная защита:\n$2",
        "namespaceprotected": "У вас нет разрешения редактировать страницы в пространстве имён «$1».",
        "customcssprotected": "У вас нет разрешения редактировать эту CSS-страницу, так как она содержит личные настройки другого участника.",
        "content-model-text": "обычный текст",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Страницы, использующие повторяющиеся аргументы в вызовах шаблонов",
+       "duplicate-args-category-desc": "Страницы, содержащие вызовы шаблонов, использующие повторяющиеся аргументы, такие как <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> или <code><nowiki>{{foo|bar|1=bar}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Внимание!''' Эта страница содержит слишком много вызовов ресурсоёмких функций.\n\nДолжно быть не более {{PLURAL:$2|$2 вызова|$2 вызовов|1=одного вызова}}, в то время как сейчас здесь $1 {{PLURAL:$1|вызов|вызовов|вызова}}.",
        "expensive-parserfunction-category": "Страницы со слишком большим количеством вызовов ресурсоёмких функций",
        "post-expand-template-inclusion-warning": "Предупреждение: суммарный размер включаемых шаблонов слишком велик.\nНекоторые шаблоны не будут включены.",
        "mergehistory-same-destination": "Исходная и целевая страницы должны различаться",
        "mergehistory-reason": "Причина:",
        "mergelog": "Журнал объединений",
-       "pagemerge-logentry": "объединена [[$1]] и [[$2]] (версии вплоть до $3)",
        "revertmerge": "Разделить",
        "mergelogpagetext": "Ниже приведён список последних объединений историй страниц.",
        "history-title": "$1 — история изменений",
        "gender-female": "Онa редактирует страницы вики",
        "prefs-help-gender": "Установка этой настройки необязательна.\nПО использует это значение, чтобы обращаться к вам и упоминать вас в правильном грамматическом роде.\nЭта информация будет общедоступной.",
        "email": "Электронная почта",
-       "prefs-help-realname": "Ð\9dаÑ\81Ñ\82оÑ\8fÑ\89ее Ð¸Ð¼Ñ\8f (необÑ\8fзаÑ\82елÑ\8cное Ð¿Ð¾Ð»Ðµ).\nÐ\95Ñ\81ли Ð²Ñ\8b Ñ\83кажеÑ\82е ÐµÐ³Ð¾, Ñ\82о Ð¾Ð½Ð¾ Ð±Ñ\83деÑ\82 Ð¸Ñ\81полÑ\8cзовано Ð´Ð»Ñ\8f Ñ\82ого, Ñ\87Ñ\82обÑ\8b Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ\82Ñ\8c, ÐºÐµÐ¼ Ð±Ñ\8bла Ð²Ð½ÐµÑ\81ена Ð¿Ñ\80авка Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b.",
+       "prefs-help-realname": "Ð\92водиÑ\82Ñ\8c Ð½Ð°Ñ\81Ñ\82оÑ\8fÑ\89ее Ð¸Ð¼Ñ\8f Ð½ÐµÐ¾Ð±Ñ\8fзаÑ\82елÑ\8cно.\nÐ\95Ñ\81ли Ð²Ñ\8b Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ\82е ÐµÐ³Ð¾, Ð¾Ð½Ð¾ Ð¼Ð¾Ð¶ÐµÑ\82 Ð±Ñ\8bÑ\82Ñ\8c Ð¸Ñ\81полÑ\8cзовано Ð´Ð»Ñ\8f Ñ\83казаниÑ\8f Ð°Ð²Ñ\82оÑ\80Ñ\81Ñ\82ва Ð²Ð°Ñ\88иÑ\85 Ñ\80абоÑ\82.",
        "prefs-help-email": "Адрес электронной почты указывать необязательно, но он будет необходим в том случае, если вы забудете пароль.",
        "prefs-help-email-others": "Он также позволит другим участникам связаться с вами по электронной почте с помощью ссылки на вашей персональной странице или на вашей странице обсуждения. При этом ваш адрес электронной почты не будет никому раскрыт.",
        "prefs-help-email-required": "Необходимо указать адрес электронной почты.",
        "statistics": "Статистика",
        "statistics-header-pages": "Статистика по страницам",
        "statistics-header-edits": "Статистика правок",
-       "statistics-header-views": "Статистика просмотров",
        "statistics-header-users": "Статистика по участникам",
        "statistics-header-hooks": "Другая статистика",
        "statistics-articles": "Статей",
        "statistics-files": "Загружено файлов",
        "statistics-edits": "Число правок с момента установки {{grammar:genitive|{{SITENAME}}}}",
        "statistics-edits-average": "Среднее число правок на страницу",
-       "statistics-views-total": "Всего просмотров",
-       "statistics-views-total-desc": "Не учитываются просмотры несуществующих и служебных страниц.",
-       "statistics-views-peredit": "Просмотров на правку",
        "statistics-users": "Зарегистрированные [[Special:ListUsers|участники]]",
        "statistics-users-active": "Активные участники",
        "statistics-users-active-desc": "Участники, совершившие какое-либо действие за {{PLURAL:$1|последний $1 день|последние $1 дней|последние $1 дня}}",
-       "statistics-mostpopular": "Наиболее часто просматриваемые страницы",
        "pageswithprop": "Страницы с переопределёнными свойствами",
        "pageswithprop-legend": "Страницы с переопределёнными свойствами",
        "pageswithprop-text": "Здесь перечислены страницы, у которых были вручную переопределены отдельные свойства.",
        "uncategorizedtemplates": "Некатегоризованные шаблоны",
        "unusedcategories": "Неиспользуемые категории",
        "unusedimages": "Неиспользуемые файлы",
-       "popularpages": "Популярные страницы",
        "wantedcategories": "Требуемые категории",
        "wantedpages": "Требуемые страницы",
        "wantedpages-badtitle": "Ошибочный заголовок в результатах запроса: $1",
        "tooltip-feed-atom": "Трансляция в Atom для этой страницы",
        "tooltip-t-contributions": "Список страниц, которые изменял этот участник",
        "tooltip-t-emailuser": "Отправить письмо этому участнику",
+       "tooltip-t-info": "Подробнее об этой странице",
        "tooltip-t-upload": "Загрузить файлы",
        "tooltip-t-specialpages": "Список служебных страниц",
        "tooltip-t-print": "Версия этой страницы для печати",
        "pageinfo-robot-policy": "Индексация поисковыми роботами",
        "pageinfo-robot-index": "Разрешено",
        "pageinfo-robot-noindex": "Не разрешено",
-       "pageinfo-views": "Количество просмотров",
        "pageinfo-watchers": "Число наблюдающих",
        "pageinfo-few-watchers": "Менее $1 {{PLURAL:$1|следящего|следящих}}",
        "pageinfo-redirects-name": "Количество перенаправлений на эту страницу",
        "unknown_extension_tag": "Неизвестный тег расширения «$1»",
        "duplicate-defaultsort": "Внимание. Ключ сортировки по умолчанию «$2» переопределяет прежний ключ сортировки по умолчанию «$1».",
        "duplicate-displaytitle": "<strong>Внимание:</strong> Отображаемое название «$2» переопределяет ранее заданное отображаемое название «$1».",
+       "invalid-indicator-name": "<strong>Ошибка:</strong> Атрибут <code>name</code> индикаторов состояния страницы не должен быть пустым.",
        "version": "Версия",
        "version-extensions": "Установленные расширения",
        "version-skins": "Установленные темы оформления",
        "revdelete-uname-unhid": "имя участника раскрыто",
        "revdelete-restricted": "ограничения применяются к администраторам",
        "revdelete-unrestricted": "ограничения сняты для администраторов",
+       "logentry-merge-merge": "$1 объедининил{{GENDER:$2||а}} $3 в $4 (версии до $5)",
        "logentry-move-move": "$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4 без оставления перенаправления",
        "logentry-move-move_redir": "$1 {{GENDER:$2|переименовал|переименовала}} страницу $3 в $4 поверх перенаправления",
index 06d214f..d25367d 100644 (file)
        "mergehistory-same-destination": "Жрідлова і цілёва сторінка не можуть быти такы самы",
        "mergehistory-reason": "Причіна:",
        "mergelog": "Книга злучованя",
-       "pagemerge-logentry": "злучує сторінку [[$1]] зо сторінков [[$2]] (верзії до $3)",
        "revertmerge": "Роздїлити",
        "mergelogpagetext": "Ниже є список найновшых злучінь історії єдной сторінкы з другов.",
        "history-title": "$1: Історія змін",
        "mimetype": "MIME-тіп:",
        "download": "скачати",
        "unwatchedpages": "Неслїдованы сторінкы",
-       "listredirects": "Список напрямлинь",
+       "listredirects": "Список напрямлїнь",
        "unusedtemplates": "Нехоснованы шаблоны",
        "unusedtemplatestext": "Тота сторінка обсягує список вшыткых сторінок в простору назв {{ns:template}}, котры не суть вложены до жадной іншой сторінкы. Перед їх змазанём не забудьте перевірити іншы одказы.",
        "unusedtemplateswlh": "іншы одказы",
        "statistics": "Штатістіка",
        "statistics-header-pages": "Штатістіка сторінок",
        "statistics-header-edits": "Штатістіка едітовань",
-       "statistics-header-views": "Штатістіка зображіня",
        "statistics-header-users": "Штатістіка хоснователїв",
        "statistics-header-hooks": "Інша штатістіка",
        "statistics-articles": "Обсяговы сторінкы",
        "statistics-files": "Наладованы файлы",
        "statistics-edits": "Чісло едітованя од основаня вікі {{SITENAME}}",
        "statistics-edits-average": "Середнє чісло едітовань на сторінку",
-       "statistics-views-total": "Вшыткых переглядів",
-       "statistics-views-total-desc": "Зображіня неєствуючіх і шпеціалных сторінок ся не рахують",
-       "statistics-views-peredit": "Чісло зображінь на едітованя",
        "statistics-users": "Реґістрованы [[Special:ListUsers|хоснователї]]",
        "statistics-users-active": "Актівны хоснователї",
        "statistics-users-active-desc": "Хоснователї, котры в {{PLURAL:$1|минулого дня|минулых  $1 днїв}} провели даяку операцію",
-       "statistics-mostpopular": "Найчітанїшы сторінкы",
        "pageswithprop": "Сторінкы з властностями",
        "pageswithprop-legend": "Сторінкы з властностёв",
        "pageswithprop-text": "Тота сторінка обсягує список сторінкы, што хоснують вызначену властность сторінкы.",
        "uncategorizedtemplates": "Некатеґоризованы шаблоны",
        "unusedcategories": "Нехоснованы катеґорії",
        "unusedimages": "Нехоснованы файлы",
-       "popularpages": "Популарны статї",
        "wantedcategories": "Жаданы катеґорії",
        "wantedpages": "Пожадованы статї",
        "wantedpages-badtitle": "Резултаты обсягують неправилну назву: $1",
        "pageinfo-robot-policy": "Індексованя роботами",
        "pageinfo-robot-index": "Дозволено",
        "pageinfo-robot-noindex": "Заказане",
-       "pageinfo-views": "Чісло переглядів",
        "pageinfo-watchers": "Кількость слїдуючіх сторінку",
        "pageinfo-few-watchers": "Менше як $1 {{PLURAL:$1|слїдуючій|слїдуючі|слїдуючіх}}",
        "pageinfo-redirects-name": "Чісло напрямлїнь на гевсю сторінку",
index daff7f8..3969358 100644 (file)
        "view-foreign": "Vedz la $1",
        "edit": "Alâxire",
        "edit-local": "Alâxeaști descrierea localâ",
+       "create": "Prindiri",
+       "create-local": "Adavgâ descrierea localâ",
+       "editthispage": "Alâxeaști aestâ frândzâ",
+       "create-this-page": "Adari aestâ frândzâ",
        "delete": "Așcirḑire",
        "deletethispage": "Așteardzi frândza",
        "undeletethispage": "Aflâ frundza aștearsâ",
        "otherlanguages": "Pi alanti limbi",
        "redirectedfrom": "(yinitâ di la $1)",
        "redirectpagesub": "Frândzâ di redirecționari",
+       "redirectto": "Purtari la:",
        "lastmodifiedat": "Aestâ frândzâ fu alâxitâ di-tu soni pi $1, la $2.",
        "viewcount": "Aestâ frândzâ fu mutritâ di {{PLURAL:$1|mași unâ oarâ|$1 ori}}.",
        "protectedpage": "Frândzâ protejatâ",
        "thisisdeleted": "Vedz icâ adu napoea $1?",
        "viewdeleted": "Vedz $1?",
        "restorelink": "Vedz {{PLURAL:$1|unâ alâxiri aștearsâ|$1 (di) alâxiri aștearsi}}",
+       "feedlinks": "Feed:",
+       "feed-invalid": "Turlii di feed invalidâ",
+       "feed-unavailable": "Nu suntu disponibili fluxuri web.",
        "site-rss-feed": "$1 Abonari RSS",
        "site-atom-feed": "$1 Abonari Atomu",
        "page-rss-feed": "„$1” Abonari RSS",
        "nstab-help": "Agiutoru",
        "nstab-category": "Categorie",
        "nosuchaction": "Aeastâ acțiuni nu easti",
+       "nosuchspecialpage": "Aestâ frândzâ maxusâ (specialâ) nu ari aoați",
+       "error": "Eroari (alatus)",
+       "databaseerror": "Alatus la baza di dati",
+       "databaseerror-text": "Apâru unu alatusu la interogarea bazâľei di dati. Aestâ poati s-hibâ trâ ațea câ ari unâ problemâ di software.",
+       "databaseerror-textcl": "Apâru unu alatusu la interogarea bazâľei di dati.",
+       "databaseerror-query": "Interogari: $1",
+       "databaseerror-function": "Funcție: $1",
        "databaseerror-error": "Eroari (alutusu): $1",
+       "laggedslavemode": "<strong>Sacănu!</strong>: S-poati ca frândza s-nu aibâ actualizărili di-tu soni.",
        "readonly": "Baza di dati easti blocatâ (ncľisâ) la nyrâpseari",
+       "missingarticle-rev": "(versiuniľea#: $1)",
+       "missingarticle-diff": "(Dif: $1, $2)",
+       "badtitle": "Titlu alatusu",
        "viewsource": "Vez-u textu",
+       "viewsource-title": "Vedz ivurlu trâ $1",
+       "ns-specialprotected": "Frâdzâli maxusi (speciali) nu potu s-hibâ alâxiti.",
+       "exception-nologin": "Nu hii ligatu",
+       "exception-nologin-text": "Leagâ-ti ca sâ poț sâ u vedz aestâ frândzâ i acțiuni.",
+       "exception-nologin-text-manual": "Vâ pâlâcârsimu sâ $1 ca s-puteț s-u videț frândza i acțiunea aestâ.",
+       "virus-badscanner": "Configurațiľe alatusitâ: scaneru di virus nicunuscutu: \"$1\"",
+       "welcomeuser": "Ghini viniș, $1!",
+       "welcomecreation-msg": "Contulu (isape) a tău fu adratu.\nPoț s-lu alâxești [[Special:Preferences|Prutimisirli]] a tali ma câ vrei.",
        "yourname": "Numa di utilizatoru:",
        "userlogin-yourname": "Numa di utilizatoru:",
        "userlogin-yourname-ph": "Bagâ-u numa a ta di utilizatoru",
        "createacct-another-username-ph": "Bagâ-u numa di utilizatoru",
        "yourpassword": "Zboru cľeae:",
+       "userlogin-yourpassword": "Zboarâ acrifo (parolâ)",
+       "userlogin-yourpassword-ph": "Bagâ-u parola (zboru acrifo)",
+       "createacct-yourpassword-ph": "Bagâ-u parola (zboru acrifo)",
        "yourpasswordagain": "Bagâ-u cľeae diznou:",
+       "createacct-yourpasswordagain": "Apuchiruseaști zborlu mistico",
+       "createacct-yourpasswordagain-ph": "Bagâ-u parola diz-nou",
        "remembermypassword": "Țâni minti ligâtura a mea pi browserlu aestu (cheari dupu $1 {{PLURAL:$1|dzuuâ|dzâli}})",
+       "userlogin-remembermypassword": "Pâstreadzâ ligarea",
+       "userlogin-signwithsecure": "Ufiliseaști unâ conexiuni sigurâ",
+       "yourdomainname": "Domeniulu a tău:",
+       "password-change-forbidden": "Nu poț s-li alâxești zboarâli mistico pi aestu wiki.",
        "login": "Leagâ-ti",
        "nav-login-createaccount": "Leagâ-ti / Fă contu (isape)",
        "userlogin": "Leagâ-ti / Fă contu (isape)",
        "userlogout": "Dizleagâ-ti",
        "notloggedin": "Nu hii ligatu",
        "userlogin-noaccount": "N-ai nicâ contu (isape)?",
+       "userlogin-joinproject": "Bagâ-ti la {{SITENAME}}",
        "nologin": "N-ai nicâ contu (isape)? $1.",
        "nologinlink": "Fă unu utilizatoru a tău tora",
        "createaccount": "Fă contu (isape)",
+       "gotaccount": "Ai nicâ contu (isape)? $1.",
        "gotaccountlink": "Leagâ-ti",
+       "userlogin-resetlink": "U agârșii parola i numa di utilizatoru?",
+       "userlogin-resetpassword-link": "U agârșii parola?",
        "createacct-emailrequired": "Adresâ di carti electronicâ",
        "createacct-emailoptional": "Adresâ di carti electronicâ (opționalu)",
        "createacct-email-ph": "Bagâ-u adresa a ta di carti electronicâ",
        "newpages-username": "Numa di utilizatoru:",
        "move": "Mutari",
        "movethispage": "Mutâ frândza aestâ",
-       "booksources-go": "Du-ti",
        "allpagessubmit": "Du-ti",
        "watchlist": "Frândzâ avinati",
        "mywatchlist": "Frândzâ avinati",
index 4277754..d79e3c4 100644 (file)
        "mergehistory-reason": "Dalil:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Margari hantum ceebandu",
-       "pagemerge-logentry": "na [[$1]] marga k'a tee [[$2]] (hala filla $3)",
        "revertmerge": "Margari say",
        "mergelogpagetext": "Ganda margari kokorantey maašeedaa, taka kaŋ nda moo taariki foo ga huru affaa ra.",
        "history-title": "Filla taariki \"$1\" se",
        "statistics": "Kabu-izey",
        "statistics-header-pages": "Moo kabu-izey",
        "statistics-header-edits": "Fasalyan kabu-izey",
-       "statistics-header-views": "Kabu-izey guna",
        "statistics-header-users": "Goykaw kabu-izey",
        "statistics-header-hooks": "Kabu-ize taney",
        "statistics-articles": "Gundekuna moɲey",
        "statistics-files": "Tuku zijantey",
        "statistics-edits": "Moo barmawey za {{SITENAME}}  n' ka gorandi",
        "statistics-edits-average": "Sasawandi barmaney moo foo kul se",
-       "statistics-views-total": "Laasaabey kul",
-       "statistics-views-total-desc": "Laasaabey moo ši-barantey nda moo cerecerantey ši diyandi ne.",
-       "statistics-views-peredit": "Laasaabey barmay bande",
        "statistics-users": "Maa-hantumante [[Special:ListUsers|goykey]]",
        "statistics-users-active": "Goykaw kaŋ goo mee ra",
        "statistics-users-active-desc": "Goykey kaŋ na teera foo timmandi {{PLURAL:$1|zaari $1}} koraw ra",
-       "statistics-mostpopular": "Moɲey kaŋ laasaabandi ka šifa",
        "pageswithprop": "Moɲoo kaŋ goo nda moo mayray",
        "pageswithprop-legend": "Moɲey kaŋ goo nda moo mayray",
        "pageswithprop-text": "Moɲoo woo ga mooyaŋ cebe kaŋ ga goy nda moo mayray naadira.",
index 2b74c9b..3248763 100644 (file)
        "mergehistory-same-destination": "මූල හා අන්ත පිටු දෙකම එකක් විය නොහැක",
        "mergehistory-reason": "හේතුව:",
        "mergelog": "එකාබද්ධ කිරීම් ලඝු-සටහන",
-       "pagemerge-logentry": "[[$2]] හා සමග [[$1]] ඒකාබද්ධ කරන ලදි ($3 දක්වා සංශෝධනයන්)",
        "revertmerge": "ඒකාබද්ධය අහෝසි කරන්න",
        "mergelogpagetext": "එක් පිටු ඉතිහාසයක් තවකක් හා සමග ඉතා මෑතදී සිදුවූ ඒකාබද්ධ වීම් දැක්වෙන ලැයිස්තුවක් පහත වේ.",
        "history-title": "$1:  සංශෝධන ඉතිහාසය",
        "gender-female": "ස්ත්‍රී",
        "prefs-help-gender": "මෙම සංස්කරණය අත්‍යවශ්‍ය නැත: මෘදුකාංග විසින් නිවැරැදි ආමන්ත්‍රනය සඳහා භාවිතා කෙරෙයි.\nමෙම තොරතුර ප්‍රජාවට විවෘතය.",
        "email": "විද්‍යුත් තැපෑල",
-       "prefs-help-realname": "à·\83à·\90බà·\91 à¶±à·\8fමය à·\84à·\99à·\85à·\92 à¶\9aà·\92රà·\93ම à·\80à·\9bà¶\9aලà·\8aපà·\92à¶\9aයà·\92.\nà¶\94බ à·\80à·\92à·\83à·\92නà·\8a à¶\91ය à·\84à·\99à·\85à·\92 à¶\9aල à·\84à·\9cතà·\8a, à¶\94බà¶\9cà·\9a à¶\9aà·\98තà·\93නà·\8a à·\83ඳà·\84à·\8f à¶\94බà·\84ට à¶\9aතà·\98-බුහුමන් පිරිනැමීමට එය භාවිතා කරනු ඇත.",
+       "prefs-help-realname": "à·\83à·\90බà·\91 à¶±à·\8fමය à·\84à·\99à·\85à·\92 à¶\9aà·\92රà·\93ම à\85තà·\8aâ\80\8dයà·\80à·\81à·\8aâ\80\8dය à¶±à·\90ත.\nà¶\94බ à·\80à·\92à·\83à·\92නà·\8a à¶\91ය à·\84à·\99à·\85à·\92 à¶\9aල à·\84à·\9cතà·\8a, à¶\94බà¶\9cà·\9a à¶\9aà·\98තà·\93නà·\8a à·\83ඳà·\84à·\8f à¶\94බà·\84ට à¶\9aතà·\98බුහුමන් පිරිනැමීමට එය භාවිතා කරනු ඇත.",
        "prefs-help-email": "විද්‍යුත් තැපැල් ලිපිනය අත්‍යාවශ්‍ය නොවේ, එහෙත් ඔබගේ මුර පදය අමතක වූ විටෙක එය යලි සැකසීමට නම් විද්‍යුත් ලිපිනයක් දී තිබිය යුතුය.",
        "prefs-help-email-others": "ඔබගේ පරිශීලක හෝ පරිශීලක සාකච්ඡා පිටුවෙහි සබැඳියක් ඔස්සේ විද්‍යුත් තැපෑල මගින් අනෙක් අයට ඔබව සම්බන්ධ කර ගැනීම පිණිස තේරිමක් සිදු කල හැක.\nඅනෙකුත් පරිශීලකයන් ඔබව අමතන විට ඔබගේ විද්‍යුත් තැපැල් ලිපිනය හෙලිදරවු නොකෙරේ.",
        "prefs-help-email-required": "විද්‍යුත්-ලිපිනය අවශ්‍යයි.",
        "statistics": "සංඛ්‍යාන දත්ත",
        "statistics-header-pages": "පිටුවල සංඛ්‍යාන දත්ත",
        "statistics-header-edits": "සංස්කරණ වල සංඛ්‍යාන දත්ත",
-       "statistics-header-views": "නැරඹුම් වල සංඛ්‍යාන දත්ත",
        "statistics-header-users": "පරිශීලකයන් පිළිබඳ සංඛ්‍යාන දත්ත",
        "statistics-header-hooks": "අනෙක් සංඛ්‍යා ලේඛන",
        "statistics-articles": "අන්තර්ගත  පිටු",
        "statistics-files": "උඩුගතකරන ලද ගොනු",
        "statistics-edits": "{{SITENAME}} පිහිටුවීමෙන් අනතුරුව සිදුවූ පිටු සංස්කරණයන්",
        "statistics-edits-average": "එක් පිටුවකට සංස්කරණයන්හි  මධ්‍යක අගය",
-       "statistics-views-total": "නැරඹුම් එකතුව",
-       "statistics-views-total-desc": "විශේෂ හා දැනට නොපවතින පිටු වල දසුන් එක් කොට නැත",
-       "statistics-views-peredit": "එක් සංස්කරණයකට නැරඹුම් ගණන",
        "statistics-users": "ලේඛනගත  [[Special:ListUsers|පරිශීලකයෝ]]",
        "statistics-users-active": "ක්‍රියාශීලි පරිශීලකයන්",
        "statistics-users-active-desc": "පසුගිය {{PLURAL:$1|දිනය|දින $1}} තුලදී කිසියම් ක්‍රියාවක් සිදු කල පරිශීලකයන්",
-       "statistics-mostpopular": "බෙහෙවින් නරඹනු ලබන පිටු",
        "pageswithprop-prop": "ගුණ නාමය:",
        "pageswithprop-submit": "යන්න",
        "pageswithprop-prophidden-binary": "ද්විමය ගුණ අගය සැඟවී ($1)",
        "uncategorizedtemplates": "ප්‍රවර්ගීකරණය නොවූ සැකිලි",
        "unusedcategories": "භාවිතා නොවූ ප්‍රවර්ග",
        "unusedimages": "භාවිතා නොවූ ගොනු",
-       "popularpages": "ජනප්‍රිය පිටු",
        "wantedcategories": "අවශ්‍ය ප්‍රවර්ග",
        "wantedpages": "අවශ්‍ය පිටු",
        "wantedpages-badtitle": "ප්‍රතිඵල ගොන්නේ අනීතික ශීර්ෂය: $1",
        "pageinfo-robot-policy": "සෙවුම් එන්ජිම් තත්ත්වය",
        "pageinfo-robot-index": "සුචිමය",
        "pageinfo-robot-noindex": "සුචිමය නොවන",
-       "pageinfo-views": "නැරඹුම් සංඛ්‍යාව",
        "pageinfo-watchers": "පිටු මුරකරන්නන් සංඛ්‍යාව",
        "pageinfo-redirects-name": "මෙම පිටුවට යළියොමු ගණන",
        "pageinfo-subpages-name": "මෙම පිටුවෙහි උපපිටු",
index 18d96fd..6925a45 100644 (file)
@@ -54,7 +54,7 @@
        "tog-shownumberswatching": "Zobraziť počet používateľov sledujúcich stránku",
        "tog-oldsig": "Súčasný podpis:",
        "tog-fancysig": "Považovať podpisy za wikitext (bez automatických odkazov)",
-       "tog-uselivepreview": "Používať živý náhľad(experimentálna funkcia)",
+       "tog-uselivepreview": "Používať živý náhľad (experimentálna funkcia)",
        "tog-forceeditsummary": "Upozoriť ma, keď nevyplním zhrnutie úprav",
        "tog-watchlisthideown": "Skryť moje úpravy zo zoznamu sledovaných",
        "tog-watchlisthidebots": "Skryť úpravy botov zo zoznamu sledovaných",
        "mergehistory-same-destination": "Zdrojová a cieľová stránka sa nemôžu zhodovať",
        "mergehistory-reason": "Dôvod:",
        "mergelog": "Záznam zlúčení",
-       "pagemerge-logentry": "zlúčil [[$1]] do [[$2]] (revízie do $3)",
        "revertmerge": "Vrátiť zlúčenie",
        "mergelogpagetext": "Dolu je zoznam posledných zlúčení jednej histórie revízií stránky do druhej.",
        "history-title": " $1: História revízií",
        "diff": "rozdiel",
        "hist": "história",
        "hide": "Skryť",
-       "show": "zobraziť",
+       "show": "Zobraziť",
        "minoreditletter": "d",
        "newpageletter": "N",
        "boteditletter": "b",
        "statistics": "Štatistiky",
        "statistics-header-pages": "Štatistika stránok",
        "statistics-header-edits": "Štatistika úprav",
-       "statistics-header-views": "Štatistika zobrazení",
        "statistics-header-users": "Štatistika používateľov",
        "statistics-header-hooks": "Iná štatistika",
        "statistics-articles": "Stránok s obsahom",
        "statistics-files": "Nahraných súborov",
        "statistics-edits": "Úprav stránok od založenia {{GRAMMAR:genitív|{{SITENAME}}}}",
        "statistics-edits-average": "Priemerný počet úprav na stránku",
-       "statistics-views-total": "Celkom zobrazení",
-       "statistics-views-total-desc": "Zobrazenia neexistujúcich stránok a špeciálnych stránok nie sú zahrnuté",
-       "statistics-views-peredit": "Zobrazení na úpravu",
        "statistics-users": "Registrovaných [[Special:ListUsers|používateľov]]",
        "statistics-users-active": "Aktívnych používateľov",
        "statistics-users-active-desc": "Používatelia, ktorí za {{PLURAL:$1|posledný deň|posledné $1 dni|posledných $1 dní}} vykonali nejakú operáciu",
-       "statistics-mostpopular": "Najčastejšie prezerané stránky",
        "pageswithprop": "Stránky s vlastnosťou stránky",
        "pageswithprop-legend": "Stránky s vlastnosťou stránky",
        "pageswithprop-text": "Táto stránka obsahuje stránky, ktoré používajú konkrétnu vlastnosť stránky.",
        "uncategorizedtemplates": "Nekategorizované šablóny",
        "unusedcategories": "Nepoužité kategórie",
        "unusedimages": "Nepoužité obrázky",
-       "popularpages": "Populárne stránky",
        "wantedcategories": "Žiadané kategórie",
        "wantedpages": "Žiadané stránky",
        "wantedpages-badtitle": "Neplatný názov vo výsledkoch: $1",
        "pageinfo-robot-policy": "Indexovanie pomocou robotov",
        "pageinfo-robot-index": "Povolené",
        "pageinfo-robot-noindex": "Nepovolené",
-       "pageinfo-views": "Počet zobrazení",
        "pageinfo-watchers": "Počet používateľov sledujúcich stránku",
        "pageinfo-few-watchers": "Menej ako $1 {{PLURAL:$1|sledujúci|sledujúci|sledujúcich}}",
        "pageinfo-redirects-name": "Počet presmerovaní na túto stránku",
        "watchlistedit-clear-submit": "Vyprázdniť zoznam sledovaných stránok (natrvalo!)",
        "watchlistedit-clear-done": "Váš zoznam sledovaných stránok bol vyprázdnený.",
        "watchlistedit-clear-removed": "{{PLURAL:$1|Bol odstránený jeden názov|Boli odstránené $1 názvy|Bolo odstránených $1 názvov}}:",
+       "watchlisttools-clear": "Vyprázdniť zoznam sledovaných stránok",
        "watchlisttools-view": "Zobraziť súvisiace zmeny",
        "watchlisttools-edit": "Zobraziť a upraviť zoznam sledovaných stránok",
        "watchlisttools-raw": "Upraviť nespracovaný zoznam sledovaných stránok",
index 8068f2c..7ec317a 100644 (file)
        "viewsourcetext": "Vsebino te strani si lahko ogledate in kopirate:",
        "viewyourtext": "Lahko si ogledate in kopirate vsebino '''vaših urejanj''' te strani:",
        "protectedinterface": "Prikazana stran vsebuje besedilo vmesnika programja na tem wikiju in je zaradi preprečevanja zlorab zaščitena.\n\nZa dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
-       "editinginterface": "'''Opozorilo:''' Urejate stran, ki vsebuje besedilo ali drug element uporabniškega vmesnika programja.\nSpremembe te strani bodo vplivale na podobo uporabniškega vmesnika ostalih uporabnikov na tem wikiju.\nZa dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
+       "editinginterface": "<strong>Opozorilo:</strong> Urejate stran, ki vsebuje besedilo ali drug element uporabniškega vmesnika programja.\nSpremembe te strani bodo vplivale na podobo uporabniškega vmesnika ostalih uporabnikov na tem wikiju.",
+       "translateinterface": "Za dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
        "cascadeprotected": "Ta stran je bila zaščitena pred urejanji, ker je vključena na {{PLURAL:$1|sledečo stran, ki je bila zaščitena|sledeči strani, ki sta bili zaščiteni|sledeče strani, ki so bile zaščitene}} z vključeno kaskadno možnostjo:\n$2",
        "namespaceprotected": "Za urejanje strani v imenskem prostoru '''$1''' nimate dovoljenja.",
        "customcssprotected": "Nimate pravice urejati te strani CSS, ker vsebuje osebne nastavitve drugega uporabnika.",
        "content-model-text": "golo besedilo",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Strani s podvojenimi argumenti v klicih predlog",
+       "duplicate-args-category-desc": "Stran vsebuje klice predlog, ki vsebujejo dvojnike argumentov, kot sta <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ali <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Opozorilo:''' Ta stran vsebuje preveč klicev funkcije razčlenjevalnika kode.\n\nStran naj bi vsebovala manj kot $2 {{PLURAL:$2|klic|klica|klice|klicev}}, trenutno {{PLURAL:$1|je v uporabi $1 klic|sta v uporabi $1 klica|so v uporabi $1 klici|je v uporabi $1 klicev}}.",
        "expensive-parserfunction-category": "Strani s prevelikim številom klicev na funkcijo razčlenjevalnika kode",
        "post-expand-template-inclusion-warning": "'''Opozorilo:''' Velikost vključenih predlog je prevelika.\nNekatere predloge ne bodo prikazane.",
        "mergehistory-same-destination": "Izhodiščna in ciljna stran ne moreta imeti enak naslov",
        "mergehistory-reason": "Razlog:",
        "mergelog": "Dnevnik združevanj",
-       "pagemerge-logentry": "[[$1]] združen z/s [[$2]] (redakcije do $3)",
        "revertmerge": "Razdruži",
        "mergelogpagetext": "Prikazan je seznam nedavnih združevanj zgodovin strani.",
        "history-title": "$1: Zgodovina strani",
        "gender-female": "Ona ureja wikistrani.",
        "prefs-help-gender": "Nastavitev ni obvezna.\nProgramje uporablja njeno vrednost za vaše naslavljanje in omenjanje v ustreznem slovničnem spolu.\nPodatek bo javno prikazan.",
        "email": "E-pošta",
-       "prefs-help-realname": "Pravo ime ni obvezno.\nČe se ga odločite navesti, bo uporabljeno za priznavanje vašega dela.",
+       "prefs-help-realname": "Pravo ime ni obvezno.\nČe ga navedete, ga bomo morda uporabili za priznavanje vašega dela.",
        "prefs-help-email": "E-poštni naslov ni obvezen, vendar omogoča, da vam v primeru pozabljenega gesla pošljemo novo.",
        "prefs-help-email-others": "Omogočite lahko tudi možnost, da vam lahko ostali uporabniki pošiljajo e-pošto prek vaše uporabniške ali pogovorne strani.\nKo vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo razkrili.",
        "prefs-help-email-required": "E-poštni naslov je obvezen.",
        "statistics": "Statistika",
        "statistics-header-pages": "Statistika strani",
        "statistics-header-edits": "Statistika urejanj",
-       "statistics-header-views": "Statistika ogledov",
        "statistics-header-users": "Uporabniška statistika",
        "statistics-header-hooks": "Drugi statistični podatki",
        "statistics-articles": "Članki",
        "statistics-files": "Naložene datoteke",
        "statistics-edits": "Urejanja strani od postavitve {{GRAMMAR:rodilnik|{{SITENAME}}}}",
        "statistics-edits-average": "Povprečno število urejanj na stran",
-       "statistics-views-total": "Vseh ogledov",
-       "statistics-views-total-desc": "Ogledi neoobstoječih in posebnih strani niso vključeni",
-       "statistics-views-peredit": "Razmerje med ogledi in urejanji",
        "statistics-users": "Registrirani [[Special:ListUsers|uporabniki]]",
        "statistics-users-active": "Aktivni uporabniki",
        "statistics-users-active-desc": "Uporabniki, ki so izvedli dejanje v {{PLURAL:$1|zadnjem dnevu|zadnjih $1 dneh}}",
-       "statistics-mostpopular": "Strani z največ ogledi",
        "pageswithprop": "Strani z lastnostmi strani",
        "pageswithprop-legend": "Strani z lastnostmi strani",
        "pageswithprop-text": "Stran navaja vse strani, ki uporabljajo določene lastnosti strani.",
        "uncategorizedtemplates": "Nekategorizirane predloge",
        "unusedcategories": "Osirotele kategorije",
        "unusedimages": "Osirotele datoteke",
-       "popularpages": "Priljubljene strani",
        "wantedcategories": "Želene kategorije",
        "wantedpages": "Želene strani",
        "wantedpages-badtitle": "Neveljaven naslov v končnem nizu: $1",
        "tooltip-feed-atom": "Atom-vir strani",
        "tooltip-t-contributions": "Preglejte seznam uporabnikovih prispevkov",
        "tooltip-t-emailuser": "Pošljite uporabniku e-pismo",
+       "tooltip-t-info": "Več informacij o strani",
        "tooltip-t-upload": "Naložite slike ali predstavnostne datoteke",
        "tooltip-t-specialpages": "Preglejte seznam vseh posebnih strani",
        "tooltip-t-print": "Natisljiva različica strani",
        "pageinfo-robot-policy": "Robotsko indeksiranje",
        "pageinfo-robot-index": "Dovoljeno",
        "pageinfo-robot-noindex": "Nedovoljeno",
-       "pageinfo-views": "Število ogledov",
        "pageinfo-watchers": "Število spremljevalcev strani",
        "pageinfo-few-watchers": "Manj kot $1 {{PLURAL:$1|spremljevalec|spremljevalca|spremljevalci|spremljevalcev}}",
        "pageinfo-redirects-name": "Število preusmeritev na stran",
        "unknown_extension_tag": "Neznana razširitvena etiketa »$1«",
        "duplicate-defaultsort": "'''Opozorilo:''' Privzeti ključ razvrščanja »$2« prepiše prejšnji privzeti ključ razvrščanja »$1«.",
        "duplicate-displaytitle": "<strong>Opozorilo:</strong> Prikazni naslov »$2« prepiše prejšnji prikazni naslov »$1«.",
+       "invalid-indicator-name": "<strong>Napaka:</strong> Atribut <code>name</code> indikatorjev stanja strani ne sme biti prazen.",
        "version": "Različica",
        "version-extensions": "Nameščene razširitve",
        "version-skins": "Nameščene kože",
        "revdelete-uname-unhid": "uporabniško ime je ponovno prikazano",
        "revdelete-restricted": "uveljavljene omejitve administratorjev",
        "revdelete-unrestricted": "odstranjene omejitve administratorjev",
+       "logentry-merge-merge": "$1 je {{GENDER:$2|združil|združila|združil(-a)}} $3 z $4 (redakcije do $5)",
        "logentry-move-move": "$1 je {{GENDER:$2|premaknil|premaknila|premaknil(-a)}} stran $3 na $4",
        "logentry-move-move-noredirect": "$1 je {{GENDER:$2|prestavil|prestavila|prestavil(-a)}} stran $3 na $4 brez preusmeritve",
        "logentry-move-move_redir": "$1 je {{GENDER:$2|prestavil|prestavila|prestavil(-a)}} stran $3 na $4 prek preusmeritve",
index 31c6db0..71a4e84 100644 (file)
        "mergehistory-same-destination": "Izvorna i odredišna stranica ne mogu biti iste",
        "mergehistory-reason": "Razlog:",
        "mergelog": "Dnevnik spajanja",
-       "pagemerge-logentry": "je spojio [[$1]] u [[$2]] (sve do izmene $3)",
        "revertmerge": "rastavi",
        "mergelogpagetext": "Ispod je spisak najskorijih spajanja istorija dveju stranica.",
        "history-title": "Istorija izmena stranice „$1“",
        "statistics": "Statistike",
        "statistics-header-pages": "Stranice",
        "statistics-header-edits": "Izmene",
-       "statistics-header-views": "Pregledi",
        "statistics-header-users": "Korisnici",
        "statistics-header-hooks": "Ostalo",
        "statistics-articles": "Stranice sa sadržajem",
        "statistics-files": "Broj poslatih datoteka",
        "statistics-edits": "Broj izmena stranica otkad postoji {{SITENAME}}",
        "statistics-edits-average": "Prosečan broj izmena po stranici",
-       "statistics-views-total": "Ukupno pregleda",
-       "statistics-views-total-desc": "Pregledi nepostojećih i posebnih stranica nisu uključeni",
-       "statistics-views-peredit": "Pregleda po izmeni",
        "statistics-users": "Registrovani [[Special:ListUsers|korisnici]]",
        "statistics-users-active": "Aktivni korisnici",
        "statistics-users-active-desc": "Korisnici koji su izvršili bar jednu radnju {{PLURAL:$1|1=prethodni dan|u poslednja $1 dana|u poslednjih $1 dana}}",
-       "statistics-mostpopular": "Najposećenije stranice",
        "pageswithprop": "Strane s osobinom strane",
        "pageswithprop-legend": "Strane s osobinom strane",
        "pageswithprop-text": "Ova strana izlistava strane koje imaju određenu osobinu",
        "uncategorizedtemplates": "Nekategorisani šabloni",
        "unusedcategories": "Nekorišćene kategorije",
        "unusedimages": "Nekorišćene datoteke",
-       "popularpages": "Popularne stranice",
        "wantedcategories": "Tražene kategorije",
        "wantedpages": "Tražene stranice",
        "wantedpages-badtitle": "Neispravan naslov u nizu rezultata: $1",
        "pageinfo-robot-policy": "Indeksiranje od strane robota",
        "pageinfo-robot-index": "Dozvoljeno",
        "pageinfo-robot-noindex": "Nije dozvoljeno",
-       "pageinfo-views": "Broj pregleda",
        "pageinfo-watchers": "Broj nadgledača stranicе",
        "pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|pratioca|pratilaca}}",
        "pageinfo-redirects-name": "Broj preusmerenja na ovu stranicu",
index 208a535..11870c8 100644 (file)
        "content-model-text": "oformaterad text",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Sidor som använder upprepade argument i mallanrop",
+       "duplicate-args-category-desc": "Sidan innehåller mallanrop som använder repeterade argument, så som <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> eller <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Varning: Denna sida innehåller för många anrop av resurskrävande parserfunktioner.\n\nAntalet anrop får vara högst $2, nu görs {{PLURAL:$1|$1 anrop}}",
        "expensive-parserfunction-category": "Sidor med för många resurskrävande parserfunktioner",
        "post-expand-template-inclusion-warning": "Varning: Den här sidan innehåller för mycket mallinklusioner.\nNågra av mallarna kommer inte att inkluderas.",
        "mergehistory-reason": "Anledning:",
        "mergehistory-revisionrow": "$1($2) $3 . .$4 $5 $6",
        "mergelog": "Sammanfogningslogg",
-       "pagemerge-logentry": "infogade [[$1]] i [[$2]] (versioner t.o.m. $3)",
        "revertmerge": "Återställ infogning",
        "mergelogpagetext": "Detta är en lista över de senaste sammansfogningarna av sidhistoriker.",
        "history-title": "Versionshistorik för \"$1\"",
        "gender-female": "Hon redigerar wikisidor",
        "prefs-help-gender": "Denna inställning är valfri.\nProgramvaran använder detta värde för att adressera dig till andra med rätt genus. Denna information kommer att vara offentlig.",
        "email": "E-post",
-       "prefs-help-realname": "Riktigt namn behöver inte anges.\nOm du väljer att ange ditt riktiga namn, kommer det att användas för att tillskriva dig ditt arbete.",
+       "prefs-help-realname": "Riktigt namn behöver inte anges.\nOm angivet, kan det komma att användas för att tillskriva dig ditt arbete.",
        "prefs-help-email": "Att ange e-postadress är valfritt, men gör det möjligt att få ditt lösenord mejlat till dig om du glömmer det.",
        "prefs-help-email-others": "Du kan också välja att låta andra kontakta dig via e-post genom en länk på din användar- eller diskussionssida. Din e-postadress avslöjas inte när andra användare kontaktar dig.",
        "prefs-help-email-required": "E-postadress måste anges.",
        "statistics": "Statistik",
        "statistics-header-pages": "Sidstatistik",
        "statistics-header-edits": "Redigeringsstatistik",
-       "statistics-header-views": "Sidvisningsstatistik",
        "statistics-header-users": "Användarstatistik",
        "statistics-header-hooks": "Övrig statistik",
        "statistics-articles": "Sidor med innehåll",
        "statistics-files": "Uppladdade filer",
        "statistics-edits": "Sidredigeringar sedan {{SITENAME}} startades",
        "statistics-edits-average": "Redigeringar per sida i genomsnitt",
-       "statistics-views-total": "Totalt antal sidvisningar",
-       "statistics-views-total-desc": "Visningar av icke-existerande sidor och specialsidor ingår inte",
-       "statistics-views-peredit": "Antal sidvisningar per redigering",
        "statistics-users": "Registrerade [[Special:ListUsers|användare]]",
        "statistics-users-active": "Aktiva användare",
        "statistics-users-active-desc": "Användare som utfört någon åtgärd under {{PLURAL:$1|det senaste dygnet|de senaste $1 dygnen}}",
-       "statistics-mostpopular": "Mest besökta sidor",
        "pageswithprop": "Sidor med en sidegenskap",
        "pageswithprop-legend": "Sidor med en sidegenskap",
        "pageswithprop-text": "Denna sida listar sidor som använder en speciell sidegenskap.",
        "uncategorizedtemplates": "Ej kategoriserade mallar",
        "unusedcategories": "Oanvända kategorier",
        "unusedimages": "Oanvända filer",
-       "popularpages": "Populära sidor",
        "wantedcategories": "Önskade kategorier",
        "wantedpages": "Önskade sidor",
        "wantedpages-badtitle": "Ogiltig titel bland resultaten: $1",
        "tooltip-feed-atom": "Atom-flöde för den här sidan",
        "tooltip-t-contributions": "En lista över bidrag från den här användaren",
        "tooltip-t-emailuser": "Skicka e-post till den här användaren",
+       "tooltip-t-info": "Mer information om denna sida",
        "tooltip-t-upload": "Ladda upp filer",
        "tooltip-t-specialpages": "Lista över alla specialsidor",
        "tooltip-t-print": "Utskriftvänlig version av den här sidan",
        "pageinfo-robot-policy": "Indexering av robotar",
        "pageinfo-robot-index": "Tillåten",
        "pageinfo-robot-noindex": "Inte tillåten",
-       "pageinfo-views": "Antal visningar",
        "pageinfo-watchers": "Antal användare som bevakar sidan",
        "pageinfo-few-watchers": "Färre än $1 {{PLURAL:$1|bevakare}}",
        "pageinfo-redirects-name": "Antal omdirigeringar till denna sida",
index af54d9c..007cc42 100644 (file)
        "mergehistory-same-destination": "மூலப் பக்கமும் முடிவிடப் பக்கமும் ஒன்றாக இருக்கமுடியாது",
        "mergehistory-reason": "காரணம்:",
        "mergelog": "இணைப்புப் பதிகை",
-       "pagemerge-logentry": "[[$1]] பக்கம் [[$2]] பக்கத்துடன் இணைக்கப்பட்டது ($3 வரையான திருத்தங்கள்)",
        "revertmerge": "பிரி",
        "mergelogpagetext": "பின்வருவது அண்மையில் செய்யப்பட்ட பக்க வரலாறு இணைப்புகளின் பட்டியலாகும்.",
        "history-title": "திருத்த வரலாறு - \"$1\"",
        "statistics": "புள்ளிவிவரங்கள்",
        "statistics-header-pages": "பக்கங்களின் புள்ளிவிவரங்கள்",
        "statistics-header-edits": "தொகுப்புக்கள் பற்றிய புள்ளிவிவரங்கள்",
-       "statistics-header-views": "எத்தனைத்தடவை பார்க்கப்பட்டது எனபது பற்றிய புள்ளிவிவரங்கள்",
        "statistics-header-users": "பயனர் புள்ளி விபரங்கள்",
        "statistics-header-hooks": "மற்ற புள்ளிவிவரங்கள்",
        "statistics-articles": "உள்ளடக்கம் கொண்ட பக்கங்கள்",
        "statistics-files": "பதிவேற்றப்பட்டக் கோப்புகள்",
        "statistics-edits": "{{SITENAME}} அமைக்கப்பட்டதிலிருந்து பக்க திருத்தங்கள்",
        "statistics-edits-average": "ஒரு பக்கத்திற்கான சராசரி தொகுப்புக்கள்",
-       "statistics-views-total": "பார்வையிடப்பட்டதின் மொத்த எண்ணிக்கை",
-       "statistics-views-total-desc": "தற்பொழுது இல்லாத மற்றும் சிறப்பு பக்கங்களின் காட்சிகள் இதில் சேர்க்கபடவில்லை",
-       "statistics-views-peredit": "ஒரு தொகுத்தலுக்காக பார்க்கப்பட்ட எண்ணிக்கை",
        "statistics-users": "பதிவு செய்யப்பட்ட [[Special:ListUsers|பயனர்கள்]]",
        "statistics-users-active": "தொடர் பங்களிப்பாளர்கள் (பயனர்கள்)",
        "statistics-users-active-desc": "கடந்த {{PLURAL:$1|நாள்|$1 நாட்களில்}} ஒன்று அல்லது அதற்கு மேற்பட்ட செயலைச் செய்த பயனர்கள்",
-       "statistics-mostpopular": "அதிகம் பார்க்கப்பட்ட பக்கங்கள்",
        "pageswithprop": "பக்கப் பண்புடைய பக்கங்கள்",
        "pageswithprop-submit": "செல்க",
        "doubleredirects": "இரட்டை வழிமாற்றுகள்",
        "uncategorizedtemplates": "வகைப்படுத்தப்படாத வார்ப்புருக்கள்",
        "unusedcategories": "பயன்படுத்தப்படாத பகுப்புகள்",
        "unusedimages": "பயன்படுத்தப்படாத படிமங்கள்",
-       "popularpages": "அடிக்கடி பார்க்கப்படும் பக்கங்கள்",
        "wantedcategories": "வேண்டிய பகுப்புகள்",
        "wantedpages": "வேண்டிய பக்கங்கள்",
        "wantedpages-badtitle": "முடிவு குழு :$1 லில் உள்ள செல்லாத தலைப்பு",
        "tooltip-feed-atom": "இப்பக்கத்துக்கான அடொம் ஓடை கிடையாது",
        "tooltip-t-contributions": "இப்பயனரின்  பங்களிப்புக்களின் பட்டியலைப் பார்",
        "tooltip-t-emailuser": "இப் பயனருக்கு மின்னஞ்சல் செய்",
+       "tooltip-t-info": "இப்பக்கத்தைப்பற்றி மேலதிக விபரம்",
        "tooltip-t-upload": "கோப்புகளைப் பதிவேற்றுக",
        "tooltip-t-specialpages": "அனைத்துச் சிறப்புப் பக்கங்களின் பட்டியல்",
        "tooltip-t-print": "இப்பக்கத்தின் அச்சுக்குகந்தப் பதிப்பு",
        "pageinfo-robot-policy": "தானியங்கி மூலம் அட்டவணைப்படுத்தல்",
        "pageinfo-robot-index": "அனுமதிக்கப்படுகிறது",
        "pageinfo-robot-noindex": "அனுமதிக்கப்படாதது",
-       "pageinfo-views": "காட்சிகள் எண்ணிக்கை",
        "pageinfo-watchers": "பக்கப் பார்வையாளர்கள் எண்ணிக்கை",
        "pageinfo-few-watchers": "விட குறைவானது $1 {{PLURAL:$1|watcher|watchers}}",
        "pageinfo-redirects-name": "இந்தப் பக்கத்திற்கான வழிமாற்றுகளின் எண்ணிக்கை",
index 1d2973f..5e399fa 100644 (file)
@@ -63,7 +63,8 @@
                        "Sayginer",
                        "Sucsuzz",
                        "Kafkasmurat",
-                       "Violetanka"
+                       "Violetanka",
+                       "Trockya"
                ]
        },
        "tog-underline": "Bağlantıların altını çiz:",
        "viewsourcetext": "Bu sayfanın kaynağını görebilir ve kopyalayabilirsiniz:",
        "viewyourtext": "Bu sayfaya '''yaptığınız değişikliklerin''' kaynağını görünteleyip kopyalayabilirsiniz:",
        "protectedinterface": "Bu sayfa yazılım için arayüz metni sağlamaktadır ve kötüye kullanımı önlemek için korumaya alınmıştır. Eklemek ya da bütün vikilerdeki çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesi [//translatewiki.net/ translatewiki.net]'i kullanın.",
-       "editinginterface": "'''UYARI:''' Wiki yazılımı için arayüz sağlamakta kullanılan bir sayfayı değiştirmektesiniz. Bu sayfadaki değişiklikler kullanıcı arayüzünü diğer kullanıcılar için de değiştirecektir. Çeviriler için, lütfen [//translatewiki.net/wiki/Main_Page?setlang=tr translatewiki.net]'yi kullanarak MediaWiki yerelleştirme projesini dikkate alınız.",
+       "editinginterface": "<strong>Uyarı:</strong> Yazılım için arayüz metni sağlayan bir sayfayı değiştiriyorsunuz.\nBu sayfada yapılacak değişiklikler diğer kullanıcıların vikilerindeki kullanıcı arayüzlerinin görünümünü de etkileyecektir.",
+       "translateinterface": "Tüm vikilerde çeviri eklemek veya çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesini [//translatewiki.net/] kullanın.",
        "cascadeprotected": "Bu sayfa değişiklik yapılması engellenmiştir, çünkü  \"kademeli\" seçeneği aktif hale getirilerek koruma altına alınan {{PLURAL:$1|sayfada|sayfada}} kullanılmaktadır:\n$2",
        "namespaceprotected": "'''$1''' alandındaki sayfaları düzenlemeye izniniz bulunmamaktadır.",
        "customcssprotected": "Bu sayfayı değiştirmeye yetkiniz bulunmamaktadır, çünkü bu sayfa başka bir kullanıcının kişisel ayarlarını içermektedir.",
        "createaccount-text": "Birisi {{SITENAME}} sitesinde ($4) sizin e-posta adresinizi kullarak, şifresi \"$3\" olan, \"$2\" isimli bir hesap oluşturdu.\n\nSiteye giriş yapmalı ve parolanızı değiştirmelisiniz.\n\nEğer kullanıcı hesabını yanlışlıkla oluşturmuş iseniz, bu mesajı yoksayabilirsiniz.",
        "login-throttled": "Çok fazla yeni oturum açma girişiminde bulundunuz.\nDevam etmeden önce $1 bekleyin.",
        "login-abort-generic": "Girişiniz başarısız - iptal edilmiş",
+       "login-migrated-generic": "Hesabınız aktarılmış ve kullanıcı adınız artık bu vikide yok.",
        "loginlanguagelabel": "Dil: $1",
        "suspicious-userlogout": "Çıkış isteğiniz reddedildi çünkü bozuk bir tarayıcı ya da önbellekli vekil tarafından gönerilmiş gibi görünüyor.",
        "createacct-another-realname-tip": "Gerçek adınız isteğe bağlıdır.\nEğer gerçek adınızı belirtirseniz, çalışmalarınıza atıfta bulunulması için de kullanılacaktır.",
        "showpreview": "Önizlemeyi göster",
        "showdiff": "Değişiklikleri göster",
        "blankarticle": "<strong>Uyarı:</strong> Oluşturduğunuz sayfa boş.\nEğer \"{{int:savearticle}}\" düğmesine tekrar tıklarsanız, sayfa içerik olmadan oluşturulacaktır.",
-       "anoneditwarning": "'''Uyarı:''' Oturum açmadınız.\nIP adresiniz sayfanın değişiklik geçmişine kaydedilecektir.",
+       "anoneditwarning": "<strong>Uyarı:</strong> Giriş yapmadınız. Herhangi bir değişiklik yapmanız durumunda IP adresiniz herkese gözükecektir. Eğer <strong>[$1 giriş yaparsanız]</strong> veya <strong>[$2 bir hesap oluşturursanız]</strong>, edineceğiniz çeşitli yararların yanı sıra yaptığınız değişiklikler de kullanıcı adınıza atfedilecektir.",
        "anonpreviewwarning": "''Giriş yapmadınız. Kaydederseniz, sayfanın değişiklik geçmişine IP adresiniz yazılır.''",
        "missingsummary": "'''Uyarı:''' Herhangi bir özet yazmadın.\nKaydet tuşuna tekrar basarsan sayfa özetsiz kaydedilecek.",
        "missingcommenttext": "Lütfen aşağıda bir açıklama yazınız.",
        "logdelete-selected": "{{PLURAL:$1|Seçili kayıt olayı|Seçili kayıt olayları}}:",
        "revdelete-text-text": "Silinen sürümler sayfa geçmişinde yer almaya devam edecek ancak okuyucular tarafından içeriklerine erişilemeyecektir.",
        "revdelete-text-file": "Silinen dosya sürümleri dosya geçmişinde yer almaya devam edecek ancak okuyucular tarafından içerik bölümlerine erişilemeyecektir.",
+       "revdelete-text-others": "Ek kısıtlamalar konulmadıkça diğer yöneticiler silinen bir gizli içeriğe işlemi geri almak için erişebilecek.",
        "revdelete-confirm": "Lütfen, bunu yapmak istediğinizi , sonuçlarını anladığınızı, ve bunu [[{{MediaWiki:Policy-url}}|ilkelere]] göre yapıyor olduğunuzu onaylayın.",
        "revdelete-suppress-text": "Saklama '''sadece''' aşağıdaki durumlarda kullanılmalıdır:\n* Muhtemel iftira niteliğindeki bilgi\n* Uygunsuz kişisel bilgi\n*: ''ev adresleri ve telefon numaraları, sosyal güvenlik numaraları, vs.''",
        "revdelete-legend": "Görünürlük kısıtlamaları ayarla",
        "mergehistory-reason": "Sebep:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Birleştirme kaydı",
-       "pagemerge-logentry": "[[$1]] ile [[$2]] birleştirildi ($3'e kadar olan revizyonlar)",
        "revertmerge": "Ayır",
        "mergelogpagetext": "Aşağıdaki liste, sayfaların geçmiş versiyonlarının birbirleriyle en son birleştirilmelerini içerir",
        "history-title": "\"$1\" sayfasının geçmişi",
        "search-file-match": "(dosya içeriğiyle eşleşiyor)",
        "search-suggest": "Bunu mu demek istediniz: $1",
        "search-interwiki-caption": "Kardeş projeler",
-       "search-interwiki-default": "$1 sonuçlar:",
+       "search-interwiki-default": "$1 sonuçları:",
        "search-interwiki-more": "(daha çok)",
        "search-relatedarticle": "ilgili",
        "searchrelated": "ilgili",
        "gender-female": "Viki sayfalarını kadın olarak düzenliyorum",
        "prefs-help-gender": "Bu tercih ayarı isteğe bağlıdır.\nYazılımda söz değerlerinin başlarında bulunan cinsiyete uygun gramerler için kullanılır.\nBu bilgiler herkes tarafından görülebilir.",
        "email": "E-posta",
-       "prefs-help-realname": "* Gerçek isim (isteğe bağlı): eğer gerçek isminizi vermeyi seçerseniz, çalışmanızı size atfederken kullanılacaktır.",
+       "prefs-help-realname": "Gerçek ismi vermek isteğe bağlıdır.\nEğer verirseniz yaptığınız çalışmalara ithafen kullanılabilir.",
        "prefs-help-email": "E-posta adresi isteğe bağlıdır; ancak parolanızı unutmanız durumunda parola sıfırlamak için gerekecektir.",
        "prefs-help-email-others": "Ayrıca kullanıcı sayfanızdaki bir bağlantı yoluyla diğer kullanıcıların size e-posta atmasına izin vermeyi seçebilirsiniz.\nDiğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz açıklanmaz.",
        "prefs-help-email-required": "E-posta adresi gerekmektedir.",
        "statistics": "İstatistikler",
        "statistics-header-pages": "Sayfa istatistikleri",
        "statistics-header-edits": "Değişiklik istatistikleri",
-       "statistics-header-views": "Görüntüleme istatistikleri",
        "statistics-header-users": "Kullanıcı istatistikleri",
        "statistics-header-hooks": "Diğer istatistikler",
        "statistics-articles": "Maddeler",
        "statistics-files": "Yüklenmiş dosyalar",
        "statistics-edits": "{{SITENAME}} kurulduğundan beri yapılan sayfa değişiklikleri",
        "statistics-edits-average": "Her sayfadaki ortalama değişiklik",
-       "statistics-views-total": "Toplam görüntüleme",
-       "statistics-views-total-desc": "Varolmayan ve özel sayfaların görüntülenmeleri dahil edilmemiştir.",
-       "statistics-views-peredit": "Değişiklik başına görüntüleme",
        "statistics-users": "Kayıtlı [[Special:ListUsers|kullanıcılar]]",
        "statistics-users-active": "Aktif kullanıcılar",
        "statistics-users-active-desc": "Son {{PLURAL:$1|gün|$1 günde}} çalışma yapan kullanıcılar",
-       "statistics-mostpopular": "En çok ziyaret edilen sayfalar",
        "pageswithprop": "Bir sayfa özelliğine sahip sayfalar",
        "pageswithprop-legend": "Bir sayfa özelliğine sahip sayfalar",
        "pageswithprop-text": "Bu sayfa belirli bir sayfa özelliğini kullanan sayfaları listeler.",
        "uncategorizedtemplates": "Kategorisiz şablonlar",
        "unusedcategories": "Kullanılmayan kategoriler",
        "unusedimages": "Kullanılmayan dosyalar",
-       "popularpages": "Popüler sayfalar",
        "wantedcategories": "İstenen kategoriler",
        "wantedpages": "İstenen sayfalar",
        "wantedpages-badtitle": "Sonuç kümesinde geçersiz başlık: $1",
        "movepagetalktext": "İlişikteki tartışma sayfası da (eğer varsa) otomatik olarak yeni isme taşınacaktır. Ama şu durumlarda '''taşınmaz''':\n\n*Alanlar arası bir taşıma ise, (örnek: \"Project:\" --> \"Help:\")\n*Yeni isimde bir tartışma sayfası zaten var ise,\n*Alttaki kutucuğu seçmediyseniz.\n\nBu durumlarda sayfayı kendiniz aktarmalısınız.",
        "movearticle": "Eski isim",
        "moveuserpage-warning": "'''Uyarı:''' Bir kullanıcı sayfasını taşımak üzeresiniz. Lütfen sadece sayfanın taşınacağına, ancak kullanıcının yeniden ''adlandırılmayacağına'' dikkat edin.",
+       "movecategorypage-warning": "<strong>Uyarı:</strong> Bir kategori sayfasını taşımak üzeresiniz. Lütfen yalnızca sayfanın taşınacağını ve eski kategoride yer alan sayfaların yeniden kategorize <em>edilmeyeceğini</em> unutmayın.",
        "movenologintext": "Sayfanın adını değiştirebilmek için kayıtlı ve [[Special:UserLogin|sisteme]] giriş yapmış olmanız gerekmektedir.",
        "movenotallowed": "Sayfaları taşımaya izniniz yok.",
        "movenotallowedfile": "Sayfaları taşımaya izniniz yok.",
        "tooltip-feed-atom": "Bu sayfa için atom beslemesi",
        "tooltip-t-contributions": "Kullanıcının katkılarının listesini gör",
        "tooltip-t-emailuser": "Bu kullanıcıya e-posta gönder",
+       "tooltip-t-info": "Bu sayfa hakkında daha fazla bilgi",
        "tooltip-t-upload": "Dosya yükle",
        "tooltip-t-specialpages": "Tüm özel sayfaların listesi",
        "tooltip-t-print": "Bu sayfanın basılmaya uygun sürümü",
        "pageinfo-robot-policy": "Robotlar tarafından endeksleniyor",
        "pageinfo-robot-index": "İzin verilmiş",
        "pageinfo-robot-noindex": "İzin verilmedi",
-       "pageinfo-views": "Görüntülenme sayısı",
        "pageinfo-watchers": "Sayfanın izleyici sayısı",
        "pageinfo-few-watchers": "$1 {{PLURAL:$1|izleyiciden|izleyiciden}} az",
        "pageinfo-redirects-name": "Bu sayfaya yönlendirme sayısı",
index a33d17d..b20a1c9 100644 (file)
        "viewsourcetext": "Ви можете переглянути та скопіювати початковий текст цієї сторінки:",
        "viewyourtext": "Ви можете переглянути та скопіювати текст '''ваших редагувань''' на цій сторінці:",
        "protectedinterface": "Ця сторінка містить текст інтерфейсу програмного забезпечення цієї Вікі, захищений від небажаного втручання. Щоб додати або змінити переклади для всіх вікі, перейдіть до [//translatewiki.net/ translatewiki.net], проекту локалізації MediaWiki.",
-       "editinginterface": "'''Увага:''' Ви редагуєте сторінку, що є частиною текстового інтерфейсу програм. \nЗміни цієї сторінки спричинять зміну інтерфейсу для інших користувачів цієї Вікі. \nЩоб додати чи змінити переклади для всіх вікі, використовуйте [//translatewiki.net/wiki/Main_Page?setlang=uk translatewiki.net] — проект локалізації MediaWiki.",
+       "editinginterface": "'''Увага:''' Ви редагуєте сторінку, що є частиною текстового інтерфейсу програм. \nЗміни цієї сторінки спричинять зміну інтерфейсу для інших користувачів цієї Вікі.",
+       "translateinterface": "Для того, щоб додати чи змінити переклад повідомлень інтерфейсу для всіх вікі-проектів, скористайтеся будь ласка проектом локалізації MediaWiki: [//translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "Сторінка захищена від змін, оскільки вона належить до {{PLURAL:$1|1=сторінки, для якої|сторінок, для яких}} установлено каскадний захист: $2",
        "namespaceprotected": "У вас нема дозволу редагувати сторінки в просторі назв «$1».",
        "customcssprotected": "У вас немає дозволу на редагування цієї CSS-сторінки, бо вона містить особисті налаштування іншого користувача.",
        "content-model-text": "звичайний текст",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Сторінки, що включають шаблони з дублікатним визначенням аргументу",
+       "duplicate-args-category-desc": "Тут перелічено сторінки, що містять дублікатне визначення аргументу при включенні шаблону, приміром, <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> або <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Увага:''' Ця сторінка містить дуже багато викликів ресурсомістких функцій.\n\nКількість викликів не повинна перевищувати $2, зараз потрібно зробити $1 {{PLURAL:$1|виклик|виклики|викликів}}.",
        "expensive-parserfunction-category": "Сторінки з дуже великою кількістю викликів ресурсомістких функцій",
        "post-expand-template-inclusion-warning": "'''Увага:''' розмір шаблонів для включення занадто великий.\nДеякі шаблони не буде включено.",
        "mergehistory-same-destination": "Початкова і цільова сторінки повинні відрізнятися",
        "mergehistory-reason": "Причина:",
        "mergelog": "Журнал об'єднань",
-       "pagemerge-logentry": "об'єднані [[$1]] і [[$2]] (версії до $3)",
        "revertmerge": "Розділити",
        "mergelogpagetext": "Нижче наведений список останніх об'єднань історій сторінок.",
        "history-title": "$1: Історія змін",
        "gender-female": "Жіноча",
        "prefs-help-gender": "Задання цього параметру - необов'язкове. Застосовується рушієм у тих звертаннях до користувача, які залежать від статі.\nЦя інформація загальнодоступна.",
        "email": "Електронна пошта",
-       "prefs-help-realname": "СпÑ\80авжнÑ\94 Ñ\96м'Ñ\8f Ð½ÐµÐ¾Ð±Ð¾Ð²'Ñ\8fзково Ð²ÐºÐ°Ð·Ñ\83ваÑ\82и.\nЯкÑ\89о Ð²Ð¸ Ð¹Ð¾Ð³Ð¾ Ð·Ð°Ð·Ð½Ð°Ñ\87иÑ\82е, Ñ\82о Ð²Ð¾Ð½Ð¾ Ð±Ñ\83де Ð²Ð¸ÐºÐ¾Ñ\80иÑ\81Ñ\82овÑ\83ваÑ\82иÑ\81Ñ\8f, Ñ\89об Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ\82и, Ñ\85Ñ\82о Ñ\80едагÑ\83вав Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83.",
+       "prefs-help-realname": "СпÑ\80авжнÑ\94 Ñ\96м'Ñ\8f Ð²ÐºÐ°Ð·Ñ\83ваÑ\82и Ð½ÐµÐ¾Ð±Ð¾Ð²'Ñ\8fзково.\nЯкÑ\89о Ð²Ð¸ Ð¹Ð¾Ð³Ð¾ Ð·Ð°Ð·Ð½Ð°Ñ\87иÑ\82е, Ñ\82о Ñ\81аме Ð· Ð½Ð¸Ð¼ Ð¼Ð¾Ð¶Ðµ Ð±Ñ\83Ñ\82и Ð¿Ð¾Ð²'Ñ\8fзаний Ñ\83веÑ\81Ñ\8c Ð²Ð°Ñ\88 Ð´Ð¾Ñ\80обок.",
        "prefs-help-email": "Адреса електронної пошти не є обов'язковою, але необхідна для скидання пароля, якщо ви його забудете.",
        "prefs-help-email-others": "Також вона дозволить іншим користувачам зв'язатися з вами через вашу особисту сторінку без необхідності розкриття вашої електронної адреси.",
        "prefs-help-email-required": "Потрібно зазначити адресу електронної пошти.",
        "statistics": "Статистика",
        "statistics-header-pages": "Статистика сторінок",
        "statistics-header-edits": "Статистика редагувань",
-       "statistics-header-views": "Статистика переглядів",
        "statistics-header-users": "Статистика користувачів",
        "statistics-header-hooks": "Інша статистика",
        "statistics-articles": "Статей",
        "statistics-files": "Завантажено файлів",
        "statistics-edits": "Кількість редагувань з моменту установки {{grammar:genitive|{{SITENAME}}}}",
        "statistics-edits-average": "Середнє число редагувань на сторінку",
-       "statistics-views-total": "Усього переглядів",
-       "statistics-views-total-desc": "Перегляди неіснуючих та спеціальних сторінок не враховані",
-       "statistics-views-peredit": "Переглядів на редагування",
        "statistics-users": "Зареєстрованих [[Special:ListUsers|користувачів]]",
        "statistics-users-active": "Активні користувачі",
        "statistics-users-active-desc": "Користувачі, які здійснили якусь дію протягом {{PLURAL:$1|1=минулого дня|$1 минулих днів}}",
-       "statistics-mostpopular": "Сторінки, які найчастіше переглядають",
        "pageswithprop": "Сторінки з перевизначеними властивостями",
        "pageswithprop-legend": "Сторінки з перевизначеними властивостями",
        "pageswithprop-text": "Тут перераховані сторінки, у яких були вручну перевизначені окремі властивості.",
        "uncategorizedtemplates": "Некатегоризовані шаблони",
        "unusedcategories": "Категорії, що не використовуються",
        "unusedimages": "Файли, що не використовуються",
-       "popularpages": "Популярні статті",
        "wantedcategories": "Необхідні категорії",
        "wantedpages": "Необхідні статті",
        "wantedpages-badtitle": "Неправильний заголовок у результатах запиту: $1",
        "pager-older-n": "{{PLURAL:$1|старіша|старіші|старіших}} $1",
        "suppress": "Ревізор",
        "querypage-disabled": "Цю спеціальну сторінку вимкнуто для покращення продуктивності.",
+       "apihelp": "Довідка з API",
+       "apihelp-no-such-module": "Додаток \"$1\" не знайдено.",
        "booksources": "Джерела книг",
        "booksources-search-legend": "Пошук інформації про книгу",
        "booksources-isbn": "ISBN:",
        "move-page": "Перейменування сторінки «$1»",
        "move-page-legend": "Перейменування сторінки",
        "movepagetext": "Скориставшись формою нижче, ви можете перейменувати сторінку, одночасно перемістивши на нове місце і журнал її редагувань.\nСтара назва стане перенаправленням на нову назву.\nВи можете автоматично оновити перенаправлення на стару назву.\nЯкщо ви цього не зробите, будь ласка, перевірте наявність [[Special:DoubleRedirects|подвійних]] чи [[Special:BrokenRedirects|розірваних]] перенаправлень.\nВи відповідаєте за те, щоб посилання і надалі вказували туди, куди припускалося.\n\nЗверніть увагу, що сторінка '''не''' буде перейменована, якщо сторінка з новою назвою вже існує, окрім випадків, коли остання порожня або є перенаправленням, а журнал її редагувань порожній.\nЦе означає, що ви можете повернути сторінці стару назву, якщо ви перейменували її помилково, але ви не можете затерти існуючу сторінку.\n\n'''ПОПЕРЕДЖЕННЯ!'''\nЦя дія може стати причиною серйозних та неочікуваних змін популярних сторінок.\nБудь ласка, перед продовженням переконайтесь, що ви розумієте всі можливі наслідки.",
-       "movepagetext-noredirectfixer": "ЦÑ\8f Ñ\84оÑ\80ма Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\8fÑ\94 Ð¿ÐµÑ\80ейменÑ\83ваÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 Ð· Ð¾Ð´Ð½Ð¾Ñ\87аÑ\81ним Ð¿ÐµÑ\80емÑ\96Ñ\89еннÑ\8fм Ñ\97Ñ\97 Ð¶Ñ\83Ñ\80налÑ\83 Ð·Ð¼Ñ\96н.\nСÑ\82аÑ\80а Ð½Ð°Ð·Ð²Ð° Ñ\81Ñ\82ане Ð¿ÐµÑ\80енапÑ\80авленнÑ\8fм Ð½Ð° Ð½Ð¾Ð²Ñ\83.\nÐ\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ð½Ðµ Ð·Ð°Ð±Ñ\83дÑ\8cÑ\82е Ð²Ð¸Ð¿Ñ\80авиÑ\82и [[Special:DoubleRedirects|подвÑ\96йнÑ\96]] Ñ\96 [[Special:BrokenRedirects|розірвані перенаправлення]].\nВи відповідаєте за те, щоб посилання і далі вказували туди, куди треба.\n\nЗверніть увагу, що сторінка '''не буде''' перейменована, якщо сторінка з новою назвою вже існує, крім випадків, коли вона є перенаправленням або порожня та не має історії редагувань.\nЦе означає, що Ви можете перейменувати сторінку назад, якщо Ви допустилися помилки, і при цьому не зможете випадково перезаписати наявну сторінку.\n\n'''Попередження!'''\nПерейменування може призвести до масштабних і несподіваних змін для ''популярних'' сторінок.\nТому перед перейменуванням упевніться, що Ви оцінили можливі наслідки.",
+       "movepagetext-noredirectfixer": "ЦÑ\8f Ñ\84оÑ\80ма Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\8fÑ\94 Ð¿ÐµÑ\80ейменÑ\83ваÑ\82и Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 Ð· Ð¾Ð´Ð½Ð¾Ñ\87аÑ\81ним Ð¿ÐµÑ\80емÑ\96Ñ\89еннÑ\8fм Ñ\97Ñ\97 Ð¶Ñ\83Ñ\80налÑ\83 Ð·Ð¼Ñ\96н.\nСÑ\82аÑ\80а Ð½Ð°Ð·Ð²Ð° Ñ\81Ñ\82ане Ð¿ÐµÑ\80енапÑ\80авленнÑ\8fм Ð½Ð° Ð½Ð¾Ð²Ñ\83.\nÐ\91Ñ\83дÑ\8c Ð»Ð°Ñ\81ка, Ð½Ðµ Ð·Ð°Ð±Ñ\83дÑ\8cÑ\82е Ð²Ð¸Ð¿Ñ\80авиÑ\82и [[Special:DoubleRedirects|подвÑ\96йнÑ\96]] Ñ\82а [[Special:BrokenRedirects|розірвані перенаправлення]].\nВи відповідаєте за те, щоб посилання і далі вказували туди, куди треба.\n\nЗверніть увагу, що сторінка '''не буде''' перейменована, якщо сторінка з новою назвою вже існує, крім випадків, коли вона є перенаправленням або порожня та не має історії редагувань.\nЦе означає, що Ви можете перейменувати сторінку назад, якщо Ви допустилися помилки, і при цьому не зможете випадково перезаписати наявну сторінку.\n\n'''Попередження!'''\nПерейменування може призвести до масштабних і несподіваних змін для ''популярних'' сторінок.\nТому перед перейменуванням упевніться, що Ви оцінили можливі наслідки.",
        "movepagetalktext": "Приєднана сторінка обговорення також буде автоматично перейменована, '''окрім таких випадків:'''\n* Непорожня сторінка обговорення з такою назвою вже існує або\n* Ви не поставили галочку в полі нижче.\n\nУ цих випадках ви будете змушені перейменувати чи об'єднати сторінки вручну в разі необхідності",
        "movearticle": "Перейменувати сторінку",
        "moveuserpage-warning": "'''Увага:''' Ви збираєтеся перейменувати сторінку користувача. Будь ласка, зверніть увагу, що  буде перейменовано тільки сторінку, але користувача '''не''' буде перейменовано.",
        "tooltip-pt-mycontris": "Ваш внесок",
        "tooltip-pt-login": "Тут можна зареєструватися в системі, але це не обов'язково.",
        "tooltip-pt-logout": "Вихід із системи",
+       "tooltip-pt-createaccount": "Пропонуємо створити обліковий запис і увійти в систему; однак, це не обов'язково",
        "tooltip-ca-talk": "Обговорення змісту сторінки",
        "tooltip-ca-edit": "Ви можете редагувати цю сторінку. Будь ласка, використовуйте кнопку попереднього перегляду перед збереженням",
        "tooltip-ca-addsection": "Створити новий розділ",
        "tooltip-feed-atom": "Трансляція в Atom для цієї сторінки",
        "tooltip-t-contributions": "Перегляд внеску цього користувача",
        "tooltip-t-emailuser": "Надіслати листа цьому користувачеві",
+       "tooltip-t-info": "Додаткові відомості про цю сторінку",
        "tooltip-t-upload": "Завантажити файли",
        "tooltip-t-specialpages": "Перелік спеціальних сторінок",
        "tooltip-t-print": "Версія цієї сторінки для друку",
        "pageinfo-robot-policy": "Індексація пошуковими системами",
        "pageinfo-robot-index": "Індексується",
        "pageinfo-robot-noindex": "Не індексується",
-       "pageinfo-views": "Кількість переглядів",
        "pageinfo-watchers": "Кількість спостерігачів",
        "pageinfo-few-watchers": "Менше ніж $1 {{PLURAL:$1|спостерігач|спостерігачі|спостерігачів}}",
        "pageinfo-redirects-name": "Число перенаправлень на цю сторінку",
        "unknown_extension_tag": "Невідомий тег доповнення «$1»",
        "duplicate-defaultsort": "Увага. Ключ сортування «$2» перекриває попередній ключ сортування «$1».",
        "duplicate-displaytitle": "<strong>Увага:</strong> Відображений заголовок \"$2\" заміщує раніше відображений заголовок \"$1\".",
+       "invalid-indicator-name": "<strong>Помилка:</strong> Сторінка індикатора стану <code>name</code> атрибута не може бути пуста.",
        "version": "Версія MediaWiki",
        "version-extensions": "Установлені розширення",
        "version-skins": "Встановлені теми оформлення",
index e08c621..ee52bbc 100644 (file)
        "gotaccountlink": "Kirish",
        "userlogin-resetlink": "Kirish maʻlumotlaringiz esdan chiqdimi?",
        "userlogin-resetpassword-link": "Unutib qoʻydingizmi?",
+       "userlogin-helplink2": "Kirish uchun yordam",
        "userlogin-loggedin": "Siz {{GENDER:$1|$1}} nomi bilan kirgansiz.\nBoshqa hisob raqami orqali kirish uchun quyidagi formadan foydalaning.",
        "userlogin-createanother": "Boshqa hisob yaratish",
        "createacct-emailrequired": "Elektron pochta manzilingiz",
        "login-abort-generic": "Tizimga kirishga mufavvaqiyatsiz urinish",
        "loginlanguagelabel": "Til: $1",
        "pt-login": "Kirish",
+       "pt-login-button": "Kirish",
        "pt-createaccount": "Hisob yaratish",
        "pt-userlogout": "Chiqish",
        "changepassword": "Maxfiy soʻzni oʻzgartirish",
        "mergehistory-submit": "Tahrirlarni birlashtirish",
        "mergehistory-reason": "Sabab:",
        "mergelog": "Birlashtirish qaydlari",
-       "pagemerge-logentry": "[[$1]] va [[$2]]lar birlashtirildi ($3 gacha bo'lgan versiyalar)",
        "revertmerge": "Bo'lish",
        "history-title": "$1 - oʻzgarishlar tarixi",
        "difference-title": "$1 — versiyalar orasidagi farq",
        "recentchangescount": "Sukut boʻyicha koʻrsatiladigan tahrirlar soni:",
        "prefs-help-recentchangescount": "Yangi oʻzgarishlar, sahifalar tarixi va qaydlar uchun",
        "prefs-help-watchlist-token2": "Bu kuzatuv roʻyxatingizning veb-kanali uchun maxfiy kalit kodi.\nBu kodni biladigan har kim sizning kuzatuv roʻyxatingizni koʻrishi mumkin, shuning uchun boshqalarga uni oshkor qilmang. [[Special:ResetTokens|Tokenni yangilash]].",
-       "savedprefs": "Sizning moslamalaringiz saqlandi.",
+       "savedprefs": "Sizning moslamalaringiz saqlandi",
        "timezonelegend": "Vaqt mintaqangiz:",
        "localtime": "Mahalliy vaqt:",
        "timezoneuseserverdefault": "Server moslamalaridan foydalanish ($1)",
index 95434b4..e9339be 100644 (file)
        "viewsourcetext": "Bạn vẫn có thể xem và chép xuống mã nguồn của trang này:",
        "viewyourtext": "Bạn vẫn có thể xem và chép xuống mã nguồn '''các sửa đổi của bạn''' tại trang này:",
        "protectedinterface": "Trang này cung cấp một thông điệp trong giao diện phần mềm, và bị khóa để tránh phá hoại. Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/wiki/Main_Page?setlang=vi translatewiki.net], dự án bản địa hóa của MediaWiki.",
-       "editinginterface": "'''Lưu ý:''' Bạn đang sửa chữa một trang dùng để cung cấp thông điệp giao diện cho phần mềm. Những thay đổi tại trang này sẽ ảnh hưởng đến giao diện của rất nhiều người dùng wiki này. Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/wiki/Main_Page?setlang=vi translatewiki.net], dự án bản địa hóa của MediaWiki.",
+       "editinginterface": "<strong>Lưu ý:</strong> Bạn đang sửa chữa một trang dùng để cung cấp thông điệp giao diện cho phần mềm. Những thay đổi tại trang này sẽ ảnh hưởng đến giao diện của rất nhiều người dùng wiki này.",
+       "translateinterface": "Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/?setlang=vi translatewiki.net], dự án bản địa hóa MediaWiki.",
        "cascadeprotected": "Trang này đã bị khóa không cho sửa đổi, vì nó được nhúng vào {{PLURAL:$1|trang|những trang}} đã bị khóa với tùy chọn “khóa theo tầng” được kích hoạt:\n$2",
        "namespaceprotected": "Bạn không có quyền sửa các trang trong không gian tên '''$1'''.",
        "customcssprotected": "Bạn không có quyền sửa đổi trang CSS này vì nó chứa các tùy chọn cá nhân của một thành viên khác.",
        "content-model-text": "văn bản thuần",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "Trang đưa đối số thừa vào bản mẫu",
+       "duplicate-args-category-desc": "Trang đưa một đối số nhiều lần vào một bản mẫu được nhúng, thí dụ <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> hoặc <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Cảnh báo: Trang này có quá nhiều lần gọi hàm cú pháp cần mức độ xử lý cao.\n\nNó nên ít hơn $2 {{PLURAL:$2|lần gọi|lần gọi}}, hiện giờ đang là {{PLURAL:$1|$1 lần gọi|$1 lần gọi}}.",
        "expensive-parserfunction-category": "Trang có quá nhiều lời gọi hàm cú pháp cần mức độ xử lý cao",
        "post-expand-template-inclusion-warning": "Cảnh báo: Kích thước bản mẫu nhúng vào quá lớn.\nMột số bản mẫu sẽ không được đưa vào.",
        "mergehistory-same-destination": "Trang nguồn và trang đích không được trùng tên",
        "mergehistory-reason": "Lý do:",
        "mergelog": "Nhật trình trộn",
-       "pagemerge-logentry": "đã trộn [[$1]] vào [[$2]] (sửa đổi cho đến $3)",
        "revertmerge": "Bỏ trộn",
        "mergelogpagetext": "Dưới đây là danh sách các thao tác trộn mới nhất của lịch sử một trang vào trang khác.",
        "history-title": "Lịch sử sửa đổi của “$1”",
        "statistics": "Thống kê",
        "statistics-header-pages": "Thống kê trang",
        "statistics-header-edits": "Thống kê sửa đổi",
-       "statistics-header-views": "Thống kê truy cập",
        "statistics-header-users": "Thống kê thành viên",
        "statistics-header-hooks": "Thống kê khác",
        "statistics-articles": "Số trang nội dung",
        "statistics-files": "Số tập tin đã tải lên",
        "statistics-edits": "Số sửa đổi trang từ khi {{SITENAME}} được thành lập",
        "statistics-edits-average": "Số sửa đổi trung bình trên một trang",
-       "statistics-views-total": "Số lần xem tổng cộng",
-       "statistics-views-total-desc": "Không bao gồm số lần xem các trang không tồn tại và các trang đặc biệt",
-       "statistics-views-peredit": "Số lần xem trên một sửa đổi",
        "statistics-users": "Số [[Special:ListUsers|thành viên]] có tài khoản",
        "statistics-users-active": "Số thành viên tích cực",
        "statistics-users-active-desc": "Những thành viên đã hoạt động trong {{PLURAL:$1|ngày|$1 ngày}} qua",
-       "statistics-mostpopular": "Các trang được xem nhiều nhất",
        "pageswithprop": "Trang có thuộc tính trang",
        "pageswithprop-legend": "Các trang có thuộc tính trang",
        "pageswithprop-text": "Trang này liệt kê các trang sử dụng một thuộc tính trang nào đó.",
        "uncategorizedtemplates": "Bản mẫu chưa được phân loại",
        "unusedcategories": "Thể loại trống",
        "unusedimages": "Tập tin chưa dùng",
-       "popularpages": "Trang nhiều người đọc",
        "wantedcategories": "Thể loại cần thiết",
        "wantedpages": "Trang cần viết",
        "wantedpages-badtitle": "Tiêu đề không hợp lệ trong tập kết quả: $1",
        "pager-older-n": "{{PLURAL:$1|1|$1}} cũ hơn",
        "suppress": "Giám sát viên",
        "querypage-disabled": "Trang đặc biệt này bị tắt vì lý do hiệu suất.",
+       "apihelp": "Trợ giúp API",
+       "apihelp-no-such-module": "Không tìm thấy mô đun “$1”",
        "booksources": "Nguồn sách",
        "booksources-search-legend": "Tìm kiếm nguồn sách",
        "booksources-search": "Tìm kiếm",
        "tooltip-pt-mycontris": "Danh sách các đóng góp của tôi",
        "tooltip-pt-login": "Đăng nhập sẽ có lợi hơn, tuy nhiên không bắt buộc.",
        "tooltip-pt-logout": "Đăng xuất",
+       "tooltip-pt-createaccount": "Khuyến khích bạn mở tài khoản và đăng nhập; tuy nhiên, không phải bắt buộc phải có tài khoản",
        "tooltip-ca-talk": "Thảo luận về trang này",
        "tooltip-ca-edit": "Bạn có thể sửa được trang này! (Xin vui lòng xem trước trước khi lưu.)",
        "tooltip-ca-addsection": "Bắt đầu một đề mục mới",
        "tooltip-feed-atom": "Nguồn cấp Atom của trang này",
        "tooltip-t-contributions": "Xem đóng góp của người này",
        "tooltip-t-emailuser": "Gửi thư cho người này",
+       "tooltip-t-info": "Thêm chi tiết về trang này",
        "tooltip-t-upload": "Tải hình ảnh hoặc tập tin lên",
        "tooltip-t-specialpages": "Danh sách các trang đặc biệt",
        "tooltip-t-print": "Bản để in ra của trang",
        "pageinfo-robot-policy": "Ghi chỉ mục bởi robot",
        "pageinfo-robot-index": "Cho phép",
        "pageinfo-robot-noindex": "Không cho phép",
-       "pageinfo-views": "Số lần xem",
        "pageinfo-watchers": "Số người theo dõi trang",
        "pageinfo-few-watchers": "Không tới $1 người theo dõi",
        "pageinfo-redirects-name": "Số trang đổi hướng đến trang này",
        "unknown_extension_tag": "Không hiểu thẻ mở rộng “$1”",
        "duplicate-defaultsort": "Cảnh báo: Từ khóa xếp mặc định “$2” ghi đè từ khóa trước, “$1”.",
        "duplicate-displaytitle": "<strong>Cảnh báo:</strong> Tên hiển thị “$2” ghi đè tên hiển thị “$1” bên trên.",
+       "invalid-indicator-name": "<strong>Lỗi:</strong> Không thể để trống thuộc tính <code>name</code> của cái chỉ trạng thái trang.",
        "version": "Phiên bản",
        "version-extensions": "Các phần mở rộng được cài đặt",
        "version-skins": "Giao diện đã cài đặt",
        "revdelete-uname-unhid": "đã hiện tên người dùng",
        "revdelete-restricted": "đã áp dụng hạn chế cho bảo quản viên",
        "revdelete-unrestricted": "đã gỡ bỏ hạn chế cho bảo quản viên",
+       "logentry-merge-merge": "$1 {{GENDER:$2}}đã hợp nhất $3 vào $4 (các phiên bản cho tới $5)",
        "logentry-move-move": "$1 {{GENDER:$2}}đã đổi $3 thành $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2}}đã đổi $3 thành $4 (đã tắt đổi hướng)",
        "logentry-move-move_redir": "$1 {{GENDER:$2}}đã đổi $3 thành $4 qua đổi hướng",
index c8799e2..5179e74 100644 (file)
        "pool-timeout": "אַריבער דער צײַט וואַרטן פֿאר דער שליסונג",
        "pool-queuefull": "ריי איז פֿול",
        "pool-errorunknown": "אומבאַקאַנטער פֿעלער",
+       "pool-servererror": "נישט פאראן דער פול־צאל דינסט ($1).",
        "aboutsite": "וועגן {{SITENAME}}",
        "aboutpage": "Project:וועגן",
        "copyright": "דער אינהאַלט איז פֿאַראַן אונטער $1 ווען נישט באוויזן אנדערש.",
        "viewsourcetext": "איר קענט זען און קאפירן דעם מקור פון דעם בלאַט:",
        "viewyourtext": "איר קענט באקוקן דעם מקור פון '''אייערע רעדאקטירונגען''' צו דעם בלאט:",
        "protectedinterface": "דער בלאַט שטעלט צו באניצער־אויבערפלאך טעקסט פֿאַרן װײכװאַרג אויף דער דאזיקער וויקי, און איז פֿאַרשפּאַרט כּדי צו פֿאַרמײַדן װאַנדאַליזם.\nכדי צולייגן אדער ענדערן איבערזעצונגען פאר אלע וויקיס, זייט אזוי גוט ניצן [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאליזאציע פראיעקט.",
-       "editinginterface": "'''ווארענונג:''' איר באַאַרבעט א בלאט וואס איז געניצט צוצושטעלן אינטערפֿייס טעקסט פאר דער ווייכווארג. ענדערונגען אין דעם בלאַט וועלן טוישן דאס אויסזען פון די סיסטעם מודעות פאר אלע אנדערע באניצער אויף דער וויקי.\nכדי צולייגן אדער ענדערן איבערזעצונגען, באַטראַכטס באַניצן [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאַליזאציע פראיעקט.",
+       "editinginterface": "<strong>ווארענונג:</strong> איר באַאַרבעט א בלאט וואס ווערט געניצט צוצושטעלן אינטערפֿייס טעקסט פאר דער ווייכווארג.\nענדערונגען אין דעם בלאַט וועלן טוישן דאס אויסזען פון די סיסטעם מודעות פאר אנדערע באניצער אויף דער וויקי.",
+       "translateinterface": "כדי צו צולייגן איבערזעצונגען פאר אלע וויקיס, זײַט אזוי גוט און ניצט [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאליזירונג פראיעקט.",
        "cascadeprotected": "דער בלאט איז פארשפארט צום ענדערן וויבאלד ער איז איינגעשלאסן אין איינע פון די פאלגנדע {{PLURAL:$1|בלאט, וואס איז|בלעטער, וואס זענען}} באשיצט מיט דער קאסקייד אפציע:\n\n$2",
        "namespaceprotected": "איר זענט נישט ערלויבט צו רעדאקטירן בלעטער אינעם '''$1''' נאמענטייל.",
        "customcssprotected": "איר האט נישט רשות צו רעדאַקטירן דעם CSS בלאַט, ווײַל ער אַנטהאַלט די פערזענלעכע באַשטימונגען פון אַן אַנדער באַניצער.",
        "content-model-text": "פשוטער טעקסט",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "בלעטער וואס ניצן געטאפלטע ארגומענטן אין מוסטער רופן",
        "expensive-parserfunction-warning": "'''אזהרה:''' דער בלאט אנטהאלט צופיל טייערע פארזירער רופן.\n\nער דארף האבן ווינציגער פון  $2 {{PLURAL:$2|רוף|רופן}}, אבער אצינד {{PLURAL:$1|איז דא $1 רוף|זענען דא $1 רופן}}.",
        "expensive-parserfunction-category": "בלעטער מיט צופֿיל טייערע פאַרזער פֿונקציאן רופֿן",
        "post-expand-template-inclusion-warning": "'''אכטונג:''' איינגעשלאסענע מוסטערן אין דעם בלאט זענען צו גרויס.\nטייל מוסטערן וועלן נישט ווערן איינגעשלאסן.",
        "mergehistory-same-destination": "מקור און ציל בלעטער זענען די זעלבע",
        "mergehistory-reason": "אורזאַך:",
        "mergelog": "צונויפֿגיסן לאג-בוך",
-       "pagemerge-logentry": "צונויפֿגעגאסן [[$1]] אין [[$2]] (גרסאות ביז $3)",
        "revertmerge": "מבטל זײַן צאמשטעל",
        "mergelogpagetext": "אונטן איז א ליסטע פון לעצטנסדיגע צונויפגיסונגען פון איין בלאט'ס היסטאריע אין א צווייטער.",
        "history-title": "רעוויזיע היסטאריע פֿון $1",
        "gender-female": "זי רעדאקטירט וויקי בלעטער",
        "prefs-help-gender": "שטעלן דעם פרעפֿערענץ איז אפציאנאַל.\nדאס ווייכוואַרג באניצט זיין ווערט אײַך צו אַדרעסירן און דערמאנען צו אנדערע מיטן געהעריגן מין פֿארעם. \nדי אינפֿארמאַציע ווערט ידוע צו אַלעמען.",
        "email": "ע-פאסט",
-       "prefs-help-realname": "* עכטער נאמען (אפציאנאל): אויב וועט איר אויסוועלן צוצישטעלן דאס, וועט גענוצט ווערן צו געבן אטריביאציע צו אייער ארבייט.",
+       "prefs-help-realname": "עכטער נאמען איז אפציאנאל.\nווען אנגעגעבן, וועט ער גענוצט ווערן צו געבן אטריבוציע פאר אייער ארבעט.",
        "prefs-help-email": "ע-פאסט אַדרעס איז ברירהדיק, אבער עס דערמעגליכט אז מען קען אייך שיקן א ניי פאסווארט טאמער איר פֿארגעסט דאָס אַלטע.",
        "prefs-help-email-others": "איר קענט אויך אויסקלייבן צו לאזן אנדערע פֿארבינדן מיט אייך דורך ע־פאסט דורך א לינק אויף אייער באניצער אדער שמועס בלאט.\nמען וועט נישט אנטפלעקן אייער ע־פאסט אדרעס ווען אנדערע פֿארבינדן זיך מיט אייך.",
        "prefs-help-email-required": "בליצפאסט אדרעס באדארפט.",
        "statistics": "סטאַטיסטיק",
        "statistics-header-pages": "בלעטער סטאטיסטיק",
        "statistics-header-edits": "רעדאקטירן סטאַטיסטיק",
-       "statistics-header-views": "זען סטאטיסטיק",
        "statistics-header-users": "באניצער סטאטיסטיק",
        "statistics-header-hooks": "אנדערע סטאטיסטיק",
        "statistics-articles": "אינהאלט בלעטער",
        "statistics-files": "ארויפֿגעלאדענע טעקעס",
        "statistics-edits": "רעדאַקטירונגען זײַט {{SITENAME}} איז אויפֿגעשטעלט",
        "statistics-edits-average": "דורכשניט רעדאַקטירונגען אין א בלאַט",
-       "statistics-views-total": "צאל קוקן אינגאַנצן",
-       "statistics-views-total-desc": "באַקוקן צו נישט־פֿאַרהאַנען בלעטער און באַזונדערע בלעטער זענען נישט אַרייַנגערעכנט.",
-       "statistics-views-peredit": "צאל קוקן צו א רעדאַקטירונג",
        "statistics-users": "איינגעשריבענע [[Special:ListUsers|באניצערס]]",
        "statistics-users-active": "טעטיקע באניצערס",
        "statistics-users-active-desc": "באניצערס וואס האבן דורכגעפירט א פעולה אין די לעצטע {{PLURAL:$1|טאג|$1 טעג}}",
-       "statistics-mostpopular": "מערסטע געזען בלעטער",
        "pageswithprop": "בלעטער מיט א בלאט אייגנשאפט",
        "pageswithprop-legend": "בלעטער מיט א בלאט אייגנשאפט",
        "pageswithprop-text": "דער בלאט האלט א רשימה פון בלעטער וואס ניצן א געוויסע בלאט אייגנשאפט.",
        "uncategorizedtemplates": "אומקאטעגאריזירטע מוסטערן",
        "unusedcategories": "נישט געניצטע קאטעגאריעס",
        "unusedimages": "נישט געניצטע טעקעס",
-       "popularpages": "פאפולערע בלעטער",
        "wantedcategories": "געזוכטע קאטעגאריעס",
        "wantedpages": "געזוכטע בלעטער",
        "wantedpages-badtitle": "אומגילטיקער טיטל אין רעזולטאַט: $1",
        "pageinfo-robot-policy": "אינדעקסירן דורך ראבאטן",
        "pageinfo-robot-index": "דערלויבט",
        "pageinfo-robot-noindex": "נישט דערלויבט",
-       "pageinfo-views": "צאַל קוקן",
        "pageinfo-watchers": "!צאָל בלאט אויפֿפאַסער",
        "pageinfo-few-watchers": "ווינציקער ווי $1 {{PLURAL:$1|אויפֿפאסער}}",
        "pageinfo-redirects-name": "צאָל ווײַטערפירונגען צו דעם בלאט",
index bfd854f..eee780e 100644 (file)
        "viewsourcetext": "您可以查看并复制此页面的源代码:",
        "viewyourtext": "您可以查看并复制<strong>您对此页面作出编辑后</strong>的源代码:",
        "protectedinterface": "该页提供此wiki软件的界面文字,它已被保护以防止恶意修改。\n如欲修改所有wiki的翻译,请到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化计划。",
-       "editinginterface": "'''警告:'''您正在编辑的页面是用于提供软件的界面文字。\n改变此页将影响其他在此wiki上的用户界面外观。\n如欲修改所有wiki的翻译,请到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化计划。",
+       "editinginterface": "<strong>警告:</strong>您正在编辑用于提供软件的界面文字的页面。改变此页将影响其他在此wiki上其他用户的用户界面外观。",
+       "translateinterface": "要加入或更改所有wiki的翻译,请访问MediaWiki本地化项目网站[//translatewiki.net/ translatewiki.net]。",
        "cascadeprotected": "本页面已经受到保护,不能编辑,因为它包含于以下被“连锁保护”的{{PLURAL:$1|页面}}:\n$2",
        "namespaceprotected": "您没有权限编辑'''$1'''名字空间内的页面。",
        "customcssprotected": "您没有权限编辑此CSS页面,因为它包含另一位用户的个人设置。",
        "content-model-text": "纯文本",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "页面的模板调用中使用重复参数",
+       "duplicate-args-category-desc": "页面包含使用重复参数的模板调用,例如<code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code>或<code><nowiki>{{foo|bar|1=baz}}</nowiki></code>。",
        "expensive-parserfunction-warning": "<strong>警告:</strong>这个页面有太多高昂的语法功能调用。\n\n它应该少过$2次呼叫,现在有$1次呼叫。",
        "expensive-parserfunction-category": "页面中有太多耗费的语法功能呼叫",
        "post-expand-template-inclusion-warning": "'''警告:'''包含模板大小过大。\n一些模板将不会包含。",
        "mergehistory-same-destination": "来源页面与目的页面不可以相同",
        "mergehistory-reason": "原因:",
        "mergelog": "合并日志",
-       "pagemerge-logentry": "合并[[$1]]至[[$2]](版本截至$3)",
        "revertmerge": "解除合并",
        "mergelogpagetext": "下面是最近的页面历史合并的列表。",
        "history-title": "“$1”的版本历史",
        "gender-female": "她",
        "prefs-help-gender": "该设置为可选项。软件根据该值在称呼您及对他人提及您时使用适当的语法性别。该信息会被公开。",
        "email": "电子邮件",
-       "prefs-help-realname": "真实姓名是选填项目。如果你选择提供它,它将会用于贡献署名。",
+       "prefs-help-realname": "真实姓名是选填项目。如果提供,它可能用于署名您的贡献。",
        "prefs-help-email": "电子邮件地址是选填项,但是当你忘记你的密码要重置密码时,需要该信息。",
        "prefs-help-email-others": "您也可以选择让其他用户通过您的用户或讨论页面上的链接用电子邮件联系您。其他用户联系您时您的电子邮件地址不会显示。",
        "prefs-help-email-required": "电子邮件地址是必填项目。",
        "statistics": "统计",
        "statistics-header-pages": "页面统计",
        "statistics-header-edits": "编辑统计",
-       "statistics-header-views": "查看统计",
        "statistics-header-users": "用户统计",
        "statistics-header-hooks": "其它统计",
        "statistics-articles": "内容页面",
        "statistics-files": "上传的文件",
        "statistics-edits": "自{{SITENAME}}建立以来的页面编辑数",
        "statistics-edits-average": "每页平均编辑数",
-       "statistics-views-total": "查看总数",
-       "statistics-views-total-desc": "不存在页面和特殊页面的查看数未计入",
-       "statistics-views-peredit": "每编辑查看数",
        "statistics-users": "注册[[Special:ListUsers|用户]]",
        "statistics-users-active": "活跃用户",
        "statistics-users-active-desc": "在过去{{PLURAL:$1|$1天}}执行过操作的用户",
-       "statistics-mostpopular": "最多查看页面",
        "pageswithprop": "有页面属性的页面",
        "pageswithprop-legend": "有页面属性的页面",
        "pageswithprop-text": "本页面列出使用特定页面属性的页面。",
        "uncategorizedtemplates": "未归类模板",
        "unusedcategories": "未使用分类",
        "unusedimages": "未使用文件",
-       "popularpages": "热门页面",
        "wantedcategories": "需要的分类",
        "wantedpages": "需要的页面",
        "wantedpages-badtitle": "在结果组上的无效标题:$1",
        "tooltip-feed-atom": "本页面的Atom源",
        "tooltip-t-contributions": "该用户的贡献的列表",
        "tooltip-t-emailuser": "给该用户发送电子邮件",
+       "tooltip-t-info": "关于此页面的更多信息",
        "tooltip-t-upload": "上传文件",
        "tooltip-t-specialpages": "所有特殊页面的列表",
        "tooltip-t-print": "本页面的可打印版本",
        "pageinfo-robot-policy": "爬虫索引",
        "pageinfo-robot-index": "允许",
        "pageinfo-robot-noindex": "不允许",
-       "pageinfo-views": "查看数",
        "pageinfo-watchers": "页面监视者数",
        "pageinfo-few-watchers": "少于$1个监视者",
        "pageinfo-redirects-name": "至该页面的重定向数",
        "unknown_extension_tag": "未知扩展标签“$1”",
        "duplicate-defaultsort": "'''警告:'''默认排序关键词“$2”覆盖了之前的默认排序关键词“$1”。",
        "duplicate-displaytitle": "<strong>警告:</strong>显示的标题“$2”重写了此前显示的标题“$1”。",
+       "invalid-indicator-name": "<strong>错误:</strong>页面状态指示器的<code>name</code>属性必须不为空。",
        "version": "版本",
        "version-extensions": "安装的扩展程序",
        "version-skins": "已安装皮肤",
        "revdelete-uname-unhid": "公开用户名",
        "revdelete-restricted": "应用对管理员的限制",
        "revdelete-unrestricted": "删除对管理员的限制",
+       "logentry-merge-merge": "$1将$3{{GENDER:$2|合并}}至$4(修订版本至$5)",
        "logentry-move-move": "$1{{GENDER:$2|移动}}页面$3至$4",
        "logentry-move-move-noredirect": "$1{{GENDER:$2|移动}}页面$3至$4,不留重定向",
        "logentry-move-move_redir": "$1{{GENDER:$2|移动}}页面$3至$4覆盖重定向",
index 0fc3378..a79a972 100644 (file)
@@ -61,7 +61,7 @@
                        "EagerLin"
                ]
        },
-       "tog-underline": "連結顯示底線:",
+       "tog-underline": "底線標示連結:",
        "tog-hideminor": "隱藏近期變更以來的小編輯",
        "tog-hidepatrolled": "隱藏近期變更中巡查過的編輯",
        "tog-newpageshidepatrolled": "隱藏新頁面清單中巡查過的頁面",
        "policy-url": "Project:Policy",
        "portal": "社群入口",
        "portal-url": "Project:Community portal",
-       "privacy": "隱私政策",
+       "privacy": "私隱政策",
        "privacypage": "Project:Privacy policy",
        "badaccess": "權限錯誤",
        "badaccess-group0": "系統不允許您執行這項操作。",
        "content-model-text": "純文字",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "duplicate-args-category": "樣版呼叫時使用重複的參數的頁面",
+       "duplicate-args-category-desc": "該頁面包含重複使用參數的樣版呼叫,如 <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> 或 <code><nowiki>{{foo|bar|1=baz}}</nowiki>。",
        "expensive-parserfunction-warning": "<strong>警告:</strong>此頁面使用了太多消耗系統資源的解析函數。\n\n使用次數應小於 $2 次,但目前使用了 $1 次。",
        "expensive-parserfunction-category": "使用了太多消耗系統資源的分析函數的頁面",
        "post-expand-template-inclusion-warning": "<strong>警告:</strong>引用樣板後大小超出限制。\n部份樣版內容將不會被使用。",
        "mergehistory-same-destination": "來源頁面與目標頁面不可相同",
        "mergehistory-reason": "原因:",
        "mergelog": "合併日誌",
-       "pagemerge-logentry": "已合併 [[$1]] 至 [[$2]] (修訂更新至 $3)",
        "revertmerge": "取消合併",
        "mergelogpagetext": "以下是最近合併頁面歷史的清單。",
        "history-title": "\"$1\" 的修訂歷史",
        "searchall": "全部",
        "showingresults": "以下顯示從第 <strong>$2</strong> 筆開始,共 {{PLURAL:$1|<strong>1</strong> 筆結果|<strong>$1</strong> 筆結果}}:",
        "showingresultsinrange": "以下顯示從第 <strong>$2</strong> 筆至第 <strong>$3</strong> 筆中的 {{PLURAL:$1|<strong>1</strong> 筆結果|<strong>$1</strong> 筆結果}}:",
-       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> 的 <strong>$1</strong> 筆結果|<strong>$3</strong> 的 <strong>$1 - $2</strong> 筆結果}}",
+       "search-showingresults": "{{PLURAL:$4|第 <strong>$1</strong> 筆結果,共 <strong>$3</strong> 筆|第 <strong>$1 - $2</strong> 筆結果,共 <strong>$3</strong> 筆}}",
        "search-nonefound": "無符合查詢條件的結果。",
        "powersearch-legend": "進階搜尋",
        "powersearch-ns": "搜尋以下命名空間:",
        "gender-female": "她編輯了 Wiki 頁面",
        "prefs-help-gender": "此偏好設定為選填欄位。\n系統會使用您選擇的方式稱呼您,對他人提及您時也會使用適當語法稱呼。\n此項資訊會被公開。",
        "email": "電子郵件",
-       "prefs-help-realname": "ç\9c\9f實å§\93å\90\8dç\82ºé\81¸å¡«æ¬\84ä½\8dã\80\82\nè\8b¥æ\82¨æ\8f\90ä¾\9bç\9c\9f實å§\93å\90\8dï¼\8cå®\83æ\9c\83ç\94¨æ\96¼ä½¿ç\94¨è\80\85è²¢ç\8d»署名。",
+       "prefs-help-realname": "ç\9c\9f實å§\93å\90\8dç\82ºé\81¸å¡«æ¬\84ä½\8dã\80\82\nè\8b¥æ\8f\90ä¾\9bï¼\8cç\9c\9f實å§\93å\90\8då\8f¯è\83½æ\9c\83ç\94¨ä¾\86ä½\9cç\82ºæ\82¨ç\9a\84ä½\9cå\93\81ç\9a\84署名。",
        "prefs-help-email": "電子郵件位址為選填欄位。\n但在重設密碼時會使用,而您很有可能會忘記密。",
        "prefs-help-email-others": "您亦可以選擇讓其他使用者用電子郵件與您聯繫,透過您的使用者或對話頁面上方的連結。\n您的電子郵件位址不會實際告知給其他要聯絡您的使用者。",
        "prefs-help-email-required": "電子郵件地址是必填項目。",
        "statistics": "統計",
        "statistics-header-pages": "頁面統計",
        "statistics-header-edits": "編輯統計",
-       "statistics-header-views": "檢視統計",
        "statistics-header-users": "使用者統計資訊",
        "statistics-header-hooks": "其它統計",
        "statistics-articles": "內容頁面",
        "statistics-files": "已上傳的檔案",
        "statistics-edits": "自 {{SITENAME}} 成立以來的頁面編輯數",
        "statistics-edits-average": "每頁平均編輯數",
-       "statistics-views-total": "檢視總數",
-       "statistics-views-total-desc": "不包含不存在頁面與特殊頁面的檢視數",
-       "statistics-views-peredit": "每次編輯檢視數",
        "statistics-users": "已註冊的 [[Special:ListUsers|使用者]]",
        "statistics-users-active": "活動使用者",
        "statistics-users-active-desc": "在最近 $1 天操作過的使用者",
-       "statistics-mostpopular": "檢視最多次的頁面",
        "pageswithprop": "擁有屬性的頁面",
        "pageswithprop-legend": "擁有頁面屬性的頁面",
        "pageswithprop-text": "此頁面用來查詢使用了指定屬性的頁面。",
        "uncategorizedtemplates": "待分類樣版",
        "unusedcategories": "未使用的分類",
        "unusedimages": "未使用的檔案",
-       "popularpages": "熱門頁面",
        "wantedcategories": "需要的分類",
        "wantedpages": "需要的頁面",
        "wantedpages-badtitle": "結果集合中的標題無效:$1",
        "mostlinkedtemplates": "被引用最多的頁面",
        "mostcategories": "最多分類的頁面",
        "mostimages": "被連結最多的檔案",
-       "mostinterwikis": "最多 Interwiki 連結的頁面",
+       "mostinterwikis": "最多網際 Wiki 連結的頁面",
        "mostrevisions": "最多修訂的頁面",
        "prefixindex": "所有頁面與字首",
        "prefixindex-namespace": "所有含字首的頁面 ($1 命名空間)",
        "pager-older-n": "較舊 $1 筆",
        "suppress": "監督",
        "querypage-disabled": "此特殊頁面因考量效能問題已被停用。",
+       "apihelp": "API 說明",
+       "apihelp-no-such-module": "查無模組 \"$1\"。",
        "booksources": "圖書資源",
        "booksources-search-legend": "尋找圖書資源",
        "booksources-isbn": "國際標準書號:",
        "revertpage-nouser": "已還隱藏使用者的編輯為最後 {{GENDER:$1|[[User:$1|$1]]}} 修訂的版本",
        "rollback-success": "已還原 $1 做的編輯;\n更變回最後由 $2 修訂的版本。",
        "sessionfailure-title": "連線階段失敗",
-       "sessionfailure": "似乎您的登入會話有問題;\n為了防止會話劫持,這個操作已經被取消。\n請返回先前的頁面,重新載入該頁面,然後重試。",
+       "sessionfailure": "您的登入連線階段似乎有問題,\n為了預防連線階段受到劫持攻擊,此動作已經被取消。\n請返回上一頁,重新讀取該頁面再試一次。",
        "protectlogpage": "保護日誌",
        "protectlogtext": "以下為變更頁面保護的清單。\n請參考 [[Special:ProtectedPages|受保護頁面清單]] 檢視目前受保護頁面。",
        "protectedarticle": "已保護 \"[[$1]]\"",
        "month": "截止月份:",
        "year": "截止年份:",
        "sp-contributions-newbies": "只顯示新帳號的貢獻",
-       "sp-contributions-newbies-sub": "新",
+       "sp-contributions-newbies-sub": "新帳號的貢獻",
        "sp-contributions-newbies-title": "新帳號的使用者貢獻",
        "sp-contributions-blocklog": "封鎖記錄",
        "sp-contributions-suppresslog": "已禁止顯示的使用者貢獻",
        "sp-contributions-talk": "對話",
        "sp-contributions-userrights": "使用者權限管理",
        "sp-contributions-blocked-notice": "此使用者目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:",
-       "sp-contributions-blocked-notice-anon": "此 IP 位址目前已被封鎖。\n以下為最近的封鎖錄以供參考:",
+       "sp-contributions-blocked-notice-anon": "此 IP 位址目前已被封鎖。\n以下為最近的封鎖錄以供參考:",
        "sp-contributions-search": "搜尋貢獻",
        "sp-contributions-username": "IP 位址或使用者名稱:",
        "sp-contributions-toponly": "只顯示最新修訂的編輯",
        "tooltip-pt-mycontris": "您的貢獻清單",
        "tooltip-pt-login": "儘管非必要,仍建議您登入。",
        "tooltip-pt-logout": "登出",
+       "tooltip-pt-createaccount": "我們會鼓勵您建立一個帳號並且登入,即使這不是必要的動作。",
        "tooltip-ca-talk": "有關頁面內容的討論",
        "tooltip-ca-edit": "您可以編輯此頁,請在儲存之前先預覽。",
        "tooltip-ca-addsection": "開始一個新章節",
        "tooltip-feed-atom": "訂閱此頁面的 Atom feed",
        "tooltip-t-contributions": "此使用者的貢獻清單",
        "tooltip-t-emailuser": "傳送電子郵件給這個使用者",
+       "tooltip-t-info": "更多關於此頁面的資訊",
        "tooltip-t-upload": "上傳檔案",
        "tooltip-t-specialpages": "全部特殊頁面的清單",
        "tooltip-t-print": "此頁面的可列印版本",
        "pageinfo-robot-policy": "由機器人建立索引",
        "pageinfo-robot-index": "允許",
        "pageinfo-robot-noindex": "不允許",
-       "pageinfo-views": "檢視次數",
        "pageinfo-watchers": "頁面監視者數",
        "pageinfo-few-watchers": "少於 $1 名監視者",
        "pageinfo-redirects-name": "指向此頁面的重新導向頁面數量",
index d62cd4c..a2c1873 100644 (file)
@@ -240,7 +240,6 @@ $magicWords = array(
        'numberofusers'           => array( 1, 'NUMBEROFUSERS' ),
        'numberofactiveusers'     => array( 1, 'NUMBEROFACTIVEUSERS' ),
        'numberofedits'           => array( 1, 'NUMBEROFEDITS' ),
-       'numberofviews'           => array( 1, 'NUMBEROFVIEWS' ),
        'pagename'                => array( 1, 'PAGENAME' ),
        'pagenamee'               => array( 1, 'PAGENAMEE' ),
        'namespace'               => array( 1, 'NAMESPACE' ),
diff --git a/languages/messages/MessagesSes.php b/languages/messages/MessagesSes.php
new file mode 100644 (file)
index 0000000..9d9e009
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+/** Koyraboro Senni
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ */
+
+$fallback = 'fr';
index 99f43ff..ad8b004 100644 (file)
@@ -2899,7 +2899,6 @@ numberofedits
 numberoffiles
 numberofpages
 numberofusers
-numberofviews
 numberofwatchingusers
 numedits
 numentries
index 51f2cac..25ecc09 100644 (file)
@@ -54,18 +54,18 @@ if ( isset( $options['d'] ) ) {
        }
 }
 
-$useReadline = function_exists( 'readline_add_history' )
+$__useReadline = function_exists( 'readline_add_history' )
        && Maintenance::posix_isatty( 0 /*STDIN*/ );
 
-if ( $useReadline ) {
-       $historyFile = isset( $_ENV['HOME'] ) ?
+if ( $__useReadline ) {
+       $__historyFile = isset( $_ENV['HOME'] ) ?
                "{$_ENV['HOME']}/.mweval_history" : "$IP/maintenance/.mweval_history";
-       readline_read_history( $historyFile );
+       readline_read_history( $__historyFile );
 }
 
-$e = null; // PHP exception
-while ( ( $line = Maintenance::readconsole() ) !== false ) {
-       if ( $e && !preg_match( '/^(exit|die);?$/', $line ) ) {
+$__e = null; // PHP exception
+while ( ( $__line = Maintenance::readconsole() ) !== false ) {
+       if ( $__e && !preg_match( '/^(exit|die);?$/', $__line ) ) {
                // Internal state may be corrupted or fatals may occur later due
                // to some object not being set. Don't drop out of eval in case
                // lines were being pasted in (which would then get dumped to the shell).
@@ -73,23 +73,23 @@ while ( ( $line = Maintenance::readconsole() ) !== false ) {
                echo "Exception was thrown before; please restart eval.php\n";
                continue;
        }
-       if ( $useReadline ) {
-               readline_add_history( $line );
-               readline_write_history( $historyFile );
+       if ( $__useReadline ) {
+               readline_add_history( $__line );
+               readline_write_history( $__historyFile );
        }
        try {
-               $val = eval( $line . ";" );
-       } catch ( Exception $e ) {
-               echo "Caught exception " . get_class( $e ) .
-                       ": {$e->getMessage()}\n" . $e->getTraceAsString() . "\n";
+               $__val = eval( $__line . ";" );
+       } catch ( Exception $__e ) {
+               echo "Caught exception " . get_class( $__e ) .
+                       ": {$__e->getMessage()}\n" . $__e->getTraceAsString() . "\n";
                continue;
        }
-       if ( wfIsHHVM() || is_null( $val ) ) {
+       if ( wfIsHHVM() || is_null( $__val ) ) {
                echo "\n";
-       } elseif ( is_string( $val ) || is_numeric( $val ) ) {
-               echo "$val\n";
+       } elseif ( is_string( $__val ) || is_numeric( $__val ) ) {
+               echo "$__val\n";
        } else {
-               var_dump( $val );
+               var_dump( $__val );
        }
 }
 
index 49e0e9d..cac33ec 100644 (file)
@@ -34,11 +34,7 @@ class InitSiteStats extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Re-initialise the site statistics tables";
-               $this->addOption(
-                       'update',
-                       'Update the existing statistics (preserves the ss_total_views field)'
-               );
-               $this->addOption( 'noviews', "Don't update the page view counter" );
+               $this->addOption( 'update', 'Update the existing statistics' );
                $this->addOption( 'active', 'Also update active users count' );
                $this->addOption( 'use-master', 'Count using the master database' );
        }
@@ -63,12 +59,6 @@ class InitSiteStats extends Maintenance {
                $image = $counter->files();
                $this->output( "{$image}\n" );
 
-               if ( !$this->hasOption( 'noviews' ) ) {
-                       $this->output( "Counting total page views..." );
-                       $views = $counter->views();
-                       $this->output( "{$views}\n" );
-               }
-
                if ( $this->hasOption( 'update' ) ) {
                        $this->output( "\nUpdating site statistics..." );
                        $counter->refresh();
index 374a66e..370d14e 100644 (file)
@@ -44,7 +44,6 @@ class ShowSiteStats extends Maintenance {
 
        public function execute() {
                $fields = array(
-                       'ss_total_views' => 'Total views',
                        'ss_total_edits' => 'Total edits',
                        'ss_good_articles' => 'Number of articles',
                        'ss_total_pages' => 'Total pages',
index 6164282..d67ef6b 100644 (file)
@@ -81,16 +81,16 @@ class UpdateSpecialPages extends Maintenance {
                        if ( !$this->hasOption( 'only' ) || $this->getOption( 'only' ) == $queryPage->getName() ) {
                                $this->output( sprintf( '%-30s [QueryPage] ', $special ) );
                                if ( $queryPage->isExpensive() ) {
-                                       $t1 = explode( ' ', microtime() );
+                                       $t1 = microtime( true );
                                        # Do the query
                                        $num = $queryPage->recache( $limit === null ? $wgQueryCacheLimit : $limit );
-                                       $t2 = explode( ' ', microtime() );
+                                       $t2 = microtime( true );
                                        if ( $num === false ) {
                                                $this->output( "FAILED: database error\n" );
                                        } else {
                                                $this->output( "got $num rows in " );
 
-                                               $elapsed = ( $t2[0] - $t1[0] ) + ( $t2[1] - $t1[1] );
+                                               $elapsed = $t2 - $t1;
                                                $hours = intval( $elapsed / 3600 );
                                                $minutes = intval( $elapsed % 3600 / 60 );
                                                $seconds = $elapsed - $hours * 3600 - $minutes * 60;
@@ -139,12 +139,12 @@ class UpdateSpecialPages extends Maintenance {
                                        continue;
                                }
                                $this->output( sprintf( '%-30s [callback] ', $special ) );
-                               $t1 = explode( ' ', microtime() );
+                               $t1 = microtime( true );
                                call_user_func( $call, $dbw );
-                               $t2 = explode( ' ', microtime() );
+                               $t2 = microtime( true );
 
                                $this->output( "completed in " );
-                               $elapsed = ( $t2[0] - $t1[0] ) + ( $t2[1] - $t1[1] );
+                               $elapsed = $t2 - $t1;
                                $hours = intval( $elapsed / 3600 );
                                $minutes = intval( $elapsed % 3600 / 60 );
                                $seconds = $elapsed - $hours * 3600 - $minutes * 60;
index acc937e..ca90efa 100644 (file)
@@ -1595,6 +1595,8 @@ return array(
                        'ooui-outline-control-move-up',
                        'ooui-outline-control-remove',
                        'ooui-toolbar-more',
+                       'ooui-toolgroup-collapse',
+                       'ooui-toolgroup-expand',
                        'ooui-dialog-message-accept',
                        'ooui-dialog-message-reject',
                        'ooui-dialog-process-dismiss',
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/add.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/add.png
deleted file mode 100644 (file)
index 730d102..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/add.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/advanced.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/advanced.png
deleted file mode 100644 (file)
index 514ff1d..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/advanced.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/alert.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/alert.png
deleted file mode 100644 (file)
index e98a14a..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/alert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/arched-arrow-ltr.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/arched-arrow-ltr.png
deleted file mode 100644 (file)
index 88db108..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/arched-arrow-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/arched-arrow-rtl.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/arched-arrow-rtl.png
deleted file mode 100644 (file)
index 0afcbfa..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/arched-arrow-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/check.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/check.png
deleted file mode 100644 (file)
index 9a2c9db..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/check.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/clear.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/clear.png
deleted file mode 100644 (file)
index 51a33ff..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/clear.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/close.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/close.png
deleted file mode 100644 (file)
index 4eedfbc..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/close.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/code.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/code.png
deleted file mode 100644 (file)
index ee58c9a..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/code.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/collapse.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/collapse.png
deleted file mode 100644 (file)
index 353ac79..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/collapse.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/comment.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/comment.png
deleted file mode 100644 (file)
index 265a3e4..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/comment.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/expand.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/expand.png
deleted file mode 100644 (file)
index 9073d24..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/expand.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/help.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/help.png
deleted file mode 100644 (file)
index b80df00..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/help.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/info.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/info.png
deleted file mode 100644 (file)
index eb0fb46..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/info.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/link.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/link.png
deleted file mode 100644 (file)
index 2a087a4..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/link.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/menu.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/menu.png
deleted file mode 100644 (file)
index 0a78119..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/menu.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/move-ltr.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/move-ltr.png
deleted file mode 100644 (file)
index fc4cd39..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/move-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/move-rtl.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/move-rtl.png
deleted file mode 100644 (file)
index dbce05e..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/move-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/picture.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/picture.png
deleted file mode 100644 (file)
index 2043424..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/picture.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/remove.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/remove.png
deleted file mode 100644 (file)
index 9dc34b8..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/remove.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/search.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/search.png
deleted file mode 100644 (file)
index 39d3ab8..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/search.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/settings.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/settings.png
deleted file mode 100644 (file)
index dd2706b..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/settings.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/tag.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/tag.png
deleted file mode 100644 (file)
index 8e100fc..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/tag.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/icons/window.png b/resources/lib/oojs-ui/dist/themes/apex/images/icons/window.png
deleted file mode 100644 (file)
index db726a1..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/icons/window.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/indicators/alert.png b/resources/lib/oojs-ui/dist/themes/apex/images/indicators/alert.png
deleted file mode 100644 (file)
index 5bf0827..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/indicators/alert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-down.png b/resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-down.png
deleted file mode 100644 (file)
index 6574725..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-down.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-ltr.png b/resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-ltr.png
deleted file mode 100644 (file)
index 7c84397..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-rtl.png b/resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-rtl.png
deleted file mode 100644 (file)
index 5bf9064..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-up.png b/resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-up.png
deleted file mode 100644 (file)
index 1a05ade..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/indicators/arrow-up.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/indicators/required.png b/resources/lib/oojs-ui/dist/themes/apex/images/indicators/required.png
deleted file mode 100644 (file)
index 45eb03b..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/indicators/required.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/apex/images/textures/transparency.png b/resources/lib/oojs-ui/dist/themes/apex/images/textures/transparency.png
deleted file mode 100644 (file)
index 1843f27..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/apex/images/textures/transparency.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/add-constructive.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/add-constructive.png
deleted file mode 100644 (file)
index 53d6441..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/add-constructive.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/add-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/add-invert.png
deleted file mode 100644 (file)
index d6144e3..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/add-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/add.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/add.png
deleted file mode 100644 (file)
index 730d102..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/add.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/advanced-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/advanced-invert.png
deleted file mode 100644 (file)
index e074515..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/advanced-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/advanced.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/advanced.png
deleted file mode 100644 (file)
index 514ff1d..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/advanced.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/alert-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/alert-invert.png
deleted file mode 100644 (file)
index 5440113..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/alert-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/alert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/alert.png
deleted file mode 100644 (file)
index e98a14a..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/alert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png
deleted file mode 100644 (file)
index 8a07140..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-ltr.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-ltr.png
deleted file mode 100644 (file)
index 88db108..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png
deleted file mode 100644 (file)
index c6cbec1..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-rtl.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-rtl.png
deleted file mode 100644 (file)
index 0afcbfa..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/arched-arrow-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/check-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/check-invert.png
deleted file mode 100644 (file)
index 1ff6790..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/check-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/check-primary.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/check-primary.png
deleted file mode 100644 (file)
index 7566598..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/check-primary.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/check.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/check.png
deleted file mode 100644 (file)
index 9a2c9db..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/check.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/clear-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/clear-invert.png
deleted file mode 100644 (file)
index 5668e12..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/clear-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/clear.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/clear.png
deleted file mode 100644 (file)
index 51a33ff..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/clear.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/close-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/close-invert.png
deleted file mode 100644 (file)
index 7b76ffe..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/close-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/close.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/close.png
deleted file mode 100644 (file)
index 4eedfbc..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/close.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/code-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/code-invert.png
deleted file mode 100644 (file)
index 23c5983..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/code-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/code.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/code.png
deleted file mode 100644 (file)
index ee58c9a..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/code.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/collapse-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/collapse-invert.png
deleted file mode 100644 (file)
index a9d0d33..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/collapse-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/collapse.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/collapse.png
deleted file mode 100644 (file)
index 353ac79..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/collapse.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/comment-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/comment-invert.png
deleted file mode 100644 (file)
index 0ed3528..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/comment-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/comment.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/comment.png
deleted file mode 100644 (file)
index 265a3e4..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/comment.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/expand-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/expand-invert.png
deleted file mode 100644 (file)
index 05f7138..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/expand-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/expand.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/expand.png
deleted file mode 100644 (file)
index 9073d24..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/expand.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/help-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/help-invert.png
deleted file mode 100644 (file)
index 185c1a2..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/help-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/help.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/help.png
deleted file mode 100644 (file)
index b80df00..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/help.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/info-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/info-invert.png
deleted file mode 100644 (file)
index 83b00a2..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/info-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/info.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/info.png
deleted file mode 100644 (file)
index eb0fb46..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/info.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/link-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/link-invert.png
deleted file mode 100644 (file)
index d920459..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/link-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/link.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/link.png
deleted file mode 100644 (file)
index 2a087a4..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/link.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/menu-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/menu-invert.png
deleted file mode 100644 (file)
index 0400c19..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/menu-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/menu.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/menu.png
deleted file mode 100644 (file)
index 0a78119..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/menu.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-ltr-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-ltr-invert.png
deleted file mode 100644 (file)
index 7c9bdc1..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-ltr.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-ltr.png
deleted file mode 100644 (file)
index fc4cd39..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-rtl-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-rtl-invert.png
deleted file mode 100644 (file)
index e97d37b..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-rtl.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-rtl.png
deleted file mode 100644 (file)
index dbce05e..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/move-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/picture-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/picture-invert.png
deleted file mode 100644 (file)
index d6dc62c..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/picture-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/picture.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/picture.png
deleted file mode 100644 (file)
index 2043424..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/picture.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/remove-destructive.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/remove-destructive.png
deleted file mode 100644 (file)
index 8b6799f..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/remove-destructive.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/remove-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/remove-invert.png
deleted file mode 100644 (file)
index 3343de8..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/remove-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/remove.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/remove.png
deleted file mode 100644 (file)
index 9dc34b8..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/remove.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/search-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/search-invert.png
deleted file mode 100644 (file)
index 3e15daf..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/search-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/search.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/search.png
deleted file mode 100644 (file)
index 39d3ab8..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/search.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/settings-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/settings-invert.png
deleted file mode 100644 (file)
index 17b4379..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/settings-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/settings.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/settings.png
deleted file mode 100644 (file)
index dd2706b..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/settings.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/tag-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/tag-invert.png
deleted file mode 100644 (file)
index c233429..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/tag-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/tag.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/tag.png
deleted file mode 100644 (file)
index 8e100fc..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/tag.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/window-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/window-invert.png
deleted file mode 100644 (file)
index 1c6ed1f..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/window-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/window.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/window.png
deleted file mode 100644 (file)
index db726a1..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/icons/window.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/alert-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/alert-invert.png
deleted file mode 100644 (file)
index 28c8704..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/alert-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/alert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/alert.png
deleted file mode 100644 (file)
index 5bf0827..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/alert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-down-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-down-invert.png
deleted file mode 100644 (file)
index 226eb5c..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-down-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-down.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-down.png
deleted file mode 100644 (file)
index 9a418c9..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-down.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-ltr-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-ltr-invert.png
deleted file mode 100644 (file)
index a348495..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-ltr.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-ltr.png
deleted file mode 100644 (file)
index bfed7d2..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-rtl-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-rtl-invert.png
deleted file mode 100644 (file)
index 5080ea5..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-rtl.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-rtl.png
deleted file mode 100644 (file)
index 0639809..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-up-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-up-invert.png
deleted file mode 100644 (file)
index 0474926..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-up-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-up.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-up.png
deleted file mode 100644 (file)
index ac9f0b5..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/arrow-up.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/required-invert.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/required-invert.png
deleted file mode 100644 (file)
index 614c6e8..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/required-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/required.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/required.png
deleted file mode 100644 (file)
index 45eb03b..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/indicators/required.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/mediawiki/images/textures/transparency.png b/resources/lib/oojs-ui/dist/themes/mediawiki/images/textures/transparency.png
deleted file mode 100644 (file)
index 1843f27..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/mediawiki/images/textures/transparency.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/minerva/images/icons/check-invert.png b/resources/lib/oojs-ui/dist/themes/minerva/images/icons/check-invert.png
deleted file mode 100644 (file)
index 9be50a6..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/minerva/images/icons/check-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/dist/themes/minerva/images/icons/check.png b/resources/lib/oojs-ui/dist/themes/minerva/images/icons/check.png
deleted file mode 100644 (file)
index 654a034..0000000
Binary files a/resources/lib/oojs-ui/dist/themes/minerva/images/icons/check.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/i18n/bcc.json b/resources/lib/oojs-ui/i18n/bcc.json
new file mode 100644 (file)
index 0000000..a340a88
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Baloch Afghanistan"
+               ]
+       },
+       "ooui-dialog-message-accept": "اوکی",
+       "ooui-dialog-process-retry": "پدا کوشش کورتین"
+}
index 546689b..50d93ea 100644 (file)
@@ -17,6 +17,8 @@
        "ooui-outline-control-move-up": "Element nach oben verschieben",
        "ooui-outline-control-remove": "Element entfernen",
        "ooui-toolbar-more": "Mehr",
+       "ooui-toolgroup-expand": "Mehr",
+       "ooui-toolgroup-collapse": "Weniger",
        "ooui-dialog-message-accept": "Okay",
        "ooui-dialog-message-reject": "Abbrechen",
        "ooui-dialog-process-error": "Etwas ist schief gelaufen",
index 9e99440..d1abd47 100644 (file)
@@ -20,6 +20,8 @@
        "ooui-outline-control-move-up": "Move item up",
        "ooui-outline-control-remove": "Remove item",
        "ooui-toolbar-more": "More",
+       "ooui-toolgroup-expand": "More",
+       "ooui-toolgroup-collapse": "Fewer",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Cancel",
        "ooui-dialog-process-error": "Something went wrong",
index 7660d4a..82699a3 100644 (file)
@@ -22,6 +22,8 @@
        "ooui-outline-control-move-up": "Subir elemento",
        "ooui-outline-control-remove": "Eliminar elemento",
        "ooui-toolbar-more": "Más",
+       "ooui-toolgroup-expand": "Más",
+       "ooui-toolgroup-collapse": "Menos",
        "ooui-dialog-message-accept": "Aceptar",
        "ooui-dialog-message-reject": "Cancelar",
        "ooui-dialog-process-error": "Algo salió mal",
index ac3af74..7b33735 100644 (file)
@@ -9,6 +9,8 @@
        "ooui-outline-control-move-up": "Liiguta üksust ülespoole",
        "ooui-outline-control-remove": "Eemalda üksus",
        "ooui-toolbar-more": "Veel",
+       "ooui-toolgroup-expand": "Veel",
+       "ooui-toolgroup-collapse": "Vähem",
        "ooui-dialog-message-accept": "Sobib",
        "ooui-dialog-message-reject": "Loobu",
        "ooui-dialog-process-error": "Midagi läks valesti",
index 8ff5475..def0346 100644 (file)
@@ -33,6 +33,7 @@
        "ooui-outline-control-move-up": "Faire monter l’élément",
        "ooui-outline-control-remove": "Supprimer l’élément",
        "ooui-toolbar-more": "Plus",
+       "ooui-toolgroup-expand": "Plus",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Annuler",
        "ooui-dialog-process-error": "Quelque chose a mal tourné",
index 2ac8dc1..6442342 100644 (file)
@@ -12,6 +12,8 @@
        "ooui-outline-control-move-up": "項目を上に移動させる",
        "ooui-outline-control-remove": "項目を除去",
        "ooui-toolbar-more": "その他",
+       "ooui-toolgroup-expand": "続き",
+       "ooui-toolgroup-collapse": "折り畳む",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "キャンセル",
        "ooui-dialog-process-error": "エラーが発生しました…",
index 1cbcb8a..270bae4 100644 (file)
@@ -14,6 +14,8 @@
        "ooui-outline-control-move-up": "Element erop réckelen",
        "ooui-outline-control-remove": "Element ewechhuelen",
        "ooui-toolbar-more": "Méi",
+       "ooui-toolgroup-expand": "Méi",
+       "ooui-toolgroup-collapse": "Manner",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Ofbriechen",
        "ooui-dialog-process-error": "Et ass eppes schif gaang",
index d628034..32856e8 100644 (file)
@@ -10,6 +10,8 @@
        "ooui-outline-control-move-up": "Помести нагоре",
        "ooui-outline-control-remove": "Отстрани ставка",
        "ooui-toolbar-more": "Повеќе",
+       "ooui-toolgroup-expand": "Повеќе",
+       "ooui-toolgroup-collapse": "Помалку",
        "ooui-dialog-message-accept": "ОК",
        "ooui-dialog-message-reject": "Откажи",
        "ooui-dialog-process-error": "Нешто не е во ред",
index 5cb3e3d..d02b08b 100644 (file)
@@ -17,6 +17,7 @@
        "ooui-outline-control-move-up": "Mover item para cima",
        "ooui-outline-control-remove": "Remover elemento",
        "ooui-toolbar-more": "Mais",
+       "ooui-toolgroup-expand": "Mais",
        "ooui-dialog-message-accept": "Aceitar",
        "ooui-dialog-message-reject": "Cancelar",
        "ooui-dialog-process-error": "Algo correu mal",
index 9b3bb60..43da562 100644 (file)
@@ -24,6 +24,8 @@
        "ooui-outline-control-move-up": "Tool tip for a button that moves items in a list up one place",
        "ooui-outline-control-remove": "Tool tip for a button that removes items from a list.\n{{Identical|Remove item}}",
        "ooui-toolbar-more": "Label for the toolbar group that contains a list of all other available tools.\n{{Identical|More}}",
+       "ooui-toolgroup-expand": "Label for the fake tool that expands the full list of tools in a toolbar group.\n\nSee also:\n* {{msg-mw|Ooui-toolgroup-collapse}}\n{{Identical|More}}",
+       "ooui-toolgroup-collapse": "Label for the fake tool that collapses the full list of tools in a toolbar group.\n\nSee also:\n* {{msg-mw|Ooui-toolgroup-expand}}\n{{Identical|Fewer}}",
        "ooui-dialog-message-accept": "Default label for the accept button of a message dialog\n{{Identical|OK}}",
        "ooui-dialog-message-reject": "Default label for the reject button of a message dialog\n{{Identical|Cancel}}",
        "ooui-dialog-process-error": "Title for process dialog error description",
index 06e0f1d..17359bd 100644 (file)
@@ -12,6 +12,8 @@
        "ooui-outline-control-move-up": "Mută elementul mai sus",
        "ooui-outline-control-remove": "Elimină elementul",
        "ooui-toolbar-more": "Mai mult",
+       "ooui-toolgroup-expand": "Mai multe",
+       "ooui-toolgroup-collapse": "Mai puține",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Revocare",
        "ooui-dialog-process-error": "Ceva nu a funcționat",
index efd1062..649a937 100644 (file)
@@ -22,6 +22,8 @@
        "ooui-outline-control-move-up": "Переместить элемент вверх",
        "ooui-outline-control-remove": "Удалить пункт",
        "ooui-toolbar-more": "Ещё",
+       "ooui-toolgroup-expand": "Больше",
+       "ooui-toolgroup-collapse": "Меньше",
        "ooui-dialog-message-accept": "ОК",
        "ooui-dialog-message-reject": "Отмена",
        "ooui-dialog-process-error": "Что-то пошло не так",
index 07d9828..c8246da 100644 (file)
@@ -5,8 +5,8 @@
                        "Teslaton"
                ]
        },
-       "ooui-dialog-action-close": "Zatvoriť",
        "ooui-outline-control-move-down": "Posunúť položku nadol",
        "ooui-outline-control-move-up": "Posunúť položku nahor",
+       "ooui-outline-control-remove": "Odstrániť položku",
        "ooui-toolbar-more": "Viac"
 }
index 40305d0..d61d951 100644 (file)
@@ -18,6 +18,8 @@
        "ooui-outline-control-move-up": "Flytta upp objekt",
        "ooui-outline-control-remove": "Ta bort objekt",
        "ooui-toolbar-more": "Mer",
+       "ooui-toolgroup-expand": "Fler",
+       "ooui-toolgroup-collapse": "Färre",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Avbryt",
        "ooui-dialog-process-error": "Något gick fel",
index 02bdafa..fa86ea7 100644 (file)
@@ -23,6 +23,8 @@
        "ooui-outline-control-move-up": "上移项",
        "ooui-outline-control-remove": "删除项",
        "ooui-toolbar-more": "更多",
+       "ooui-toolgroup-expand": "更多",
+       "ooui-toolgroup-collapse": "更少",
        "ooui-dialog-message-accept": "确定",
        "ooui-dialog-message-reject": "取消",
        "ooui-dialog-process-error": "发生一些错误",
index cde5ffe..4b5d065 100644 (file)
@@ -20,6 +20,7 @@
        "ooui-outline-control-move-up": "項目上移",
        "ooui-outline-control-remove": "移除項目",
        "ooui-toolbar-more": "更多",
+       "ooui-toolgroup-expand": "更多",
        "ooui-dialog-message-accept": "確定",
        "ooui-dialog-message-reject": "取消",
        "ooui-dialog-process-error": "發生不明錯誤",
index 42e6699..3cef441 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (d74a46ca6a)
+ * OOjs UI v0.1.0-pre (40de4dabe6)
  * 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-10-15T00:40:28Z
+ * Date: 2014-10-22T23:42:26Z
  */
 /* @noflip */
 .oo-ui-rtl {
        border-color: #aaaaaa;
        outline: none;
 }
+.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        line-height: 1.9em;
 }
        z-index: 4;
 }
 .oo-ui-popupTool .oo-ui-popupWidget {
+       /* @noflip */
        margin-left: 1.25em;
        font-size: 0.8em;
 }
        vertical-align: middle;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       display: inline-block;
+       display: inline-table;
        vertical-align: middle;
+       width: 100%;
+       margin-right: -2.5em;
 }
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
-       display: none;
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       display: table-cell;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text {
+       width: 100%;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       text-align: right;
+       padding-right: 2.5em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel:not(:empty) {
+       padding-left: 3em;
 }
 .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
        min-width: 3.5em;
        line-height: 2em;
        font-size: 0.8em;
 }
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       color: #888888;
+}
 .oo-ui-listToolGroup .oo-ui-tool {
        display: inline-block;
        width: 100%;
        left: 0.25em;
        margin-left: 0;
 }
+.oo-ui-progressBarWidget {
+       width: 20em;
+       border: solid 1px #cccccc;
+       border-radius: 0.25em;
+}
+.oo-ui-progressBarWidget-bar {
+       height: 1em;
+       border-right: solid 1px #cccccc;
+       -webkit-transition: width 200ms;
+          -moz-transition: width 200ms;
+           -ms-transition: width 200ms;
+            -o-transition: width 200ms;
+               transition: width 200ms;
+       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-progressBarWidget.oo-ui-widget-disabled {
+       opacity: 0.6;
+}
 .oo-ui-actionWidget.oo-ui-pendingElement-pending {
        background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
 }
 .oo-ui-popupWidget {
        position: absolute;
+       /* @noflip */
+       left: 0;
 }
 .oo-ui-popupWidget-popup {
        position: relative;
        display: block;
        position: absolute;
        top: 0;
+       /* @noflip */
+       left: 0;
        background-repeat: no-repeat;
 }
 .oo-ui-popupWidget-head {
 .oo-ui-window-inner-overlay {
        position: absolute;
        top: 0;
+       /* @noflip */
        left: 0;
 }
 .oo-ui-window-isolated,
index ba1ef86..7efe8fe 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (d74a46ca6a)
+ * OOjs UI v0.1.0-pre (40de4dabe6)
  * 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-10-15T00:40:17Z
+ * Date: 2014-10-22T23:42:16Z
  */
 /* Instantiation */
 
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 (file)
index 7dd7b61..0000000
+++ /dev/null
@@ -1,1929 +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-09-11T19:39:50Z
- */
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-/*
- * Base styles.
- *
- * Themes should include this file after defining their variables and mixins.
- */
-/* @noflip */
-.oo-ui-rtl {
-  direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
-  direction: ltr;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-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-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-  cursor: default;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
-  display: inline-block;
-  position: relative;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-  display: inline-block;
-  vertical-align: top;
-  text-align: center;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
-  color: #333;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: 0;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  margin-left: -0.75em;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  opacity: 0.8;
-  width: 1.9em;
-  height: 1.9em;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
-  /*.oo-ui-transition(opacity 200ms);*/
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-iconElement-icon,
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-iconElement-icon {
-  opacity: 1;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-  color: #000;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #333;
-  margin-right: 0.25em;
-}
-.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #087ecc;
-}
-.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #76ab36;
-}
-.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #d45353;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #ccc;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-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, 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%);
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
-  border-color: #aaa;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  line-height: 1.9em;
-}
-.oo-ui-buttonElement-framed.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-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, 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%);
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: -0.5em;
-  margin-left: -0.5em;
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: -0.5em;
-  margin-left: 0.3em;
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button {
-  border: solid 1px #a6cee1;
-  background: #cde7f4;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
-  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%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus {
-  border-color: #9dc2d4;
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  border: solid 1px #a6cee1;
-  background: #cde7f4;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
-  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%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
-  border: solid 1px #b8d892;
-  background: #daf0be;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
-  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%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
-  border-color: #adcb89;
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  border: solid 1px #b8d892;
-  background: #daf0be;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
-  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%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
-  color: #d45353;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  opacity: 0.5;
-  box-shadow: none;
-  color: #333;
-  background: #eee;
-  border-color: #ccc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:focus,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:focus,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-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;
-  right: 0;
-  left: 0;
-  bottom: 3em;
-  overflow-y: auto;
-}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  left: 0;
-}
-.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 {
-  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-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  display: block;
-  float: right;
-}
-.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;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  text-align: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-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-labelElement-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-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  padding-top: 0.5em;
-  margin-left: 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-labelElement-label {
-  padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-top: 0.25em;
-}
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
-  color: #ccc;
-}
-.oo-ui-fieldsetLayout {
-  position: relative;
-  margin: 0;
-  padding: 0;
-  border: none;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-  display: block;
-  position: absolute;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
-  display: inline-block;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
-  margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
-  font-size: 1.5em;
-  margin-bottom: 0.5em;
-  padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
-  padding-right: 1.75em;
-  line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-  right: 0;
-  top: 0.25em;
-  width: 2em;
-  height: 2em;
-}
-.oo-ui-gridLayout {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-  bottom: 0;
-}
-.oo-ui-panelLayout {
-  position: relative;
-}
-.oo-ui-panelLayout-scrollable {
-  overflow-y: auto;
-}
-.oo-ui-panelLayout-expanded {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 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-right: 1.25em;
-  font-size: 0.8em;
-}
-.oo-ui-toolGroup {
-  display: inline-block;
-  vertical-align: middle;
-  margin: 0.3em;
-  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-empty {
-  display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.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-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-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-iconElement-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 -1px -1px 0;
-  border: solid 1px transparent;
-}
-.oo-ui-barToolGroup .oo-ui-tool:first-child {
-  border-top-right-radius: 0.25em;
-  border-bottom-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 {
-  height: 1.5em;
-  padding: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  height: 1.5em;
-  width: 1.5em;
-  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, 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%);
-}
-.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-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-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-iconElement-icon {
-  opacity: 1;
-}
-.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
-  opacity: 0.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-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-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-iconElement-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-left > .oo-ui-toolGroup-tools {
-  right: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
-  left: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-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-indicatorElement.oo-ui-iconElement {
-  min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  top: 0;
-  width: 2em;
-  height: 2em;
-  opacity: 0.8;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  right: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labelElement-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-active.oo-ui-widget-enabled {
-  border-bottom-right-radius: 0;
-  border-bottom-left-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, 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%);
-}
-.oo-ui-popupToolGroup.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-  margin-right: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-  margin-left: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-  top: 2em;
-  margin: 0 -1px;
-  border: solid 1px #ccc;
-  background-color: white;
-  box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  height: 2em;
-  width: 2em;
-  margin-left: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-  line-height: 2em;
-  font-size: 0.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: 0.25em;
-}
-.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-link {
-  padding-left: 0.5em;
-}
-.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, 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%);
-}
-.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-iconElement-icon {
-  opacity: 0.8;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-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-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled {
-  color: #ccc;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-menuToolGroup {
-  border-color: rgba(0, 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-iconElement-icon {
-  background-image: none;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-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-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-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-link {
-  padding: 0 0.25em 0 1em;
-}
-.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-iconElement-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-indicatorElement-indicator,
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-toolbar {
-  clear: both;
-}
-.oo-ui-toolbar-bar {
-  line-height: 1em;
-}
-.oo-ui-toolbar-actions {
-  float: left;
-}
-.oo-ui-toolbar-tools {
-  display: inline;
-}
-.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: right 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, 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%);
-}
-.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-optionWidget {
-  position: relative;
-  display: block;
-  cursor: pointer;
-  padding: 0.5em 3em 0.5em 2em;
-  border: none;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-  display: block;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-  overflow: hidden;
-}
-.oo-ui-optionWidget-highlighted {
-  background-color: #e1f3ff;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-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-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  position: absolute;
-  background-repeat: no-repeat;
-  background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  top: 50%;
-  width: 2em;
-  height: 2em;
-  margin-top: -1em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
-  right: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  left: 0.5em;
-}
-.oo-ui-buttonSelectWidget {
-  display: inline-block;
-  white-space: nowrap;
-  border-radius: 0.3em;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  border-radius: 0;
-  margin-right: -1px;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-  margin-right: 0;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.3em;
-}
-.oo-ui-buttonOptionWidget {
-  display: inline-block;
-  padding: 0;
-  background-color: transparent;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  position: static;
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  height: 1.9em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-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: 0.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: 0.8;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-  opacity: 0.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: 0.8;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-.oo-ui-buttonWidget {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonGroupWidget {
-  display: inline-block;
-  white-space: nowrap;
-  border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-  border-radius: 0;
-  margin-bottom: -1px;
-  margin-right: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-  margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.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 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, 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%);
-}
-.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;
-  left: 0;
-  right: 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: 0.5;
-}
-.oo-ui-toggleSwitchWidget-grip {
-  top: 0.25em;
-  right: 0.25em;
-  width: 1.5em;
-  height: 1.5em;
-  margin-top: -1px;
-  border-radius: 1em;
-  box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
-  border: 1px #c9c9c9 solid;
-  -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;
-  background: #eeeeee;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
-  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%);
-}
-.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);
-  -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, 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%);
-}
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
-  opacity: 1;
-}
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
-  right: 2.25em;
-  margin-right: -2px;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-  display: block;
-  opacity: 0;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
-  right: 0.25em;
-  margin-right: 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: left;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-  float: right;
-  cursor: default;
-}
-.oo-ui-popupWidget-body {
-  clear: both;
-  overflow: hidden;
-}
-.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-popup {
-  margin-top: 7px;
-}
-.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-head {
-  height: 2.5em;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
-  margin: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-  margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body {
-  box-shadow: 0 0 0.66em rgba(0, 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;
-  right: 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-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-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-iconElement-icon {
-  right: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.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-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 {
-  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-iconElement-icon,
-.oo-ui-textInputWidget .oo-ui-indicatorElement-indicator {
-  opacity: 0.8;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement input,
-.oo-ui-textInputWidget.oo-ui-iconElement textarea {
-  padding-right: 2em;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  width: 2em;
-  background-position: left center;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement input,
-.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
-  padding-left: 1.5em;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  width: 1.5em;
-  background-position: right center;
-}
-.oo-ui-menuWidget {
-  position: absolute;
-  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-menuWidget input {
-  position: absolute;
-  width: 0;
-  height: 0;
-  overflow: hidden;
-  opacity: 0;
-}
-.oo-ui-menuItemWidget {
-  position: relative;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
-  display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-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: 0.33em 0.75em;
-  color: #888;
-}
-.oo-ui-inlineMenuWidget {
-  position: relative;
-  display: inline-block;
-  margin: 0.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-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-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, 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-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-  right: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  line-height: 2.5em;
-  margin: 0 0.5em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-  top: 0;
-  width: 2.5em;
-  height: 2.5em;
-  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-indicatorElement-indicator {
-  opacity: 0.2;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  margin-right: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  margin-left: 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: 0.75em;
-}
-.oo-ui-outlineItemWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
-  padding-left: 1.5em;
-}
-.oo-ui-outlineItemWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  opacity: 0.5;
-}
-.oo-ui-outlineItemWidget-level-0 {
-  padding-right: 3.5em;
-}
-.oo-ui-outlineItemWidget-level-0 .oo-ui-iconElement-icon {
-  right: 1em;
-}
-.oo-ui-outlineItemWidget-level-1 {
-  padding-right: 5em;
-}
-.oo-ui-outlineItemWidget-level-1 .oo-ui-iconElement-icon {
-  right: 2.5em;
-}
-.oo-ui-outlineItemWidget-level-2 {
-  padding-right: 6.5em;
-}
-.oo-ui-outlineItemWidget-level-2 .oo-ui-iconElement-icon {
-  right: 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-flaggedElement-important {
-  font-weight: bold;
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-placeholder {
-  font-style: italic;
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
-  opacity: 0.5;
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label {
-  color: #777;
-}
-.oo-ui-outlineControlsWidget {
-  height: 3em;
-  background-color: #fff;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-  float: right;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-  float: right;
-  background-position: left center;
-  background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
-  float: right;
-}
-.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-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-  height: 2em;
-  margin: 0.5em;
-  padding: 0;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-  width: 1.5em;
-  height: 2em;
-  margin: 0.5em 0.5em 0.5em 0;
-  opacity: 0.2;
-}
-.oo-ui-outlineControlsWidget-items {
-  margin-right: 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, 0.1);
-  border-radius: 0.25em;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget-handle:hover {
-  border-color: rgba(0, 0, 0, 0.2);
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget-empty .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  cursor: default;
-  opacity: 0.2;
-}
-.oo-ui-searchWidget-query {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  width: 100%;
-}
-.oo-ui-searchWidget-results {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  left: 0;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-.oo-ui-searchWidget-query {
-  height: 4em;
-  padding: 0 1em;
-  box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2);
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  margin: 0.75em 0;
-}
-.oo-ui-searchWidget-results {
-  top: 4em;
-  padding: 1em;
-  line-height: 0;
-}
-.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;
-  right: 0;
-}
-.oo-ui-window-isolated {
-  background-color: transparent;
-  background-image: none;
-  font-family: sans-serif;
-  font-size: 0.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;
-  right: 0;
-  left: 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 0.66em rgba(0, 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-buttonElement-button {
-  display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
-  position: relative;
-  top: auto;
-  bottom: auto;
-  display: inline;
-  white-space: nowrap;
-}
-.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: 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-labelElement-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-flaggedElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-  font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.oo-ui-processDialog-title {
-  display: inline;
-  padding: 0;
-}
-.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 {
-  display: none;
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 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 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.75em 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-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-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-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
-  line-height: 1.9em;
-  padding: 0 1em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
-  position: absolute;
-  margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-  margin: 0.75em 0.75em 0.75em 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-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-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-  margin: 0.75em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-  /* Adjust for border so text aligns with title */
-  margin: -1px;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-  font-weight: bold;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  right: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-  padding-right: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  left: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-  padding-left: 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: right;
-  margin: 1em;
-  padding: 1em;
-  border: solid 1px #ff9e9e;
-  background-color: #fff7f7;
-  border-radius: 0.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;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  padding: 1em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
-  position: fixed;
-  left: 0;
-  right: 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, 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);
-}
index 06880ff..b2168e8 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (d74a46ca6a)
+ * OOjs UI v0.1.0-pre (40de4dabe6)
  * 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-10-15T00:40:28Z
+ * Date: 2014-10-22T23:42:26Z
  */
 /* @noflip */
 .oo-ui-rtl {
        border-color: #aaaaaa;
        outline: none;
 }
+.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        line-height: 1.9em;
 }
        z-index: 4;
 }
 .oo-ui-popupTool .oo-ui-popupWidget {
+       /* @noflip */
        margin-left: 1.25em;
        font-size: 0.8em;
 }
        vertical-align: middle;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       display: inline-block;
+       display: inline-table;
        vertical-align: middle;
+       width: 100%;
+       margin-right: -2.5em;
 }
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
-       display: none;
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       display: table-cell;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text {
+       width: 100%;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       text-align: right;
+       padding-right: 2.5em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel:not(:empty) {
+       padding-left: 3em;
 }
 .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
        min-width: 3.5em;
        line-height: 2em;
        font-size: 0.8em;
 }
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       color: #888888;
+}
 .oo-ui-listToolGroup .oo-ui-tool {
        display: inline-block;
        width: 100%;
        left: 0.25em;
        margin-left: 0;
 }
+.oo-ui-progressBarWidget {
+       width: 20em;
+       border: solid 1px #cccccc;
+       border-radius: 0.25em;
+}
+.oo-ui-progressBarWidget-bar {
+       height: 1em;
+       border-right: solid 1px #cccccc;
+       -webkit-transition: width 200ms;
+          -moz-transition: width 200ms;
+           -ms-transition: width 200ms;
+            -o-transition: width 200ms;
+               transition: width 200ms;
+       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-progressBarWidget.oo-ui-widget-disabled {
+       opacity: 0.6;
+}
 .oo-ui-actionWidget.oo-ui-pendingElement-pending {
        background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
 }
 .oo-ui-popupWidget {
        position: absolute;
+       /* @noflip */
+       left: 0;
 }
 .oo-ui-popupWidget-popup {
        position: relative;
        display: block;
        position: absolute;
        top: 0;
+       /* @noflip */
+       left: 0;
        background-repeat: no-repeat;
 }
 .oo-ui-popupWidget-head {
 .oo-ui-window-inner-overlay {
        position: absolute;
        top: 0;
+       /* @noflip */
        left: 0;
 }
 .oo-ui-window-isolated,
diff --git a/resources/lib/oojs-ui/oojs-ui-apex.svg.rtl.css b/resources/lib/oojs-ui/oojs-ui-apex.svg.rtl.css
deleted file mode 100644 (file)
index 4ea3271..0000000
+++ /dev/null
@@ -1,2079 +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-09-24T23:21:42Z
- */
-/* @noflip */
-.oo-ui-rtl {
-  direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
-  direction: ltr;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-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-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-  cursor: default;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
-  display: inline-block;
-  position: relative;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-  display: inline-block;
-  vertical-align: top;
-  text-align: center;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
-  color: #333;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: 0;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  margin-left: -0.75em;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  opacity: 0.8;
-  width: 1.9em;
-  height: 1.9em;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
-  /*.oo-ui-transition(opacity 200ms);*/
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-iconElement-icon,
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-iconElement-icon {
-  opacity: 1;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-  color: #000;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #333;
-  margin-right: 0.25em;
-}
-.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #087ecc;
-}
-.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #76ab36;
-}
-.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #d45353;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #ccc;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-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, 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%);
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
-  border-color: #aaa;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  line-height: 1.9em;
-}
-.oo-ui-buttonElement-framed.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-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, 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%);
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: -0.5em;
-  margin-left: -0.5em;
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: -0.5em;
-  margin-left: 0.3em;
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button {
-  border: solid 1px #a6cee1;
-  background: #cde7f4;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
-  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%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus {
-  border-color: #9dc2d4;
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  border: solid 1px #a6cee1;
-  background: #cde7f4;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
-  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%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
-  border: solid 1px #b8d892;
-  background: #daf0be;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
-  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%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
-  border-color: #adcb89;
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  border: solid 1px #b8d892;
-  background: #daf0be;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
-  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%);
-}
-.oo-ui-buttonElement-framed.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
-  color: #d45353;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  opacity: 0.5;
-  box-shadow: none;
-  color: #333;
-  background: #eee;
-  border-color: #ccc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:focus,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:focus,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-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;
-  right: 0;
-  left: 0;
-  bottom: 3em;
-  overflow-y: auto;
-}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  left: 0;
-}
-.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 {
-  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-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  display: block;
-  float: right;
-}
-.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;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  text-align: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-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-labelElement-label {
-  display: inline-block;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
-  z-index: 1;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help {
-  float: left;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help-content {
-  padding: 0.5em 0.75em;
-}
-.oo-ui-fieldLayout:last-child {
-  margin-bottom: 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  padding-top: 0.5em;
-  margin-left: 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-labelElement-label {
-  padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-top: 0.25em;
-}
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
-  color: #ccc;
-}
-.oo-ui-fieldsetLayout {
-  position: relative;
-  margin: 0;
-  padding: 0;
-  border: none;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-  display: block;
-  position: absolute;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
-  display: inline-block;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
-  margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
-  font-size: 1.5em;
-  margin-bottom: 0.5em;
-  padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
-  padding-right: 1.75em;
-  line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-  right: 0;
-  top: 0.25em;
-  width: 2em;
-  height: 2em;
-}
-.oo-ui-gridLayout {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-  bottom: 0;
-}
-.oo-ui-panelLayout {
-  position: relative;
-}
-.oo-ui-panelLayout-scrollable {
-  overflow-y: auto;
-}
-.oo-ui-panelLayout-expanded {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 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-right: 1.25em;
-  font-size: 0.8em;
-}
-.oo-ui-toolGroup {
-  display: inline-block;
-  vertical-align: middle;
-  margin: 0.3em;
-  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-empty {
-  display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.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-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-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-iconElement-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 -1px -1px 0;
-  border: solid 1px transparent;
-}
-.oo-ui-barToolGroup .oo-ui-tool:first-child {
-  border-top-right-radius: 0.25em;
-  border-bottom-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 {
-  height: 1.5em;
-  padding: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  height: 1.5em;
-  width: 1.5em;
-  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, 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%);
-}
-.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-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-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-iconElement-icon {
-  opacity: 1;
-}
-.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
-  opacity: 0.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-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-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-iconElement-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-left > .oo-ui-toolGroup-tools {
-  right: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
-  left: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-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-indicatorElement.oo-ui-iconElement {
-  min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  top: 0;
-  width: 2em;
-  height: 2em;
-  opacity: 0.8;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  right: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labelElement-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-active.oo-ui-widget-enabled {
-  border-bottom-right-radius: 0;
-  border-bottom-left-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, 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%);
-}
-.oo-ui-popupToolGroup.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-  margin-right: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-  margin-left: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-  top: 2em;
-  margin: 0 -1px;
-  border: solid 1px #ccc;
-  background-color: white;
-  box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  height: 2em;
-  width: 2em;
-  margin-left: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-  line-height: 2em;
-  font-size: 0.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: 0.25em;
-}
-.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-link {
-  padding-left: 0.5em;
-}
-.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, 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%);
-}
-.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-iconElement-icon {
-  opacity: 0.8;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-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-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled {
-  color: #ccc;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-menuToolGroup {
-  border-color: rgba(0, 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.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-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-link {
-  padding: 0 0.25em 0 1em;
-  display: block;
-  cursor: pointer;
-  white-space: nowrap;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  background-image: none;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
-  background-image: /* @embed */ url(themes/apex/images/icons/check.svg);
-}
-.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-iconElement-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-indicatorElement-indicator,
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-toolbar {
-  clear: both;
-}
-.oo-ui-toolbar-bar {
-  line-height: 1em;
-}
-.oo-ui-toolbar-actions {
-  float: left;
-}
-.oo-ui-toolbar-tools {
-  display: inline;
-}
-.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: right 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, 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%);
-}
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
-  border: none;
-  background: none;
-}
-.oo-ui-toolbar-shadow {
-  /* @embed */
-  background-image: /* @embed */ url(themes/apex/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-optionWidget {
-  position: relative;
-  display: block;
-  cursor: pointer;
-  padding: 0.5em 3em 0.5em 2em;
-  border: none;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-  display: block;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-  overflow: hidden;
-}
-.oo-ui-optionWidget-highlighted {
-  background-color: #e1f3ff;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-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-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  position: absolute;
-  background-repeat: no-repeat;
-  background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  top: 50%;
-  width: 2em;
-  height: 2em;
-  margin-top: -1em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
-  right: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  left: 0.5em;
-}
-.oo-ui-buttonSelectWidget {
-  display: inline-block;
-  white-space: nowrap;
-  border-radius: 0.3em;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  border-radius: 0;
-  margin-right: -1px;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-  margin-right: 0;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.3em;
-}
-.oo-ui-buttonOptionWidget {
-  display: inline-block;
-  padding: 0;
-  background-color: transparent;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  position: static;
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  height: 1.9em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-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: 0.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: 0.8;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-  opacity: 0.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: 0.8;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-.oo-ui-buttonWidget {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonGroupWidget {
-  display: inline-block;
-  white-space: nowrap;
-  border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-  border-radius: 0;
-  margin-bottom: -1px;
-  margin-right: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-  margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.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 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, 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%);
-}
-.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;
-  left: 0;
-  right: 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: 0.5;
-}
-.oo-ui-toggleSwitchWidget-grip {
-  top: 0.25em;
-  right: 0.25em;
-  width: 1.5em;
-  height: 1.5em;
-  margin-top: -1px;
-  border-radius: 1em;
-  box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
-  border: 1px #c9c9c9 solid;
-  -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;
-  background: #eeeeee;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
-  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%);
-}
-.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);
-  -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, 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%);
-}
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
-  opacity: 1;
-}
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
-  right: 2.25em;
-  margin-right: -2px;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-  display: block;
-  opacity: 0;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
-  right: 0.25em;
-  margin-right: 0;
-}
-.oo-ui-actionWidget.oo-ui-pendingElement-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.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: left;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-  float: right;
-  cursor: default;
-}
-.oo-ui-popupWidget-body {
-  clear: both;
-  overflow: hidden;
-}
-.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-popup {
-  margin-top: 7px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before,
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
-  content: "";
-  position: absolute;
-  width: 0;
-  height: 0;
-  border-style: solid;
-  border-color: transparent;
-  border-top: 0;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before {
-  bottom: -8px;
-  right: 11px;
-  border-bottom-color: #aaa;
-  border-width: 7px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
-  bottom: -8px;
-  right: 12px;
-  border-bottom-color: #fff;
-  border-width: 6px;
-}
-.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-head {
-  height: 2.5em;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
-  margin: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-  margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body {
-  box-shadow: 0 0 0.66em rgba(0, 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;
-  right: 1em;
-  cursor: auto;
-}
-.oo-ui-popupButtonWidget > .oo-ui-popupWidget {
-  margin-right: -1em;
-}
-.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-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-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-iconElement-icon {
-  right: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.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-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 {
-  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.oo-ui-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-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-iconElement-icon,
-.oo-ui-textInputWidget .oo-ui-indicatorElement-indicator {
-  opacity: 0.8;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement input,
-.oo-ui-textInputWidget.oo-ui-iconElement textarea {
-  padding-right: 2em;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  width: 2em;
-  background-position: left center;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement input,
-.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
-  padding-left: 1.5em;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  width: 1.5em;
-  background-position: right center;
-}
-.oo-ui-menuWidget {
-  position: absolute;
-  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-menuWidget input {
-  position: absolute;
-  width: 0;
-  height: 0;
-  overflow: hidden;
-  opacity: 0;
-}
-.oo-ui-menuItemWidget {
-  position: relative;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
-  display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-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: 0.33em 0.75em;
-  color: #888;
-}
-.oo-ui-inlineMenuWidget {
-  position: relative;
-  display: inline-block;
-  margin: 0.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-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-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, 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-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-  right: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  line-height: 2.5em;
-  margin: 0 0.5em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-  top: 0;
-  width: 2.5em;
-  height: 2.5em;
-  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-indicatorElement-indicator {
-  opacity: 0.2;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  margin-right: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  margin-left: 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: 0.75em;
-}
-.oo-ui-outlineItemWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
-  padding-left: 1.5em;
-}
-.oo-ui-outlineItemWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  opacity: 0.5;
-}
-.oo-ui-outlineItemWidget-level-0 {
-  padding-right: 3.5em;
-}
-.oo-ui-outlineItemWidget-level-0 .oo-ui-iconElement-icon {
-  right: 1em;
-}
-.oo-ui-outlineItemWidget-level-1 {
-  padding-right: 5em;
-}
-.oo-ui-outlineItemWidget-level-1 .oo-ui-iconElement-icon {
-  right: 2.5em;
-}
-.oo-ui-outlineItemWidget-level-2 {
-  padding-right: 6.5em;
-}
-.oo-ui-outlineItemWidget-level-2 .oo-ui-iconElement-icon {
-  right: 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-flaggedElement-important {
-  font-weight: bold;
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-placeholder {
-  font-style: italic;
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
-  opacity: 0.5;
-}
-.oo-ui-outlineItemWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label {
-  color: #777;
-}
-.oo-ui-outlineControlsWidget {
-  height: 3em;
-  background-color: #fff;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-  float: right;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-  float: right;
-  background-position: left center;
-  background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
-  float: right;
-}
-.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-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-  height: 2em;
-  margin: 0.5em;
-  padding: 0;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-  width: 1.5em;
-  height: 2em;
-  margin: 0.5em 0.5em 0.5em 0;
-  opacity: 0.2;
-}
-.oo-ui-outlineControlsWidget-items {
-  margin-right: 0;
-}
-.oo-ui-comboBoxWidget {
-  display: inline-block;
-  position: relative;
-  min-width: 20em;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
-  width: 100%;
-  z-index: 1;
-}
-.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-indicatorElement .oo-ui-indicatorElement-indicator,
-.oo-ui-comboBoxWidget-empty .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  cursor: default;
-  opacity: 0.2;
-}
-.oo-ui-searchWidget-query {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  width: 100%;
-}
-.oo-ui-searchWidget-results {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  left: 0;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-.oo-ui-searchWidget-query {
-  height: 4em;
-  padding: 0 1em;
-  box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2);
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  margin: 0.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: 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;
-  right: 0;
-}
-.oo-ui-window-isolated {
-  background-color: transparent;
-  background-image: none;
-  font-family: sans-serif;
-  font-size: 0.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;
-  right: 0;
-  left: 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-head.oo-ui-pendingElement-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.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 0.66em rgba(0, 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-buttonElement-button {
-  display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
-  position: relative;
-  top: auto;
-  bottom: auto;
-  display: inline;
-  white-space: nowrap;
-}
-.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: 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-labelElement-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-flaggedElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-  font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.oo-ui-processDialog-title {
-  display: inline;
-  padding: 0;
-}
-.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 {
-  display: none;
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 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 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.75em 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-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-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-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
-  line-height: 1.9em;
-  padding: 0 1em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
-  position: absolute;
-  margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-  margin: 0.75em 0.75em 0.75em 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-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-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-  margin: 0.75em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-  /* Adjust for border so text aligns with title */
-  margin: -1px;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-  font-weight: bold;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  right: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-  padding-right: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  left: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-  padding-left: 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: right;
-  margin: 1em;
-  padding: 1em;
-  border: solid 1px #ff9e9e;
-  background-color: #fff7f7;
-  border-radius: 0.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;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  padding: 1em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
-  position: absolute;
-  left: 0;
-  right: 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, 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-icon-add {
-  background-image: /* @embed */ url(themes/apex/images/icons/add.svg);
-}
-.oo-ui-icon-advanced {
-  background-image: /* @embed */ url(themes/apex/images/icons/advanced.svg);
-}
-.oo-ui-icon-alert {
-  background-image: /* @embed */ url(themes/apex/images/icons/alert.svg);
-}
-.oo-ui-icon-check {
-  background-image: /* @embed */ url(themes/apex/images/icons/check.svg);
-}
-.oo-ui-icon-clear {
-  background-image: /* @embed */ url(themes/apex/images/icons/clear.svg);
-}
-.oo-ui-icon-close {
-  background-image: /* @embed */ url(themes/apex/images/icons/close.svg);
-}
-.oo-ui-icon-code {
-  background-image: /* @embed */ url(themes/apex/images/icons/code.svg);
-}
-.oo-ui-icon-collapse {
-  background-image: /* @embed */ url(themes/apex/images/icons/collapse.svg);
-}
-.oo-ui-icon-comment {
-  background-image: /* @embed */ url(themes/apex/images/icons/comment.svg);
-}
-.oo-ui-icon-expand {
-  background-image: /* @embed */ url(themes/apex/images/icons/expand.svg);
-}
-.oo-ui-icon-help {
-  background-image: /* @embed */ url(themes/apex/images/icons/help.svg);
-}
-.oo-ui-icon-info {
-  background-image: /* @embed */ url(themes/apex/images/icons/info.svg);
-}
-.oo-ui-icon-link {
-  background-image: /* @embed */ url(themes/apex/images/icons/link.svg);
-}
-.oo-ui-icon-menu {
-  background-image: /* @embed */ url(themes/apex/images/icons/menu.svg);
-}
-.oo-ui-icon-next {
-  background-image: /* @embed */ url(themes/apex/images/icons/move-rtl.svg);
-}
-.oo-ui-icon-picture {
-  background-image: /* @embed */ url(themes/apex/images/icons/picture.svg);
-}
-.oo-ui-icon-previous {
-  background-image: /* @embed */ url(themes/apex/images/icons/move-ltr.svg);
-}
-.oo-ui-icon-redo {
-  background-image: /* @embed */ url(themes/apex/images/icons/arched-arrow-rtl.svg);
-}
-.oo-ui-icon-remove {
-  background-image: /* @embed */ url(themes/apex/images/icons/remove.svg);
-}
-.oo-ui-icon-search {
-  background-image: /* @embed */ url(themes/apex/images/icons/search.svg);
-}
-.oo-ui-icon-settings {
-  background-image: /* @embed */ url(themes/apex/images/icons/settings.svg);
-}
-.oo-ui-icon-tag {
-  background-image: /* @embed */ url(themes/apex/images/icons/tag.svg);
-}
-.oo-ui-icon-undo {
-  background-image: /* @embed */ url(themes/apex/images/icons/arched-arrow-ltr.svg);
-}
-.oo-ui-icon-window {
-  background-image: /* @embed */ url(themes/apex/images/icons/window.svg);
-}
-.oo-ui-indicator-alert {
-  background-image: /* @embed */ url(themes/apex/images/indicators/alert.svg);
-}
-.oo-ui-indicator-up {
-  background-image: /* @embed */ url(themes/apex/images/indicators/arrow-up.svg);
-}
-.oo-ui-indicator-down {
-  background-image: /* @embed */ url(themes/apex/images/indicators/arrow-down.svg);
-}
-.oo-ui-indicator-next {
-  background-image: /* @embed */ url(themes/apex/images/indicators/arrow-rtl.svg);
-}
-.oo-ui-indicator-previous {
-  background-image: /* @embed */ url(themes/apex/images/indicators/arrow-ltr.svg);
-}
-.oo-ui-indicator-required {
-  background-image: /* @embed */ url(themes/apex/images/indicators/required.svg);
-}
-.oo-ui-texture-pending {
-  background-image: /* @embed */ url(themes/apex/images/textures/pending.svg);
-}
-.oo-ui-texture-transparency {
-  background-image: /* @embed */ url(themes/apex/images/textures/transparency.svg);
-}
-@-webkit-keyframes oo-ui-animate-texture-pending {
-  from {
-    background-position: 100% 0%;
-  }
-  to {
-    background-position: 0% 0%;
-  }
-}
-@keyframes oo-ui-animate-pending {
-  from {
-    background-position: 100% 0%;
-  }
-  to {
-    background-position: 0% 0%;
-  }
-}
-.oo-ui-texture-pending {
-  background-position: 100% 0%;
-  -webkit-animation: oo-ui-animate-texture-pending 30s linear 0 infinite;
-  animation: oo-ui-animate-texture-pending 30s linear 0 infinite;
-}
index 7fbd762..476f8c2 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (d74a46ca6a)
+ * OOjs UI v0.1.0-pre (40de4dabe6)
  * 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-10-15T00:40:28Z
+ * Date: 2014-10-22T23:42:26Z
  */
 /* @noflip */
 .oo-ui-rtl {
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
        outline: none;
 }
+.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        line-height: 2.2em;
 }
        z-index: 4;
 }
 .oo-ui-popupTool .oo-ui-popupWidget {
+       /* @noflip */
        margin-left: 1.25em;
        font-size: 0.8em;
 }
 .oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
        color: #000000;
 }
+.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       color: #888888;
+}
 .oo-ui-barToolGroup > .oo-ui-iconElement-icon,
 .oo-ui-barToolGroup > .oo-ui-labelElement-label {
        display: none;
        vertical-align: middle;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       display: inline-block;
+       display: inline-table;
        vertical-align: middle;
+       width: 100%;
+       margin-right: -2.5em;
 }
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
-       display: none;
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       display: table-cell;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text {
+       width: 100%;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       text-align: right;
+       padding-right: 2.5em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel:not(:empty) {
+       padding-left: 3em;
 }
 .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
        min-width: 3.5em;
 .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
        background-color: #ffffff;
 }
+.oo-ui-progressBarWidget {
+       width: 20em;
+       border: solid 1px #cccccc;
+       border-radius: 0.1em;
+}
+.oo-ui-progressBarWidget-bar {
+       height: 1em;
+       border-right: solid 1px #cccccc;
+       background: #0274ff;
+       -webkit-transition: width 200ms;
+          -moz-transition: width 200ms;
+           -ms-transition: width 200ms;
+            -o-transition: width 200ms;
+               transition: width 200ms;
+}
+.oo-ui-progressBarWidget.oo-ui-widget-disabled {
+       opacity: 0.2;
+}
 .oo-ui-actionWidget.oo-ui-pendingElement-pending {
        background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
 }
 .oo-ui-popupWidget {
        position: absolute;
+       /* @noflip */
+       left: 0;
 }
 .oo-ui-popupWidget-popup {
        position: relative;
        display: block;
        position: absolute;
        top: 0;
+       /* @noflip */
+       left: 0;
        background-repeat: no-repeat;
 }
 .oo-ui-popupWidget-head {
        overflow-x: hidden;
        overflow-y: auto;
 }
+.oo-ui-searchWidget-query {
+       height: 2.4em;
+       top: 1px;
+}
+.oo-ui-searchWidget-query .oo-ui-textInputWidget input {
+       border-width: 1px 0;
+}
+.oo-ui-searchWidget-results {
+       top: 2.2em;
+       bottom: 0.2em;
+       line-height: 0;
+}
 .oo-ui-window {
        line-height: 1em;
 }
 .oo-ui-window-inner-overlay {
        position: absolute;
        top: 0;
+       /* @noflip */
        left: 0;
 }
 .oo-ui-window-isolated,
index 8fed983..4ad621d 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (d74a46ca6a)
+ * OOjs UI v0.1.0-pre (40de4dabe6)
  * 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-10-15T00:40:17Z
+ * Date: 2014-10-22T23:42:16Z
  */
 /**
  * @class
@@ -40,8 +40,8 @@ OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) {
                // Parent method
                classes = OO.ui.MediaWikiTheme.super.prototype.getElementClasses.call( this, element );
 
-       if ( element.isFramed && element.hasFlag ) {
-               if ( element.isFramed() ) {
+       if ( element.supports( [ 'isFramed', 'isDisabled', 'hasFlag' ] ) ) {
+               if ( element.isFramed() && !element.isDisabled() ) {
                        if (
                                element.hasFlag( 'primary' ) ||
                                element.hasFlag( 'constructive' ) ||
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.rtl.css b/resources/lib/oojs-ui/oojs-ui-mediawiki.rtl.css
deleted file mode 100644 (file)
index e2acb0f..0000000
+++ /dev/null
@@ -1,1997 +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-09-24T23:21:42Z
- */
-/* @noflip */
-.oo-ui-rtl {
-  direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
-  direction: ltr;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-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-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-  cursor: default;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
-  display: inline-block;
-  position: relative;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-  display: inline-block;
-  vertical-align: top;
-  text-align: center;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
-  font-weight: bold;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: 0;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  margin-left: -0.75em;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  width: 2.2em;
-  height: 2.2em;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  opacity: 0.2;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #ddd;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  margin-right: 0.25em;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #757575;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #444444;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-  color: #598ad1;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #777777;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-buttonElement-active > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #015ccc;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-  color: #00c697;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #777777;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #008c6d;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-  color: #e81915;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #777777;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #a7170f;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-  margin: 0.1em 0;
-  padding: 0.3em 1.2em;
-  border-radius: 0.3em;
-  -webkit-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-  -moz-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-  -ms-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-  -o-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-  transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  line-height: 2.2em;
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: -0.5em;
-  margin-left: -0.5em;
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: -0.5em;
-  margin-left: 0.3em;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-  color: #ddd;
-  background: #fff;
-  border: solid 1px #cdcdcd;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
-  color: #757575;
-  background-color: #fff;
-  border: solid 1px #cdcdcd;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus {
-  box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
-  border-color: #aaa;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  background-color: #d0d0d0;
-  border-color: #d0d0d0;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button {
-  text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
-  color: #fff;
-  background-color: #0274ff;
-  border-color: #0274ff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus {
-  box-shadow: inset 0 -0.2em 0 0 #015ccc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-  border-bottom-color: #015ccc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  background-color: #015ccc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
-  text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
-  color: #fff;
-  background-color: #00af89;
-  border-color: #00af89;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
-  box-shadow: inset 0 -0.2em 0 0 #008c6d, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-  border-bottom-color: #008c6d;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  background-color: #008c6d;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
-  text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
-  color: #fff;
-  background-color: #d11d13;
-  border-color: #d11d13;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
-  box-shadow: inset 0 -0.2em 0 0 #a7170f, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-  border-bottom-color: #a7170f;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  background-color: #a7170f;
-}
-.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;
-  right: 0;
-  left: 0;
-  bottom: 3em;
-  overflow-y: auto;
-}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  left: 0;
-}
-.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 {
-  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-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  display: block;
-  float: right;
-}
-.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;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  text-align: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-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-labelElement-label {
-  display: inline-block;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
-  z-index: 1;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help {
-  float: left;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help-content {
-  padding: 0.5em 0.75em;
-}
-.oo-ui-fieldLayout:last-child {
-  margin-bottom: 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  padding-top: 0.5em;
-  margin-left: 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-labelElement-label {
-  padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-top: 0.25em;
-}
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
-  color: #ccc;
-}
-.oo-ui-fieldsetLayout {
-  position: relative;
-  margin: 0;
-  padding: 0;
-  border: none;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-  display: block;
-  position: absolute;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
-  display: inline-block;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
-  margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
-  font-size: 1.5em;
-  margin-bottom: 0.5em;
-  padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
-  padding-right: 1.75em;
-  line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-  right: 0;
-  top: 0.25em;
-  width: 2em;
-  height: 2em;
-}
-.oo-ui-gridLayout {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-  bottom: 0;
-}
-.oo-ui-panelLayout {
-  position: relative;
-}
-.oo-ui-panelLayout-scrollable {
-  overflow-y: auto;
-}
-.oo-ui-panelLayout-expanded {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 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-right: 1.25em;
-  font-size: 0.8em;
-}
-.oo-ui-toolGroup {
-  display: inline-block;
-  vertical-align: middle;
-  margin: 0.3em;
-}
-.oo-ui-toolGroup-empty {
-  display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
-  color: #000;
-}
-.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-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-iconElement-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: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  height: 1.5em;
-  width: 1.5em;
-  opacity: 0.8;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
-  background-color: #eee;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-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-iconElement-icon {
-  opacity: 1;
-}
-.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
-  opacity: 0.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-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-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-iconElement-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-left > .oo-ui-toolGroup-tools {
-  right: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
-  left: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-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-indicatorElement.oo-ui-iconElement {
-  min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  top: 0;
-  width: 2em;
-  height: 2em;
-  opacity: 0.8;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  right: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labelElement-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-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-  margin-right: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-  margin-left: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-  top: 2em;
-  background-color: white;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  height: 2em;
-  width: 2em;
-  margin-left: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-  line-height: 2em;
-  font-size: 0.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-tool {
-  padding: 0 0.25em;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
-  padding-left: 0.5em;
-}
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
-  background-color: #eee;
-}
-.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-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled {
-  color: #ccc;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
-  padding: 0.25em 0 0.25em 0;
-  border: 1px solid #aaa;
-  box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-menuToolGroup {
-  border: solid 1px #ccc;
-  border-radius: 0.1em;
-}
-.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.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 {
-  margin-right: -1px;
-  padding: 0.25em 0 0.25em 0;
-  border: 1px solid #aaa;
-  box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
-  border-color: #aaa;
-}
-.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
-  border-color: #aaa;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
-  padding: 0 0.25em 0 1em;
-  display: block;
-  cursor: pointer;
-  white-space: nowrap;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  background-image: none;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/check.svg);
-}
-.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-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled {
-  color: #ccc;
-  border-color: #ccc;
-}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-toolbar {
-  clear: both;
-}
-.oo-ui-toolbar-bar {
-  line-height: 1em;
-}
-.oo-ui-toolbar-actions {
-  float: left;
-}
-.oo-ui-toolbar-tools {
-  display: inline;
-}
-.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: right top;
-  background-repeat: repeat-x;
-  position: absolute;
-  width: 100%;
-  pointer-events: none;
-}
-.oo-ui-toolbar-bar {
-  border-bottom: solid 1px #ccc;
-}
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
-  border: none;
-  background: none;
-}
-.oo-ui-toolbar-shadow {
-  display: none;
-}
-.oo-ui-selectWidget {
-  border-radius: 0.3em;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  border-radius: 0;
-  margin-right: -1px;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-  margin-right: 0;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.3em;
-}
-.oo-ui-optionWidget {
-  position: relative;
-  display: block;
-  cursor: pointer;
-  padding: 0.5em 3em 0.5em 2em;
-  border: none;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-  display: block;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-  overflow: hidden;
-}
-.oo-ui-optionWidget-highlighted {
-  background-color: #eee;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-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-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  position: absolute;
-  background-repeat: no-repeat;
-  background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  top: 50%;
-  width: 2em;
-  height: 2em;
-  margin-top: -1em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
-  right: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  left: 0.5em;
-}
-.oo-ui-buttonSelectWidget {
-  display: inline-block;
-  white-space: nowrap;
-  border-radius: 0.3em;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  border-radius: 0;
-  margin-right: -1px;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-  margin-right: 0;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.3em;
-}
-.oo-ui-buttonOptionWidget {
-  display: inline-block;
-  padding: 0;
-  background-color: transparent;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  position: static;
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  height: 2.2em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  height: 2.2em;
-  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;
-}
-.oo-ui-iconWidget {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-  line-height: 2.5em;
-  height: 2.2em;
-  width: 2.2em;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-.oo-ui-indicatorWidget {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-  line-height: 2.5em;
-  height: 2.2em;
-  width: 2.2em;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-.oo-ui-buttonWidget {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonGroupWidget {
-  display: inline-block;
-  white-space: nowrap;
-  border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-  border-radius: 0;
-  margin-bottom: -1px;
-  margin-right: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-  margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.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;
-  border: 1px #ddd solid;
-}
-.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;
-  left: 0;
-  right: 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: 0.25em;
-  right: 0.25em;
-  width: 1.5em;
-  height: 1.5em;
-  margin-top: -1px;
-  border-radius: 1em;
-  border: 1px #ddd solid;
-  background-color: #f7f7f7;
-  -webkit-transition: right 0.1s ease-in-out, margin-right 0.1s ease-in-out;
-  -moz-transition: right 0.1s ease-in-out, margin-right 0.1s ease-in-out;
-  -ms-transition: right 0.1s ease-in-out, margin-right 0.1s ease-in-out;
-  -o-transition: right 0.1s ease-in-out, margin-right 0.1s ease-in-out;
-  transition: right 0.1s ease-in-out, margin-right 0.1s ease-in-out;
-}
-.oo-ui-toggleSwitchWidget-glow {
-  border-radius: 1em;
-  background-color: #f7f7f7;
-  -webkit-transition: background-color 0.1s ease-in-out;
-  -moz-transition: background-color 0.1s ease-in-out;
-  -ms-transition: background-color 0.1s ease-in-out;
-  -o-transition: background-color 0.1s ease-in-out;
-  transition: background-color 0.1s ease-in-out;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
-  right: 2.25em;
-  margin-right: -2px;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-  display: block;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
-  right: 0.25em;
-  margin-right: 0;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled {
-  border: 1px #ccc solid;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover {
-  border-color: #aaa;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled .oo-ui-toggleSwitchWidget-grip {
-  background-color: #fff;
-  border-color: #aaa;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
-  background-color: #d0d0d0;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-  background-color: #fff;
-}
-.oo-ui-actionWidget.oo-ui-pendingElement-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.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: left;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-  float: right;
-  cursor: default;
-}
-.oo-ui-popupWidget-body {
-  clear: both;
-  overflow: hidden;
-}
-.oo-ui-popupWidget-popup {
-  border: solid 1px #aaa;
-  border-radius: 0.2em;
-  background-color: #fff;
-  box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
-  margin-top: 7px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before,
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
-  content: "";
-  position: absolute;
-  width: 0;
-  height: 0;
-  border-style: solid;
-  border-color: transparent;
-  border-top: 0;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before {
-  bottom: -8px;
-  right: 11px;
-  border-bottom-color: #888;
-  border-width: 13px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
-  bottom: -8px;
-  right: 12px;
-  border-bottom-color: #fff;
-  border-width: 12px;
-}
-.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-head {
-  height: 2.5em;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
-  margin: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-  margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body {
-  box-shadow: 0 0 0.66em rgba(0, 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;
-  right: 1em;
-  cursor: auto;
-}
-.oo-ui-popupButtonWidget > .oo-ui-popupWidget {
-  margin-right: -1em;
-}
-.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-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-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-iconElement-icon {
-  right: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-  padding: 0.5em 0.9em 0.5em 0.5em;
-  margin: 0;
-  font-size: 1em;
-  font-family: sans-serif;
-  background-color: #fff;
-  border: solid 1px #ccc;
-  box-shadow: inset 0 0 0 0 #0274FF;
-  border-radius: 0.1em;
-  -webkit-transition: box-shadow 0.1s;
-  -moz-transition: box-shadow 0.1s;
-  -ms-transition: box-shadow 0.1s;
-  -o-transition: box-shadow 0.1s;
-  transition: box-shadow 0.1s;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.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 {
-  outline: none;
-  border-color: #aaa;
-  box-shadow: inset 0.4em 0 0 0 #0274ff;
-}
-.oo-ui-textInputWidget input[readonly],
-.oo-ui-textInputWidget textarea[readonly] {
-  color: #777;
-  text-shadow: 0 1px 1px #fff;
-}
-.oo-ui-textInputWidget input[readonly]:focus,
-.oo-ui-textInputWidget textarea[readonly]:focus {
-  box-shadow: inset 0.4em 0 0 0 #ccc;
-}
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-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-iconElement input,
-.oo-ui-textInputWidget.oo-ui-iconElement textarea {
-  padding-right: 2.4em;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  right: 0.4em;
-  width: 2em;
-  height: 100%;
-  background-position: left center;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement input,
-.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
-  padding-left: 2.2em;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  width: 1.6em;
-  height: 100%;
-  background-position: right center;
-}
-.oo-ui-menuWidget {
-  position: absolute;
-  background: #fff;
-  margin-top: -1px;
-  border: solid 1px #aaa;
-  border-radius: 0 0 0.1em 0.1em;
-  padding-bottom: 0.25em;
-  box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 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-iconElement-icon {
-  display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-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: #eee;
-}
-.oo-ui-menuSectionItemWidget {
-  cursor: default;
-  padding: 0.33em 0.75em;
-  color: #888;
-}
-.oo-ui-inlineMenuWidget {
-  position: relative;
-  display: inline-block;
-  margin: 0.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-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-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 #ccc;
-  border-radius: 0.1em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-  right: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  line-height: 2.5em;
-  margin: 0 1em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-  top: 0;
-  width: 2.5em;
-  height: 2.5em;
-}
-.oo-ui-inlineMenuWidget:hover .oo-ui-inlineMenuWidget-handle {
-  border-color: #aaa;
-}
-.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-indicatorElement-indicator {
-  opacity: 0.2;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  margin-right: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  margin-left: 2em;
-}
-.oo-ui-inlineMenuWidget .oo-ui-selectWidget {
-  border-top-color: #fff;
-}
-.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;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-  float: right;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-  float: right;
-  background-position: left center;
-  background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
-  float: right;
-}
-.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-comboBoxWidget {
-  display: inline-block;
-  position: relative;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
-  width: 100%;
-  z-index: 1;
-}
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget input,
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget textarea {
-  height: 2.35em;
-}
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget.oo-ui-indicatorElement {
-  padding-left: 2.2em;
-}
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  width: 2.2em;
-  background-position: center center;
-  border: solid 1px #ccc;
-  border-right: none;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.oo-ui-searchWidget-query {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  width: 100%;
-}
-.oo-ui-searchWidget-results {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  left: 0;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-.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: 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;
-  right: 0;
-}
-.oo-ui-window-isolated {
-  background: transparent;
-  font-family: sans-serif;
-  font-size: 0.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;
-  right: 0;
-  left: 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-head.oo-ui-pendingElement-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.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 1px 0 #aaa;
-}
-.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-buttonElement-button {
-  display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-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: 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: 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-labelElement-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-flaggedElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-  font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.oo-ui-processDialog-title {
-  display: inline;
-  padding: 0;
-}
-.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 {
-  display: none;
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 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 0 1px rgba(0, 0, 0, 0.2);
-}
-.oo-ui-processDialog-navigation {
-  position: relative;
-  height: 3.4em;
-  padding: 0 1em;
-}
-.oo-ui-processDialog-location {
-  padding: 0.75em 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-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-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-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
-  line-height: 1.9em;
-  padding: 0 1em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
-  position: absolute;
-  margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-  margin: 0.75em 0.75em 0.75em 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-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-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-  margin: 0.75em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-  /* Adjust for border so text aligns with title */
-  margin: -1px;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-  font-weight: bold;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  right: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-  padding-right: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  left: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-  padding-left: 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: right;
-  margin: 1em;
-  padding: 1em;
-  border: solid 1px #ff9e9e;
-  background-color: #fff7f7;
-  border-radius: 0.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;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  padding: 1em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
-  position: absolute;
-  left: 0;
-  right: 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, 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 #aaa;
-  border-radius: 0.2em;
-  box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-icon-add {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/add.png);
-}
-.oo-ui-image-invert .oo-ui-icon-add,
-.oo-ui-image-invert.oo-ui-icon-add {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/add-invert.png);
-}
-.oo-ui-icon-advanced {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/advanced.png);
-}
-.oo-ui-image-invert .oo-ui-icon-advanced,
-.oo-ui-image-invert.oo-ui-icon-advanced {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/advanced-invert.png);
-}
-.oo-ui-icon-alert {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/alert.png);
-}
-.oo-ui-image-invert .oo-ui-icon-alert,
-.oo-ui-image-invert.oo-ui-icon-alert {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/alert-invert.png);
-}
-.oo-ui-icon-check {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/check.png);
-}
-.oo-ui-image-invert .oo-ui-icon-check,
-.oo-ui-image-invert.oo-ui-icon-check {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/check-invert.png);
-}
-.oo-ui-icon-clear {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/clear.png);
-}
-.oo-ui-image-invert .oo-ui-icon-clear,
-.oo-ui-image-invert.oo-ui-icon-clear {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/clear-invert.png);
-}
-.oo-ui-icon-close {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/close.png);
-}
-.oo-ui-image-invert .oo-ui-icon-close,
-.oo-ui-image-invert.oo-ui-icon-close {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/close-invert.png);
-}
-.oo-ui-icon-code {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/code.png);
-}
-.oo-ui-image-invert .oo-ui-icon-code,
-.oo-ui-image-invert.oo-ui-icon-code {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/code-invert.png);
-}
-.oo-ui-icon-collapse {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/collapse.png);
-}
-.oo-ui-image-invert .oo-ui-icon-collapse,
-.oo-ui-image-invert.oo-ui-icon-collapse {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/collapse-invert.png);
-}
-.oo-ui-icon-comment {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/comment.png);
-}
-.oo-ui-image-invert .oo-ui-icon-comment,
-.oo-ui-image-invert.oo-ui-icon-comment {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/comment-invert.png);
-}
-.oo-ui-icon-expand {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/expand.png);
-}
-.oo-ui-image-invert .oo-ui-icon-expand,
-.oo-ui-image-invert.oo-ui-icon-expand {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/expand-invert.png);
-}
-.oo-ui-icon-help {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/help.png);
-}
-.oo-ui-image-invert .oo-ui-icon-help,
-.oo-ui-image-invert.oo-ui-icon-help {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/help-invert.png);
-}
-.oo-ui-icon-info {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/info.png);
-}
-.oo-ui-image-invert .oo-ui-icon-info,
-.oo-ui-image-invert.oo-ui-icon-info {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/info-invert.png);
-}
-.oo-ui-icon-link {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/link.png);
-}
-.oo-ui-image-invert .oo-ui-icon-link,
-.oo-ui-image-invert.oo-ui-icon-link {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/link-invert.png);
-}
-.oo-ui-icon-menu {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/menu.png);
-}
-.oo-ui-image-invert .oo-ui-icon-menu,
-.oo-ui-image-invert.oo-ui-icon-menu {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/menu-invert.png);
-}
-.oo-ui-icon-next {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/move-rtl.png);
-}
-.oo-ui-image-invert .oo-ui-icon-next,
-.oo-ui-image-invert.oo-ui-icon-next {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/move-rtl-invert.png);
-}
-.oo-ui-icon-picture {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/picture.png);
-}
-.oo-ui-image-invert .oo-ui-icon-picture,
-.oo-ui-image-invert.oo-ui-icon-picture {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/picture-invert.png);
-}
-.oo-ui-icon-previous {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/move-ltr.png);
-}
-.oo-ui-image-invert .oo-ui-icon-previous,
-.oo-ui-image-invert.oo-ui-icon-previous {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/move-ltr-invert.png);
-}
-.oo-ui-icon-redo {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-rtl.png);
-}
-.oo-ui-image-invert .oo-ui-icon-redo,
-.oo-ui-image-invert.oo-ui-icon-redo {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-rtl-invert.png);
-}
-.oo-ui-icon-remove {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/remove.png);
-}
-.oo-ui-image-invert .oo-ui-icon-remove,
-.oo-ui-image-invert.oo-ui-icon-remove {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/remove-invert.png);
-}
-.oo-ui-icon-search {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/search.png);
-}
-.oo-ui-image-invert .oo-ui-icon-search,
-.oo-ui-image-invert.oo-ui-icon-search {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/search-invert.png);
-}
-.oo-ui-icon-settings {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/settings.png);
-}
-.oo-ui-image-invert .oo-ui-icon-settings,
-.oo-ui-image-invert.oo-ui-icon-settings {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/settings-invert.png);
-}
-.oo-ui-icon-tag {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/tag.png);
-}
-.oo-ui-image-invert .oo-ui-icon-tag,
-.oo-ui-image-invert.oo-ui-icon-tag {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/tag-invert.png);
-}
-.oo-ui-icon-undo {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-ltr.png);
-}
-.oo-ui-image-invert .oo-ui-icon-undo,
-.oo-ui-image-invert.oo-ui-icon-undo {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-ltr-invert.png);
-}
-.oo-ui-icon-window {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/window.png);
-}
-.oo-ui-image-invert .oo-ui-icon-window,
-.oo-ui-image-invert.oo-ui-icon-window {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/window-invert.png);
-}
-.oo-ui-indicator-alert {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/alert.png);
-}
-.oo-ui-image-invert .oo-ui-indicator-alert,
-.oo-ui-image-invert.oo-ui-indicator-alert {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/alert-invert.png);
-}
-.oo-ui-indicator-up {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-up.png);
-}
-.oo-ui-image-invert .oo-ui-indicator-up,
-.oo-ui-image-invert.oo-ui-indicator-up {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-up-invert.png);
-}
-.oo-ui-indicator-down {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-down.png);
-}
-.oo-ui-image-invert .oo-ui-indicator-down,
-.oo-ui-image-invert.oo-ui-indicator-down {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-down-invert.png);
-}
-.oo-ui-indicator-next {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-rtl.png);
-}
-.oo-ui-image-invert .oo-ui-indicator-next,
-.oo-ui-image-invert.oo-ui-indicator-next {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-rtl-invert.png);
-}
-.oo-ui-indicator-previous {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-ltr.png);
-}
-.oo-ui-image-invert .oo-ui-indicator-previous,
-.oo-ui-image-invert.oo-ui-indicator-previous {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-ltr-invert.png);
-}
-.oo-ui-indicator-required {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/required.png);
-}
-.oo-ui-image-invert .oo-ui-indicator-required,
-.oo-ui-image-invert.oo-ui-indicator-required {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/required-invert.png);
-}
-.oo-ui-texture-pending {
-  background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
-}
-.oo-ui-texture-transparency {
-  background-image: /* @embed */ url(themes/mediawiki/images/textures/transparency.png);
-}
-.oo-ui-image-invert .oo-ui-texture-transparency,
-.oo-ui-image-invert.oo-ui-texture-transparency {
-  background-image: /* @embed */ url(themes/mediawiki/images/textures/transparency-invert.png);
-}
index 266d714..a12d226 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (d74a46ca6a)
+ * OOjs UI v0.1.0-pre (40de4dabe6)
  * 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-10-15T00:40:28Z
+ * Date: 2014-10-22T23:42:26Z
  */
 /* @noflip */
 .oo-ui-rtl {
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
        outline: none;
 }
+.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
        line-height: 2.2em;
 }
        z-index: 4;
 }
 .oo-ui-popupTool .oo-ui-popupWidget {
+       /* @noflip */
        margin-left: 1.25em;
        font-size: 0.8em;
 }
 .oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
        color: #000000;
 }
+.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       color: #888888;
+}
 .oo-ui-barToolGroup > .oo-ui-iconElement-icon,
 .oo-ui-barToolGroup > .oo-ui-labelElement-label {
        display: none;
        vertical-align: middle;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       display: inline-block;
+       display: inline-table;
        vertical-align: middle;
+       width: 100%;
+       margin-right: -2.5em;
 }
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
-       display: none;
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text,
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       display: table-cell;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-title-text {
+       width: 100%;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel {
+       text-align: right;
+       padding-right: 2.5em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title .oo-ui-tool-accel:not(:empty) {
+       padding-left: 3em;
 }
 .oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
        min-width: 3.5em;
 .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
        background-color: #ffffff;
 }
+.oo-ui-progressBarWidget {
+       width: 20em;
+       border: solid 1px #cccccc;
+       border-radius: 0.1em;
+}
+.oo-ui-progressBarWidget-bar {
+       height: 1em;
+       border-right: solid 1px #cccccc;
+       background: #0274ff;
+       -webkit-transition: width 200ms;
+          -moz-transition: width 200ms;
+           -ms-transition: width 200ms;
+            -o-transition: width 200ms;
+               transition: width 200ms;
+}
+.oo-ui-progressBarWidget.oo-ui-widget-disabled {
+       opacity: 0.2;
+}
 .oo-ui-actionWidget.oo-ui-pendingElement-pending {
        background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
 }
 .oo-ui-popupWidget {
        position: absolute;
+       /* @noflip */
+       left: 0;
 }
 .oo-ui-popupWidget-popup {
        position: relative;
        display: block;
        position: absolute;
        top: 0;
+       /* @noflip */
+       left: 0;
        background-repeat: no-repeat;
 }
 .oo-ui-popupWidget-head {
        overflow-x: hidden;
        overflow-y: auto;
 }
+.oo-ui-searchWidget-query {
+       height: 2.4em;
+       top: 1px;
+}
+.oo-ui-searchWidget-query .oo-ui-textInputWidget input {
+       border-width: 1px 0;
+}
+.oo-ui-searchWidget-results {
+       top: 2.2em;
+       bottom: 0.2em;
+       line-height: 0;
+}
 .oo-ui-window {
        line-height: 1em;
 }
 .oo-ui-window-inner-overlay {
        position: absolute;
        top: 0;
+       /* @noflip */
        left: 0;
 }
 .oo-ui-window-isolated,
diff --git a/resources/lib/oojs-ui/oojs-ui-mediawiki.svg.rtl.css b/resources/lib/oojs-ui/oojs-ui-mediawiki.svg.rtl.css
deleted file mode 100644 (file)
index 17d89ec..0000000
+++ /dev/null
@@ -1,1997 +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-09-24T23:21:42Z
- */
-/* @noflip */
-.oo-ui-rtl {
-  direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
-  direction: ltr;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-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-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-  cursor: default;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
-  display: inline-block;
-  position: relative;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-  display: inline-block;
-  vertical-align: top;
-  text-align: center;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button {
-  font-weight: bold;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: 0;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  margin-left: -0.75em;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  width: 2.2em;
-  height: 2.2em;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  opacity: 0.2;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #ddd;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  margin-right: 0.25em;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #757575;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #444444;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-  color: #598ad1;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #777777;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-buttonElement-active > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #015ccc;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-  color: #00c697;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #777777;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #008c6d;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
-  color: #e81915;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #777777;
-}
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
-.oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  color: #a7170f;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-  margin: 0.1em 0;
-  padding: 0.3em 1.2em;
-  border-radius: 0.3em;
-  -webkit-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-  -moz-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-  -ms-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-  -o-transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-  transition: background 0.1s ease-in-out, color 0.1s ease-in-out, box-shadow 0.1s ease-in-out;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  line-height: 2.2em;
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: -0.5em;
-  margin-left: -0.5em;
-}
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: -0.5em;
-  margin-left: 0.3em;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-  color: #ddd;
-  background: #fff;
-  border: solid 1px #cdcdcd;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
-  color: #757575;
-  background-color: #fff;
-  border: solid 1px #cdcdcd;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus {
-  box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
-  border-color: #aaa;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  background-color: #d0d0d0;
-  border-color: #d0d0d0;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button {
-  text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
-  color: #fff;
-  background-color: #0274ff;
-  border-color: #0274ff;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus {
-  box-shadow: inset 0 -0.2em 0 0 #015ccc, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-  border-bottom-color: #015ccc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  background-color: #015ccc;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
-  text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
-  color: #fff;
-  background-color: #00af89;
-  border-color: #00af89;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
-  box-shadow: inset 0 -0.2em 0 0 #008c6d, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-  border-bottom-color: #008c6d;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  background-color: #008c6d;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
-  text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
-  color: #fff;
-  background-color: #d11d13;
-  border-color: #d11d13;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:hover,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
-  box-shadow: inset 0 -0.2em 0 0 #a7170f, 0 0.1em 0 0 rgba(0, 0, 0, 0.1);
-  border-bottom-color: #a7170f;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  background-color: #a7170f;
-}
-.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;
-  right: 0;
-  left: 0;
-  bottom: 3em;
-  overflow-y: auto;
-}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  left: 0;
-}
-.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 {
-  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-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  display: block;
-  float: right;
-}
-.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;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  text-align: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-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-labelElement-label {
-  display: inline-block;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
-  z-index: 1;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help {
-  float: left;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help-content {
-  padding: 0.5em 0.75em;
-}
-.oo-ui-fieldLayout:last-child {
-  margin-bottom: 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  padding-top: 0.5em;
-  margin-left: 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-labelElement-label {
-  padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-top: 0.25em;
-}
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
-  color: #ccc;
-}
-.oo-ui-fieldsetLayout {
-  position: relative;
-  margin: 0;
-  padding: 0;
-  border: none;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-  display: block;
-  position: absolute;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
-  display: inline-block;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
-  margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
-  font-size: 1.5em;
-  margin-bottom: 0.5em;
-  padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
-  padding-right: 1.75em;
-  line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-  right: 0;
-  top: 0.25em;
-  width: 2em;
-  height: 2em;
-}
-.oo-ui-gridLayout {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-  bottom: 0;
-}
-.oo-ui-panelLayout {
-  position: relative;
-}
-.oo-ui-panelLayout-scrollable {
-  overflow-y: auto;
-}
-.oo-ui-panelLayout-expanded {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 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-right: 1.25em;
-  font-size: 0.8em;
-}
-.oo-ui-toolGroup {
-  display: inline-block;
-  vertical-align: middle;
-  margin: 0.3em;
-}
-.oo-ui-toolGroup-empty {
-  display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
-  color: #000;
-}
-.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-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-iconElement-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: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  height: 1.5em;
-  width: 1.5em;
-  opacity: 0.8;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
-  background-color: #eee;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-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-iconElement-icon {
-  opacity: 1;
-}
-.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
-  opacity: 0.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-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-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-iconElement-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-left > .oo-ui-toolGroup-tools {
-  right: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
-  left: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-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-indicatorElement.oo-ui-iconElement {
-  min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  top: 0;
-  width: 2em;
-  height: 2em;
-  opacity: 0.8;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  right: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labelElement-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-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-  margin-right: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-  margin-left: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-  top: 2em;
-  background-color: white;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  height: 2em;
-  width: 2em;
-  margin-left: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-  line-height: 2em;
-  font-size: 0.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-tool {
-  padding: 0 0.25em;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
-  padding-left: 0.5em;
-}
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
-  background-color: #eee;
-}
-.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-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled {
-  color: #ccc;
-}
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
-  padding: 0.25em 0 0.25em 0;
-  border: 1px solid #aaa;
-  box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-menuToolGroup {
-  border: solid 1px #ccc;
-  border-radius: 0.1em;
-}
-.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.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 {
-  margin-right: -1px;
-  padding: 0.25em 0 0.25em 0;
-  border: 1px solid #aaa;
-  box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
-  border-color: #aaa;
-}
-.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
-  border-color: #aaa;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
-  padding: 0 0.25em 0 1em;
-  display: block;
-  cursor: pointer;
-  white-space: nowrap;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  background-image: none;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/check.svg);
-}
-.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-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled {
-  color: #ccc;
-  border-color: #ccc;
-}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
-  opacity: 0.2;
-}
-.oo-ui-toolbar {
-  clear: both;
-}
-.oo-ui-toolbar-bar {
-  line-height: 1em;
-}
-.oo-ui-toolbar-actions {
-  float: left;
-}
-.oo-ui-toolbar-tools {
-  display: inline;
-}
-.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: right top;
-  background-repeat: repeat-x;
-  position: absolute;
-  width: 100%;
-  pointer-events: none;
-}
-.oo-ui-toolbar-bar {
-  border-bottom: solid 1px #ccc;
-}
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
-  border: none;
-  background: none;
-}
-.oo-ui-toolbar-shadow {
-  display: none;
-}
-.oo-ui-selectWidget {
-  border-radius: 0.3em;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  border-radius: 0;
-  margin-right: -1px;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-  margin-right: 0;
-}
-.oo-ui-selectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.3em;
-}
-.oo-ui-optionWidget {
-  position: relative;
-  display: block;
-  cursor: pointer;
-  padding: 0.5em 3em 0.5em 2em;
-  border: none;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-  display: block;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-  overflow: hidden;
-}
-.oo-ui-optionWidget-highlighted {
-  background-color: #eee;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-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-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  position: absolute;
-  background-repeat: no-repeat;
-  background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  top: 50%;
-  width: 2em;
-  height: 2em;
-  margin-top: -1em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
-  right: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  left: 0.5em;
-}
-.oo-ui-buttonSelectWidget {
-  display: inline-block;
-  white-space: nowrap;
-  border-radius: 0.3em;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  border-radius: 0;
-  margin-right: -1px;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-  margin-right: 0;
-}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.3em;
-}
-.oo-ui-buttonOptionWidget {
-  display: inline-block;
-  padding: 0;
-  background-color: transparent;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  position: static;
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  height: 2.2em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  height: 2.2em;
-  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;
-}
-.oo-ui-iconWidget {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-  line-height: 2.5em;
-  height: 2.2em;
-  width: 2.2em;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-.oo-ui-indicatorWidget {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-  line-height: 2.5em;
-  height: 2.2em;
-  width: 2.2em;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-.oo-ui-buttonWidget {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonGroupWidget {
-  display: inline-block;
-  white-space: nowrap;
-  border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-  border-radius: 0;
-  margin-bottom: -1px;
-  margin-right: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-  margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.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;
-  border: 1px #ddd solid;
-}
-.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;
-  left: 0;
-  right: 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: 0.25em;
-  right: 0.25em;
-  width: 1.5em;
-  height: 1.5em;
-  margin-top: -1px;
-  border-radius: 1em;
-  border: 1px #ddd solid;
-  background-color: #f7f7f7;
-  -webkit-transition: right 0.1s ease-in-out, margin-right 0.1s ease-in-out;
-  -moz-transition: right 0.1s ease-in-out, margin-right 0.1s ease-in-out;
-  -ms-transition: right 0.1s ease-in-out, margin-right 0.1s ease-in-out;
-  -o-transition: right 0.1s ease-in-out, margin-right 0.1s ease-in-out;
-  transition: right 0.1s ease-in-out, margin-right 0.1s ease-in-out;
-}
-.oo-ui-toggleSwitchWidget-glow {
-  border-radius: 1em;
-  background-color: #f7f7f7;
-  -webkit-transition: background-color 0.1s ease-in-out;
-  -moz-transition: background-color 0.1s ease-in-out;
-  -ms-transition: background-color 0.1s ease-in-out;
-  -o-transition: background-color 0.1s ease-in-out;
-  transition: background-color 0.1s ease-in-out;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
-  right: 2.25em;
-  margin-right: -2px;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-  display: block;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
-  right: 0.25em;
-  margin-right: 0;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled {
-  border: 1px #ccc solid;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover {
-  border-color: #aaa;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled .oo-ui-toggleSwitchWidget-grip {
-  background-color: #fff;
-  border-color: #aaa;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
-  background-color: #d0d0d0;
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
-  background-color: #fff;
-}
-.oo-ui-actionWidget.oo-ui-pendingElement-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.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: left;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-  float: right;
-  cursor: default;
-}
-.oo-ui-popupWidget-body {
-  clear: both;
-  overflow: hidden;
-}
-.oo-ui-popupWidget-popup {
-  border: solid 1px #aaa;
-  border-radius: 0.2em;
-  background-color: #fff;
-  box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
-  margin-top: 7px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before,
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
-  content: "";
-  position: absolute;
-  width: 0;
-  height: 0;
-  border-style: solid;
-  border-color: transparent;
-  border-top: 0;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:before {
-  bottom: -8px;
-  right: 11px;
-  border-bottom-color: #888;
-  border-width: 13px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor:after {
-  bottom: -8px;
-  right: 12px;
-  border-bottom-color: #fff;
-  border-width: 12px;
-}
-.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-head {
-  height: 2.5em;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
-  margin: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-  margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body {
-  box-shadow: 0 0 0.66em rgba(0, 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;
-  right: 1em;
-  cursor: auto;
-}
-.oo-ui-popupButtonWidget > .oo-ui-popupWidget {
-  margin-right: -1em;
-}
-.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-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-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-iconElement-icon {
-  right: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-  padding: 0.5em 0.9em 0.5em 0.5em;
-  margin: 0;
-  font-size: 1em;
-  font-family: sans-serif;
-  background-color: #fff;
-  border: solid 1px #ccc;
-  box-shadow: inset 0 0 0 0 #0274FF;
-  border-radius: 0.1em;
-  -webkit-transition: box-shadow 0.1s;
-  -moz-transition: box-shadow 0.1s;
-  -ms-transition: box-shadow 0.1s;
-  -o-transition: box-shadow 0.1s;
-  transition: box-shadow 0.1s;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.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 {
-  outline: none;
-  border-color: #aaa;
-  box-shadow: inset 0.4em 0 0 0 #0274ff;
-}
-.oo-ui-textInputWidget input[readonly],
-.oo-ui-textInputWidget textarea[readonly] {
-  color: #777;
-  text-shadow: 0 1px 1px #fff;
-}
-.oo-ui-textInputWidget input[readonly]:focus,
-.oo-ui-textInputWidget textarea[readonly]:focus {
-  box-shadow: inset 0.4em 0 0 0 #ccc;
-}
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-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-iconElement input,
-.oo-ui-textInputWidget.oo-ui-iconElement textarea {
-  padding-right: 2.4em;
-}
-.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  right: 0.4em;
-  width: 2em;
-  height: 100%;
-  background-position: left center;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement input,
-.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
-  padding-left: 2.2em;
-}
-.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  width: 1.6em;
-  height: 100%;
-  background-position: right center;
-}
-.oo-ui-menuWidget {
-  position: absolute;
-  background: #fff;
-  margin-top: -1px;
-  border: solid 1px #aaa;
-  border-radius: 0 0 0.1em 0.1em;
-  padding-bottom: 0.25em;
-  box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2), 0 0.1em 0 0 rgba(0, 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-iconElement-icon {
-  display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-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: #eee;
-}
-.oo-ui-menuSectionItemWidget {
-  cursor: default;
-  padding: 0.33em 0.75em;
-  color: #888;
-}
-.oo-ui-inlineMenuWidget {
-  position: relative;
-  display: inline-block;
-  margin: 0.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-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-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 #ccc;
-  border-radius: 0.1em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-  right: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  line-height: 2.5em;
-  margin: 0 1em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-  top: 0;
-  width: 2.5em;
-  height: 2.5em;
-}
-.oo-ui-inlineMenuWidget:hover .oo-ui-inlineMenuWidget-handle {
-  border-color: #aaa;
-}
-.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-indicatorElement-indicator {
-  opacity: 0.2;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  margin-right: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  margin-left: 2em;
-}
-.oo-ui-inlineMenuWidget .oo-ui-selectWidget {
-  border-top-color: #fff;
-}
-.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;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-  float: right;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-  float: right;
-  background-position: left center;
-  background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
-  float: right;
-}
-.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-comboBoxWidget {
-  display: inline-block;
-  position: relative;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
-  width: 100%;
-  z-index: 1;
-}
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget input,
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget textarea {
-  height: 2.35em;
-}
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget.oo-ui-indicatorElement {
-  padding-left: 2.2em;
-}
-.oo-ui-comboBoxWidget .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  width: 2.2em;
-  background-position: center center;
-  border: solid 1px #ccc;
-  border-right: none;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.oo-ui-searchWidget-query {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  width: 100%;
-}
-.oo-ui-searchWidget-results {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  left: 0;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-.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: 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;
-  right: 0;
-}
-.oo-ui-window-isolated {
-  background: transparent;
-  font-family: sans-serif;
-  font-size: 0.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;
-  right: 0;
-  left: 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-head.oo-ui-pendingElement-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.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 1px 0 #aaa;
-}
-.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-buttonElement-button {
-  display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-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: 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: 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-labelElement-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-flaggedElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-  font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.oo-ui-processDialog-title {
-  display: inline;
-  padding: 0;
-}
-.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 {
-  display: none;
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 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 0 1px rgba(0, 0, 0, 0.2);
-}
-.oo-ui-processDialog-navigation {
-  position: relative;
-  height: 3.4em;
-  padding: 0 1em;
-}
-.oo-ui-processDialog-location {
-  padding: 0.75em 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-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-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-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
-  line-height: 1.9em;
-  padding: 0 1em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
-  position: absolute;
-  margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-  margin: 0.75em 0.75em 0.75em 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-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-buttonElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed {
-  margin: 0.75em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-  /* Adjust for border so text aligns with title */
-  margin: -1px;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-  font-weight: bold;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  right: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-  padding-right: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  left: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-  padding-left: 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: right;
-  margin: 1em;
-  padding: 1em;
-  border: solid 1px #ff9e9e;
-  background-color: #fff7f7;
-  border-radius: 0.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;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  padding: 1em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
-  position: absolute;
-  left: 0;
-  right: 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, 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 #aaa;
-  border-radius: 0.2em;
-  box-shadow: inset 0 -0.2em 0 0 rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-icon-add {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/add.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-add,
-.oo-ui-image-invert.oo-ui-icon-add {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/add-invert.svg);
-}
-.oo-ui-icon-advanced {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/advanced.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-advanced,
-.oo-ui-image-invert.oo-ui-icon-advanced {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/advanced-invert.svg);
-}
-.oo-ui-icon-alert {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/alert.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-alert,
-.oo-ui-image-invert.oo-ui-icon-alert {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/alert-invert.svg);
-}
-.oo-ui-icon-check {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/check.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-check,
-.oo-ui-image-invert.oo-ui-icon-check {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/check-invert.svg);
-}
-.oo-ui-icon-clear {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/clear.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-clear,
-.oo-ui-image-invert.oo-ui-icon-clear {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/clear-invert.svg);
-}
-.oo-ui-icon-close {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/close.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-close,
-.oo-ui-image-invert.oo-ui-icon-close {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/close-invert.svg);
-}
-.oo-ui-icon-code {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/code.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-code,
-.oo-ui-image-invert.oo-ui-icon-code {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/code-invert.svg);
-}
-.oo-ui-icon-collapse {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/collapse.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-collapse,
-.oo-ui-image-invert.oo-ui-icon-collapse {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/collapse-invert.svg);
-}
-.oo-ui-icon-comment {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/comment.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-comment,
-.oo-ui-image-invert.oo-ui-icon-comment {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/comment-invert.svg);
-}
-.oo-ui-icon-expand {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/expand.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-expand,
-.oo-ui-image-invert.oo-ui-icon-expand {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/expand-invert.svg);
-}
-.oo-ui-icon-help {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/help.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-help,
-.oo-ui-image-invert.oo-ui-icon-help {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/help-invert.svg);
-}
-.oo-ui-icon-info {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/info.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-info,
-.oo-ui-image-invert.oo-ui-icon-info {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/info-invert.svg);
-}
-.oo-ui-icon-link {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/link.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-link,
-.oo-ui-image-invert.oo-ui-icon-link {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/link-invert.svg);
-}
-.oo-ui-icon-menu {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/menu.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-menu,
-.oo-ui-image-invert.oo-ui-icon-menu {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/menu-invert.svg);
-}
-.oo-ui-icon-next {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/move-rtl.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-next,
-.oo-ui-image-invert.oo-ui-icon-next {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/move-rtl-invert.svg);
-}
-.oo-ui-icon-picture {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/picture.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-picture,
-.oo-ui-image-invert.oo-ui-icon-picture {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/picture-invert.svg);
-}
-.oo-ui-icon-previous {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/move-ltr.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-previous,
-.oo-ui-image-invert.oo-ui-icon-previous {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/move-ltr-invert.svg);
-}
-.oo-ui-icon-redo {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-rtl.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-redo,
-.oo-ui-image-invert.oo-ui-icon-redo {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-rtl-invert.svg);
-}
-.oo-ui-icon-remove {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/remove.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-remove,
-.oo-ui-image-invert.oo-ui-icon-remove {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/remove-invert.svg);
-}
-.oo-ui-icon-search {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/search.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-search,
-.oo-ui-image-invert.oo-ui-icon-search {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/search-invert.svg);
-}
-.oo-ui-icon-settings {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/settings.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-settings,
-.oo-ui-image-invert.oo-ui-icon-settings {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/settings-invert.svg);
-}
-.oo-ui-icon-tag {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/tag.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-tag,
-.oo-ui-image-invert.oo-ui-icon-tag {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/tag-invert.svg);
-}
-.oo-ui-icon-undo {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-ltr.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-undo,
-.oo-ui-image-invert.oo-ui-icon-undo {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/arched-arrow-ltr-invert.svg);
-}
-.oo-ui-icon-window {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/window.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-window,
-.oo-ui-image-invert.oo-ui-icon-window {
-  background-image: /* @embed */ url(themes/mediawiki/images/icons/window-invert.svg);
-}
-.oo-ui-indicator-alert {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/alert.svg);
-}
-.oo-ui-image-invert .oo-ui-indicator-alert,
-.oo-ui-image-invert.oo-ui-indicator-alert {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/alert-invert.svg);
-}
-.oo-ui-indicator-up {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-up.svg);
-}
-.oo-ui-image-invert .oo-ui-indicator-up,
-.oo-ui-image-invert.oo-ui-indicator-up {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-up-invert.svg);
-}
-.oo-ui-indicator-down {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-down.svg);
-}
-.oo-ui-image-invert .oo-ui-indicator-down,
-.oo-ui-image-invert.oo-ui-indicator-down {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-down-invert.svg);
-}
-.oo-ui-indicator-next {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-rtl.svg);
-}
-.oo-ui-image-invert .oo-ui-indicator-next,
-.oo-ui-image-invert.oo-ui-indicator-next {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-rtl-invert.svg);
-}
-.oo-ui-indicator-previous {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-ltr.svg);
-}
-.oo-ui-image-invert .oo-ui-indicator-previous,
-.oo-ui-image-invert.oo-ui-indicator-previous {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/arrow-ltr-invert.svg);
-}
-.oo-ui-indicator-required {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/required.svg);
-}
-.oo-ui-image-invert .oo-ui-indicator-required,
-.oo-ui-image-invert.oo-ui-indicator-required {
-  background-image: /* @embed */ url(themes/mediawiki/images/indicators/required-invert.svg);
-}
-.oo-ui-texture-pending {
-  background-image: /* @embed */ url(themes/mediawiki/images/textures/pending.gif);
-}
-.oo-ui-texture-transparency {
-  background-image: /* @embed */ url(themes/mediawiki/images/textures/transparency.svg);
-}
-.oo-ui-image-invert .oo-ui-texture-transparency,
-.oo-ui-image-invert.oo-ui-texture-transparency {
-  background-image: /* @embed */ url(themes/mediawiki/images/textures/transparency-invert.svg);
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-minerva.css b/resources/lib/oojs-ui/oojs-ui-minerva.css
deleted file mode 100644 (file)
index 8feccb9..0000000
+++ /dev/null
@@ -1,1375 +0,0 @@
-/*!
- * OOjs UI v0.1.0-pre (d74a46ca6a)
- * 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-10-15T00:40:28Z
- */
-/* @noflip */
-.oo-ui-rtl {
-       direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
-       direction: ltr;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-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-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       display: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-       cursor: default;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       display: inline-block;
-       vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
-       display: inline-block;
-       position: relative;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-       display: inline-block;
-       vertical-align: top;
-       text-align: center;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       margin-left: 0;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       margin-right: -0.75em;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       width: 3.35em;
-       height: 3.35em;
-       background-size: 2em auto;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       margin-left: 0.25em;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-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-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-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-labelElement-label {
-       text-align: right;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-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-labelElement-label {
-       display: inline-block;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
-       z-index: 1;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help {
-       float: right;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help-content {
-       padding: 0.5em 0.75em;
-}
-.oo-ui-fieldLayout:last-child {
-       margin-bottom: 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-       padding-top: 0.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-labelElement-label {
-       padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
-       padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
-       padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       margin-top: 0.25em;
-}
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
-       color: #cccccc;
-}
-.oo-ui-fieldsetLayout {
-       position: relative;
-       margin: 0;
-       padding: 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-       display: block;
-       position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
-       display: inline-block;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
-       margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
-       margin-bottom: 0.5em;
-       padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
-       padding-left: 1.75em;
-       line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-       left: 0;
-       top: 0.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: 0.8em;
-}
-.oo-ui-toolGroup {
-       display: inline-block;
-       vertical-align: middle;
-       margin: 0.3em;
-}
-.oo-ui-toolGroup-empty {
-       display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-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-iconElement-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: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-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-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-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-iconElement-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-left > .oo-ui-toolGroup-tools {
-       left: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
-       right: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-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-indicatorElement.oo-ui-iconElement {
-       min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       top: 0;
-       width: 2em;
-       height: 2em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-       right: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       left: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labelElement-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-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       margin-left: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       margin-right: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-       top: 2.3em;
-       margin: 0 -1px;
-       border: solid 1px #dddddd;
-       background-color: white;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       height: 2em;
-       width: 2em;
-       margin-right: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       line-height: 2em;
-       font-size: 0.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: 0.25em;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
-       padding-right: 0.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.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-link {
-       padding: 0 1em 0 0.25em;
-}
-.oo-ui-toolbar {
-       clear: both;
-}
-.oo-ui-toolbar-bar {
-       line-height: 1em;
-}
-.oo-ui-toolbar-actions {
-       float: right;
-}
-.oo-ui-toolbar-tools {
-       display: inline;
-}
-.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 #dddddd;
-       background: white;
-}
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
-       border: none;
-       background: none;
-}
-.oo-ui-selectWidget {
-       margin: 0;
-       padding: 0;
-}
-.oo-ui-optionWidget {
-       position: relative;
-       display: block;
-       cursor: pointer;
-       padding: 0.8em 1em 0.8em 3.35em;
-       border: none;
-       font-weight: bold;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-       cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-       display: block;
-       white-space: nowrap;
-       text-overflow: ellipsis;
-       overflow: hidden;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-       line-height: 1.5em;
-}
-.oo-ui-optionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
-       padding-right: 1.5em;
-}
-.oo-ui-optionWidget-level-0 {
-       padding-left: 3.5em;
-}
-.oo-ui-optionWidget-level-0 .oo-ui-iconElement-icon {
-       left: 1em;
-}
-.oo-ui-optionWidget-level-1 {
-       padding-left: 5em;
-}
-.oo-ui-optionWidget-level-1 .oo-ui-iconElement-icon {
-       left: 2.5em;
-}
-.oo-ui-optionWidget-level-2 {
-       padding-left: 6.5em;
-}
-.oo-ui-optionWidget-level-2 .oo-ui-iconElement-icon {
-       left: 4em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-       position: absolute;
-       background-repeat: no-repeat;
-       background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-       top: 50%;
-       width: 2em;
-       height: 2em;
-       margin-top: -1em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
-       left: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-       right: 0.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-buttonElement-button {
-       position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       position: static;
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-       height: 1.9em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       height: 1.9em;
-       margin-top: 0;
-}
-.oo-ui-labelWidget {
-       display: inline-block;
-       padding: 0.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: 0.8;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-       opacity: 0.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: 0.8;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-       opacity: 0.2;
-}
-.oo-ui-buttonWidget {
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-buttonGroupWidget {
-       border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-       border-radius: 0;
-       margin-bottom: -1px;
-       margin-left: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
-       border-bottom-left-radius: 0.3em;
-       border-top-left-radius: 0.3em;
-       margin-left: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
-       border-bottom-right-radius: 0.3em;
-       border-top-right-radius: 0.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: 0.25em;
-       left: 0.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: 0.25em;
-       margin-left: 0;
-}
-.oo-ui-popupWidget {
-       position: absolute;
-}
-.oo-ui-popupWidget-popup {
-       position: relative;
-       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;
-       top: 0;
-       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-labelElement-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: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-       margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body-padded {
-       padding: 0 1em;
-}
-.oo-ui-popupButtonWidget {
-       position: relative;
-}
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
-       position: absolute;
-       cursor: auto;
-}
-.oo-ui-lookupInputWidget-menu {
-       background-color: #ffffff;
-}
-.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-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-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-iconElement-icon {
-       left: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
-       right: 0;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-       padding: 0.8em 1em;
-}
-.oo-ui-menuWidget {
-       position: absolute;
-       background: white;
-       border: solid 1px #dddddd;
-}
-.oo-ui-menuWidget input {
-       position: absolute;
-       width: 0;
-       height: 0;
-       overflow: hidden;
-       opacity: 0;
-}
-.oo-ui-menuItemWidget {
-       position: relative;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
-       display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-       background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
-       display: block;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-       background: #347bff;
-       color: #ffffff;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
-       background-size: 24px auto;
-}
-.oo-ui-menuSectionItemWidget {
-       cursor: default;
-       font-weight: normal;
-       color: #777777;
-       border: none;
-}
-.oo-ui-inlineMenuWidget {
-       position: relative;
-       display: inline-block;
-       margin: 0.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-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-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-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-       top: 0;
-       width: 2.5em;
-       height: 2.5em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
-       right: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-       left: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-       line-height: 2.5em;
-       margin: 0 0.5em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-       margin-left: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-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: 0.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-iconElement-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: 0.5em;
-       padding: 0;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-       width: 1.5em;
-       height: 2em;
-       margin: 0.5em 0 0.5em 0.5em;
-}
-.oo-ui-outlineControlsWidget-items {
-       margin-left: 0;
-}
-.oo-ui-comboBoxWidget {
-       display: inline-block;
-       position: relative;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
-       width: 100%;
-       z-index: 1;
-}
-.oo-ui-comboBoxWidget > .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: 0.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: 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,
-.oo-ui-window-inner-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-inner-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-buttonElement-button {
-       display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-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: 0.5em;
-}
-.oo-ui-messageDialog-title {
-       font-size: 1.5em;
-       line-height: 1em;
-       color: #000000;
-}
-.oo-ui-messageDialog-message {
-       font-size: 0.9em;
-       line-height: 1.25em;
-       color: #666666;
-}
-.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-labelElement-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-flaggedElement-primary:hover {
-       background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
-       background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-       font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-       background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-       background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-       background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-       background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
-       overflow: hidden;
-       text-overflow: ellipsis;
-       white-space: nowrap;
-}
-.oo-ui-processDialog-title {
-       display: inline;
-       padding: 0;
-}
-.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 #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.75em 0;
-       height: 1.85em;
-       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-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-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-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
-       line-height: 1.85em;
-       padding: 0 1em;
-       font-weight: bold;
-       color: #777777;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
-       position: absolute;
-       margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-       vertical-align: middle;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
-       border: 1px solid transparent;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label {
-       color: #d11d13;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button {
-       padding: 0.75em 0.35em;
-       border: none;
-       border-radius: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
-       background-color: #347bff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-       color: #ffffff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-       left: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-       padding-left: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-       right: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-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: #000000;
-       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-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: absolute;
-       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, 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: #ffffff;
-       -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 #cccccc;
-       border-radius: 0.5em;
-       box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-}
-
-.oo-ui-icon-check {
-       background-image: /* @embed */ url(themes/minerva/images/icons/check.png);
-}
-.oo-ui-image-invert .oo-ui-icon-check,
-.oo-ui-image-invert.oo-ui-icon-check {
-       background-image: /* @embed */ url(themes/minerva/images/icons/check-invert.png);
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-minerva.js b/resources/lib/oojs-ui/oojs-ui-minerva.js
deleted file mode 100644 (file)
index ba1ef86..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/*!
- * OOjs UI v0.1.0-pre (d74a46ca6a)
- * 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-10-15T00:40:17Z
- */
-/* Instantiation */
-
-OO.ui.theme = new OO.ui.Theme();
diff --git a/resources/lib/oojs-ui/oojs-ui-minerva.rtl.css b/resources/lib/oojs-ui/oojs-ui-minerva.rtl.css
deleted file mode 100644 (file)
index e452952..0000000
+++ /dev/null
@@ -1,1381 +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-09-11T19:39:50Z
- */
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-/*
- * Base styles.
- *
- * Themes should include this file after defining their variables and mixins.
- */
-/* @noflip */
-.oo-ui-rtl {
-  direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
-  direction: ltr;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-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-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-  cursor: default;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
-  display: inline-block;
-  position: relative;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-  display: inline-block;
-  vertical-align: top;
-  text-align: center;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: 0;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  margin-left: -0.75em;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  width: 3.35em;
-  height: 3.35em;
-  background-size: 2em auto;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  margin-right: 0.25em;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-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;
-  right: 0;
-  left: 0;
-  bottom: 3em;
-  overflow-y: auto;
-}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  left: 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-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  display: block;
-  float: right;
-}
-.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;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  text-align: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-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-labelElement-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-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  padding-top: 0.5em;
-  margin-left: 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-labelElement-label {
-  padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-top: 0.25em;
-}
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
-  color: #ccc;
-}
-.oo-ui-fieldsetLayout {
-  position: relative;
-  margin: 0;
-  padding: 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-  display: block;
-  position: absolute;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
-  display: inline-block;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
-  margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
-  margin-bottom: 0.5em;
-  padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
-  padding-right: 1.75em;
-  line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-  right: 0;
-  top: 0.25em;
-  width: 2em;
-  height: 2em;
-}
-.oo-ui-gridLayout {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 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;
-  right: 0;
-  left: 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-right: 1.25em;
-  font-size: 0.8em;
-}
-.oo-ui-toolGroup {
-  display: inline-block;
-  vertical-align: middle;
-  margin: 0.3em;
-}
-.oo-ui-toolGroup-empty {
-  display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-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-iconElement-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: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-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-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-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-iconElement-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-left > .oo-ui-toolGroup-tools {
-  right: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
-  left: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-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-indicatorElement.oo-ui-iconElement {
-  min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  top: 0;
-  width: 2em;
-  height: 2em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  right: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labelElement-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-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-  margin-right: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-  margin-left: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-  top: 2.3em;
-  margin: 0 -1px;
-  border: solid 1px #dddddd;
-  background-color: white;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  height: 2em;
-  width: 2em;
-  margin-left: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-  line-height: 2em;
-  font-size: 0.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: 0.25em;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
-  padding-left: 0.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-iconElement-icon {
-  background-image: none;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-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-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-link {
-  padding: 0 0.25em 0 1em;
-}
-.oo-ui-toolbar {
-  clear: both;
-}
-.oo-ui-toolbar-bar {
-  line-height: 1em;
-}
-.oo-ui-toolbar-actions {
-  float: left;
-}
-.oo-ui-toolbar-tools {
-  display: inline;
-}
-.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: right top;
-  background-repeat: repeat-x;
-  position: absolute;
-  width: 100%;
-  pointer-events: none;
-}
-.oo-ui-toolbar-bar {
-  border-bottom: solid 1px #dddddd;
-  background: white;
-}
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
-  border: none;
-  background: none;
-}
-.oo-ui-selectWidget {
-  margin: 0;
-  padding: 0;
-}
-.oo-ui-optionWidget {
-  position: relative;
-  display: block;
-  cursor: pointer;
-  padding: 0.8em 3.35em 0.8em 1em;
-  border: none;
-  font-weight: bold;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-  display: block;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-  overflow: hidden;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-  line-height: 1.5em;
-}
-.oo-ui-optionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
-  padding-left: 1.5em;
-}
-.oo-ui-optionWidget-level-0 {
-  padding-right: 3.5em;
-}
-.oo-ui-optionWidget-level-0 .oo-ui-iconElement-icon {
-  right: 1em;
-}
-.oo-ui-optionWidget-level-1 {
-  padding-right: 5em;
-}
-.oo-ui-optionWidget-level-1 .oo-ui-iconElement-icon {
-  right: 2.5em;
-}
-.oo-ui-optionWidget-level-2 {
-  padding-right: 6.5em;
-}
-.oo-ui-optionWidget-level-2 .oo-ui-iconElement-icon {
-  right: 4em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  position: absolute;
-  background-repeat: no-repeat;
-  background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  top: 50%;
-  width: 2em;
-  height: 2em;
-  margin-top: -1em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
-  right: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  left: 0.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-buttonElement-button {
-  position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  position: static;
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  height: 1.9em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  height: 1.9em;
-  margin-top: 0;
-}
-.oo-ui-labelWidget {
-  display: inline-block;
-  padding: 0.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: 0.8;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-  opacity: 0.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: 0.8;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-.oo-ui-buttonWidget {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonGroupWidget {
-  border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-  border-radius: 0;
-  margin-bottom: -1px;
-  margin-right: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-  margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.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;
-  left: 0;
-  right: 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: 0.25em;
-  right: 0.25em;
-  width: 1.5em;
-  height: 1.5em;
-  margin-top: -1px;
-  -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 {
-  -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 {
-  right: 2.25em;
-  margin-right: -2px;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
-  right: 0.25em;
-  margin-right: 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: left;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-  float: right;
-  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: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-  margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body-padded {
-  padding: 0 1em;
-}
-.oo-ui-popupButtonWidget {
-  position: relative;
-}
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
-  position: absolute;
-  right: 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-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-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-iconElement-icon {
-  right: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-  padding: .8em 1em;
-}
-.oo-ui-menuWidget {
-  position: absolute;
-  background: white;
-  border: solid 1px #dddddd;
-}
-.oo-ui-menuWidget input {
-  position: absolute;
-  width: 0;
-  height: 0;
-  overflow: hidden;
-  opacity: 0;
-}
-.oo-ui-menuItemWidget {
-  position: relative;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
-  display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
-  display: block;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background: #347bff;
-  color: #ffffff;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
-  background-size: 24px auto;
-}
-.oo-ui-menuSectionItemWidget {
-  cursor: default;
-  font-weight: normal;
-  color: #777777;
-  border: none;
-}
-.oo-ui-inlineMenuWidget {
-  position: relative;
-  display: inline-block;
-  margin: 0.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-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-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-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-  top: 0;
-  width: 2.5em;
-  height: 2.5em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-  right: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  line-height: 2.5em;
-  margin: 0 0.5em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  margin-right: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  margin-left: 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: 0.75em;
-}
-.oo-ui-outlineControlsWidget {
-  height: 3em;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-  float: right;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-  float: right;
-  background-position: left center;
-  background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
-  float: right;
-}
-.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-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-  height: 2em;
-  margin: 0.5em;
-  padding: 0;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-  width: 1.5em;
-  height: 2em;
-  margin: 0.5em 0.5em 0.5em 0;
-}
-.oo-ui-outlineControlsWidget-items {
-  margin-right: 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;
-  right: 0;
-  left: 0;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  width: 100%;
-}
-.oo-ui-searchWidget-results {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  left: 0;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-.oo-ui-searchWidget-query {
-  height: 4em;
-  padding: 0 1em;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  margin: 0.75em 0;
-}
-.oo-ui-searchWidget-results {
-  top: 4em;
-  padding: 1em;
-  line-height: 0;
-}
-.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;
-  right: 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;
-  right: 0;
-  left: 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-buttonElement-button {
-  display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-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: 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: 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-labelElement-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-flaggedElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-  font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.oo-ui-processDialog-title {
-  display: inline;
-  padding: 0;
-}
-.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 {
-  display: none;
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 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 #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.75em 0;
-  height: 1.85em;
-  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-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-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-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
-  line-height: 1.85em;
-  padding: 0 1em;
-  font-weight: bold;
-  color: #777777;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
-  position: absolute;
-  margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-  vertical-align: middle;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
-  border: 1px solid transparent;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label {
-  color: #d11d13;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button {
-  padding: 0.75em 0.35em;
-  border: none;
-  border-radius: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
-  background-color: #347bff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-  color: #ffffff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  right: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-  padding-right: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  left: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-  padding-left: 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: right;
-  margin: 1em;
-  padding: 1em;
-  border: solid 1px #ff9e9e;
-  background-color: #fff7f7;
-  border-radius: 0.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;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  padding: 1em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
-  position: fixed;
-  left: 0;
-  right: 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, 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);
-}
-
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-.oo-ui-icon-check {
-  background-image: /* @embed */ url(themes/minerva/images/icons/check.png);
-  background: #347bff;
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-minerva.svg.css b/resources/lib/oojs-ui/oojs-ui-minerva.svg.css
deleted file mode 100644 (file)
index ad1316c..0000000
+++ /dev/null
@@ -1,1375 +0,0 @@
-/*!
- * OOjs UI v0.1.0-pre (d74a46ca6a)
- * 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-10-15T00:40:28Z
- */
-/* @noflip */
-.oo-ui-rtl {
-       direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
-       direction: ltr;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-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-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       display: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-       cursor: default;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       display: inline-block;
-       vertical-align: middle;
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
-       display: inline-block;
-       position: relative;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-       display: inline-block;
-       vertical-align: top;
-       text-align: center;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-       cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       margin-left: 0;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-       margin-right: -0.75em;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       width: 3.35em;
-       height: 3.35em;
-       background-size: 2em auto;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-       margin-left: 0.25em;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-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-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-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-labelElement-label {
-       text-align: right;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-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-labelElement-label {
-       display: inline-block;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
-       z-index: 1;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help {
-       float: right;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help-content {
-       padding: 0.5em 0.75em;
-}
-.oo-ui-fieldLayout:last-child {
-       margin-bottom: 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-       padding-top: 0.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-labelElement-label {
-       padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
-       padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
-       padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-       margin-top: 0.25em;
-}
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
-       color: #cccccc;
-}
-.oo-ui-fieldsetLayout {
-       position: relative;
-       margin: 0;
-       padding: 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-       display: block;
-       position: absolute;
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
-       display: inline-block;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
-       margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
-       margin-bottom: 0.5em;
-       padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
-       padding-left: 1.75em;
-       line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-       left: 0;
-       top: 0.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: 0.8em;
-}
-.oo-ui-toolGroup {
-       display: inline-block;
-       vertical-align: middle;
-       margin: 0.3em;
-}
-.oo-ui-toolGroup-empty {
-       display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-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-iconElement-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: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-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-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-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-iconElement-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-left > .oo-ui-toolGroup-tools {
-       left: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
-       right: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-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-indicatorElement.oo-ui-iconElement {
-       min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       top: 0;
-       width: 2em;
-       height: 2em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-       right: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-       left: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labelElement-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-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       margin-left: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-       margin-right: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-       top: 2.3em;
-       margin: 0 -1px;
-       border: solid 1px #dddddd;
-       background-color: white;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-       height: 2em;
-       width: 2em;
-       margin-right: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-       line-height: 2em;
-       font-size: 0.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: 0.25em;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
-       padding-right: 0.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.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-link {
-       padding: 0 1em 0 0.25em;
-}
-.oo-ui-toolbar {
-       clear: both;
-}
-.oo-ui-toolbar-bar {
-       line-height: 1em;
-}
-.oo-ui-toolbar-actions {
-       float: right;
-}
-.oo-ui-toolbar-tools {
-       display: inline;
-}
-.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 #dddddd;
-       background: white;
-}
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
-       border: none;
-       background: none;
-}
-.oo-ui-selectWidget {
-       margin: 0;
-       padding: 0;
-}
-.oo-ui-optionWidget {
-       position: relative;
-       display: block;
-       cursor: pointer;
-       padding: 0.8em 1em 0.8em 3.35em;
-       border: none;
-       font-weight: bold;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-       cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-       display: block;
-       white-space: nowrap;
-       text-overflow: ellipsis;
-       overflow: hidden;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-       line-height: 1.5em;
-}
-.oo-ui-optionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
-       padding-right: 1.5em;
-}
-.oo-ui-optionWidget-level-0 {
-       padding-left: 3.5em;
-}
-.oo-ui-optionWidget-level-0 .oo-ui-iconElement-icon {
-       left: 1em;
-}
-.oo-ui-optionWidget-level-1 {
-       padding-left: 5em;
-}
-.oo-ui-optionWidget-level-1 .oo-ui-iconElement-icon {
-       left: 2.5em;
-}
-.oo-ui-optionWidget-level-2 {
-       padding-left: 6.5em;
-}
-.oo-ui-optionWidget-level-2 .oo-ui-iconElement-icon {
-       left: 4em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-       position: absolute;
-       background-repeat: no-repeat;
-       background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-       top: 50%;
-       width: 2em;
-       height: 2em;
-       margin-top: -1em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
-       left: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-       right: 0.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-buttonElement-button {
-       position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       position: static;
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-       height: 1.9em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-       height: 1.9em;
-       margin-top: 0;
-}
-.oo-ui-labelWidget {
-       display: inline-block;
-       padding: 0.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: 0.8;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-       opacity: 0.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: 0.8;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-       opacity: 0.2;
-}
-.oo-ui-buttonWidget {
-       display: inline-block;
-       vertical-align: middle;
-}
-.oo-ui-buttonGroupWidget {
-       border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-       border-radius: 0;
-       margin-bottom: -1px;
-       margin-left: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
-       border-bottom-left-radius: 0.3em;
-       border-top-left-radius: 0.3em;
-       margin-left: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
-       border-bottom-right-radius: 0.3em;
-       border-top-right-radius: 0.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: 0.25em;
-       left: 0.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: 0.25em;
-       margin-left: 0;
-}
-.oo-ui-popupWidget {
-       position: absolute;
-}
-.oo-ui-popupWidget-popup {
-       position: relative;
-       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;
-       top: 0;
-       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-labelElement-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: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-       margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body-padded {
-       padding: 0 1em;
-}
-.oo-ui-popupButtonWidget {
-       position: relative;
-}
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
-       position: absolute;
-       cursor: auto;
-}
-.oo-ui-lookupInputWidget-menu {
-       background-color: #ffffff;
-}
-.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-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-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-iconElement-icon {
-       left: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
-       right: 0;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-       padding: 0.8em 1em;
-}
-.oo-ui-menuWidget {
-       position: absolute;
-       background: white;
-       border: solid 1px #dddddd;
-}
-.oo-ui-menuWidget input {
-       position: absolute;
-       width: 0;
-       height: 0;
-       overflow: hidden;
-       opacity: 0;
-}
-.oo-ui-menuItemWidget {
-       position: relative;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
-       display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-       background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
-       display: block;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-       background: #347bff;
-       color: #ffffff;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
-       background-size: 24px auto;
-}
-.oo-ui-menuSectionItemWidget {
-       cursor: default;
-       font-weight: normal;
-       color: #777777;
-       border: none;
-}
-.oo-ui-inlineMenuWidget {
-       position: relative;
-       display: inline-block;
-       margin: 0.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-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-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-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-       top: 0;
-       width: 2.5em;
-       height: 2.5em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
-       right: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-       left: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-       line-height: 2.5em;
-       margin: 0 0.5em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-       margin-left: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-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: 0.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-iconElement-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: 0.5em;
-       padding: 0;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-       width: 1.5em;
-       height: 2em;
-       margin: 0.5em 0 0.5em 0.5em;
-}
-.oo-ui-outlineControlsWidget-items {
-       margin-left: 0;
-}
-.oo-ui-comboBoxWidget {
-       display: inline-block;
-       position: relative;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
-       width: 100%;
-       z-index: 1;
-}
-.oo-ui-comboBoxWidget > .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: 0.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: 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,
-.oo-ui-window-inner-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-inner-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-buttonElement-button {
-       display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-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: 0.5em;
-}
-.oo-ui-messageDialog-title {
-       font-size: 1.5em;
-       line-height: 1em;
-       color: #000000;
-}
-.oo-ui-messageDialog-message {
-       font-size: 0.9em;
-       line-height: 1.25em;
-       color: #666666;
-}
-.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-labelElement-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-flaggedElement-primary:hover {
-       background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
-       background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-       font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-       background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-       background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-       background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-       background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
-       overflow: hidden;
-       text-overflow: ellipsis;
-       white-space: nowrap;
-}
-.oo-ui-processDialog-title {
-       display: inline;
-       padding: 0;
-}
-.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 #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.75em 0;
-       height: 1.85em;
-       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-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-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-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
-       line-height: 1.85em;
-       padding: 0 1em;
-       font-weight: bold;
-       color: #777777;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
-       position: absolute;
-       margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-       vertical-align: middle;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
-       border: 1px solid transparent;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label {
-       color: #d11d13;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button {
-       padding: 0.75em 0.35em;
-       border: none;
-       border-radius: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
-       background-color: #347bff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-       color: #ffffff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-       left: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-       padding-left: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-       right: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-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: #000000;
-       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-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: absolute;
-       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, 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: #ffffff;
-       -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 #cccccc;
-       border-radius: 0.5em;
-       box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-}
-
-.oo-ui-icon-check {
-       background-image: /* @embed */ url(themes/minerva/images/icons/check.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-check,
-.oo-ui-image-invert.oo-ui-icon-check {
-       background-image: /* @embed */ url(themes/minerva/images/icons/check-invert.svg);
-}
diff --git a/resources/lib/oojs-ui/oojs-ui-minerva.svg.rtl.css b/resources/lib/oojs-ui/oojs-ui-minerva.svg.rtl.css
deleted file mode 100644 (file)
index 513f2a7..0000000
+++ /dev/null
@@ -1,1381 +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-09-24T23:21:42Z
- */
-/* @noflip */
-.oo-ui-rtl {
-  direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
-  direction: ltr;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-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-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: none;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  display: none;
-}
-.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-  cursor: default;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: inline-block;
-  vertical-align: middle;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-buttonElement-frameless {
-  display: inline-block;
-  position: relative;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-  display: inline-block;
-  vertical-align: top;
-  text-align: center;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
-  cursor: default;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-right: 0;
-}
-.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  margin-left: -0.75em;
-}
-.oo-ui-buttonElement.oo-ui-indicatorElement .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement.oo-ui-iconElement .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  width: 3.35em;
-  height: 3.35em;
-  background-size: 2em auto;
-}
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  margin-right: 0.25em;
-}
-.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-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;
-  right: 0;
-  left: 0;
-  bottom: 3em;
-  overflow-y: auto;
-}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  left: 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-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  display: block;
-  float: right;
-}
-.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;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  text-align: left;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-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-labelElement-label {
-  display: inline-block;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
-  z-index: 1;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help {
-  float: left;
-}
-.oo-ui-fieldLayout .oo-ui-fieldLayout-help-content {
-  padding: 0.5em 0.75em;
-}
-.oo-ui-fieldLayout:last-child {
-  margin-bottom: 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
-  padding-top: 0.5em;
-  margin-left: 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-labelElement-label {
-  padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
-  padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  margin-top: 0.25em;
-}
-.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
-  color: #ccc;
-}
-.oo-ui-fieldsetLayout {
-  position: relative;
-  margin: 0;
-  padding: 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-  display: block;
-  position: absolute;
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
-  display: inline-block;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
-  margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
-  margin-bottom: 0.5em;
-  padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
-  padding-right: 1.75em;
-  line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
-  right: 0;
-  top: 0.25em;
-  width: 2em;
-  height: 2em;
-}
-.oo-ui-gridLayout {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 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;
-  right: 0;
-  left: 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-right: 1.25em;
-  font-size: 0.8em;
-}
-.oo-ui-toolGroup {
-  display: inline-block;
-  vertical-align: middle;
-  margin: 0.3em;
-}
-.oo-ui-toolGroup-empty {
-  display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  background-position: center center;
-  background-repeat: no-repeat;
-}
-.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labelElement-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-iconElement-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: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-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-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-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-iconElement-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-left > .oo-ui-toolGroup-tools {
-  right: 0;
-}
-.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
-  left: 0;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-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-indicatorElement.oo-ui-iconElement {
-  min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  top: 0;
-  width: 2em;
-  height: 2em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
-  right: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labelElement-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-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-  margin-right: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
-  margin-left: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-  top: 2.3em;
-  margin: 0 -1px;
-  border: solid 1px #dddddd;
-  background-color: white;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
-  height: 2em;
-  width: 2em;
-  margin-left: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
-  line-height: 2em;
-  font-size: 0.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: 0.25em;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
-  padding-left: 0.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.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-link {
-  padding: 0 0.25em 0 1em;
-}
-.oo-ui-toolbar {
-  clear: both;
-}
-.oo-ui-toolbar-bar {
-  line-height: 1em;
-}
-.oo-ui-toolbar-actions {
-  float: left;
-}
-.oo-ui-toolbar-tools {
-  display: inline;
-}
-.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: right top;
-  background-repeat: repeat-x;
-  position: absolute;
-  width: 100%;
-  pointer-events: none;
-}
-.oo-ui-toolbar-bar {
-  border-bottom: solid 1px #dddddd;
-  background: white;
-}
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
-  border: none;
-  background: none;
-}
-.oo-ui-selectWidget {
-  margin: 0;
-  padding: 0;
-}
-.oo-ui-optionWidget {
-  position: relative;
-  display: block;
-  cursor: pointer;
-  padding: 0.8em 3.35em 0.8em 1em;
-  border: none;
-  font-weight: bold;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
-  cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-  display: block;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-  overflow: hidden;
-}
-.oo-ui-optionWidget .oo-ui-labelElement-label {
-  line-height: 1.5em;
-}
-.oo-ui-optionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
-  padding-left: 1.5em;
-}
-.oo-ui-optionWidget-level-0 {
-  padding-right: 3.5em;
-}
-.oo-ui-optionWidget-level-0 .oo-ui-iconElement-icon {
-  right: 1em;
-}
-.oo-ui-optionWidget-level-1 {
-  padding-right: 5em;
-}
-.oo-ui-optionWidget-level-1 .oo-ui-iconElement-icon {
-  right: 2.5em;
-}
-.oo-ui-optionWidget-level-2 {
-  padding-right: 6.5em;
-}
-.oo-ui-optionWidget-level-2 .oo-ui-iconElement-icon {
-  right: 4em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  position: absolute;
-  background-repeat: no-repeat;
-  background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  top: 50%;
-  width: 2em;
-  height: 2em;
-  margin-top: -1em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
-  right: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
-  left: 0.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-buttonElement-button {
-  position: relative;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  position: static;
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  height: 1.9em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  height: 1.9em;
-  margin-top: 0;
-}
-.oo-ui-labelWidget {
-  display: inline-block;
-  padding: 0.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: 0.8;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
-  opacity: 0.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: 0.8;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
-  opacity: 0.2;
-}
-.oo-ui-buttonWidget {
-  display: inline-block;
-  vertical-align: middle;
-}
-.oo-ui-buttonGroupWidget {
-  border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-  border-radius: 0;
-  margin-bottom: -1px;
-  margin-right: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
-  border-bottom-right-radius: 0.3em;
-  border-top-right-radius: 0.3em;
-  margin-right: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
-  border-bottom-left-radius: 0.3em;
-  border-top-left-radius: 0.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;
-  left: 0;
-  right: 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: 0.25em;
-  right: 0.25em;
-  width: 1.5em;
-  height: 1.5em;
-  margin-top: -1px;
-  -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 {
-  -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 {
-  right: 2.25em;
-  margin-right: -2px;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
-  right: 0.25em;
-  margin-right: 0;
-}
-.oo-ui-actionWidget.oo-ui-pendingElement-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.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: left;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-  float: right;
-  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: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labelElement-label {
-  margin: 0.75em 1em;
-}
-.oo-ui-popupWidget-body-padded {
-  padding: 0 1em;
-}
-.oo-ui-popupButtonWidget {
-  position: relative;
-}
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
-  position: absolute;
-  right: 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-pendingElement-pending input,
-.oo-ui-textInputWidget.oo-ui-pendingElement-pending textarea {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-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-iconElement-icon {
-  right: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
-  padding: .8em 1em;
-}
-.oo-ui-menuWidget {
-  position: absolute;
-  background: white;
-  border: solid 1px #dddddd;
-}
-.oo-ui-menuWidget input {
-  position: absolute;
-  width: 0;
-  height: 0;
-  overflow: hidden;
-  opacity: 0;
-}
-.oo-ui-menuItemWidget {
-  position: relative;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
-  display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
-  display: block;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  background: #347bff;
-  color: #ffffff;
-}
-.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
-  background-size: 24px auto;
-}
-.oo-ui-menuSectionItemWidget {
-  cursor: default;
-  font-weight: normal;
-  color: #777777;
-  border: none;
-}
-.oo-ui-inlineMenuWidget {
-  position: relative;
-  display: inline-block;
-  margin: 0.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-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-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-indicatorElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-  top: 0;
-  width: 2.5em;
-  height: 2.5em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
-  left: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
-  right: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  line-height: 2.5em;
-  margin: 0 0.5em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  margin-right: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
-  margin-left: 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: 0.75em;
-}
-.oo-ui-outlineControlsWidget {
-  height: 3em;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-  float: right;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-  float: right;
-  background-position: left center;
-  background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
-  float: right;
-}
-.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-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
-  height: 2em;
-  margin: 0.5em;
-  padding: 0;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
-  width: 1.5em;
-  height: 2em;
-  margin: 0.5em 0.5em 0.5em 0;
-}
-.oo-ui-outlineControlsWidget-items {
-  margin-right: 0;
-}
-.oo-ui-comboBoxWidget {
-  display: inline-block;
-  position: relative;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
-  width: 100%;
-  z-index: 1;
-}
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
-  min-width: 20em;
-}
-.oo-ui-searchWidget-query {
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 0;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  width: 100%;
-}
-.oo-ui-searchWidget-results {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  left: 0;
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-.oo-ui-searchWidget-query {
-  height: 4em;
-  padding: 0 1em;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
-  margin: 0.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: 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;
-  right: 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;
-  right: 0;
-  left: 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-head.oo-ui-pendingElement-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.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-buttonElement-button {
-  display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-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: 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: 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-labelElement-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-flaggedElement-primary:hover {
-  background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
-  background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-  font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-  background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
-  background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
-  background-color: rgba(212, 83, 83, 0.1);
-}
-.oo-ui-processDialog-location {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.oo-ui-processDialog-title {
-  display: inline;
-  padding: 0;
-}
-.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 {
-  display: none;
-  position: absolute;
-  top: 0;
-  right: 0;
-  left: 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 #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.75em 0;
-  height: 1.85em;
-  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-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-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-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
-  line-height: 1.85em;
-  padding: 0 1em;
-  font-weight: bold;
-  color: #777777;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
-  position: absolute;
-  margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-  vertical-align: middle;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
-  border: 1px solid transparent;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label {
-  color: #d11d13;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button {
-  padding: 0.75em 0.35em;
-  border: none;
-  border-radius: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
-  background-color: #347bff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
-  color: #ffffff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  right: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-  padding-right: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  left: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
-  padding-left: 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: right;
-  margin: 1em;
-  padding: 1em;
-  border: solid 1px #ff9e9e;
-  background-color: #fff7f7;
-  border-radius: 0.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;
-  left: 0;
-  bottom: 0;
-  right: 0;
-  padding: 1em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
-  position: absolute;
-  left: 0;
-  right: 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, 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-icon-check {
-  background-image: /* @embed */ url(themes/minerva/images/icons/check.svg);
-}
-.oo-ui-image-invert .oo-ui-icon-check,
-.oo-ui-image-invert.oo-ui-icon-check {
-  background-image: /* @embed */ url(themes/minerva/images/icons/check-invert.svg);
-}
index 50f69f3..6492fe0 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (d74a46ca6a)
+ * OOjs UI v0.1.0-pre (40de4dabe6)
  * 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-10-15T00:40:17Z
+ * Date: 2014-10-22T23:42:16Z
  */
 ( function ( OO ) {
 
@@ -111,6 +111,10 @@ OO.ui.getLocalValue = function ( obj, lang, fallback ) {
                'ooui-outline-control-remove': 'Remove item',
                // Label for the toolbar group that contains a list of all other available tools
                'ooui-toolbar-more': 'More',
+               // Label for the fake tool that expands the full list of tools in a toolbar group
+               'ooui-toolgroup-expand': 'More',
+               // Label for the fake tool that collapses the full list of tools in a toolbar group
+               'ooui-toolgroup-collapse': 'Fewer',
                // Default label for the accept button of a confirmation dialog
                'ooui-dialog-message-accept': 'OK',
                // Default label for the reject button of a confirmation dialog
@@ -701,9 +705,7 @@ OO.ui.Element = function OoUiElement( config ) {
        this.$ = config.$ || OO.ui.Element.getJQuery( document );
        this.$element = this.$( this.$.context.createElement( this.getTagName() ) );
        this.elementGroup = null;
-       this.debouncedUpdateThemeClassesHandler = OO.ui.bind(
-               this.debouncedUpdateThemeClasses, this
-       );
+       this.debouncedUpdateThemeClassesHandler = this.debouncedUpdateThemeClasses.bind( this );
        this.updateThemeClassesPending = false;
 
        // Initialization
@@ -727,7 +729,7 @@ OO.initClass( OO.ui.Element );
 /**
  * HTML tag name.
  *
- * This may be ignored if getTagName is overridden.
+ * This may be ignored if #getTagName is overridden.
  *
  * @static
  * @inheritable
@@ -865,15 +867,35 @@ OO.ui.Element.getFrameOffset = function ( from, to, offset ) {
 /**
  * Get the offset between two elements.
  *
+ * The two elements may be in a different frame, but in that case the frame $element is in must
+ * be contained in the frame $anchor is in.
+ *
  * @static
- * @param {jQuery} $from
- * @param {jQuery} $to
+ * @param {jQuery} $element Element whose position to get
+ * @param {jQuery} $anchor Element to get $element's position relative to
  * @return {Object} Translated position coordinates, containing top and left properties
  */
-OO.ui.Element.getRelativePosition = function ( $from, $to ) {
-       var from = $from.offset(),
-               to = $to.offset();
-       return { top: Math.round( from.top - to.top ), left: Math.round( from.left - to.left ) };
+OO.ui.Element.getRelativePosition = function ( $element, $anchor ) {
+       var iframe, iframePos,
+               pos = $element.offset(),
+               anchorPos = $anchor.offset(),
+               elementDocument = this.getDocument( $element ),
+               anchorDocument = this.getDocument( $anchor );
+
+       // If $element isn't in the same document as $anchor, traverse up
+       while ( elementDocument !== anchorDocument ) {
+               iframe = elementDocument.defaultView.frameElement;
+               if ( !iframe ) {
+                       throw new Error( '$element frame is not contained in $anchor frame' );
+               }
+               iframePos = $( iframe ).offset();
+               pos.left += iframePos.left;
+               pos.top += iframePos.top;
+               elementDocument = iframe.ownerDocument;
+       }
+       pos.left -= anchorPos.left;
+       pos.top -= anchorPos.top;
+       return pos;
 };
 
 /**
@@ -1086,6 +1108,26 @@ OO.ui.Element.offDOMEvent = function ( el, event, callback ) {
 
 /* Methods */
 
+/**
+ * Check if element supports one or more methods.
+ *
+ * @param {string|string[]} methods Method or list of methods to check
+ * @return boolean All methods are supported
+ */
+OO.ui.Element.prototype.supports = function ( methods ) {
+       var i, len,
+               support = 0;
+
+       methods = $.isArray( methods ) ? methods : [ methods ];
+       for ( i = 0, len = methods.length; i < len; i++ ) {
+               if ( $.isFunction( this[methods[i]] ) ) {
+                       support++;
+               }
+       }
+
+       return methods.length === support;
+};
+
 /**
  * Update the theme-provided classes.
  *
@@ -1903,7 +1945,7 @@ OO.ui.Window.prototype.initialize = function () {
        this.$innerOverlay = this.$( '<div>' );
 
        // Events
-       this.$element.on( 'mousedown', OO.ui.bind( this.onMouseDown, this ) );
+       this.$element.on( 'mousedown', this.onMouseDown.bind( this ) );
 
        // Initialization
        this.$head.addClass( 'oo-ui-window-head' );
@@ -2375,7 +2417,7 @@ OO.ui.Dialog.prototype.initialize = function () {
 
        // Events
        if ( this.constructor.static.escapable ) {
-               this.$document.on( 'keydown', OO.ui.bind( this.onDocumentKeyDown, this ) );
+               this.$document.on( 'keydown', this.onDocumentKeyDown.bind( this ) );
        }
 
        // Initialization
@@ -2415,7 +2457,7 @@ OO.ui.Dialog.prototype.detachActions = function () {
 OO.ui.Dialog.prototype.executeAction = function ( action ) {
        this.pushPending();
        return this.getActionProcess( action ).execute()
-               .always( OO.ui.bind( this.popPending, this ) );
+               .always( this.popPending.bind( this ) );
 };
 
 /**
@@ -2487,10 +2529,10 @@ OO.ui.WindowManager = function OoUiWindowManager( config ) {
        this.$ariaHidden = null;
        this.requestedSize = null;
        this.onWindowResizeTimeout = null;
-       this.onWindowResizeHandler = OO.ui.bind( this.onWindowResize, this );
-       this.afterWindowResizeHandler = OO.ui.bind( this.afterWindowResize, this );
-       this.onWindowMouseWheelHandler = OO.ui.bind( this.onWindowMouseWheel, this );
-       this.onDocumentKeyDownHandler = OO.ui.bind( this.onDocumentKeyDown, this );
+       this.onWindowResizeHandler = this.onWindowResize.bind( this );
+       this.afterWindowResizeHandler = this.afterWindowResize.bind( this );
+       this.onWindowMouseWheelHandler = this.onWindowMouseWheel.bind( this );
+       this.onDocumentKeyDownHandler = this.onDocumentKeyDown.bind( this );
 
        // Initialization
        this.$element
@@ -2604,8 +2646,10 @@ OO.ui.WindowManager.prototype.afterWindowResize = function () {
  *
  * @param {jQuery.Event} e Mouse wheel event
  */
-OO.ui.WindowManager.prototype.onWindowMouseWheel = function () {
-       return false;
+OO.ui.WindowManager.prototype.onWindowMouseWheel = function ( e ) {
+       // Kill all events in the parent window if the child window is isolated,
+       // or if the event didn't come from the child window
+       return !( this.shouldIsolate() || !$.contains( this.getCurrentWindow().$frame[0], e.target ) );
 };
 
 /**
@@ -2623,8 +2667,9 @@ OO.ui.WindowManager.prototype.onDocumentKeyDown = function ( e ) {
                case OO.ui.Keys.UP:
                case OO.ui.Keys.RIGHT:
                case OO.ui.Keys.DOWN:
-                       // Prevent any key events that might cause scrolling
-                       return false;
+                       // Kill all events in the parent window if the child window is isolated,
+                       // or if the event didn't come from the child window
+                       return !( this.shouldIsolate() || !$.contains( this.getCurrentWindow().$frame[0], e.target ) );
        }
 };
 
@@ -2866,7 +2911,7 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
        var manager = this,
                preparing = [],
                closing = $.Deferred(),
-               opened = this.opened;
+               opened;
 
        // Argument handling
        if ( typeof win === 'string' ) {
@@ -2903,6 +2948,7 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
                        manager.closing = closing;
                        manager.preparingToClose = null;
                        manager.emit( 'closing', win, closing, data );
+                       opened = manager.opened;
                        manager.opened = null;
                        opened.resolve( closing.promise(), data );
                        setTimeout( function () {
@@ -2984,7 +3030,7 @@ OO.ui.WindowManager.prototype.removeWindows = function ( names ) {
                if ( !win ) {
                        throw new Error( 'Cannot remove window' );
                }
-               promises.push( this.closeWindow( name ).then( OO.ui.bind( cleanup, null, name, win ) ) );
+               promises.push( this.closeWindow( name ).then( cleanup.bind( null, name, win ) ) );
        }
 
        return $.when.apply( $, promises );
@@ -3551,8 +3597,8 @@ OO.ui.ButtonElement = function OoUiButtonElement( config ) {
        this.tabIndex = null;
        this.accessKey = null;
        this.active = false;
-       this.onMouseUpHandler = OO.ui.bind( this.onMouseUp, this );
-       this.onMouseDownHandler = OO.ui.bind( this.onMouseDown, this );
+       this.onMouseUpHandler = this.onMouseUp.bind( this );
+       this.onMouseDownHandler = this.onMouseDown.bind( this );
 
        // Initialization
        this.$element.addClass( 'oo-ui-buttonElement' );
@@ -3839,7 +3885,7 @@ OO.ui.GroupElement.prototype.aggregate = function ( events ) {
  *
  * Adding an existing item (by value) will move it.
  *
- * @param {OO.ui.Element[]} items Item
+ * @param {OO.ui.Element[]} items Items
  * @param {number} [index] Index to insert items at
  * @chainable
  */
@@ -4721,8 +4767,8 @@ OO.ui.ClippableElement = function OoUiClippableElement( config ) {
        this.$clippableWindow = null;
        this.idealWidth = null;
        this.idealHeight = null;
-       this.onClippableContainerScrollHandler = OO.ui.bind( this.clip, this );
-       this.onClippableWindowResizeHandler = OO.ui.bind( this.clip, this );
+       this.onClippableContainerScrollHandler = this.clip.bind( this );
+       this.onClippableWindowResizeHandler = this.clip.bind( this );
 
        // Initialization
        this.setClippableElement( config.$clippable || this.$element );
@@ -4925,6 +4971,8 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
        this.toolbar = this.toolGroup.getToolbar();
        this.active = false;
        this.$title = this.$( '<span>' );
+       this.$titleText = this.$( '<span>' );
+       this.$accel = this.$( '<span>' );
        this.$link = this.$( '<a>' );
        this.title = null;
 
@@ -4932,7 +4980,11 @@ OO.ui.Tool = function OoUiTool( toolGroup, config ) {
        this.toolbar.connect( this, { updateState: 'onUpdateState' } );
 
        // Initialization
-       this.$title.addClass( 'oo-ui-tool-title' );
+       this.$titleText.addClass( 'oo-ui-tool-title-text' );
+       this.$accel.addClass( 'oo-ui-tool-accel' );
+       this.$title
+               .addClass( 'oo-ui-tool-title' )
+               .append( this.$titleText, this.$accel );
        this.$link
                .addClass( 'oo-ui-tool-link' )
                .append( this.$icon, this.$title )
@@ -5123,13 +5175,8 @@ OO.ui.Tool.prototype.updateTitle = function () {
                accel = this.toolbar.getToolAccelerator( this.constructor.static.name ),
                tooltipParts = [];
 
-       this.$title.empty()
-               .text( this.title )
-               .append(
-                       this.$( '<span>' )
-                               .addClass( 'oo-ui-tool-accel' )
-                               .text( accel )
-               );
+       this.$titleText.text( this.title );
+       this.$accel.text( accel );
 
        if ( titleTooltips && typeof this.title === 'string' && this.title.length ) {
                tooltipParts.push( this.title );
@@ -5190,7 +5237,7 @@ OO.ui.Toolbar = function OoUiToolbar( toolFactory, toolGroupFactory, config ) {
        // Events
        this.$element
                .add( this.$bar ).add( this.$group ).add( this.$actions )
-               .on( 'mousedown touchstart', OO.ui.bind( this.onPointerDown, this ) );
+               .on( 'mousedown touchstart', this.onPointerDown.bind( this ) );
 
        // Initialization
        this.$group.addClass( 'oo-ui-toolbar-tools' );
@@ -5402,14 +5449,14 @@ OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
        this.exclude = config.exclude || [];
        this.promote = config.promote || [];
        this.demote = config.demote || [];
-       this.onCapturedMouseUpHandler = OO.ui.bind( this.onCapturedMouseUp, this );
+       this.onCapturedMouseUpHandler = this.onCapturedMouseUp.bind( this );
 
        // Events
        this.$element.on( {
-               'mousedown touchstart': OO.ui.bind( this.onPointerDown, this ),
-               'mouseup touchend': OO.ui.bind( this.onPointerUp, this ),
-               mouseover: OO.ui.bind( this.onMouseOver, this ),
-               mouseout: OO.ui.bind( this.onMouseOut, this )
+               'mousedown touchstart': this.onPointerDown.bind( this ),
+               'mouseup touchend': this.onPointerUp.bind( this ),
+               mouseover: this.onMouseOver.bind( this ),
+               mouseout: this.onMouseOut.bind( this )
        } );
        this.toolbar.getToolFactory().connect( this, { register: 'onToolFactoryRegister' } );
        this.aggregate( { disable: 'itemDisable' } );
@@ -6062,7 +6109,7 @@ OO.ui.ProcessDialog.prototype.attachActions = function () {
  */
 OO.ui.ProcessDialog.prototype.executeAction = function ( action ) {
        OO.ui.ProcessDialog.super.prototype.executeAction.call( this, action )
-               .fail( OO.ui.bind( this.showErrors, this ) );
+               .fail( this.showErrors.bind( this ) );
 };
 
 /**
@@ -6171,7 +6218,7 @@ OO.ui.BookletLayout = function OoUiBookletLayout( config ) {
        }
        if ( this.autoFocus ) {
                // Event 'focus' does not bubble, but 'focusin' does
-               this.stackLayout.onDOMEvent( 'focusin', OO.ui.bind( this.onStackLayoutFocus, this ) );
+               this.stackLayout.onDOMEvent( 'focusin', this.onStackLayoutFocus.bind( this ) );
        }
 
        // Initialization
@@ -6558,18 +6605,18 @@ OO.ui.BookletLayout.prototype.updateOutlineWidget = function () {
  *    scanning for a specific label in a form with many fields
  *  - right: Label is before the field and aligned toward it, best for forms the user is very
  *    familiar with and will tab through field checking quickly to verify which field they are in
- *  - top: Label is before the field and above it, best for when the use will need to fill out all
+ *  - top: Label is before the field and above it, best for when the user will need to fill out all
  *    fields from top to bottom in a form with few fields
  *  - inline: Label is after the field and aligned toward it, best for small boolean fields like
  *    checkboxes or radio buttons
  *
  * @constructor
- * @param {OO.ui.Widget} field Field widget
+ * @param {OO.ui.Widget} fieldWidget Field widget
  * @param {Object} [config] Configuration options
  * @cfg {string} [align='left'] Alignment mode, either 'left', 'right', 'top' or 'inline'
  * @cfg {string} [help] Explanatory text shown as a '?' icon.
  */
-OO.ui.FieldLayout = function OoUiFieldLayout( field, config ) {
+OO.ui.FieldLayout = function OoUiFieldLayout( fieldWidget, config ) {
        // Config initialization
        config = $.extend( { align: 'left' }, config );
 
@@ -6581,7 +6628,7 @@ OO.ui.FieldLayout = function OoUiFieldLayout( field, config ) {
 
        // Properties
        this.$field = this.$( '<div>' );
-       this.field = field;
+       this.fieldWidget = fieldWidget;
        this.align = null;
        if ( config.help ) {
                this.popupButtonWidget = new OO.ui.PopupButtonWidget( {
@@ -6602,17 +6649,17 @@ OO.ui.FieldLayout = function OoUiFieldLayout( field, config ) {
        }
 
        // Events
-       if ( this.field instanceof OO.ui.InputWidget ) {
-               this.$label.on( 'click', OO.ui.bind( this.onLabelClick, this ) );
+       if ( this.fieldWidget instanceof OO.ui.InputWidget ) {
+               this.$label.on( 'click', this.onLabelClick.bind( this ) );
        }
-       this.field.connect( this, { disable: 'onFieldDisable' } );
+       this.fieldWidget.connect( this, { disable: 'onFieldDisable' } );
 
        // Initialization
        this.$element.addClass( 'oo-ui-fieldLayout' );
        this.$field
                .addClass( 'oo-ui-fieldLayout-field' )
-               .toggleClass( 'oo-ui-fieldLayout-disable', this.field.isDisabled() )
-               .append( this.field.$element );
+               .toggleClass( 'oo-ui-fieldLayout-disable', this.fieldWidget.isDisabled() )
+               .append( this.fieldWidget.$element );
        this.setAlignment( config.align );
 };
 
@@ -6638,7 +6685,7 @@ OO.ui.FieldLayout.prototype.onFieldDisable = function ( value ) {
  * @param {jQuery.Event} e Mouse click event
  */
 OO.ui.FieldLayout.prototype.onLabelClick = function () {
-       this.field.simulateLabelClick();
+       this.fieldWidget.simulateLabelClick();
        return false;
 };
 
@@ -6648,7 +6695,7 @@ OO.ui.FieldLayout.prototype.onLabelClick = function () {
  * @return {OO.ui.Widget} Field widget
  */
 OO.ui.FieldLayout.prototype.getField = function () {
-       return this.field;
+       return this.fieldWidget;
 };
 
 /**
@@ -6669,17 +6716,16 @@ OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
                } else {
                        this.$element.append( this.$help, this.$label, this.$field );
                }
-               // Set classes
+               // Set classes. The following classes can be used here:
+               // * oo-ui-fieldLayout-align-left
+               // * oo-ui-fieldLayout-align-right
+               // * oo-ui-fieldLayout-align-top
+               // * oo-ui-fieldLayout-align-inline
                if ( this.align ) {
                        this.$element.removeClass( 'oo-ui-fieldLayout-align-' + this.align );
                }
+               this.$element.addClass( 'oo-ui-fieldLayout-align-' + value );
                this.align = value;
-               // The following classes can be used here:
-               // oo-ui-fieldLayout-align-left
-               // oo-ui-fieldLayout-align-right
-               // oo-ui-fieldLayout-align-top
-               // oo-ui-fieldLayout-align-inline
-               this.$element.addClass( 'oo-ui-fieldLayout-align-' + this.align );
        }
 
        return this;
@@ -6698,7 +6744,6 @@ OO.ui.FieldLayout.prototype.setAlignment = function ( value ) {
  *
  * @constructor
  * @param {Object} [config] Configuration options
- * @cfg {string} [icon] Symbolic icon name
  * @cfg {OO.ui.FieldLayout[]} [items] Items to add
  */
 OO.ui.FieldsetLayout = function OoUiFieldsetLayout( config ) {
@@ -6729,10 +6774,6 @@ OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.IconElement );
 OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.LabelElement );
 OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
 
-/* Static Properties */
-
-OO.ui.FieldsetLayout.static.tagName = 'div';
-
 /**
  * Layout with an HTML form.
  *
@@ -6741,6 +6782,9 @@ OO.ui.FieldsetLayout.static.tagName = 'div';
  *
  * @constructor
  * @param {Object} [config] Configuration options
+ * @cfg {string} [method] HTML form `method` attribute
+ * @cfg {string} [action] HTML form `action` attribute
+ * @cfg {string} [enctype] HTML form `enctype` attribute
  */
 OO.ui.FormLayout = function OoUiFormLayout( config ) {
        // Configuration initialization
@@ -6750,10 +6794,16 @@ OO.ui.FormLayout = function OoUiFormLayout( config ) {
        OO.ui.FormLayout.super.call( this, config );
 
        // Events
-       this.$element.on( 'submit', OO.ui.bind( this.onFormSubmit, this ) );
+       this.$element.on( 'submit', this.onFormSubmit.bind( this ) );
 
        // Initialization
-       this.$element.addClass( 'oo-ui-formLayout' );
+       this.$element
+               .addClass( 'oo-ui-formLayout' )
+               .attr( {
+                       method: config.method,
+                       action: config.action,
+                       enctype: config.enctype
+               } );
 };
 
 /* Setup */
@@ -6793,7 +6843,7 @@ OO.ui.FormLayout.prototype.onFormSubmit = function () {
  * @param {OO.ui.PanelLayout[]} panels Panels in the grid
  * @param {Object} [config] Configuration options
  * @cfg {number[]} [widths] Widths of columns as ratios
- * @cfg {number[]} [heights] Heights of columns as ratios
+ * @cfg {number[]} [heights] Heights of rows as ratios
  */
 OO.ui.GridLayout = function OoUiGridLayout( panels, config ) {
        var i, len, widths;
@@ -6819,10 +6869,7 @@ OO.ui.GridLayout = function OoUiGridLayout( panels, config ) {
                this.layout( config.widths || [ 1 ], config.heights || [ 1 ] );
        } else {
                // Arrange in columns by default
-               widths = [];
-               for ( i = 0, len = this.panels.length; i < len; i++ ) {
-                       widths[i] = 1;
-               }
+               widths = this.panels.map( function () { return 1; } );
                this.layout( widths, [ 1 ] );
        }
 };
@@ -6841,10 +6888,6 @@ OO.inheritClass( OO.ui.GridLayout, OO.ui.Layout );
  * @event update
  */
 
-/* Static Properties */
-
-OO.ui.GridLayout.static.tagName = 'div';
-
 /* Methods */
 
 /**
@@ -6894,27 +6937,22 @@ OO.ui.GridLayout.prototype.layout = function ( widths, heights ) {
  * @fires update
  */
 OO.ui.GridLayout.prototype.update = function () {
-       var x, y, panel,
+       var x, y, panel, width, height, dimensions,
                i = 0,
-               left = 0,
                top = 0,
-               dimensions,
-               width = 0,
-               height = 0,
+               left = 0,
                cols = this.widths.length,
                rows = this.heights.length;
 
        for ( y = 0; y < rows; y++ ) {
                height = this.heights[y];
                for ( x = 0; x < cols; x++ ) {
-                       panel = this.panels[i];
                        width = this.widths[x];
+                       panel = this.panels[i];
                        dimensions = {
                                width: Math.round( width * 100 ) + '%',
                                height: Math.round( height * 100 ) + '%',
-                               top: Math.round( top * 100 ) + '%',
-                               // HACK: Work around IE bug by setting visibility: hidden; if width or height is zero
-                               visibility: width === 0 || height === 0 ? 'hidden' : ''
+                               top: Math.round( top * 100 ) + '%'
                        };
                        // If RTL, reverse:
                        if ( OO.ui.Element.getDir( this.$.context ) === 'rtl' ) {
@@ -6922,6 +6960,12 @@ OO.ui.GridLayout.prototype.update = function () {
                        } else {
                                dimensions.left = Math.round( left * 100 ) + '%';
                        }
+                       // HACK: Work around IE bug by setting visibility: hidden; if width or height is zero
+                       if ( width === 0 || height === 0 ) {
+                               dimensions.visibility = 'hidden';
+                       } else {
+                               dimensions.visibility = '';
+                       }
                        panel.$element.css( dimensions );
                        i++;
                        left += width;
@@ -6943,7 +6987,7 @@ OO.ui.GridLayout.prototype.update = function () {
  * @return {OO.ui.PanelLayout} The panel at the given postion
  */
 OO.ui.GridLayout.prototype.getPanel = function ( x, y ) {
-       return this.panels[( x * this.widths.length ) + y];
+       return this.panels[ ( x * this.widths.length ) + y ];
 };
 
 /**
@@ -6960,7 +7004,11 @@ OO.ui.GridLayout.prototype.getPanel = function ( x, y ) {
  */
 OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
        // Config initialization
-       config = config || {};
+       config = $.extend( {
+               scrollable: false,
+               padded: false,
+               expanded: true
+       }, config );
 
        // Parent constructor
        OO.ui.PanelLayout.super.call( this, config );
@@ -6970,12 +7018,10 @@ OO.ui.PanelLayout = function OoUiPanelLayout( config ) {
        if ( config.scrollable ) {
                this.$element.addClass( 'oo-ui-panelLayout-scrollable' );
        }
-
        if ( config.padded ) {
                this.$element.addClass( 'oo-ui-panelLayout-padded' );
        }
-
-       if ( config.expanded === undefined || config.expanded ) {
+       if ( config.expanded ) {
                this.$element.addClass( 'oo-ui-panelLayout-expanded' );
        }
 };
@@ -7333,13 +7379,13 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
        // Properties
        this.active = false;
        this.dragging = false;
-       this.onBlurHandler = OO.ui.bind( this.onBlur, this );
+       this.onBlurHandler = this.onBlur.bind( this );
        this.$handle = this.$( '<span>' );
 
        // Events
        this.$handle.on( {
-               'mousedown touchstart': OO.ui.bind( this.onHandlePointerDown, this ),
-               'mouseup touchend': OO.ui.bind( this.onHandlePointerUp, this )
+               'mousedown touchstart': this.onHandlePointerDown.bind( this ),
+               'mouseup touchend': this.onHandlePointerUp.bind( this )
        } );
 
        // Initialization
@@ -7469,14 +7515,29 @@ OO.ui.PopupToolGroup.prototype.setActive = function ( value ) {
 /**
  * Drop down list layout of tools as labeled icon buttons.
  *
+ * This layout allows some tools to be collapsible, controlled by a "More" / "Fewer" option at the
+ * bottom of the main list. These are not automatically positioned at the bottom of the list; you
+ * may want to use the 'promote' and 'demote' configuration options to achieve this.
+ *
  * @class
  * @extends OO.ui.PopupToolGroup
  *
  * @constructor
  * @param {OO.ui.Toolbar} toolbar
  * @param {Object} [config] Configuration options
+ * @cfg {Array} [allowCollapse] List of tools that can be collapsed. Remaining tools will be always
+ *  shown.
+ * @cfg {Array} [forceExpand] List of tools that *may not* be collapsed. All remaining tools will be
+ *  allowed to be collapsed.
+ * @cfg {boolean} [expanded=false] Whether the collapsible tools are expanded by default
  */
 OO.ui.ListToolGroup = function OoUiListToolGroup( toolbar, config ) {
+       // Properties (must be set before parent constructor, which calls #populate)
+       this.allowCollapse = config.allowCollapse;
+       this.forceExpand = config.forceExpand;
+       this.expanded = config.expanded !== undefined ? config.expanded : false;
+       this.collapsibleTools = [];
+
        // Parent constructor
        OO.ui.ListToolGroup.super.call( this, toolbar, config );
 
@@ -7494,6 +7555,96 @@ OO.ui.ListToolGroup.static.accelTooltips = true;
 
 OO.ui.ListToolGroup.static.name = 'list';
 
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ListToolGroup.prototype.populate = function () {
+       var i, len, allowCollapse = [];
+
+       OO.ui.ListToolGroup.super.prototype.populate.call( this );
+
+       // Update the list of collapsible tools
+       if ( this.allowCollapse !== undefined ) {
+               allowCollapse = this.allowCollapse;
+       } else if ( this.forceExpand !== undefined ) {
+               allowCollapse = OO.simpleArrayDifference( Object.keys( this.tools ), this.forceExpand );
+       }
+
+       this.collapsibleTools = [];
+       for ( i = 0, len = allowCollapse.length; i < len; i++ ) {
+               if ( this.tools[ allowCollapse[i] ] !== undefined ) {
+                       this.collapsibleTools.push( this.tools[ allowCollapse[i] ] );
+               }
+       }
+
+       // Keep at the end, even when tools are added
+       this.$group.append( this.getExpandCollapseTool().$element );
+
+       this.getExpandCollapseTool().toggle( this.collapsibleTools.length !== 0 );
+
+       // Calling jQuery's .hide() and then .show() on a detached element caches the default value of its
+       // 'display' attribute and restores it, and the tool uses a <span> and can be hidden and re-shown.
+       // Is this a jQuery bug? http://jsfiddle.net/gtj4hu3h/
+       if ( this.getExpandCollapseTool().$element.css( 'display' ) === 'inline' ) {
+               this.getExpandCollapseTool().$element.css( 'display', 'inline-block' );
+       }
+
+       this.updateCollapsibleState();
+};
+
+OO.ui.ListToolGroup.prototype.getExpandCollapseTool = function () {
+       if ( this.expandCollapseTool === undefined ) {
+               var ExpandCollapseTool = function () {
+                       ExpandCollapseTool.super.apply( this, arguments );
+               };
+
+               OO.inheritClass( ExpandCollapseTool, OO.ui.Tool );
+
+               ExpandCollapseTool.prototype.onSelect = function () {
+                       this.toolGroup.expanded = !this.toolGroup.expanded;
+                       this.toolGroup.updateCollapsibleState();
+                       this.setActive( false );
+               };
+               ExpandCollapseTool.prototype.onUpdateState = function () {
+                       // Do nothing. Tool interface requires an implementation of this function.
+               };
+
+               ExpandCollapseTool.static.name = 'more-fewer';
+
+               this.expandCollapseTool = new ExpandCollapseTool( this );
+       }
+       return this.expandCollapseTool;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ListToolGroup.prototype.onPointerUp = function ( e ) {
+       var ret = OO.ui.ListToolGroup.super.prototype.onPointerUp.call( this, e );
+
+       // Do not close the popup when the user wants to show more/fewer tools
+       if ( this.$( e.target ).closest( '.oo-ui-tool-name-more-fewer' ).length ) {
+               // Prevent the popup list from being hidden
+               this.setActive( true );
+       }
+
+       return ret;
+};
+
+OO.ui.ListToolGroup.prototype.updateCollapsibleState = function () {
+       var i, len;
+
+       this.getExpandCollapseTool()
+               .setIcon( this.expanded ? 'collapse' : 'expand' )
+               .setTitle( OO.ui.msg( this.expanded ? 'ooui-toolgroup-collapse' : 'ooui-toolgroup-expand' ) );
+
+       for ( i = 0, len = this.collapsibleTools.length; i < len; i++ ) {
+               this.collapsibleTools[i].toggle( this.expanded );
+       }
+};
+
 /**
  * Drop down menu layout of tools as selectable menu items.
  *
@@ -7736,9 +7887,9 @@ OO.ui.LookupInputWidget = function OoUiLookupInputWidget( input, config ) {
        this.$overlay.append( this.lookupMenu.$element );
 
        this.lookupInput.$input.on( {
-               focus: OO.ui.bind( this.onLookupInputFocus, this ),
-               blur: OO.ui.bind( this.onLookupInputBlur, this ),
-               mousedown: OO.ui.bind( this.onLookupInputMouseDown, this )
+               focus: this.onLookupInputFocus.bind( this ),
+               blur: this.onLookupInputBlur.bind( this ),
+               mousedown: this.onLookupInputMouseDown.bind( this )
        } );
        this.lookupInput.connect( this, { change: 'onLookupInputChange' } );
 
@@ -8174,7 +8325,7 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
        OO.ui.IconElement.call( this, config );
        OO.ui.IndicatorElement.call( this, config );
        OO.ui.LabelElement.call( this, config );
-       OO.ui.TitledElement.call( this, config, $.extend( {}, config, { $titled: this.$button } ) );
+       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );
        OO.ui.FlaggedElement.call( this, config );
 
        // Properties
@@ -8184,8 +8335,8 @@ OO.ui.ButtonWidget = function OoUiButtonWidget( config ) {
 
        // Events
        this.$button.on( {
-               click: OO.ui.bind( this.onClick, this ),
-               keypress: OO.ui.bind( this.onKeyPress, this )
+               click: this.onClick.bind( this ),
+               keypress: this.onKeyPress.bind( this )
        } );
 
        // Initialization
@@ -8239,7 +8390,7 @@ OO.ui.ButtonWidget.prototype.onClick = function () {
  */
 OO.ui.ButtonWidget.prototype.onKeyPress = function ( e ) {
        if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
-               this.onClick();
+               this.emit( 'click' );
                if ( this.isHyperlink ) {
                        return true;
                }
@@ -8682,7 +8833,7 @@ OO.ui.InlineMenuWidget = function OoUiInlineMenuWidget( config ) {
        this.$handle = this.$( '<span>' );
 
        // Events
-       this.$element.on( { click: OO.ui.bind( this.onClick, this ) } );
+       this.$element.on( { click: this.onClick.bind( this ) } );
        this.menu.connect( this, { select: 'onMenuSelect' } );
 
        // Initialization
@@ -8788,7 +8939,7 @@ OO.ui.InputWidget = function OoUiInputWidget( config ) {
        this.inputFilter = config.inputFilter;
 
        // Events
-       this.$input.on( 'keydown mouseup cut paste change input select', OO.ui.bind( this.onEdit, this ) );
+       this.$input.on( 'keydown mouseup cut paste change input select', this.onEdit.bind( this ) );
 
        // Initialization
        this.$input
@@ -8968,6 +9119,140 @@ OO.ui.InputWidget.prototype.blur = function () {
        return this;
 };
 
+/**
+ * A button that is an input widget. Intended to be used within FormLayouts.
+ *
+ * @class
+ * @extends OO.ui.InputWidget
+ * @mixins OO.ui.ButtonElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.TitledElement
+ * @mixins OO.ui.FlaggedElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string} [type='button'] HTML tag `type` attribute, may be 'button', 'submit' or 'reset'
+ * @cfg {boolean} [useInputTag=false] Whether to use `<input/>` rather than `<button/>`. Only useful
+ *  if you need IE 6 support in a form with multiple buttons. By using this option, you sacrifice
+ *  icons and indicators, as well as the ability to have non-plaintext label or a label different
+ *  from the value.
+ */
+OO.ui.ButtonInputWidget = function OoUiButtonInputWidget( config ) {
+       // Configuration initialization
+       config = $.extend( { type: 'button', useInputTag: false }, config );
+
+       // Parent constructor
+       OO.ui.ButtonInputWidget.super.call( this, config );
+
+       // Mixin constructors
+       OO.ui.ButtonElement.call( this, $.extend( {}, config, { $button: this.$input } ) );
+       OO.ui.IconElement.call( this, config );
+       OO.ui.IndicatorElement.call( this, config );
+       OO.ui.LabelElement.call( this, config );
+       OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$input } ) );
+       OO.ui.FlaggedElement.call( this, config );
+
+       // Properties
+       this.useInputTag = config.useInputTag;
+
+       // Events
+       this.$input.on( {
+               click: this.onClick.bind( this ),
+               keypress: this.onKeyPress.bind( this )
+       } );
+
+       // Initialization
+       if ( !config.useInputTag ) {
+               this.$input.append( this.$icon, this.$label, this.$indicator );
+       }
+       this.$element.addClass( 'oo-ui-buttonInputWidget' );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ButtonInputWidget, OO.ui.InputWidget );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.ButtonElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.TitledElement );
+OO.mixinClass( OO.ui.ButtonInputWidget, OO.ui.FlaggedElement );
+
+/* Events */
+
+/**
+ * @event click
+ */
+
+/* Methods */
+
+/**
+ * Get input element.
+ *
+ * @param {Object} [config] Configuration options
+ * @return {jQuery} Input element
+ */
+OO.ui.ButtonInputWidget.prototype.getInputElement = function ( config ) {
+       var html = '<' + ( config.useInputTag ? 'input' : 'button' ) + ' type="' + config.type + '">';
+       return this.$( html );
+};
+
+/**
+ * Set the label.
+ *
+ * Overridden to support setting the 'value' of `<input/>` elements.
+ *
+ * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
+ *  text; or null for no label
+ * @chainable
+ */
+OO.ui.ButtonInputWidget.prototype.setLabel = function ( label ) {
+       OO.ui.LabelElement.prototype.setLabel.call( this, label );
+
+       if ( this.useInputTag ) {
+               if ( typeof label === 'function' ) {
+                       label = OO.ui.resolveMsg( label );
+               }
+               if ( label instanceof jQuery ) {
+                       label = label.text();
+               }
+               if ( !label ) {
+                       label = '';
+               }
+               this.$input.val( label );
+       }
+
+       return this;
+};
+
+/**
+ * Handles mouse click events.
+ *
+ * @param {jQuery.Event} e Mouse click event
+ * @fires click
+ */
+OO.ui.ButtonInputWidget.prototype.onClick = function () {
+       if ( !this.isDisabled() ) {
+               this.emit( 'click' );
+       }
+       return false;
+};
+
+/**
+ * Handles keypress events.
+ *
+ * @param {jQuery.Event} e Keypress event
+ * @fires click
+ */
+OO.ui.ButtonInputWidget.prototype.onKeyPress = function ( e ) {
+       if ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {
+               this.emit( 'click' );
+       }
+       return false;
+};
+
 /**
  * Checkbox input widget.
  *
@@ -8989,8 +9274,6 @@ OO.ui.CheckboxInputWidget = function OoUiCheckboxInputWidget( config ) {
 
 OO.inheritClass( OO.ui.CheckboxInputWidget, OO.ui.InputWidget );
 
-/* Events */
-
 /* Methods */
 
 /**
@@ -9012,7 +9295,9 @@ OO.ui.CheckboxInputWidget.prototype.getValue = function () {
 };
 
 /**
- * Set value
+ * Set checked state of the checkbox
+ *
+ * @param {boolean} value New value
  */
 OO.ui.CheckboxInputWidget.prototype.setValue = function ( value ) {
        value = !!value;
@@ -9047,6 +9332,7 @@ OO.ui.CheckboxInputWidget.prototype.onEdit = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
+ * @cfg {string} [type='text'] HTML tag `type` attribute
  * @cfg {string} [placeholder] Placeholder text
  * @cfg {boolean} [multiline=false] Allow multiple lines of text
  * @cfg {boolean} [autosize=false] Automatically resize to fit content
@@ -9076,12 +9362,12 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
 
        // Events
        this.$input.on( {
-               keypress: OO.ui.bind( this.onKeyPress, this ),
-               blur: OO.ui.bind( this.setValidityFlag, this )
+               keypress: this.onKeyPress.bind( this ),
+               blur: this.setValidityFlag.bind( this )
        } );
-       this.$element.on( 'DOMNodeInsertedIntoDocument', OO.ui.bind( this.onElementAttach, this ) );
-       this.$icon.on( 'mousedown', OO.ui.bind( this.onIconMouseDown, this ) );
-       this.$indicator.on( 'mousedown', OO.ui.bind( this.onIndicatorMouseDown, this ) );
+       this.$element.on( 'DOMNodeInsertedIntoDocument', this.onElementAttach.bind( this ) );
+       this.$icon.on( 'mousedown', this.onIconMouseDown.bind( this ) );
+       this.$indicator.on( 'mousedown', this.onIndicatorMouseDown.bind( this ) );
 
        // Initialization
        this.$element
@@ -9249,11 +9535,10 @@ OO.ui.TextInputWidget.prototype.adjustSize = function () {
  * @return {jQuery} Input element
  */
 OO.ui.TextInputWidget.prototype.getInputElement = function ( config ) {
-       return config.multiline ? this.$( '<textarea>' ) : this.$( '<input type="text" />' );
+       var type = config.type || 'text';
+       return config.multiline ? this.$( '<textarea>' ) : this.$( '<input type="' + type + '" />' );
 };
 
-/* Methods */
-
 /**
  * Check if input supports multiple lines.
  *
@@ -9299,9 +9584,10 @@ OO.ui.TextInputWidget.prototype.setValidation = function ( validate ) {
  * Sets the 'invalid' flag appropriately.
  */
 OO.ui.TextInputWidget.prototype.setValidityFlag = function () {
-       this.isValid().done( OO.ui.bind( function ( valid ) {
-               this.setFlags( { invalid: !valid } );
-       }, this ) );
+       var widget = this;
+       this.isValid().done( function ( valid ) {
+               widget.setFlags( { invalid: !valid } );
+       } );
 };
 
 /**
@@ -9465,7 +9751,7 @@ OO.ui.LabelWidget = function OoUiLabelWidget( config ) {
 
        // Events
        if ( this.input instanceof OO.ui.InputWidget ) {
-               this.$element.on( 'click', OO.ui.bind( this.onClick, this ) );
+               this.$element.on( 'click', this.onClick.bind( this ) );
        }
 
        // Initialization
@@ -9980,6 +10266,7 @@ OO.ui.OutlineItemWidget.prototype.setLevel = function ( level ) {
  * @cfg {boolean} [anchor=true] Show anchor pointing to origin of popup
  * @cfg {string} [align='center'] Alignment of popup to origin
  * @cfg {jQuery} [$container] Container to prevent popup from rendering outside of
+ * @cfg {number} [containerPadding=10] How much padding to keep between popup and container
  * @cfg {jQuery} [$content] Content to append to the popup's body
  * @cfg {boolean} [autoClose=false] Popup auto-closes when it loses focus
  * @cfg {jQuery} [$autoCloseIgnore] Elements to not auto close when clicked
@@ -10003,7 +10290,9 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
        this.$head = this.$( '<div>' );
        this.$body = this.$( '<div>' );
        this.$anchor = this.$( '<div>' );
-       this.$container = config.$container; // If undefined, will be computed lazily in updateDimensions()
+       // If undefined, will be computed lazily in updateDimensions()
+       this.$container = config.$container;
+       this.containerPadding = config.containerPadding !== undefined ? config.containerPadding : 10;
        this.autoClose = !!config.autoClose;
        this.$autoCloseIgnore = config.$autoCloseIgnore;
        this.transitionTimeout = null;
@@ -10012,7 +10301,7 @@ OO.ui.PopupWidget = function OoUiPopupWidget( config ) {
        this.height = config.height !== undefined ? config.height : null;
        this.align = config.align || 'center';
        this.closeButton = new OO.ui.ButtonWidget( { $: this.$, framed: false, icon: 'close' } );
-       this.onMouseDownHandler = OO.ui.bind( this.onMouseDown, this );
+       this.onMouseDownHandler = this.onMouseDown.bind( this );
 
        // Events
        this.closeButton.connect( this, { click: 'onCloseButtonClick' } );
@@ -10050,16 +10339,6 @@ OO.inheritClass( OO.ui.PopupWidget, OO.ui.Widget );
 OO.mixinClass( OO.ui.PopupWidget, OO.ui.LabelElement );
 OO.mixinClass( OO.ui.PopupWidget, OO.ui.ClippableElement );
 
-/* Events */
-
-/**
- * @event hide
- */
-
-/**
- * @event show
- */
-
 /* Methods */
 
 /**
@@ -10187,8 +10466,7 @@ OO.ui.PopupWidget.prototype.setSize = function ( width, height, transition ) {
 OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
        var popupOffset, originOffset, containerLeft, containerWidth, containerRight,
                popupLeft, popupRight, overlapLeft, overlapRight, anchorWidth,
-               widget = this,
-               padding = 10;
+               widget = this;
 
        if ( !this.$container ) {
                // Lazy-initialize $container if not specified in constructor
@@ -10210,8 +10488,8 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
        containerLeft = Math.round( this.$container.offset().left );
        containerWidth = this.$container.innerWidth();
        containerRight = containerLeft + containerWidth;
-       popupLeft = popupOffset - padding;
-       popupRight = popupOffset + padding + this.width + padding;
+       popupLeft = popupOffset - this.containerPadding;
+       popupRight = popupOffset + this.containerPadding + this.width + this.containerPadding;
        overlapLeft = ( originOffset + popupLeft ) - containerLeft;
        overlapRight = containerRight - ( originOffset + popupRight );
 
@@ -10223,11 +10501,13 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
        }
 
        // Adjust offset to avoid anchor being rendered too close to the edge
-       anchorWidth = this.$anchor.width();
-       if ( this.align === 'right' ) {
-               popupOffset += anchorWidth;
-       } else if ( this.align === 'left' ) {
-               popupOffset -= anchorWidth;
+       // $anchor.width() doesn't work with the pure CSS anchor (returns 0)
+       // TODO: Find a measurement that works for CSS anchors and image anchors
+       anchorWidth = this.$anchor[0].scrollWidth * 2;
+       if ( popupOffset + this.width < anchorWidth ) {
+               popupOffset = anchorWidth - this.width;
+       } else if ( -popupOffset < anchorWidth ) {
+               popupOffset = -anchorWidth;
        }
 
        // Prevent transition from being interrupted
@@ -10256,6 +10536,71 @@ OO.ui.PopupWidget.prototype.updateDimensions = function ( transition ) {
        return this;
 };
 
+/**
+ * Progress bar widget.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {number} [progress=0] Initial progress
+ */
+OO.ui.ProgressBarWidget = function OoUiProgressBarWidget( config ) {
+       // Config intialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.ProgressBarWidget.super.call( this, config );
+
+       // Properties
+       this.$bar = this.$( '<div>' );
+       this.progress = null;
+
+       // Initialization
+       this.setProgress( config.progress || 0 );
+       this.$bar.addClass( 'oo-ui-progressBarWidget-bar');
+       this.$element
+               .attr( {
+                       role: 'progressbar',
+                       'aria-valuemin': 0,
+                       'aria-valuemax': 100
+               } )
+               .addClass( 'oo-ui-progressBarWidget' )
+               .append( this.$bar );
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ProgressBarWidget, OO.ui.Widget );
+
+/* Static Properties */
+
+OO.ui.ProgressBarWidget.static.tagName = 'div';
+
+/* Methods */
+
+/**
+ * Get progress percent
+ *
+ * @return {number} Progress percent
+ */
+OO.ui.ProgressBarWidget.prototype.getProgress = function () {
+       return this.progress;
+};
+
+/**
+ * Set progress percent
+ *
+ * @param {number} progress Progress percent
+ */
+OO.ui.ProgressBarWidget.prototype.setProgress = function ( progress ) {
+       this.progress = progress;
+
+       this.$bar.css( 'width', this.progress + '%' );
+       this.$element.attr( 'aria-valuenow', this.progress );
+};
+
 /**
  * Search widget.
  *
@@ -10297,7 +10642,7 @@ OO.ui.SearchWidget = function OoUiSearchWidget( config ) {
                highlight: 'onResultsHighlight',
                select: 'onResultsSelect'
        } );
-       this.query.$input.on( 'keydown', OO.ui.bind( this.onQueryKeydown, this ) );
+       this.query.$input.on( 'keydown', this.onQueryKeydown.bind( this ) );
 
        // Initialization
        this.$query
@@ -10441,14 +10786,14 @@ OO.ui.SelectWidget = function OoUiSelectWidget( config ) {
        this.pressed = false;
        this.selecting = null;
        this.hashes = {};
-       this.onMouseUpHandler = OO.ui.bind( this.onMouseUp, this );
-       this.onMouseMoveHandler = OO.ui.bind( this.onMouseMove, this );
+       this.onMouseUpHandler = this.onMouseUp.bind( this );
+       this.onMouseMoveHandler = this.onMouseMove.bind( this );
 
        // Events
        this.$element.on( {
-               mousedown: OO.ui.bind( this.onMouseDown, this ),
-               mouseover: OO.ui.bind( this.onMouseOver, this ),
-               mouseleave: OO.ui.bind( this.onMouseLeave, this )
+               mousedown: this.onMouseDown.bind( this ),
+               mouseover: this.onMouseOver.bind( this ),
+               mouseleave: this.onMouseLeave.bind( this )
        } );
 
        // Initialization
@@ -10991,8 +11336,8 @@ OO.ui.MenuWidget = function OoUiMenuWidget( config ) {
        this.$widget = config.widget ? config.widget.$element : null;
        this.$previousFocus = null;
        this.isolated = !config.input;
-       this.onKeyDownHandler = OO.ui.bind( this.onKeyDown, this );
-       this.onDocumentMouseDownHandler = OO.ui.bind( this.onDocumentMouseDown, this );
+       this.onKeyDownHandler = this.onKeyDown.bind( this );
+       this.onDocumentMouseDownHandler = this.onDocumentMouseDown.bind( this );
 
        // Initialization
        this.$element
@@ -11181,7 +11526,9 @@ OO.ui.MenuWidget.prototype.toggle = function ( visible ) {
        visible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;
 
        var i, len,
-               change = visible !== this.isVisible();
+               change = visible !== this.isVisible(),
+               elementDoc = this.getElementDocument(),
+               widgetDoc = this.$widget ? this.$widget[0].ownerDocument : null;
 
        // Parent method
        OO.ui.MenuWidget.super.prototype.toggle.call( this, visible );
@@ -11205,9 +11552,15 @@ OO.ui.MenuWidget.prototype.toggle = function ( visible ) {
 
                        // Auto-hide
                        if ( this.autoHide ) {
-                               this.getElementDocument().addEventListener(
+                               elementDoc.addEventListener(
                                        'mousedown', this.onDocumentMouseDownHandler, true
                                );
+                               // Support $widget being in a different document
+                               if ( widgetDoc && widgetDoc !== elementDoc ) {
+                                       widgetDoc.addEventListener(
+                                               'mousedown', this.onDocumentMouseDownHandler, true
+                                       );
+                               }
                        }
                } else {
                        this.unbindKeyDownListener();
@@ -11215,9 +11568,15 @@ OO.ui.MenuWidget.prototype.toggle = function ( visible ) {
                                this.$previousFocus[0].focus();
                                this.$previousFocus = null;
                        }
-                       this.getElementDocument().removeEventListener(
+                       elementDoc.removeEventListener(
                                'mousedown', this.onDocumentMouseDownHandler, true
                        );
+                       // Support $widget being in a different document
+                       if ( widgetDoc && widgetDoc !== elementDoc ) {
+                               widgetDoc.removeEventListener(
+                                       'mousedown', this.onDocumentMouseDownHandler, true
+                               );
+                       }
                        this.toggleClipping( false );
                }
        }
@@ -11247,7 +11606,7 @@ OO.ui.TextInputMenuWidget = function OoUiTextInputMenuWidget( input, config ) {
        // Properties
        this.input = input;
        this.$container = config.$container || this.input.$element;
-       this.onWindowResizeHandler = OO.ui.bind( this.onWindowResize, this );
+       this.onWindowResizeHandler = this.onWindowResize.bind( this );
 
        // Initialization
        this.$element.addClass( 'oo-ui-textInputMenuWidget' );
@@ -11272,7 +11631,7 @@ OO.ui.TextInputMenuWidget.prototype.onWindowResize = function () {
  * @inheritdoc
  */
 OO.ui.TextInputMenuWidget.prototype.toggle = function ( visible ) {
-       visible = !!visible;
+       visible = visible === undefined ? !this.isVisible() : !!visible;
 
        var change = visible !== this.isVisible();
 
@@ -11304,30 +11663,14 @@ OO.ui.TextInputMenuWidget.prototype.toggle = function ( visible ) {
  * @chainable
  */
 OO.ui.TextInputMenuWidget.prototype.position = function () {
-       var frameOffset,
-               $container = this.$container,
-               dimensions = $container.offset();
+       var $container = this.$container,
+               pos = OO.ui.Element.getRelativePosition( $container, this.$element.offsetParent() );
 
        // Position under input
-       dimensions.top += $container.height();
+       pos.top += $container.height();
+       this.$element.css( pos );
 
-       // Compensate for frame position if in a different frame
-       if ( this.input.$.$iframe && this.input.$.context !== this.$element[0].ownerDocument ) {
-               frameOffset = OO.ui.Element.getRelativePosition(
-                       this.input.$.$iframe, this.$element.offsetParent()
-               );
-               dimensions.left += frameOffset.left;
-               dimensions.top += frameOffset.top;
-       } else {
-               // Fix for RTL (for some reason, no need to fix if the frameoffset is set)
-               if ( this.$element.css( 'direction' ) === 'rtl' ) {
-                       dimensions.right = this.$element.parent().position().left -
-                               $container.width() - dimensions.left;
-                       // Erase the value for 'left'
-                       delete dimensions.left;
-               }
-       }
-       this.$element.css( dimensions );
+       // Set width
        this.setIdealSize( $container.width() );
        // We updated the position, so re-evaluate the clipping state
        this.clip();
@@ -11387,7 +11730,7 @@ OO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {
        this.$grip = this.$( '<span>' );
 
        // Events
-       this.$element.on( 'click', OO.ui.bind( this.onClick, this ) );
+       this.$element.on( 'click', this.onClick.bind( this ) );
 
        // Initialization
        this.$glow.addClass( 'oo-ui-toggleSwitchWidget-glow' );
diff --git a/resources/lib/oojs-ui/oojs-ui.rtl.css b/resources/lib/oojs-ui/oojs-ui.rtl.css
deleted file mode 100644 (file)
index 7f1fa34..0000000
+++ /dev/null
@@ -1,112 +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-09-11T19:39:50Z
- */
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-.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);
-}
-.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);
-}
-.oo-ui-texture-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-texture-transparency {
-  background-image: /* @embed */ url(images/textures/transparency.png);
-}
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 (file)
index 5a78d6b..0000000
+++ /dev/null
@@ -1,112 +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-09-11T19:39:50Z
- */
-/*
- * Blank theme mixins.
- *
- * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
- * additional rules to the base styles.
- */
-.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);
-}
-.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);
-}
-.oo-ui-texture-pending {
-  background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-texture-transparency {
-  background-image: /* @embed */ url(images/textures/transparency.svg);
-}
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/add.png b/resources/lib/oojs-ui/themes/apex/images/icons/add.png
new file mode 100644 (file)
index 0000000..730d102
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/add.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png b/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png
new file mode 100644 (file)
index 0000000..514ff1d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/advanced.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/alert.png b/resources/lib/oojs-ui/themes/apex/images/icons/alert.png
new file mode 100644 (file)
index 0000000..e98a14a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/alert.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png
new file mode 100644 (file)
index 0000000..88db108
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png
new file mode 100644 (file)
index 0000000..0afcbfa
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/arched-arrow-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/check.png b/resources/lib/oojs-ui/themes/apex/images/icons/check.png
new file mode 100644 (file)
index 0000000..9a2c9db
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/check.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/clear.png b/resources/lib/oojs-ui/themes/apex/images/icons/clear.png
new file mode 100644 (file)
index 0000000..51a33ff
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/clear.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/close.png b/resources/lib/oojs-ui/themes/apex/images/icons/close.png
new file mode 100644 (file)
index 0000000..4eedfbc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/close.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/code.png b/resources/lib/oojs-ui/themes/apex/images/icons/code.png
new file mode 100644 (file)
index 0000000..ee58c9a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/code.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/collapse.png b/resources/lib/oojs-ui/themes/apex/images/icons/collapse.png
new file mode 100644 (file)
index 0000000..353ac79
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/collapse.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/comment.png b/resources/lib/oojs-ui/themes/apex/images/icons/comment.png
new file mode 100644 (file)
index 0000000..265a3e4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/comment.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/expand.png b/resources/lib/oojs-ui/themes/apex/images/icons/expand.png
new file mode 100644 (file)
index 0000000..9073d24
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/expand.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/help.png b/resources/lib/oojs-ui/themes/apex/images/icons/help.png
new file mode 100644 (file)
index 0000000..b80df00
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/help.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/info.png b/resources/lib/oojs-ui/themes/apex/images/icons/info.png
new file mode 100644 (file)
index 0000000..eb0fb46
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/info.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/link.png b/resources/lib/oojs-ui/themes/apex/images/icons/link.png
new file mode 100644 (file)
index 0000000..2a087a4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/link.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/menu.png b/resources/lib/oojs-ui/themes/apex/images/icons/menu.png
new file mode 100644 (file)
index 0000000..0a78119
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/menu.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.png
new file mode 100644 (file)
index 0000000..fc4cd39
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/move-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png
new file mode 100644 (file)
index 0000000..dbce05e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/move-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/picture.png b/resources/lib/oojs-ui/themes/apex/images/icons/picture.png
new file mode 100644 (file)
index 0000000..2043424
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/picture.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/remove.png b/resources/lib/oojs-ui/themes/apex/images/icons/remove.png
new file mode 100644 (file)
index 0000000..9dc34b8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/remove.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/search.png b/resources/lib/oojs-ui/themes/apex/images/icons/search.png
new file mode 100644 (file)
index 0000000..39d3ab8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/search.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/settings.png b/resources/lib/oojs-ui/themes/apex/images/icons/settings.png
new file mode 100644 (file)
index 0000000..dd2706b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/settings.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/tag.png b/resources/lib/oojs-ui/themes/apex/images/icons/tag.png
new file mode 100644 (file)
index 0000000..8e100fc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/tag.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/window.png b/resources/lib/oojs-ui/themes/apex/images/icons/window.png
new file mode 100644 (file)
index 0000000..db726a1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/window.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/alert.png b/resources/lib/oojs-ui/themes/apex/images/indicators/alert.png
new file mode 100644 (file)
index 0000000..5bf0827
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/indicators/alert.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png
new file mode 100644 (file)
index 0000000..6574725
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-down.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png
new file mode 100644 (file)
index 0000000..7c84397
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png
new file mode 100644 (file)
index 0000000..5bf9064
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png
new file mode 100644 (file)
index 0000000..1a05ade
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/indicators/arrow-up.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/indicators/required.png b/resources/lib/oojs-ui/themes/apex/images/indicators/required.png
new file mode 100644 (file)
index 0000000..45eb03b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/indicators/required.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/textures/transparency.png b/resources/lib/oojs-ui/themes/apex/images/textures/transparency.png
new file mode 100644 (file)
index 0000000..1843f27
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/textures/transparency.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png
new file mode 100644 (file)
index 0000000..53d6441
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-constructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png
new file mode 100644 (file)
index 0000000..d6144e3
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png
new file mode 100644 (file)
index 0000000..730d102
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/add.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png
new file mode 100644 (file)
index 0000000..e074515
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png
new file mode 100644 (file)
index 0000000..514ff1d
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/advanced.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png
new file mode 100644 (file)
index 0000000..5440113
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png
new file mode 100644 (file)
index 0000000..e98a14a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/alert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png
new file mode 100644 (file)
index 0000000..8a07140
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png
new file mode 100644 (file)
index 0000000..88db108
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png
new file mode 100644 (file)
index 0000000..c6cbec1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png
new file mode 100644 (file)
index 0000000..0afcbfa
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/arched-arrow-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png
new file mode 100644 (file)
index 0000000..1ff6790
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-primary.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-primary.png
new file mode 100644 (file)
index 0000000..7566598
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check-primary.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png
new file mode 100644 (file)
index 0000000..9a2c9db
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/check.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png
new file mode 100644 (file)
index 0000000..5668e12
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png
new file mode 100644 (file)
index 0000000..51a33ff
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/clear.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.png
new file mode 100644 (file)
index 0000000..7b76ffe
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png
new file mode 100644 (file)
index 0000000..4eedfbc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/close.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png
new file mode 100644 (file)
index 0000000..23c5983
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png
new file mode 100644 (file)
index 0000000..ee58c9a
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/code.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png
new file mode 100644 (file)
index 0000000..a9d0d33
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png
new file mode 100644 (file)
index 0000000..353ac79
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/collapse.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png
new file mode 100644 (file)
index 0000000..0ed3528
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png
new file mode 100644 (file)
index 0000000..265a3e4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/comment.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png
new file mode 100644 (file)
index 0000000..05f7138
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png
new file mode 100644 (file)
index 0000000..9073d24
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/expand.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.png
new file mode 100644 (file)
index 0000000..185c1a2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/help.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help.png
new file mode 100644 (file)
index 0000000..b80df00
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/help.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png
new file mode 100644 (file)
index 0000000..83b00a2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png
new file mode 100644 (file)
index 0000000..eb0fb46
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/info.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.png
new file mode 100644 (file)
index 0000000..d920459
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/link.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link.png
new file mode 100644 (file)
index 0000000..2a087a4
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/link.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png
new file mode 100644 (file)
index 0000000..0400c19
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png
new file mode 100644 (file)
index 0000000..0a78119
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/menu.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png
new file mode 100644 (file)
index 0000000..7c9bdc1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png
new file mode 100644 (file)
index 0000000..fc4cd39
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png
new file mode 100644 (file)
index 0000000..e97d37b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png
new file mode 100644 (file)
index 0000000..dbce05e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/move-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png
new file mode 100644 (file)
index 0000000..d6dc62c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png
new file mode 100644 (file)
index 0000000..2043424
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/picture.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png
new file mode 100644 (file)
index 0000000..8b6799f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-destructive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.png
new file mode 100644 (file)
index 0000000..3343de8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.png
new file mode 100644 (file)
index 0000000..9dc34b8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/remove.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png
new file mode 100644 (file)
index 0000000..3e15daf
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png
new file mode 100644 (file)
index 0000000..39d3ab8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/search.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png
new file mode 100644 (file)
index 0000000..17b4379
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png
new file mode 100644 (file)
index 0000000..dd2706b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/settings.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png
new file mode 100644 (file)
index 0000000..c233429
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png
new file mode 100644 (file)
index 0000000..8e100fc
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/tag.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png
new file mode 100644 (file)
index 0000000..1c6ed1f
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png
new file mode 100644 (file)
index 0000000..db726a1
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/window.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png
new file mode 100644 (file)
index 0000000..28c8704
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png
new file mode 100644 (file)
index 0000000..5bf0827
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/alert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png
new file mode 100644 (file)
index 0000000..226eb5c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png
new file mode 100644 (file)
index 0000000..9a418c9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png
new file mode 100644 (file)
index 0000000..a348495
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png
new file mode 100644 (file)
index 0000000..bfed7d2
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png
new file mode 100644 (file)
index 0000000..5080ea5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png
new file mode 100644 (file)
index 0000000..0639809
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png
new file mode 100644 (file)
index 0000000..0474926
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png
new file mode 100644 (file)
index 0000000..ac9f0b5
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png
new file mode 100644 (file)
index 0000000..614c6e8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png
new file mode 100644 (file)
index 0000000..45eb03b
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/required.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png b/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png
new file mode 100644 (file)
index 0000000..1843f27
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/textures/transparency.png differ
diff --git a/resources/lib/oojs-ui/themes/minerva/images/icons/check-invert.svg b/resources/lib/oojs-ui/themes/minerva/images/icons/check-invert.svg
deleted file mode 100644 (file)
index 12d7f0d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0, 0, 44, 44"><style>* { fill: #FFFFFF }</style>
-    <g id="check">
-        <path id="mark" d="M41.634,12.619 L15.347,37.121 L15.163,36.923 L9.999,31.386 L2.364,23.201 L8.019,17.924 L15.655,26.119 L36.281,6.879 z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/minerva/images/icons/check.svg b/resources/lib/oojs-ui/themes/minerva/images/icons/check.svg
deleted file mode 100644 (file)
index 248c636..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0, 0, 44, 44">
-    <g id="check">
-        <path id="mark" d="M41.634,12.619 L15.347,37.121 L15.163,36.923 L9.999,31.386 L2.364,23.201 L8.019,17.924 L15.655,26.119 L36.281,6.879 z"/>
-    </g>
-</svg>
index 8d440fd..632769b 100644 (file)
@@ -24,8 +24,9 @@
 
        $.fn.textSelection = function ( command, options ) {
                var fn,
+                       alternateFn,
                        context,
-                       hasWikiEditorSurface, // The alt edit surface needs to implement the WikiEditor API
+                       hasWikiEditor,
                        needSave,
                        retval;
 
                        }
                };
 
+               alternateFn = $( this ).data( 'jquery.textSelection' );
+
                // Apply defaults
                switch ( command ) {
                        //case 'getContents': // no params
                                        force: false // Force a scroll even if the caret position is already visible
                                }, options );
                                break;
+                       case 'register':
+                               if ( alternateFn ) {
+                                       throw new Error( 'Another textSelection API was already registered' );
+                               }
+                               $( this ).data( 'jquery.textSelection', options );
+                               // No need to update alternateFn as this command only stores the options.
+                               // A command that uses it will set it again.
+                               return;
+                       case 'unregister':
+                               $( this ).removeData( 'jquery.textSelection' );
+                               return;
                }
 
                context = $( this ).data( 'wikiEditor-context' );
-               hasWikiEditorSurface = ( context !== undefined && context.$iframe !== undefined );
+               hasWikiEditor = ( context !== undefined && context.$iframe !== undefined );
 
                // IE selection restore voodoo
                needSave = false;
-               if ( hasWikiEditorSurface && context.savedSelection !== null ) {
+               if ( hasWikiEditor && context.savedSelection !== null ) {
                        context.fn.restoreSelection();
                        needSave = true;
                }
-               retval = ( hasWikiEditorSurface && context.fn[command] !== undefined ? context.fn : fn )[command].call( this, options );
-               if ( hasWikiEditorSurface && needSave ) {
+               retval = ( alternateFn && alternateFn[command] || fn[command] ).call( this, options );
+               if ( hasWikiEditor && needSave ) {
                        context.fn.saveSelection();
                }
 
index 830b02f..9405719 100644 (file)
@@ -23,7 +23,6 @@ div#column-one,
 #toc.tochidden,
 div#f-poweredbyico,
 div#f-copyrightico,
-li#viewcount,
 li#about,
 li#disclaimer,
 li#mobileview,
@@ -203,6 +202,7 @@ a.stub {
 /**
  * Floating divs
  */
+/* @noflip */
 div.floatright {
        float: right;
        clear: right;
@@ -214,6 +214,7 @@ div.floatright p {
        font-style: italic;
 }
 
+/* @noflip */
 div.floatleft {
        float: left;
        clear: left;
index 2512d49..6ba7bf7 100644 (file)
 
        // Destructive buttons
        //
-       // Use destructive buttons for actions which result in the destruction of data.
-       // e.g. deleting a page.
+       // Use destructive buttons for actions that remove or limit, such as deleting a page or blocking a user.
        // This should not be used for cancel buttons.
        //
        // Markup:
index d85cc98..dc2ca52 100644 (file)
@@ -6,8 +6,11 @@
 
 // Mixins
 .mixin-mw-ui-icon-bgimage(@iconSvg, @iconPng) {
-       &.mw-ui-icon:before {
-               .background-image-svg(@iconSvg, @iconPng);
+       &.mw-ui-icon {
+               &:after,
+               &:before {
+                       .background-image-svg(@iconSvg, @iconPng);
+               }
        }
 }
 
                }
        }
 
-       &:before {
+       &.mw-ui-icon-after:after,
+       &.mw-ui-icon-before:before,
+       &.mw-ui-icon-element:before {
                background-position: 50% 50%;
                float: left;
                display: block;
                background-repeat: no-repeat;
                background-size: 100% auto;
-               position: relative;
                min-height: @iconSize;
                content: '';
        }
        // Styleguide 4.1.2
        &.mw-ui-icon-before {
                &:before {
+                       position: relative;
                        width: @iconSize;
                        margin-right: @gutterWidth;
                }
        }
+
+       // Icons with text before
+       //
+       // Markup:
+       // <div class="mw-ui-icon mw-ui-icon-after mw-ui-icon-ok mw-ui-progressive mw-ui-button">OK</div>
+       //
+       // Styleguide 4.1.3
+       &.mw-ui-icon-after {
+               &:after {
+                       position: relative;
+                       float: right;
+                       width: @iconSize;
+                       margin-left: @gutterWidth;
+               }
+       }
 }
 
 // Icons
index 0bbf8fa..8ba57f6 100644 (file)
@@ -1,31 +1,15 @@
 /*!
- * .hlist fallbacks for IE 6, 7 and 8.
+ * .hlist fallbacks for IE 8.
  * @author [[User:Edokter]]
  */
 ( function ( mw, $ ) {
        var profile = $.client.profile();
 
-       if ( profile.name === 'msie' ) {
-               if ( profile.versionNumber === 8 ) {
-                       /* IE 8: Add pseudo-selector class to last-child list items */
-                       mw.hook( 'wikipage.content' ).add( function ( $content ) {
-                               $content.find( '.hlist' ).find( 'dd:last-child, dt:last-child, li:last-child' )
-                                       .addClass( 'hlist-last-child' );
-                       } );
-               }
-               else if ( profile.versionNumber <= 7 ) {
-                       /* IE 7 and below: Generate interpuncts and parentheses */
-                       mw.hook( 'wikipage.content' ).add( function ( $content ) {
-                               var $hlists = $content.find( '.hlist' );
-                               $hlists.find( 'dt:not(:last-child)' )
-                                       .append( ': ' );
-                               $hlists.find( 'dd:not(:last-child)' )
-                                       .append( '<b>·</b> ' );
-                               $hlists.find( 'li:not(:last-child)' )
-                                       .append( '<b>·</b> ' );
-                               $hlists.find( 'dl dl, dl ol, dl ul, ol dl, ol ol, ol ul, ul dl, ul ol, ul ul' )
-                                       .prepend( '( ' ).append( ') ' );
-                       } );
-               }
+       if ( profile.name === 'msie' && profile.versionNumber === 8 ) {
+               /* Add pseudo-selector class to last-child list items */
+               mw.hook( 'wikipage.content' ).add( function ( $content ) {
+                       $content.find( '.hlist' ).find( 'dd:last-child, dt:last-child, li:last-child' )
+                               .addClass( 'hlist-last-child' );
+               } );
        }
 }( mediaWiki, jQuery ) );
index a9df683..529ab82 100644 (file)
@@ -941,7 +941,7 @@ class ParserTest {
                $tables = array( 'user', 'user_properties', 'user_former_groups', 'page', 'page_restrictions',
                        'protected_titles', 'revision', 'text', 'pagelinks', 'imagelinks',
                        'categorylinks', 'templatelinks', 'externallinks', 'langlinks', 'iwlinks',
-                       'site_stats', 'hitcounter', 'ipblocks', 'image', 'oldimage',
+                       'site_stats', 'ipblocks', 'image', 'oldimage',
                        'recentchanges', 'watchlist', 'interwiki', 'logging',
                        'querycache', 'objectcache', 'job', 'l10n_cache', 'redirect', 'querycachetwo',
                        'archive', 'user_groups', 'page_props', 'category', 'msg_resource', 'msg_resource_links'
index c90c4f6..8dfb4dd 100644 (file)
@@ -155,6 +155,39 @@ Template:OpenTable
 {|
 !!endarticle
 
+!!article
+Template:EmptyLITest
+!!text
+*a
+*
+*
+*b
+!!endarticle
+
+!!article
+Template:EmptyTRTest
+!!text
+{|
+|-
+|-
+|foo
+|-
+|-
+|bar
+|}
+!!endarticle
+
+!!article
+Template:EmptyTRWithHTMLAttrTest
+!!text
+<table>
+<tr align="center"></tr>
+<tr><td>foo</td></tr>
+<tr align="center"></tr>
+<tr><td>bar</td></tr>
+</table>
+!!endarticle
+
 ###
 ### Basic tests
 ###
@@ -1328,8 +1361,7 @@ parsoid
 !! wikitext
 {{echo|&ndash;}}
 !! html
-<p><span typeof="mw:Transclusion mw:Entity" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&amp;ndash;"}},"i":0}}]}'>&ndash;</span>
-</p>
+<p><span typeof="mw:Transclusion mw:Entity" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&amp;ndash;"}},"i":0}}]}'>&ndash;</span></p>
 !! end
 
 !! test
@@ -1488,6 +1520,19 @@ Comment semantics: unclosed comment at end
 
 !! end
 
+# Bug 58184: document parsoid's behaviour
+!! test
+Suppress comment closing tag in lenient browsers
+!! options
+parsoid=wt2html,html2html
+!! wikitext
+<!-- Browsers--!> think this is closed -->
+!! html/php
+
+!! html/parsoid
+<!-- Browsers--¡> think this is closed -->
+!! end
+
 !! test
 Comment in template title
 !! wikitext
@@ -1649,6 +1694,11 @@ x <div>foo</div> z
 <p>z</p>
 !! end
 
+# Tidy strips out the empty <div> tags. Parsoid doesn't.
+# So, we have a separate section for Parsoid. We don't want
+# to mimic this stripping behavior in Parsoid. It affects
+# editing experience and also requires us to maintain additional
+# info for RT-ing.
 !! test
 Empty lines between lines with block tags
 !! wikitext
@@ -1687,6 +1737,19 @@ b
 <p>d</p>
 <p><br /></p>
 <div>e</div>
+!! html/parsoid
+<div data-parsoid='{"stx":"html"}'></div>
+
+<p><br /></p>
+<div data-parsoid='{"stx":"html"}'></div><p>a</p>
+
+<p>b</p>
+<div data-parsoid='{"stx":"html"}'>a</div><p>b</p>
+
+<div data-parsoid='{"stx":"html"}'>b</div><p>d</p>
+
+<p><br /></p>
+<div data-parsoid='{"stx":"html"}'>e</div>
 !! end
 
 ## PHP parser emits output which is broken
@@ -1709,6 +1772,22 @@ b</div>
 <p>b</p>
 !! end
 
+## SSS FIXME: I can come up with other scenarios where this doesn't work because
+## of eager output of buffered tokens in the p-wrapper. But, I'm going to ignore
+## them for now.
+!! test
+P-wrapping should leave sol-transparent tags outside p-tags where possible
+!! options
+parsoid=wt2html
+!! wikitext
+a [[Category:A1]] [[Category:A2]]
+[[Category:A3]]
+[[Category:A4]]
+!! html/parsoid
+<p>a</p>
+<link href="Category:A1"/> <link href="Category:A2"/> <link href="Category:A3"/> <link href="Category:A4"/>
+!! end
+
 ###
 ### Preformatted text
 ###
@@ -1966,8 +2045,11 @@ Entities inside <pre>
 </p>
 !! end
 
+# Parsoid doesn't strip empty tags, like Tidy does.
 !! test
 Empty pre; pre inside other HTML tags (bug 54946)
+!! options
+parsoid=wt2html,wt2wt
 !! wikitext
 a
 
@@ -1975,7 +2057,7 @@ a
 foo
 </pre></div>
 <pre></pre>
-!! html
+!! html/php
 <p>a
 </p>
 <div><pre>
@@ -1983,12 +2065,18 @@ foo
 </pre></div>
 <pre></pre>
 
-!! html+tidy
+!! html/php+tidy
 <p>a</p>
 <div>
 <pre>
 foo
 </pre></div>
+!! html/parsoid
+<p>a</p>
+
+<div><pre>foo
+</pre></div>
+<pre></pre>
 !! end
 
 !! test
@@ -2156,10 +2244,10 @@ parsoid=wt2html
 <table><pre></pre></table>
 
 !! html/parsoid
-<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>&lt;pre </span>
-<pre>x</pre>
+<p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>&lt;pre </p><pre>x</pre>
+
+<p>&lt;pre </p>
 
-<span>&lt;pre </span>
 <table></table>
 !! end
 
@@ -2559,12 +2647,8 @@ c
 
 !! html/parsoid
 <pre>a</pre>
-<table>
-<tbody>
-<tr>
-<td> b</td></tr>
+ <table>
+ <tbody><tr><td> b</td></tr>
  </tbody></table>
 !!end
 
@@ -2613,6 +2697,12 @@ a
  c <blockquote> foo </blockquote>
 <pre><span> foo </span>
 </pre>
+!! html/parsoid
+ <p>a </p><p data-parsoid='{"stx":"html"}'> foo </p>
+ <p>b </p><div data-parsoid='{"stx":"html"}'> foo </div>
+ <p>c </p><blockquote data-parsoid='{"stx":"html"}'> foo </blockquote>
+<pre><span> foo </span>
+</pre>
 !! html+tidy
 <p>a</p>
 <p>foo</p>
@@ -2637,6 +2727,9 @@ a
 </pre>
  b <div> foo </div>
 
+!! html/parsoid
+<pre>a <span data-parsoid='{"stx":"html"}'>foo</span></pre>
+ b <div data-parsoid='{"stx":"html"}'> foo </div>
 !! html+tidy
 <pre>
 a <span>foo</span>
@@ -2878,8 +2971,7 @@ parsoid=wt2html,wt2wt
 {{echo| [[Category:foo]]}} <!-- No pre-wrapping -->
 !! html
  <link rel="mw:PageProp/Category" href="./Category:Foo"> <!-- No pre-wrapping -->
-<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":" [[Category:foo]]"}},"i":0}}]}'> </span>
-<link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1"> <!-- No pre-wrapping -->
+<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":" [[Category:foo]]"}},"i":0}}]}'> </span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1"> <!-- No pre-wrapping -->
 !! end
 
 !! test
@@ -2892,7 +2984,6 @@ parsoid=wt2html,wt2wt
 !! html
 <pre>
 <link rel="mw:PageProp/Category" href="./Category:Foo"> a
-
 <link rel="mw:PageProp/Category" href="./Category:Foo"> <span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b"}},"i":0}}]}'>b</span></pre>
 !! end
 
@@ -4004,8 +4095,8 @@ External links: with no contents
 </p>
 !! html/parsoid
 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo"></a></p>
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo">Bar</a></p>
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo"><span>Bar</span></a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" title="wikipedia:Foo">Bar</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" title="wikipedia:Foo"><span>Bar</span></a></p>
 !! end
 
 !! test
@@ -4751,7 +4842,7 @@ Parenthesis in external links, w/ transclusion or comment
 </p><p>(<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>)
 </p>
 !! html/parsoid
-<p>(<a data-mw='{"attribs":[[{"txt":"href"},{"html":"http://example.com/&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;hi&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[20,31,null,null]}\">hi&lt;/span>"}]]}' typeof="mw:ExpandedAttrs" about="#mwt2" rel="mw:ExtLink" href="http://example.com/hi" data-parsoid='{"stx":"url","a":{"href":"http://example.com/hi"},"sa":{"href":"http://example.com/{{echo|hi}}"}}'>http://example.com/hi</a>)</p>
+<p>(<a typeof="mw:ExpandedAttrs" about="#mwt2" rel="mw:ExtLink" href="http://example.com/hi" data-parsoid='{"stx":"url","a":{"href":"http://example.com/hi"},"sa":{"href":"http://example.com/{{echo|hi}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"http://example.com/&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[20,31,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;hi&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">hi&lt;/span>"}]]}'>http://example.com/hi</a>)</p>
 
 <p>(<a rel="mw:ExtLink" href="http://example.com" data-parsoid='{"stx":"url","a":{"href":"http://example.com"},"sa":{"href":"http://example.com&lt;!-- hi -->"}}'>http://example.com</a>)</p>
 !! end
@@ -5129,8 +5220,8 @@ Accept "!!" in table data
 </td></tr></table>
 
 !! html/parsoid
-<table data-parsoid='{}'>
-<tbody data-parsoid='{}'><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'> Foo!! </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'></td></tr>
+<table>
+<tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'> Foo!! </td><td data-parsoid='{"stx_v":"row","autoInsertedEnd":true}'></td></tr>
 </tbody></table>
 !! end
 
@@ -5574,7 +5665,7 @@ Wikitext table with html-syntax row
 !! test
 Implicit <td> after a |-
 !! options
-parsoid=wt2html,wt2wt
+parsoid=wt2html,html2html
 !! wikitext
 {|
 |-
@@ -5598,7 +5689,7 @@ a
 !! test
 <pre> tags should be recognized in an explicit <td> context, but not in an implicit <td> context
 !! options
-parsoid=wt2html,wt2wt
+parsoid=wt2html,html2html
 !! wikitext
 {|
 |-
 !! end
 
 # PHP + Tidy strips the list out of the table; Parsoid wraps it.
+# Parsoid generates the missing <td>, so wt2wt won't succeed.
 !! test
 Lists should be recognized in an implicit <td> context
 !! options
-parsoid=wt2html,wt2wt
+parsoid=wt2html,html2html
 !! wikitext
 {|
 |-
@@ -5679,14 +5771,19 @@ parsoid=wt2html,wt2wt
 {|
 |baz
 |}<b>quux</b>
-!! html
-<table><tbody>
+!! html+tidy
+<table>
 <tr>
-<td>foo</td></tr></tbody></table> bar
+<td>foo</td>
+</tr>
+</table>
+<p>bar</p>
 <table>
-<tbody>
 <tr>
-<td>baz</td></tr></tbody></table><b>quux</b>
+<td>baz</td>
+</tr>
+</table>
+<p><b>quux</b></p>
 !! end
 
 !! test
@@ -6483,7 +6580,7 @@ title=[[User:test/123]]
 <p><a href="#a">b</a>
 </p>
 !! html/parsoid
-<p data-parsoid='{}'><a rel="mw:WikiLink" href="../User:Test/123#a" data-parsoid='{"stx":"piped","a":{"href":"../User:Test/123#a"},"sa":{"href":"#a"}}'>b</a></p>
+<p><a rel="mw:WikiLink" href="../User:Test/123#a" data-parsoid='{"stx":"piped","a":{"href":"../User:Test/123#a"},"sa":{"href":"#a"}}'>b</a></p>
 !! end
 
 !! test
@@ -6503,7 +6600,7 @@ parsoid
 !! wikitext
 {{echo|Some [[Fool]]}}s
 !! html
-<p data-parsoid='{}'><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]"}},"i":0}},"s"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some </span><a rel="mw:WikiLink" href="./Fool" title="Fool" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a></p>
+<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]"}},"i":0}},"s"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some </span><a rel="mw:WikiLink" href="./Fool" title="Fool" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a></p>
 !! end
 
 !! test
@@ -6513,7 +6610,7 @@ parsoid
 !! wikitext
 {{echo|Some [[Fool]]s are '''bold and foolish'''}}
 !! html
-<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]s are &#39;&#39;&#39;bold and foolish&#39;&#39;&#39;"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some <a rel="mw:WikiLink" href="./Fool" title="Fool" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a> are <b data-parsoid="{}">bold and foolish</b></p>
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]s are &#39;&#39;&#39;bold and foolish&#39;&#39;&#39;"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some <a rel="mw:WikiLink" href="./Fool" title="Fool" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a> are <b>bold and foolish</b></p>
 !! end
 
 !! article
@@ -6624,20 +6721,28 @@ Link with angle bracket after anchor
 
 !! test
 Inline interwiki link
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[MeatBall:SoftSecurity]]
-!! html
+!! html/php
 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity" class="extiw" title="meatball:SoftSecurity">MeatBall:SoftSecurity</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?SoftSecurity" title="meatball:SoftSecurity">MeatBall:SoftSecurity</a></p>
 !! end
 
 !! test
 Inline interwiki link with empty title (bug 2372)
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[MeatBall:]]
-!! html
+!! html/php
 <p><a href="http://www.usemod.com/cgi-bin/mb.pl" class="extiw" title="meatball:">MeatBall:</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?" title="meatball:">MeatBall:</a></p>
 !! end
 
 !! test
@@ -6666,6 +6771,10 @@ Interwiki link with fragment (bug 2130)
 !! end
 
 # Ideally the wikipedia: prefix here should be proto-relative too
+# [CSA]: this is kind of a bogus test, as the PHP parser test doesn't
+# define the 'en' prefix, and originally the test used 'wikipedia',
+# which isn't a localinterwiki prefix hence the links to the 'en:Foo'
+# article.
 !! test
 Different interwiki prefixes mapping to the same URL
 !! wikitext
@@ -6683,19 +6792,19 @@ Different interwiki prefixes mapping to the same URL
 
 [[  wikiPEdia :Foo]]
 !! html/parsoid
-<p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}'>en:Foo</a></p>
+<p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}' title="en:Foo">en:Foo</a></p>
 
-<p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}'>Foo</a></p>
+<p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}' title="en:Foo">Foo</a></p>
 
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true}'>wikipedia:Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true}' title="wikipedia:Foo">wikipedia:Foo</a></p>
 
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":":wikipedia:Foo"},"isIW":true}'>Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":":wikipedia:Foo"},"isIW":true}' title="wikipedia:Foo">Foo</a></p>
 
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":"wikipedia:en:Foo"},"isIW":true}'>wikipedia:en:Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":"wikipedia:en:Foo"},"isIW":true}' title="wikipedia:en:Foo">wikipedia:en:Foo</a></p>
 
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":":wikipedia:en:Foo"},"isIW":true}'>wikipedia:en:Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":":wikipedia:en:Foo"},"isIW":true}' title="wikipedia:en:Foo">wikipedia:en:Foo</a></p>
 
-<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"  wikiPEdia :Foo"},"isIW":true}'>  wikiPEdia :Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"  wikiPEdia :Foo"},"isIW":true}' title="wikipedia:Foo">  wikiPEdia :Foo</a></p>
 !! end
 
 !! test
@@ -6707,60 +6816,97 @@ Interwiki links that cannot be represented in wiki syntax
 [http://de.wikipedia.org/wiki/Foo?action=history has query]
 [http://de.wikipedia.org/wiki/#foo is just fragment]
 
+!! html/php
+<p><a href="http://www.usemod.com/cgi-bin/mb.pl?ok" class="extiw" title="meatball:ok">meatball:ok</a>
+<a href="http://www.usemod.com/cgi-bin/mb.pl?ok#foo" class="extiw" title="meatball:ok">ok with fragment</a>
+<a href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well%3F" class="extiw" title="meatball:ok as well?">ok ending with ? mark</a>
+<a rel="nofollow" class="external text" href="http://de.wikipedia.org/wiki/Foo?action=history">has query</a>
+<a rel="nofollow" class="external text" href="http://de.wikipedia.org/wiki/#foo">is just fragment</a>
+</p>
 !! html/parsoid
-<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok">meatball:ok</a>
-<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok#foo">ok with fragment</a>
-<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well?">ok ending with ? mark</a>
+<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok" title="meatball:ok">meatball:ok</a>
+<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok#foo" title="meatball:ok">ok with fragment</a>
+<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well?" title="meatball:ok as well?">ok ending with ? mark</a>
 <a rel="mw:ExtLink" href="http://de.wikipedia.org/wiki/Foo?action=history">has query</a>
 <a rel="mw:ExtLink" href="http://de.wikipedia.org/wiki/#foo">is just fragment</a></p>
 !! end
 
 !! test
 Interwiki links: trail
-!! options
-parsoid
 !! wikitext
 [[wikipedia:Foo|Ba]]r
-!! html
-<p data-parsoid='{}'><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true,"tail":"r"}'>Bar</a></p>
+!! html/php
+<p><a href="http://en.wikipedia.org/wiki/Foo" class="extiw" title="wikipedia:Foo">Bar</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"piped","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"wikipedia:Foo"},"isIW":true,"tail":"r"}' title="wikipedia:Foo">Bar</a></p>
 !! end
 
 !! test
 Local interwiki link
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[local:Template:Foo]]
-!! html
+!! html/php
 <p><a href="/wiki/Template:Foo" title="Template:Foo">local:Template:Foo</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Template:Foo" title="Template:Foo">local:Template:Foo</a></p>
 !! end
 
+# Parsoid does not mark self-links, by design.
 !! test
 Local interwiki link: self-link to current page
 !! options
 title=[[Main Page]]
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[local:Main Page]]
-!! html
+!! html/php
 <p><strong class="selflink">local:Main Page</strong>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">local:Main Page</a></p>
 !! end
 
 !! test
 Local interwiki link: prefix only (bug 64167)
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[local:]]
-!! html
+!! html/php
 <p><a href="/wiki/Main_Page" title="Main Page">local:</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">local:</a></p>
 !! end
 
 !! test
 Local interwiki link: with additional interwiki prefix (bug 61357)
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[local:meatball:Hello]]
-!! html
+!! html/php
 <p><a href="http://www.usemod.com/cgi-bin/mb.pl?Hello" class="extiw" title="meatball:Hello">local:meatball:Hello</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?Hello" title="meatball:Hello">local:meatball:Hello</a></p>
+!! end
+
+!! test
+Multiple local interwiki link prefixes
+!! wikitext
+[[local:local:local:local:mi:local:Foo]]
+!! options
+parsoid=wt2html,wt2wt,html2html
+!! html/php
+<p><a href="/wiki/Foo" title="Foo">local:local:local:local:mi:local:Foo</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo">local:local:local:local:mi:local:Foo</a></p>
 !! end
 
 ###
@@ -6777,12 +6923,14 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
 !! end
 
 !! test
 Interlanguage link with spacing
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 Blah blah blah
 [[   zh  :    Chinese     ]]
@@ -6790,8 +6938,8 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
 !! end
 
 !! test
@@ -6804,9 +6952,9 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Spanish"/>
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Spanish"/>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
 !! end
 
 !! test
@@ -6819,9 +6967,9 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Spanish" data-parsoid='{"stx":"simple","a":{"href":"//es.wikipedia.org/wiki/Spanish"},"sa":{"href":"   es :Spanish"}}'/>
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese" data-parsoid='{"stx":"simple","a":{"href":"//zh.wikipedia.org/wiki/Chinese"},"sa":{"href":" ZH :Chinese"}}'/>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Spanish" data-parsoid='{"stx":"simple","a":{"href":"http://es.wikipedia.org/wiki/Spanish"},"sa":{"href":"   es :Spanish"}}'/>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese" data-parsoid='{"stx":"simple","a":{"href":"http://zh.wikipedia.org/wiki/Chinese"},"sa":{"href":" ZH :Chinese"}}'/>
 !! end
 
 !! test
@@ -6835,8 +6983,8 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
 !! end
 
 !! test
@@ -6851,9 +6999,9 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Spanish"/>
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Spanish"/>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/Chinese"/>
 !! end
 
 !! test
@@ -6865,8 +7013,8 @@ Blah blah blah
 <p>Blah blah blah
 </p>
 !! html/parsoid
-<p>Blah blah blah
-<link rel="mw:PageProp/Language" title="Multilingual" href="//wikisource.org/wiki/Article"/></p>
+<p>Blah blah blah</p>
+<link rel="mw:PageProp/Language" title="Multilingual" href="http://wikisource.org/wiki/Article"/>
 !! end
 
 !! test
@@ -6895,68 +7043,102 @@ He&amp;nbsp;llo [[He&amp;nbsp;llo]]
 
 !! test
 Parsoid: handle constructor well
-!! options
-parsoid
 !! wikitext
 [[constructor]]
 
 [[constructor:foo]]
-!! html
+!! html/php
+<p><a href="/index.php?title=Constructor&amp;action=edit&amp;redlink=1" class="new" title="Constructor (page does not exist)">constructor</a>
+</p><p><a href="/index.php?title=Constructor:foo&amp;action=edit&amp;redlink=1" class="new" title="Constructor:foo (page does not exist)">constructor:foo</a>
+</p>
+!! html/parsoid
 <p><a rel="mw:WikiLink" href="./Constructor" title="Constructor" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Constructor&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor&quot;}}">constructor</a></p>
 
 <p><a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Foo&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor:foo&quot;}}">constructor:foo</a></p>
 !! end
 
+!! article
+ko:
+!! text
+Test.
+!! endarticle
+
+# Note that `ko` isn't a known interlanguage prefix
 !! test
 Parsoid: recognize interlanguage links without a target page
 !! options
-parsoid
+ill
 !! wikitext
+[[es:]]
+
 [[ko:]]
-!! html
-<p><link rel="mw:PageProp/Language" href="http://ko.wikipedia.org/wiki/"></p>
+!! html/php
+es:
+!! html/parsoid
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/"/>
+
+<p><a rel="mw:WikiLink" href="./Ko:" title="Ko:">ko:</a></p>
 !! end
 
+# Note that `ko` isn't a known interwiki prefix
 !! test
 Parsoid: recognize interwiki links without a target page
 !! options
-parsoid
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
+[[:es:]]
+
 [[:ko:]]
-!! html
-<p><a rel="mw:ExtLink" href="//ko.wikipedia.org/wiki/">ko:</a></p>
+!! html/php
+<p><a href="http://es.wikipedia.org/wiki/" class="extiw" title="es:">es:</a>
+</p><p><a href="/wiki/Ko:" title="Ko:">ko:</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/" title="es:">es:</a></p>
+<p><a rel="mw:WikiLink" href="./Ko:" title="Ko:">ko:</a></p>
 !! end
 
 !! test
-Parsoid: Bug #45209, handle interwiki links pointing to the current wiki as plain wiki links
-!! options
-parsoid
+Handle interwiki links pointing to the current wiki as plain wiki links (bug 45209)
 !! wikitext
-[[en:Foo]]
-!! html
-<p><a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"en:Foo"}}'>Foo</a></p>
+[[mi:Foo]]
+!! html/php
+<p><a href="/wiki/Foo" title="Foo">mi:Foo</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"mi:Foo"}}'>mi:Foo</a></p>
 !! end
 
 !! test
 Interlanguage link with preceding local interwiki link (bug 68085)
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 Blah blah blah
 [[local:es:Spanish]]
-!! html
+!! html/php
 <p>Blah blah blah
 <a href="http://es.wikipedia.org/wiki/Spanish" class="extiw" title="es:Spanish">local:es:Spanish</a>
 </p>
+!! html/parsoid
+<p>Blah blah blah
+<a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/Spanish" title="es:Spanish">local:es:Spanish</a></p>
 !! end
 
 !! test
 Looks like an interlanguage link, but is actually a local interwiki
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 Blah blah blah
 [[mi:Template:Foo]]
-!! html
+!! html/php
 <p>Blah blah blah
 <a href="/wiki/Template:Foo" title="Template:Foo">mi:Template:Foo</a>
 </p>
+!! html/parsoid
+<p>Blah blah blah
+<a rel="mw:WikiLink" href="Template:Foo" title="Template:Foo">mi:Template:Foo</a></p>
 !! end
 
 ###
@@ -6980,9 +7162,8 @@ parsoid=wt2html,wt2wt
 !! wikitext
 #REDIRECT [[Main_Page]]
 #REDIRECT [[<nowiki>[[Bar]]</nowiki>]]
-!! html
-<link rel="mw:PageProp/redirect" href="./Main_Page">
-<link rel="mw:PageProp/redirect" href="./%5B%5BBar%5D%5D">
+!! html/parsoid
+<link rel="mw:PageProp/redirect" href="./Main_Page"><link rel="mw:PageProp/redirect" href="./%5B%5BBar%5D%5D">
 !! end
 
 !! test
@@ -7248,11 +7429,12 @@ Horizontal ruler (should it add that extra space?)
 <hr >
 foo <hr
 > bar
-!! html
+!! html+tidy
 <hr />
 <hr />
-foo <hr /> bar
-
+<p>foo</p>
+<hr />
+<p>bar</p>
 !! end
 
 !! test
@@ -7718,6 +7900,8 @@ Unbalanced closing non-block tags don't break a list
 !! test
 Unclosed formatting tags that straddle lists are closed and reopened
 (php parser relies on Tidy to fix up)
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 # <s> a
 # b </s>
@@ -7727,12 +7911,8 @@ Unclosed formatting tags that straddle lists are closed and reopened
 <li><s>b</s></li>
 </ol>
 !! html/parsoid
-<ol>
-<li> <s> a </s>
-</li>
-<li> <s> b </s>
-</li>
-</ol>
+<ol><li> <s> a</s></li>
+<li><s> b </s></li></ol>
 !! end
 
 # Parsoid fails this test, but it might be tricky to support properly.
@@ -9237,19 +9417,15 @@ some
 <h3><span class="mw-headline" id="here">here</span></h3>
 
 !! html/parsoid
-<!-- comment --><meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/><!-- comment --><meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/><!-- comment -->
-<h2 data-parsoid='{}'> hu </h2>
+<!-- comment --><meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/><!-- comment --><meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/><!-- comment --><h2> hu </h2>
 
 <meta typeof="mw:Includes/NoInclude" data-parsoid='{"src":"&lt;noinclude>"}'/>
+<p>some</p>
+<meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/><ul><li> stuff</li>
+<li> here</li></ul>
 
-<p data-parsoid='{}'>some</p>
-<meta typeof="mw:Includes/NoInclude/End" data-parsoid='{"src":"&lt;/noinclude>"}'/>
-<ul data-parsoid='{}'>
-<li data-parsoid='{}'> stuff</li>
-
-<li data-parsoid='{}'> here</li></ul>
+<meta typeof="mw:Includes/IncludeOnly" data-parsoid='{"src":"&lt;includeonly>can have stuff&lt;/includeonly>"}'/><meta typeof="mw:Includes/IncludeOnly/End" data-parsoid='{"src":""}'/><h3> here </h3>
 
-<h3 data-parsoid='{}'> here </h3>
 !! end
 
 # TODO: test with DOM fragment reuse!
@@ -9270,25 +9446,17 @@ c}}d
 
 b}}
 !! html
-a<span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b
-<table></table>c"}},"i":0}}]}'>b</span>
-<table about="#mwt1"></table><span about="#mwt1">c</span>d
-
-
-<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b\n<table></table>\nc"}},"i":0}},"d"]}'>ab</p><span about="#mwt2">
-</span>
-<table about="#mwt2"></table><span about="#mwt2">
-</span>
-<p about="#mwt2">cd</p>
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b&lt;table>&lt;/table>c"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>ab</p><table about="#mwt1" data-parsoid='{"stx":"html"}'></table><p about="#mwt1">cd</p>
 
+<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["a",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"b\n&lt;table>&lt;/table>\nc"}},"i":0}},"d"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>ab</p><span about="#mwt2">
+</span><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><span about="#mwt2">
+</span><p about="#mwt2">cd</p>
 
-<p about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n\n<table></table>\n\nb"}},"i":0}}]}'>a</p><span about="#mwt3">
+<p about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n\n&lt;table>&lt;/table>\n\nb"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>a</p><span about="#mwt3">
 
-</span>
-<table about="#mwt3"></table><span about="#mwt3">
+</span><table about="#mwt3" data-parsoid='{"stx":"html"}'></table><span about="#mwt3">
 
-</span>
-<p about="#mwt3">b</p>
+</span><p about="#mwt3">b</p>
 !! end
 
 !! test
@@ -9405,11 +9573,9 @@ parsoid=wt2html,wt2wt
 |foo
 |}
 !!html/parsoid
-<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":""}},"i":0}}]}'></span>
-<table width="100%">
-<tbody>
-<tr>
-<td>foo</td></tr></tbody></table>
+<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":""}},"i":0}}]}'></span><table width="100%">
+<tbody><tr><td>foo</td></tr>
+</tbody></table>
 !!end
 
 !!test
@@ -9592,7 +9758,7 @@ Templates: Correctly encapsulate templates producing </p> tag without a correspo
 b</p>}}
 !! html/parsoid
 <p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\nb&lt;/p>"}},"i":0}}]}'>a
-b</p><p></p>
+b</p>
 !!end
 
 !!test
@@ -10841,8 +11007,7 @@ parsoid=wt2html,wt2wt,html2html
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span>
-</p>
+<p><span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
 !! end
 
 !! test
@@ -10853,8 +11018,7 @@ Simple image (using File: namespace, now canonical)
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span>
-</p>
+<p><span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
 !! end
 
 !! test
@@ -10925,9 +11089,9 @@ thumbsize=220
 <div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Caption <a href="/index.php?title=Link1&amp;action=edit&amp;redlink=1" class="new" title="Link1 (page does not exist)">Link1</a> [[]] <a href="/index.php?title=Link2&amp;action=edit&amp;redlink=1" class="new" title="Link2 (page does not exist)">Link2</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption [[Link1]]\n[[]]\n[[Link2]]\n"}],"dsr":[0,59,2,2]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"dsr":[2,null,null,null]}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption data-parsoid='{"dsr":[null,57,null,null]}'>Caption <a rel="mw:WikiLink" href="./Link1" title="Link1" data-parsoid='{"stx":"simple","a":{"href":"./Link1"},"sa":{"href":"Link1"},"dsr":[32,41,2,2]}'>Link1</a>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption [[Link1]]\n[[]]\n[[Link2]]\n"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>Caption <a rel="mw:WikiLink" href="./Link1" title="Link1" data-parsoid='{"stx":"simple","a":{"href":"./Link1"},"sa":{"href":"Link1"}}'>Link1</a>
 [[]]
-<a rel="mw:WikiLink" href="./Link2" title="Link2" data-parsoid='{"stx":"simple","a":{"href":"./Link2"},"sa":{"href":"Link2"},"dsr":[47,56,2,2]}'>Link2</a>
+<a rel="mw:WikiLink" href="./Link2" title="Link2" data-parsoid='{"stx":"simple","a":{"href":"./Link2"},"sa":{"href":"Link2"}}'>Link2</a>
 </figcaption></figure>
 !! end
 
@@ -10961,7 +11125,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:139px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" width="137" height="16" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/206px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/274px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is a caption</div></div></div>
 
 !! html/parsoid
-<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[24,38,null,null]}\">137px&lt;/span>"}]]}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
+<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt2" data-mw='{"attribs":[["thumbnail",{"html":"thumb"}],["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[24,38,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">137px&lt;/span>"}]]}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
 !! end
 
 !! test
@@ -10972,7 +11136,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:139px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" width="137" height="16" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/206px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/274px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is a caption</div></div></div>
 
 !! html/parsoid
-<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" data-mw='{"attribs":[["thumbnail",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;thumb&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[18,32,null,null]}\">thumb&lt;/span>"}],["width",{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[33,47,null,null]}\">137px&lt;/span>"}]]}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
+<figure typeof="mw:Image/Thumb mw:ExpandedAttrs" about="#mwt3" data-mw='{"attribs":[["thumbnail",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[18,32,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;thumb&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">thumb&lt;/span>"}],["width",{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[33,47,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;137px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">137px&lt;/span>"}]]}'><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg" height="16" width="137"/></a><figcaption>This is a caption</figcaption></figure>
 !! end
 
 !! test
@@ -10983,7 +11147,7 @@ parsoid=wt2html,wt2wt,html2html
 <p><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" width="50" height="6" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/100px-Foobar.jpg 2x" /></a>
 </p>
 !! html/parsoid
-<p><span typeof="mw:Image mw:ExpandedAttrs" about="#mwt2" data-mw='{"attribs":[["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;50px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[18,31,null,null]}\">50px&lt;/span>"}]]}' data-parsoid='{"optList":[{"ck":"width","ak":"{{echo|50px}}"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
+<p><span typeof="mw:Image mw:ExpandedAttrs" about="#mwt2" data-parsoid='{"optList":[{"ck":"width","ak":"{{echo|50px}}"}]}' data-mw='{"attribs":[["width",{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[{&amp;quot;k&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;spc&amp;quot;:[&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;]}]],&amp;quot;dsr&amp;quot;:[18,31,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;echo&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Echo&amp;quot;},&amp;quot;params&amp;quot;:{&amp;quot;1&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;50px&amp;quot;}},&amp;quot;i&amp;quot;:0}}]}\">50px&lt;/span>"}]]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50"/></a></span></p>
 !! end
 
 ## Parsoid does not provide editing support for images where templates produce multiple image attributes.
@@ -10999,7 +11163,6 @@ Image with multiple attributes from the same template
 <figure class="mw-default-size mw-halign-right" typeof="mw:Image mw:Placeholder"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Caption text</figcaption></figure>
 !! end
 
-# Parsoid's output here is broken (incorrect p-wrapping); see bug 64901.
 !! test
 Image with link tails
 !! options
@@ -11029,8 +11192,8 @@ thumbsize=220
 <p>456</p>
 !! html/parsoid
 <p>123<span class="mw-default-size" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span>456</p>
-123<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></figure>456
-123<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="25" width="220"></a></figure>456
+<p>123</p><figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></figure><p>456</p>
+<p>123</p><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="25" width="220"></a></figure><p>456</p>
 !! end
 
 !! test
@@ -11102,7 +11265,7 @@ parsoid=wt2html,wt2wt,html2html
 <a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/177px-Foobar.jpg" width="177" height="20" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/265px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/353px-Foobar.jpg 2x" /></a>
 </p>
 !! html/parsoid
-<p><span typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="2" width="20"/></a></span><span typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="20" width="177"/></a></span></p>
+<p><span typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="2" width="20"/></a></span> <span typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="20" width="177"/></a></span></p>
 !! end
 
 !! test
@@ -11383,7 +11546,9 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">caption</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -11400,7 +11565,9 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 ###################
@@ -11527,7 +11694,10 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption"></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure><figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure><figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure><figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
+<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
+<figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
+<figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
+<figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a></figure>
 !! end
 
 ###################
@@ -11886,7 +12056,9 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tleft"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>caption</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! article
@@ -11927,12 +12099,7 @@ Parsoid-specific image handling - simple image with size and middle alignment
 !! wikitext
 [[File:Foobar.jpg|middle|50px]]
 !! html/parsoid
-<p><span class="mw-valign-middle" typeof="mw:Image">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50">
-</a>
-</span>
-</p>
+<p><span class="mw-valign-middle" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50"></a></span></p>
 !! end
 
 !! test
@@ -11943,12 +12110,7 @@ parsoid=wt2wt,wt2html,html2html
 !! wikitext
 [[Image:Foobar.jpg|middle|50px]]
 !! html/parsoid
-<p><span class="mw-valign-middle" typeof="mw:Image">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50">
-</a>
-</span>
-</p>
+<p><span class="mw-valign-middle" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50"></a></span></p>
 !! end
 
 !! test
@@ -11968,12 +12130,7 @@ parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[Image:Foobar.jpg|50px|middle]]
 !! html/parsoid
-<p><span class="mw-valign-middle" typeof="mw:Image">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50">
-</a>
-</span>
-</p>
+<p><span class="mw-valign-middle" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50"></a></span></p>
 !! end
 
 !! test
@@ -11997,12 +12154,7 @@ Parsoid-specific image handling - thumbnail with halign, valign, and caption
 !! wikitext
 [[File:Foobar.jpg|left|baseline|thumb|caption content]]
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="25" width="220" />
-</a>
-<figcaption>caption content</figcaption>
-</figure>
+<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" height="25" width="220" /></a><figcaption>caption content</figcaption></figure>
 !! end
 
 !! test
@@ -12019,12 +12171,7 @@ Parsoid-specific image handling - thumbnail with specific size, halign, valign,
 !! wikitext
 [[Image:Foobar.jpg|right|middle|thumb|50x50px|caption]]
 !! html/parsoid
-<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" />
-</a>
-<figcaption>caption</figcaption>
-</figure>
+<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" height="6" width="50" /></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12044,12 +12191,7 @@ parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[File:Foobar.jpg|frame|500x50px|caption]]
 !! html/parsoid
-<figure typeof="mw:Image/Frame">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941" />
-</a>
-<figcaption>caption</figcaption>
-</figure>
+<figure typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941" /></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12060,12 +12202,7 @@ parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[File:Foobar.jpg|left|baseline|frame|500x50px|caption]]
 !! html/parsoid
-<figure class="mw-halign-left mw-valign-baseline" typeof="mw:Image/Frame">
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941" />
-</a>
-<figcaption>caption</figcaption>
-</figure>
+<figure class="mw-halign-left mw-valign-baseline" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941" /></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -12081,10 +12218,7 @@ Parsoid-specific image handling - simple image with a formatted caption
 !! wikitext
 [[File:Foobar.jpg|<table><tr><td>a</td><td>b</td></tr><tr><td>c</td></tr></table>]]
 !! html/parsoid
-<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&lt;table>&lt;tr>&lt;td>a&lt;/td>&lt;td>b&lt;/td>&lt;/tr>&lt;tr>&lt;td>c&lt;/td>&lt;/tr>&lt;/table>"}'>
-<a href="File:Foobar.jpg">
-<img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941">
-</a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"&lt;table>&lt;tr>&lt;td>a&lt;/td>&lt;td>b&lt;/td>&lt;/tr>&lt;tr>&lt;td>c&lt;/td>&lt;/tr>&lt;/table>"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a></span></p>
 !! end
 
 !! test
@@ -12273,8 +12407,28 @@ Render invalid page names as plain text (bug 51090)
 [[foo&lt;bar]]
 </p>
 !!html/parsoid
-<p>[[./../foo|bar]][[foo�|bar]][[foo/.|bar]][[foo/..|bar]][[foo~~~bar]][[foo>bar]][[foo[bar]][[.]][[..]][[foo././bar]]</p>
-<p>[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"./../foo"}},"i":0}}]}'>./../foo</span>|bar]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/."}},"i":0}}]}'>foo/.</span>|bar]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/.."}},"i":0}}]}'>foo/..</span>|bar]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo~~~~bar"}},"i":0}}]}'>foo~~~~bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo>bar"}},"i":0}}]}'>foo>bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo././bar"}},"i":0}}]}'>foo././bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo{bar"}},"i":0}}]}'>foo{bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo}bar"}},"i":0}}]}'>foo}bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo[bar"}},"i":0}}]}'>foo[bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo]bar"}},"i":0}}]}'>foo]bar</span>]][[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo&lt;bar"}},"i":0}}]}'>foo&lt;bar</span>]]</p>
+<p>[[./../foo|bar]]
+[[foo�|bar]]
+[[foo/.|bar]]
+[[foo/..|bar]]
+[[foo~~~bar]]
+[[foo>bar]]
+[[foo[bar]]
+[[.]]
+[[..]]
+[[foo././bar]]</p>
+
+<p>[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"./../foo"}},"i":0}}]}'>./../foo</span>|bar]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/."}},"i":0}}]}'>foo/.</span>|bar]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo/.."}},"i":0}}]}'>foo/..</span>|bar]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo~~~~bar"}},"i":0}}]}'>foo~~~~bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo>bar"}},"i":0}}]}'>foo>bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo././bar"}},"i":0}}]}'>foo././bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo{bar"}},"i":0}}]}'>foo{bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo}bar"}},"i":0}}]}'>foo}bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo[bar"}},"i":0}}]}'>foo[bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo]bar"}},"i":0}}]}'>foo]bar</span>]]
+[[<span typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo&lt;bar"}},"i":0}}]}'>foo&lt;bar</span>]]</p>
 !!end
 
 !! test
@@ -12513,6 +12667,16 @@ parsoid
 <link rel="mw:PageProp/Category" href="Category:Foo#Bar">
 !! end
 
+!! test
+Normalize hrefs properly before testing for invalid link targets (bug 70894)
+!! options
+parsoid=html2wt
+!! html
+<link rel="mw:PageProp/Category" href="./Category:Toxine_bactérienne"/>
+!! wikitext
+[[Category:Toxine bactérienne]]
+!! end
+
 !! test
 Parsoid: Defaultsort
 !! options
@@ -12537,9 +12701,9 @@ ill
 !! html/php
 es:Alimento fr:Nourriture zh:食品
 !! html/parsoid
-<p><link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Alimento"/>
-<link rel="mw:PageProp/Language" href="//fr.wikipedia.org/wiki/Nourriture"/>
-<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/食品"/></p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/Alimento"/>
+<link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/Nourriture"/>
+<link rel="mw:PageProp/Language" href="http://zh.wikipedia.org/wiki/食品"/>
 !! end
 
 !! test
@@ -12554,10 +12718,10 @@ ill
 !! html/php
 es:1 fr:1
 !! html/parsoid
-<p><link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/1"/>
-<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/2"/>
-<link rel="mw:PageProp/Language" href="//fr.wikipedia.org/wiki/1"/>
-<link rel="mw:PageProp/Language" href="//fr.wikipedia.org/wiki/2"/></p>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/1"/>
+<link rel="mw:PageProp/Language" href="http://es.wikipedia.org/wiki/2"/>
+<link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/1"/>
+<link rel="mw:PageProp/Language" href="http://fr.wikipedia.org/wiki/2"/>
 !! end
 
 ###
@@ -13237,16 +13401,15 @@ parsoid
 </tbody></table>
 !! end
 
-# The PHP parser escapes the opening brace to &#123; for some reason, so
-# disabled this test for it.
 !! test
 div with braces in attribute value
-!! options
-parsoid
 !! wikitext
 <div title="{}">Foo</div>
-!! html
-<div title="{}">Foo</div>
+!! html/php
+<div title="&#123;}">Foo</div>
+
+!! html/parsoid
+<div title="{}">Foo</div>
 !! end
 
 # This it very inconsistent in the PHP parser: it returns 
@@ -13254,17 +13417,19 @@ parsoid
 # 'div with empty attribute value, space before equals'), but strips the
 # attribute completely if the space is missing. We hope that not much content
 # depends on this, so are implementing the behavior below in Parsoid for
-# consistencies' sake. Disabled for the PHP parser. 
+# consistencies' sake.
 # FIXME: fix this behavior in the PHP parser?
 !! test
 div with empty attribute value, no space before equals
 !! options
-parsoid
+parsoid=wt2html,html2html
 !! wikitext
 <div class=>HTML rocks</div>
-!! html
-<div class="">HTML rocks</div>
+!! html/php
+<div>HTML rocks</div>
 
+!! html/parsoid
+<div class="">HTML rocks</div>
 !! end
 
 !! test
@@ -13685,7 +13850,7 @@ Bug 2304: HTML attribute safety (dangerous template; 2309)
 <div title=""></div>
 
 !! html/parsoid
-<div title='" onmouseover="alert(document.cookie)' about="#mwt2" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"title"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;dangerous attribute&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Dangerous_attribute&amp;quot;},&amp;quot;params&amp;quot;:{},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[]],&amp;quot;dsr&amp;quot;:[12,35,null,null]}\">\" onmouseover=\"alert(document.cookie)&lt;/span>"}]]}' data-parsoid='{"stx":"html","a":{"title":"\" onmouseover=\"alert(document.cookie)"},"sa":{"title":"{{dangerous attribute}}"}}'></div>
+<div title='" onmouseover="alert(document.cookie)' about="#mwt2" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"title":"\" onmouseover=\"alert(document.cookie)"},"sa":{"title":"{{dangerous attribute}}"}}' data-mw='{"attribs":[[{"txt":"title"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[]],&amp;quot;dsr&amp;quot;:[12,35,null,null]}\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;dangerous attribute&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Dangerous_attribute&amp;quot;},&amp;quot;params&amp;quot;:{},&amp;quot;i&amp;quot;:0}}]}\">\" onmouseover=\"alert(document.cookie)&lt;/span>"}]]}'></div>
 !! end
 
 !! test
@@ -14005,9 +14170,12 @@ Expansion of multi-line templates in attribute values (bug 6255 sanity check)
 !! wikitext
 <div style="background: 
 #00FF00">-</div>
-!! html
+!! html/php
 <div style="background: #00FF00">-</div>
 
+!! html/parsoid
+<div style="background: 
+#00FF00">-</div>
 !! end
 
 !! test
@@ -14245,6 +14413,10 @@ Nested template calls
 ###
 ### Sanitizer
 ###
+
+# HTML+Tidy effectively strips out the empty tags completely
+# But since Parsoid doesn't it wraps the <s></s> tags in p-tags
+# which Tidy would have done for the PHP parser had there been content inside it.
 !! test
 Sanitizer: Closing of open tags
 !! wikitext
@@ -14252,6 +14424,8 @@ Sanitizer: Closing of open tags
 !! html
 <s></s><table></table>
 
+!! html/parsoid
+<p><s></s></p><table></table>
 !! end
 
 !! test
@@ -14290,16 +14464,19 @@ Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id=
 </p>
 !! end
 
+# In HTML5, the restrictions are that id must contain at least one character,
+# and must not contain any space characters.
 !! test
 Sanitizer: Validating the contents of the id attribute (bug 4515)
 !! options
 disabled
 !! wikitext
-<br id=9 />
+<br id="" /><br id="a space" />
 !! html
-Something, but definitely not <br id="9" />...
+Something ...
 !! end
 
+# In HTML5, id must be unique amongst all the ids in the element's home subtree.
 !! test
 Sanitizer: Validating id attribute uniqueness (bug 4515, bug 6301)
 !! options
@@ -14405,29 +14582,36 @@ HTML bullet list, closed tags (bug 5497)
 <li>One</li>
 <li>Two</li>
 </ul>
-!! html
+!! html/php
 <ul>
 <li>One</li>
 <li>Two</li>
 </ul>
 
+!! html/parsoid
+<ul data-parsoid='{"stx":"html"}'>
+<li data-parsoid='{"stx":"html"}'>One</li>
+<li data-parsoid='{"stx":"html"}'>Two</li>
+</ul>
+
 !! end
 
 !! test
 HTML bullet list, unclosed tags (bug 5497)
-!! options
-disabled
 !! wikitext
 <ul>
 <li>One
 <li>Two
 </ul>
-!! html
+!! html/php+tidy
 <ul>
-<li>One
-</li>
-<li>Two
-</li>
+<li>One</li>
+<li>Two</li>
+</ul>
+!! html/parsoid
+<ul data-parsoid='{"stx":"html"}'>
+<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
+<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
 </ul>
 
 !! end
@@ -14439,29 +14623,37 @@ HTML ordered list, closed tags (bug 5497)
 <li>One</li>
 <li>Two</li>
 </ol>
-!! html
+!! html/php
 <ol>
 <li>One</li>
 <li>Two</li>
 </ol>
 
+!! html/parsoid
+<ol data-parsoid='{"stx":"html"}'>
+<li data-parsoid='{"stx":"html"}'>One</li>
+<li data-parsoid='{"stx":"html"}'>Two</li>
+</ol>
+
 !! end
 
 !! test
 HTML ordered list, unclosed tags (bug 5497)
 !! options
-disabled
 !! wikitext
 <ol>
 <li>One
 <li>Two
 </ol>
-!! html
+!! html/php+tidy
 <ol>
-<li>One
-</li>
-<li>Two
-</li>
+<li>One</li>
+<li>Two</li>
+</ol>
+!! html/parsoid
+<ol data-parsoid='{"stx":"html"}'>
+<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>One</li>
+<li data-parsoid='{"stx":"html","autoInsertedEnd":true}'>Two</li>
 </ol>
 
 !! end
@@ -14493,8 +14685,6 @@ HTML nested bullet list, closed tags (bug 5497)
 
 !! test
 HTML nested bullet list, open tags (bug 5497)
-!! options
-disabled
 !! wikitext
 <ul>
 <li>One
@@ -14504,7 +14694,17 @@ disabled
 <li>Sub-two
 </ul>
 </ul>
-!! html
+!! html/php+tidy
+<ul>
+<li>One</li>
+<li>Two:
+<ul>
+<li>Sub-one</li>
+<li>Sub-two</li>
+</ul>
+</li>
+</ul>
+!! html/parsoid
 <ul>
 <li>One
 </li>
@@ -14547,8 +14747,6 @@ HTML nested ordered list, closed tags (bug 5497)
 
 !! test
 HTML nested ordered list, open tags (bug 5497)
-!! options
-disabled
 !! wikitext
 <ol>
 <li>One
@@ -14558,7 +14756,17 @@ disabled
 <li>Sub-two
 </ol>
 </ol>
-!! html
+!! html/php
+<ol>
+<li>One
+<li>Two:
+<ol>
+<li>Sub-one
+<li>Sub-two
+</ol>
+</ol>
+
+!! html/parsoid
 <ol>
 <li>One
 </li>
@@ -14834,7 +15042,7 @@ Fuzz testing: image with bogus manual thumbnail
 <div class="thumb tright"><div class="thumbinner" style="width:182px;">Error creating thumbnail:   <div class="thumbcaption"></div></div></div>
 
 !! html/parsoid
-<meta typeof="mw:Placeholder" data-parsoid='{"src":"[[Image:foobar.jpg|thumbnail= ]]","optList":[{"ck":"manualthumb","ak":"thumbnail= "}],"dsr":[0,32,null,null]}'/>
+<meta typeof="mw:Placeholder" data-parsoid='{"src":"[[Image:foobar.jpg|thumbnail= ]]","optList":[{"ck":"manualthumb","ak":"thumbnail= "}]}'/>
 !!end
 
 !! test
@@ -14912,15 +15120,19 @@ New wiki paragraph
 </p>
 !! end
 
+# FIXME: The current php output is documented
+# and desired output is the parsoid target.
 !! test
 Inline HTML vs wiki block nesting
-!! options
-disabled
 !! wikitext
 <b>Bold paragraph
 
 New wiki paragraph
-!! html
+!! html/php
+<p><b>Bold paragraph
+</p><p>New wiki paragraph</b>
+</p>
+!! html/parsoid
 <p><b>Bold paragraph</b>
 </p><p>New wiki paragraph
 </p>
@@ -15912,6 +16124,17 @@ Special:Search page linking.
 </p>
 !! end
 
+!! test
+{{!}} is a magic word
+!! wikitext
+{{!}} is a magic word there and {{!}} is still a magic word here
+!! html/php
+<p>| is a magic word there and | is still a magic word here
+</p>
+!! html/parsoid
+<p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"!","href":"./Template:!"},"params":{},"i":0}}]}' data-parsoid='{"pi":[[]]}'>|</span> is a magic word there and <span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"!","href":"./Template:!"},"params":{},"i":0}}]}' data-parsoid='{"pi":[[]]}'>|</span> is still a magic word here</p>
+!! end
+
 !! test
 Say the magic word
 !! options
@@ -16416,35 +16639,16 @@ Another italics / bold test
 </pre>
 !!end
 
-# Note the results may be incorrect, as parserTest output included this:
-# XML error: Mismatched tag at byte 6120:
-# ...<dd> </dt></dl> </dd...
+# FIXME: The php output seems broken. It's interleaving some open/close tags.
 !! test
 dt/dd/dl test
-!! options
-disabled
 !! wikitext
 :;;;::
-!! html
-<dl>
-<dd><dl>
-<dt><dl>
-<dt><dl>
-<dt><dl>
-<dd><dl>
-<dd>
-</dd>
-</dl>
-</dd>
-</dl>
-</dt>
-</dl>
-</dt>
-</dl>
-</dt>
-</dl>
-</dd>
-</dl>
+!! html/php
+<dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd></dt></dl></dd></dl></dd></dl></dd></dl></dd></dl></dd></dl>
+
+!! html/parsoid
+<dl><dd><dl><dt><dl><dt><dl><dt><dl><dd><dl><dd></dd></dl></dd></dl></dt></dl></dt></dl></dt></dl></dd></dl>
 
 !!end
 
@@ -16587,7 +16791,7 @@ Definition list code coverage
 ; title   : def
 ; title : def
 ;title: def
-!! html
+!! html/php
 <dl><dt> title  &#160;</dt>
 <dd> def</dd>
 <dt> title&#160;</dt>
@@ -16595,6 +16799,10 @@ Definition list code coverage
 <dt>title</dt>
 <dd> def</dd></dl>
 
+!! html/parsoid
+<dl><dt> title  <span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
+<dt> title<span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
+<dt>title</dt><dd> def</dd></dl>
 !! end
 
 !! test
@@ -17277,45 +17485,51 @@ language=sr variant=sr-ec
 </p>
 !! end
 
-# This test is currently broken in the PHP parser (bug 52661)
+# FIXME: This test is currently broken in the PHP parser (bug 52661)
 !! test
 Don't break image parsing if language converter markup is in the caption.
 !! options
 language=sr
-disabled
 !! wikitext
 [[File:Foobar.jpg|-{R|caption}-]]
-!! html
+!! html/parsoid
 <p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
 !! end
 
-# This test is currently broken in the PHP parser (bug 52661)
+# FIXME: This test is currently broken in the PHP parser (bug 52661)
 !! test
 Don't break list handling if language converter markup is in the item.
 !! options
 language=zh variant=zh-cn
-disabled
 !! wikitext
 ;-{zh-cn:AAA;zh-tw:BBB}-
-!! html
+!! html/php
+<dl><dt><span class="error">在手动语言转换规则中检测到错误</span></dd></dl>
+
+!! html/parsoid
 <dl><dt>AAA
 </dt></dl>
-
 !! end
 
-# This test is currently broken in the PHP parser (bug 52661)
+# FIXME: This test is currently broken in the PHP parser (bug 52661)
 !! test
 Don't break table handling if language converter markup is in the cell.
 !! options
 language=sr variant=sr-ec
-disabled
 !! wikitext
 {|
 |-
 | -{R|B}-
 |}
-!! html
+!! html/php
+<table>
+
+<tr>
+<td>Б}-
+</td></tr></table>
+
+!! html/parsoid
 <table>
 
 <tr>
@@ -17534,12 +17748,13 @@ Line two
 
 !! test
 Nesting tags, paragraphs on lines which begin with <div>
-!! options
-disabled
 !! wikitext
 <div></div><strong>A
 B</strong>
-!! html
+!! html/php+tidy
+<p><strong>A</strong></p>
+<p><strong>B</strong></p>
+!! html/parsoid
 <div></div>
 <p><strong>A
 B</strong>
@@ -17941,27 +18156,31 @@ comment
 <a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">ABC3D% ++</a> <a href="/index.php?title=ABC3D%25_%2B%2B&amp;action=edit&amp;redlink=1" class="new" title="ABC3D% ++ (page does not exist)">+%20</a>
 !! end
 
+# FIXME: Omitting the php sections here because of differences in the local and
+# jenkins output. But, more importantly, the Bad.jpg isn't being stripped,
+# which seems to be a problem with the testing infrastructure.
 !! test
 Bad images - basic functionality
-!! options
-disabled
 !! wikitext
 [[File:Bad.jpg]]
-!! html
+!! html/parsoid
+<meta typeof="mw:Placeholder" data-parsoid='{"src":"[[File:Bad.jpg]]","optList":[]}'/>
 !! end
 
+# FIXME: Same reasoning as above. The expected php is:
+#  <p>Foo bar
+#  </p><p>Bar foo
+#  </p>
 !! test
 Bad images - bug 16039: text after bad image disappears
-!! options
-disabled
 !! wikitext
 Foo bar
 [[File:Bad.jpg]]
 Bar foo
-!! html
+!! html/parsoid
 <p>Foo bar
-</p><p>Bar foo
-</p>
+<meta typeof="mw:Placeholder" data-parsoid='{"src":"[[File:Bad.jpg]]","optList":[]}'/>
+Bar foo</p>
 !! end
 
 !! test
@@ -18138,18 +18357,22 @@ preload
 
 !! test
 Play a bit with r67090 and bug 3158
-!! options
-disabled
 !! wikitext
 <div style="width:50% !important">&nbsp;</div>
 <div style="width:50%&nbsp;!important">&nbsp;</div>
 <div style="width:50%&#160;!important">&nbsp;</div>
 <div style="border : solid;">&nbsp;</div>
-!! html
-<div style="width:50% !important">&nbsp;</div>
-<div style="width:50% !important">&nbsp;</div>
-<div style="width:50% !important">&nbsp;</div>
-<div style="border&#160;: solid;">&nbsp;</div>
+!! html/php
+<div style="width:50% !important">&#160;</div>
+<div style="width:50% !important">&#160;</div>
+<div style="width:50% !important">&#160;</div>
+<div style="border&#160;: solid;">&#160;</div>
+
+!! html/parsoid
+<div style="width:50% !important" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span></div>
+<div style="width:50% !important" data-parsoid='{"stx":"html","a":{"style":"width:50% !important"},"sa":{"style":"width:50%&amp;nbsp;!important"}}'><span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span></div>
+<div style="width:50% !important" data-parsoid='{"stx":"html","a":{"style":"width:50% !important"},"sa":{"style":"width:50%&amp;#160;!important"}}'><span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span></div>
+<div style="border : solid;" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span></div>
 
 !! end
 
@@ -18858,13 +19081,13 @@ parsoid=wt2html,wt2wt
 #### Parsoid-specific functionality tests
 #### -----------------------------------------------------------------
 
-# Bug 63642: Formatting elt fixup is cleaned up.
+# Bug 63642/66749: Formatting elt fixup around images is cleaned up.
 # We know wt2wt will fail, but we expect selser to pass.
 # Due to the nature of our testing, wt2wt and selser tests will enter the
 # blacklist and we'll catch selser regressions based on changes to the
 # blacklist entries for selser tests.
 !! test
-Bad treebuilder fixup of formatting elt is cleaned up
+1. Bad treebuilder fixup of formatting elt is cleaned up
 !! options
 parsoid=wt2html,wt2wt
 !! wikitext
@@ -18877,12 +19100,28 @@ parsoid=wt2html,wt2wt
 !! html/parsoid
 <table>
 <tbody><tr><td>
-<p><small></small></p>
-<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption><small>Test</small></figcaption></figure>
-<p></p></td></tr>
+<small>
+<figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"></a><figcaption>Test</figcaption></figure>
+</small>
+</td></tr>
 </tbody></table>
 !! end
 
+!! test
+2. Bad treebuilder fixup of formatting elt is cleaned up
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+'''foo[[File:Foobar.jpg|thumb|caption]]bar'''
+
+<small>[[Image:Foobar.jpg|right|300px]]</small>
+!! html/parsoid
+<p><b>foo</b></p>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption><b>caption</b></figcaption></figure>
+<p><b>bar</b></p>
+<small><figure class="mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="34" width="300"/></a></figure></small>
+!! end
+
 #### ----------------------------------------------------------------
 #### Parsoid-only testing of Parsoid's impl of <ref> and <references>
 #### tags. Parsoid's output for these tags differs from that of the
@@ -18898,9 +19137,9 @@ A <ref>foo</ref>
 B <ref name="x">foo</ref>
 C <ref name="y" />
 !! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span>
-B <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-2">[2]</a></span>
-C <span about="#mwt3" class="reference" data-mw='{"name":"ref","attrs":{"name":"y"}}' id="cite_ref-y-3-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-y-3">[3]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-x-2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}'><a href="#cite_note-x-2">[2]</a></span>
+C <span about="#mwt6" class="reference" id="cite_ref-y-3-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"y"}}'><a href="#cite_note-y-3">[3]</a></span></p>
 !!end
 
 !!test
@@ -18911,8 +19150,8 @@ parsoid
 A <ref name="x">foo</ref>
 B <ref name="x" />
 !! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
-B <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-x-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-x-1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span></p>
 !!end
 
 !!test
@@ -18924,20 +19163,20 @@ A <ref name="x">foo</ref>
 B <ref name=" x " />
 C <ref name= x  />
 !! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}' id="cite_ref-x-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
-B <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span>
-C <span about="#mwt3" class="reference" data-mw='{"name":"ref","attrs":{"name":"x"}}' id="cite_ref-x-1-2" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-x-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-x-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-x-1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span>
+C <span about="#mwt6" class="reference" id="cite_ref-x-1-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"x"}}'><a href="#cite_note-x-1">[1]</a></span></p>
 !!end
 
+# NOTE: constructor is a predefined property in JS and constructor as a ref-name can clash with it if not handled properly)
 !!test
 Ref: 4. 'constructor' should be accepted as a valid ref-name
-(NOTE: constructor is a predefined property in JS and constructor as a ref-name can clash with it if not handled properly)
 !!options
 parsoid
 !! wikitext
 A <ref name="constructor">foo</ref>
 !! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"constructor"}}' id="cite_ref-constructor-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-constructor-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-constructor-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"constructor"}}'><a href="#cite_note-constructor-1">[1]</a></span></p>
 !!end
 
 !!test
@@ -18951,9 +19190,9 @@ A <ref>
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"This is a &lt;b data-parsoid=&#39;{\"dsr\":[19,40,3,3]}&#39;>&lt;a rel=\"mw:WikiLink\" href=\"./Bolded_link\" title=\"Bolded link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Bolded_link\"},\"sa\":{\"href\":\"bolded link\"},\"dsr\":[22,37,2,2]}&#39;>bolded link&lt;/a>&lt;/b> and this is a &lt;span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"transclusion\"}},\"i\":0}}]}&#39; data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[55,76,null,null]}&#39;>transclusion&lt;/span>\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"This is a &lt;b data-parsoid=&#39;{\"dsr\":[19,40,3,3]}&#39;>&lt;a rel=\"mw:WikiLink\" href=\"./Bolded_link\" title=\"Bolded link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Bolded_link\"},\"sa\":{\"href\":\"bolded link\"},\"dsr\":[22,37,2,2]}&#39;>bolded link&lt;/a>&lt;/b> and this is a &lt;span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[55,76,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"transclusion\"}},\"i\":0}}]}&#39;>transclusion&lt;/span>\n"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> This is a <b><a rel="mw:WikiLink" href="./Bolded_link" title="Bolded link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
 </li>
 </ol>
@@ -18972,9 +19211,9 @@ A <ref>
 
 <references />
 !! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo\n bar\n baz\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo\n bar\n baz\n"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt3" data-mw='{"name":"references","attrs":{}}'>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo
  bar
  baz
@@ -19002,9 +19241,9 @@ booz
 
 <references />
 !! html
-<p>A <span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo\n\nbar\n\n\nbaz\n\n\n\nbooz\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo\n\nbar\n\n\nbaz\n\n\n\nbooz\n"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
 
-<ol about="#mwt2" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo
 
 bar
@@ -19028,9 +19267,9 @@ A <ref> foo {{echo|</ref> B C}}
 
 <references />
 !! html
-<p>A <span class="reference" data-mw="{&quot;name&quot;:&quot;ref&quot;,&quot;body&quot;:{&quot;html&quot;:&quot;foo <span typeof=\&quot;mw:Nowiki\&quot; data-parsoid='{\&quot;src\&quot;:\&quot;{{\&quot;,\&quot;dsr\&quot;:[12,14,0,0]}'>{{</span>echo|&quot;},&quot;attrs&quot;:{}}" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C<span typeof="mw:Nowiki">}}</span></p>
-<ol class="references" typeof="mw:Extension/references" data-mw="{&quot;name&quot;:&quot;references&quot;,&quot;attrs&quot;:{}}">
-<li id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo <span typeof="mw:Nowiki">{{</span>echo|</li>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo &lt;span typeof=\"mw:Nowiki\" data-parsoid=&#39;{\"src\":\"{{\",\"dsr\":[12,14,0,0]}&#39;>{{&lt;/span>echo|"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B C<span typeof="mw:Nowiki">}}</span></p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo <span typeof="mw:Nowiki">{{</span>echo|</li>
 </ol>
 !!end
 
@@ -19042,9 +19281,9 @@ parsoid
 A <ref> foo <!--</ref> B C
 <references />
 !! html
-<p>A <span class="reference" data-mw='{"name":"ref","body":{"html":"foo &lt;!---->"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> B C</p>
-<ol class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
-<li id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo </li>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo &lt;!---->"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B C</p>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo <!----></li>
 </ol>
 !!end
 
@@ -19057,11 +19296,11 @@ A <ref> <b> foo </ref> B C
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"&lt;b data-parsoid=&#39;{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[8,16,3,0]}&#39;> foo &lt;/b>"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref> &lt;b> foo &lt;/ref>"}'><a href="#cite_note-1">[1]</a></span> B C</p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"&lt;b data-parsoid=&#39;{\"stx\":\"html\",\"autoInsertedEnd\":true,\"dsr\":[8,16,3,0]}&#39;> foo &lt;/b>"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B C</p>
 
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-parsoid='{"src":"&lt;references />"}' data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> <b data-parsoid='{"stx":"html","autoInsertedEnd":true}'> foo </b></li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> <b data-parsoid='{"stx":"html","autoInsertedEnd":true}'> foo </b></li>
 </ol>
 !!end
 
@@ -19073,8 +19312,8 @@ parsoid
 A <ref>foo</ref> B
 C <ref>bar</ref> D
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo&lt;/ref>"}'><a href="#cite_note-1">[1]</a></span> B
-C <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>bar&lt;/ref>"}'><a href="#cite_note-2">[2]</a></span> D</p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> B
+C <span about="#mwt4" class="reference" id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}'><a href="#cite_note-2">[2]</a></span> D</p>
 !!end
 
 !!test
 <p><!--the newline at the end of this line moves out of the p-tag-->a</p>
 
 
-<p>b<!--the newline at the end of this line stays inside the p-tag--> <span about="#mwt1" class="reference" data-mw='{"name":"ref","attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span>
-<span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[2]</a></span></p>
-
+<p>b<!--the newline at the end of this line stays inside the p-tag--> <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{}}'><a href="#cite_note-1">[1]</a></span>
+<span about="#mwt4" class="reference" id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{}}'><a href="#cite_note-2">[2]</a></span></p>
 
 <p>c</p>
 !!end
@@ -19108,8 +19346,8 @@ parsoid
 <ref>bar
 </ref> B
 !! html
-<p><span about="#mwt1" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> A
-<span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"bar\n"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[2]</a></span> B</p>
+<p><span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> A
+<span about="#mwt4" class="reference" id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"bar\n"},"attrs":{}}'><a href="#cite_note-2">[2]</a></span> B</p>
 !!end
 
 !!test
@@ -19121,10 +19359,10 @@ parsoid
 
 <references />
 !! html
-<p><span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo &amp;lt;ref>bar&amp;lt;/ref> baz"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo &lt;ref>bar&lt;/ref> baz&lt;/ref>"}'><a href="#cite_note-1">[1]</a></span></p>
+<p><span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo &amp;lt;ref>bar&amp;lt;/ref> baz"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-parsoid='{"src":"&lt;references />"}' data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo &lt;ref>bar&lt;/ref> baz</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo &lt;ref>bar&lt;/ref> baz</li>
 </ol>
 !!end
 
@@ -19138,10 +19376,10 @@ B1 <ref name="b" /> B2 <ref name="b">bar</ref>
 
 <references />
 !! html
-<p>A1 <span about="#mwt3" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"a"}}' id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span> A2 <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"name":"a"}}' id="cite_ref-a-1-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-a-1">[1]</a></span>
-B1 <span about="#mwt7" class="reference" data-mw='{"name":"ref","attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span> B2 <span about="#mwt8" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}' id="cite_ref-b-2-1" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-b-2">[2]</a></span></p>
+<p>A1 <span about="#mwt3" class="reference" id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"name":"a"}}'><a href="#cite_note-a-1">[1]</a></span> A2 <span about="#mwt4" class="reference" id="cite_ref-a-1-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a"}}'><a href="#cite_note-a-1">[1]</a></span>
+B1 <span about="#mwt7" class="reference" id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"b"}}'><a href="#cite_note-b-2">[2]</a></span> B2 <span about="#mwt8" class="reference" id="cite_ref-b-2-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}'><a href="#cite_note-b-2">[2]</a></span></p>
 
-<ol about="#mwt10" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-a-1-0">1.0</a> <a href="#cite_ref-a-1-1">1.1</a></span> foo</li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy">↑ <a href="#cite_ref-b-2-0">2.0</a> <a href="#cite_ref-b-2-1">2.1</a></span> bar</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy">↑ <a href="#cite_ref-a-1-0">1.0</a> <a href="#cite_ref-a-1-1">1.1</a></span> foo</li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy">↑ <a href="#cite_ref-b-2-0">2.0</a> <a href="#cite_ref-b-2-1">2.1</a></span> bar</li>
 </ol>
 !!end
 
@@ -19155,10 +19393,10 @@ A <ref >foo</ref >
 
 <references />
 !! html
-<p>A <span class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'>
-<li id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li></ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li></ol>
 !!end
 
 !!test
@@ -19181,10 +19419,10 @@ B <ref group="b">bar</ref>
 
 <references group="a" />
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"group":"a"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[a 1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"group":"b"}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[b 1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{"group":"a"}}'><a href="#cite_note-1">[a 1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"group":"b"}}'><a href="#cite_note-2">[b 1]</a></span></p>
 
-<ol about="#mwt6" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li>
 </ol>
 !!end
 
@@ -19201,14 +19439,14 @@ B <ref>bar</ref>
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
 
-<ol about="#mwt4" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li>
 </ol>
 
-<p>B <span about="#mwt6" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-2">[1]</a></span></p>
+<p>B <span about="#mwt6" class="reference" id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{}}'><a href="#cite_note-2">[1]</a></span></p>
 
-<ol about="#mwt8" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</a></span> bar</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</a></span> bar</li>
 </ol>
 !!end
 
@@ -19226,15 +19464,15 @@ C <ref>cfoo</ref>
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"afoo"},"attrs":{"group":"a"}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[a 1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bfoo"},"attrs":{}}' id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"<ref>bfoo</ref>"}'><a href="#cite_note-2">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"afoo"},"attrs":{"group":"a"}}'><a href="#cite_note-1">[a 1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"bfoo"},"attrs":{}}'><a href="#cite_note-2">[1]</a></span></p>
 
-<ol about="#mwt6" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> afoo</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{"group":"a"}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> afoo</li>
 </ol>
 
-<p>C <span about="#mwt8" class="reference" data-mw='{"name":"ref","body":{"html":"cfoo"},"attrs":{}}' id="cite_ref-3-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-3">[2]</a></span></p>
+<p>C <span about="#mwt8" class="reference" id="cite_ref-3-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"cfoo"},"attrs":{}}'><a href="#cite_note-3">[2]</a></span></p>
 
-<ol about="#mwt10" class="references" typeof="mw:Extension/references" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</a></span> bfoo</li><li about="#cite_note-3" id="cite_note-3"><span rel="mw:referencedBy"><a href="#cite_ref-3-0">↑</a></span> cfoo</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-2" id="cite_note-2"><span rel="mw:referencedBy"><a href="#cite_ref-2-0">↑</a></span> bfoo</li><li about="#cite_note-3" id="cite_note-3"><span rel="mw:referencedBy"><a href="#cite_ref-3-0">↑</a></span> cfoo</li>
 </ol>
 !!end
 
@@ -19251,13 +19489,11 @@ B <ref name="b">bar</ref>
 This should just get lost.
 </references>
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","attrs":{"name":"a"}}' id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"a\" />"}'><a href="#cite_note-a-1">[1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"b\">bar&lt;/ref>"}'><a href="#cite_note-b-2">[2]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-a-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"name":"a"}}'><a href="#cite_note-a-1">[1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"bar"},"attrs":{"name":"b"}}'><a href="#cite_note-b-2">[2]</a></span></p>
 
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-parsoid='{"src":"&lt;references>\n&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.\n&lt;/references>"}' data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.","html":"\n&lt;span about=\"#mwt8\" class=\"reference\" data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"a\"}}&#39; rel=\"dc:references\" typeof=\"mw:Extension/ref\">&lt;a href=\"#cite_note-a-1\">[1]&lt;/a>&lt;/span>\n"},"attrs":{}}'>
-<li about="#cite_note-a-1" id="cite_note-a-1" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-a-1-0">↑</a></span> foo</li>
-<li about="#cite_note-b-2" id="cite_note-b-2" data-parsoid="{}"><span rel="mw:referencedBy"><a href="#cite_ref-b-2-0">↑</a></span> bar</li>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"a\">foo&lt;/ref>\nThis should just get lost.","html":"\n&lt;span about=\"#mwt8\" class=\"reference\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"src\":\"&amp;lt;ref name=\\\"a\\\">foo&amp;lt;/ref>\",\"dsr\":[59,82,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"a\"}}&#39;>&lt;a href=\"#cite_note-a-1\">[1]&lt;/a>&lt;/span>\n"},"attrs":{}}'><li about="#cite_note-a-1" id="cite_note-a-1"><span rel="mw:referencedBy"><a href="#cite_ref-a-1-0">↑</a></span> foo</li><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b-2-0">↑</a></span> bar</li>
 </ol>
 !!end
 
@@ -19268,7 +19504,7 @@ parsoid
 !! wikitext
 <ref>Foo</ref> {{echo|<references />}}
 !! html
-<span about="#mwt3" class="reference" data-mw='{"name":"ref","body":{"html":"Foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span> <ol class="references" typeof="mw:Extension/references mw:Transclusion" about="#mwt4" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;references />"}},"i":0}}]}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> Foo</li></ol>
+<p><span about="#mwt3" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"Foo"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p> <ol class="references" typeof="mw:Extension/references mw:Transclusion" about="#mwt4" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;references />"}},"i":0}}]}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> Foo</li></ol>
 !!end
 
 !! test
@@ -19285,12 +19521,12 @@ B <ref group="X" name="b" />
 <ref name="b">foo</ref>
 </references>
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo bar for a"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo bar for a&lt;/ref>"}'><a href="#cite_note-1" data-parsoid="{}">[1]</a></span>
-B <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"group":"X","name":"b"}}' id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref group=\"X\" name=\"b\" />"}'><a href="#cite_note-b-2" data-parsoid="{}">[X 1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo bar for a"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span>
+B <span about="#mwt4" class="reference" id="cite_ref-b-2-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{"group":"X","name":"b"}}'><a href="#cite_note-b-2">[X 1]</a></span></p>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-parsoid='{"src":"&lt;references />"}' data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}"><a href="#cite_ref-1-0" data-parsoid="{}">↑</a></span> foo bar for a</li></ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo bar for a</li></ol>
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-parsoid='{"src":"&lt;references group=\"X\">\n&lt;ref name=\"b\">foo&lt;/ref>\n&lt;/references>","group":"X"}' data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"b\">foo&lt;/ref>","html":"\n&lt;span about=\"#mwt10\" class=\"reference\" data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"b\"}}&#39; rel=\"dc:references\" typeof=\"mw:Extension/ref\">&lt;a href=\"#cite_note-b-2\">[X 1]&lt;/a>&lt;/span>\n"},"attrs":{"group":"X"}}'><li about="#cite_note-b-2" id="cite_note-b-2" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}"><a href="#cite_ref-b-2-0" data-parsoid="{}">↑</a></span> foo</li></ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt8" data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"b\">foo&lt;/ref>","html":"\n&lt;span about=\"#mwt10\" class=\"reference\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"src\":\"&amp;lt;ref name=\\\"b\\\">foo&amp;lt;/ref>\",\"dsr\":[96,119,14,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"b\"}}&#39;>&lt;a href=\"#cite_note-b-2\">[X 1]&lt;/a>&lt;/span>\n"},"attrs":{"group":"X"}}'><li about="#cite_note-b-2" id="cite_note-b-2"><span rel="mw:referencedBy"><a href="#cite_ref-b-2-0">↑</a></span> foo</li></ol>
 !! end
 
 !! test
@@ -19300,7 +19536,7 @@ parsoid
 !! wikitext
 <ref name="test &amp; me">hi</ref>
 !! html
-<p data-parsoid='{}'><span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"hi"},"attrs":{"name":"test &amp; me"}}' id="cite_ref-test &amp; me-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"test &amp;amp; me\">hi&lt;/ref>"}'><a href="#cite_note-test &amp; me-1" data-parsoid="{}">[1]</a></span></p>
+<p><span about="#mwt2" class="reference" id="cite_ref-test &amp; me-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"test &amp;amp; me\">hi&lt;/ref>"}' data-mw='{"name":"ref","body":{"html":"hi"},"attrs":{"name":"test &amp; me"}}'><a href="#cite_note-test &amp; me-1">[1]</a></span></p>
 !! end
 
 # This test is wt2html only because we're permitting the serializer to produce
@@ -19314,11 +19550,11 @@ a<ref>foo</ref>
 
 <references>
 !! html
-<p data-parsoid='{}'>a<span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref>foo&lt;/ref>"}'><a href="#cite_note-1" data-parsoid="{}">[1]</a></span></p>
+<p>a<span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"foo"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
 
 
-<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-parsoid='{"src":"&lt;references>"}' data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}"><a href="#cite_ref-1-0" data-parsoid="{}">↑</a></span> foo</li></ol>
+<ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> foo</li></ol>
 !! end
 
 !! test
@@ -19332,6 +19568,69 @@ foo
 foo<ol class="references" typeof="mw:Extension/references" about="#mwt2" data-mw='{"name":"references","attrs":{}}'></ol>
 !! end
 
+#--------- Test stripping of empty nodes in template content ----------
+!!test
+Empty LI and TR nodes should be stripped from template content
+!!wikitext
+{{EmptyLITest}}
+{{EmptyTRTest}}
+!!html/parsoid
+<ul typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyLITest","href":"./Template:EmptyLITest"},"params":{},"i":0}}]}'>
+<li>a</li>
+<li>b</li>
+</ul>
+<table typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRTest","href":"./Template:EmptyTRTest"},"params":{},"i":0}}]}'>
+<tbody>
+<tr>
+<td>foo</td>
+</tr>
+<tr>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
+!!end
+
+!!test
+Empty LI and TR nodes should not be stripped from top-level content
+!!wikitext
+* a
+*
+* b
+{|
+|-
+|-
+|foo
+|}
+!!html/parsoid
+<ul>
+<li> a</li>
+<li></li>
+<li> b</li>
+</ul>
+<table>
+<tbody>
+<tr></tr>
+<tr>
+<td>foo</td>
+</tr>
+</tbody>
+</table>
+!!end
+
+!!test
+Empty TR nodes should not be stripped if they have any attributes set
+!!wikitext
+{{EmptyTRWithHTMLAttrTest}}
+!!html/parsoid
+<table typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRWithHTMLAttrTest","href":"./Template:EmptyTRWithHTMLAttrTest"},"params":{},"i":0}}]}'>
+<tr align="center"></tr>
+<tr><td>foo</td></tr>
+<tr align="center"></tr>
+<tr><td>bar</td></tr>
+</table>
+!!end
+
 #### ----------------------------------------------------------------
 #### The following section of tests are primarily to test
 #### wikitext escaping capabilities of Parsoid.  Given that
@@ -19376,9 +19675,9 @@ parsoid
 <p>=foo<i>a</i><span typeof="mw:Nowiki">=</span></p>
 !!end
 
+# New headings and existing headings are handled differently
 !! test
 Headings: 1. Nested inside html
-(New headings and existing headings are handled differently)
 !! options
 parsoid=html2wt
 !! wikitext
@@ -19400,12 +19699,12 @@ parsoid=html2wt
 <h2>=foo=</h2>
 <h3>=foo=</h3>
 
-<h1 data-parsoid='{}'>=foo=</h1>
-<h2 data-parsoid='{}'>=foo=</h2>
-<h3 data-parsoid='{}'>=foo=</h3>
-<h4 data-parsoid='{}'>=foo=</h4>
-<h5 data-parsoid='{}'>=foo=</h5>
-<h6 data-parsoid='{}'>=foo=</h6>
+<h1 data-parsoid=''>=foo=</h1>
+<h2 data-parsoid=''>=foo=</h2>
+<h3 data-parsoid=''>=foo=</h3>
+<h4 data-parsoid=''>=foo=</h4>
+<h5 data-parsoid=''>=foo=</h5>
+<h6 data-parsoid=''>=foo=</h6>
 !!end
 
 !! test
@@ -19767,9 +20066,9 @@ parsoid
 ----=foo=
 ----*foo
 !! html
-<hr><span typeof="mw:Nowiki">----</span>
-<hr>=foo=
-<hr>*foo
+<hr><p><span typeof="mw:Nowiki">----</span></p>
+<hr><p>=foo=</p>
+<hr><p>*foo</p>
 !! end
 
 #### --------------- Tables ---------------
@@ -20300,10 +20599,10 @@ parsoid=html2wt,wt2wt
 </p>
 !! end
 
+# FIXME: Escaping one or both of [[ and ]] is also acceptable --
+#        this is one of the shortcomings of this format
 !! test
 3. Link fragments inside <i> and <b>
-(FIXME: Escaping one or both of [[ and ]] is also acceptable --
- this is one of the shortcomings of this format)
 !! wikitext
 ''[[foo''<nowiki>]]</nowiki>
 
@@ -20398,7 +20697,7 @@ parsoid
 foo <ref>''a''
  b</ref>
 !! html
-<p>foo <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"&lt;i data-parsoid=&#39;{\"dsr\":[9,14,2,2]}&#39;>a&lt;/i>\n b"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>foo <span about="#mwt2" class="reference" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"html":"&lt;i data-parsoid=&#39;{\"dsr\":[9,14,2,2]}&#39;>a&lt;/i>\n b"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span></p>
 !! end
 
 !! test
@@ -20650,7 +20949,7 @@ Table with broken attribute value quoting on consecutive lines
 | title="Hello world|Foo
 | style="color:red|Bar
 |}
-!! html
+!! html/php
 <table>
 <tr>
 <td>Foo
@@ -20658,18 +20957,7 @@ Table with broken attribute value quoting on consecutive lines
 <td>Bar
 </td></tr></table>
 
-!! end
-
-!! test
-Parsoid-only: Table with broken attribute value quoting on consecutive lines
-!! options
-parsoid
-!! wikitext
-{|
-| title="Hello world|Foo
-| style="color:red|Bar
-|}
-!! html
+!! html/parsoid
 <table><tbody>
 <tr>
 <td title="Hello world">Foo
@@ -20783,9 +21071,9 @@ RT-ed inter-element separators should be valid separators
 
 !!end
 
+# Parsoid-only since PHP parser relies on Tidy for correct output
 !!test
 Trailing newlines in a deep dom-subtree that ends a wikitext line should be migrated out
-(Parsoid-only since PHP parser relies on Tidy for correct output)
 !!options
 parsoid
 !! wikitext
@@ -20798,6 +21086,14 @@ bar
 |<small>foo<small>
 |}
 !! html
+<table>
+<tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo
+<p>bar</p></small></td></tr>
+</tbody></table>
+
+<table>
+<tbody><tr data-parsoid='{"autoInsertedEnd":true,"autoInsertedStart":true}'><td data-parsoid='{"autoInsertedEnd":true}'><small data-parsoid='{"stx":"html","autoInsertedEnd":true}'>foo<small data-parsoid='{"stx":"html","autoInsertedEnd":true}'></small></small></td></tr>
+</tbody></table>
 !!end
 
 !!test
@@ -20874,15 +21170,15 @@ Indent and comment before table row
 </td></tr></table>
 
 !! html/parsoid
-<table data-parsoid='{}'>
- <!--hi--><tbody data-parsoid='{}'><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
+<table>
+ <!--hi--><tbody><tr data-parsoid='{"startTagSrc":"|-","autoInsertedEnd":true}'>
  <td data-parsoid='{"autoInsertedEnd":true}'> there</td></tr>
 </tbody></table>
 !! end
 
+# Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext
 !!test
 Empty TR followed by a template-generated TR
-(Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext)
 !!options
 parsoid
 !! wikitext
@@ -20993,20 +21289,20 @@ plain text
 !!end
 
 !!test
-1. Ensure fostered text content is wrapped in spans
+1. Ensure fostered text content is wrapped in element nodes
 !!options
 parsoid=wt2html
 !! wikitext
 <table>hi</table><table>ho</table>
 !! html
-<span>hi</span>
+<p>hi</p>
 <table></table>
-<span>ho</span>
+<p>ho</p>
 <table></table>
 !!end
 
 !!test
-2. Ensure fostered text content is wrapped in spans (traps regressions around fostered marker on the span getting lost)
+2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost)
 !!options
 parsoid=wt2html,wt2wt
 !! wikitext
@@ -21015,11 +21311,9 @@ parsoid=wt2html,wt2wt
 <td> a
 </table>
 !! html
-<span> || ||</span>
-<table>
-<tbody>
-<tr>
-<td> a</td></tr>
+<p> || ||
+</p><table>
+<tbody><tr><td> a</td></tr>
 </tbody></table>
 !!end
 
@@ -21030,14 +21324,7 @@ parsoid=wt2html,wt2wt
 !! wikitext
 {{echo|<table>foo<tr><td>bar</td></tr></table>}}
 !! html
-<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;
-<table>foo
-<tr>
-<td>bar</td></tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span>
-<table>
-<tbody>
-<tr>
-<td>bar</td></tr></tbody></table>
+<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;<table>foo<tr><td>bar</td></tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span><table><tbody><tr><td>bar</td></tr></tbody></table>
 !!end
 
 !!test
@@ -21047,14 +21334,13 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table>{{echo|foo<tr><td>bar</td></tr>}}</table>
 !! html
-<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo
-<tr>
-<td>bar</td></tr>&quot;}},&quot;i&quot;:0}},&quot;</table>&quot;]}">foo</span>
-<table>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo<tr><td>bar</td></tr>&quot;}},&quot;i&quot;:0}},&quot;</table>&quot;]}">foo</p><table>
 <tbody>
 <tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -21064,15 +21350,14 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table><div>{{echo|foo}}</div><tr><td>bar</td></tr></table>
 !! html
-<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<div>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo&quot;}},&quot;i&quot;:0}},&quot;</div>
-<tr>
-<td>bar</td></tr></table>&quot;]}">foo</div>
+<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo&quot;}},&quot;i&quot;:0}},&quot;</div><tr><td>bar</td></tr></table>&quot;]}">foo</div>
 <table>
 <tbody>
 <tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -21082,17 +21367,16 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
 !! html
-<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<div>
-<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div>
-<tr>
-<td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
-<p>foo</p></div>
+<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div><tr><td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
+<p>foo</p>
+</div>
 <table>
 <tbody>
 <tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -21102,17 +21386,16 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
 !! html
-<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<div>
-<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div>
-<tr>
-<td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
-<p>foo</p></div>
+<div typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div><tr><td>&quot;}},&quot;i&quot;:0}},&quot;bar</td></tr></table>&quot;]}">
+<p>foo</p>
+</div>
 <table>
 <tbody>
 <tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -21122,18 +21405,18 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table><tr><td><div><p>{{echo|foo</p></div></td>foo}}</tr></table>
 !! html
-<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<tr>
-<td>
-<div>
-<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo&quot;}},&quot;i&quot;:0}},&quot;</tr></table>&quot;]}">foo</span>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><tr><td><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo&quot;}},&quot;i&quot;:0}},&quot;</tr></table>&quot;]}">foo</p>
 <table>
 <tbody>
 <tr>
 <td>
 <div>
-<p>foo</p></div></td></tr></tbody></table>
+<p>foo</p>
+</div>
+</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -21143,18 +21426,18 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table><tr><td><div><p>{{echo|foo</p></div></td>foo</tr></table>}}<p>ok</p>
 !! html
-<span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>
-<tr>
-<td>
-<div>
-<p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo</tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><tr><td><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo</tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</p>
 <table>
 <tbody>
 <tr>
 <td>
 <div>
-<p>foo</p></div></td></tr></tbody></table>
+<p>foo</p>
+</div>
+</td>
+</tr>
+</tbody>
+</table>
 <p>ok</p>
 !!end
 
@@ -21165,14 +21448,14 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table>{{echo|<p>foo</p>}}<td>bar</td></table>
 !! html
-<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;
-<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;
-<p>foo</p>&quot;}},&quot;i&quot;:0}},&quot;
-<td>bar</td></table>&quot;]}">foo</p>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;<p>foo</p>&quot;}},&quot;i&quot;:0}},&quot;<td>bar</td></table>&quot;]}">foo</p>
 <table>
 <tbody>
 <tr>
-<td>bar</td></tr></tbody></table>
+<td>bar</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -21186,11 +21469,13 @@ parsoid=wt2wt,wt2html
 |b
 |}
 !! html
-<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a\n&quot;}},&quot;i&quot;:0}}]}">a</p><span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;{|&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;style&quot;:{&quot;wt&quot;:&quot;'color:red'&quot;}},&quot;i&quot;:0}},&quot;\n|-\n|b\n|}&quot;]}">{{{1}}}</span>
-<table>
+<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;a\n&quot;}},&quot;i&quot;:0}}]}">a</p><p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;{|&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;style&quot;:{&quot;wt&quot;:&quot;'color:red'&quot;}},&quot;i&quot;:0}},&quot;\n|-\n|b\n|}&quot;]}">{{{1}}}</p><table>
 <tbody>
 <tr>
-<td>b</td></tr></tbody></table>
+<td>b</td>
+</tr>
+</tbody>
+</table>
 !!end
 
 !!test
@@ -21200,8 +21485,7 @@ parsoid=wt2wt,wt2html
 !! wikitext
 <table>{{echo|hi</table>hello}}
 !! html
-<span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;/table>hello"}},"i":0}}]}' data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"pi":[[{"k":"1","spc":["","","",""]}]]}'>hi</span>
-<table about="#mwt2" data-parsoid='{"stx":"html"}'></table><span about="#mwt2" data-parsoid="{}">hello</span>
+<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;/table>hello"}},"i":0}}]}' data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"pi":[[{"k":"1","spc":["","","",""]}]]}'>hi</p><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><p about="#mwt2">hello</p>
 !!end
 
 !!test
@@ -21216,7 +21500,7 @@ parsoid=wt2html,wt2wt
 </div>
 |}
 !! html
-<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"OpenTable","href":"./Template:OpenTable"},"params":{},"i":0}},"\n&lt;div>"]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[]]}'></div><span about="#mwt1" data-parsoid="{}">
+<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"OpenTable","href":"./Template:OpenTable"},"params":{},"i":0}},"\n&lt;div>"]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[]]}'></div><span about="#mwt1">
 </span>
 <table about="#mwt1" data-parsoid='{"autoInsertedEnd":true}'></table>
 
@@ -21256,15 +21540,15 @@ parsoid=html2wt
 # All these tests are marked Parsoid html2wt and html2html only
 # ----------------------------------------------------------------
 
+# 'mi' is a localinterwiki prefix as well as a language
 !! test
 Serialize interwiki links pointing to the current wiki as plain wiki links (bug 65869)
 !! options
 parsoid=html2wt
-language=es
 !! wikitext
 [[Foo]]
 !! html
-<p><a rel="mw:ExtLink" href="http://es.wikipedia.org/wiki/Foo">Foo</a></p>
+<p><a rel="mw:ExtLink" href="http://mi.wikipedia.org/wiki/Foo">Foo</a></p>
 !! end
 
 !! test
@@ -21428,8 +21712,7 @@ parsoid
 !!end
 
 !! test
-Image: New block level image should have \n before and after (existing
-content)
+Image: New block level image should have \n before and after (existing content)
 !! options
 parsoid
 !! wikitext
@@ -21437,9 +21720,9 @@ parsoid
 [[File:Foobar.jpg|right|thumb|150x150px]]
 456
 !! html
-<p data-parsoid='{"dsr":[0,3,0,0]}'>123</p>
-<figure class="mw-halign-right" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"right","ak":"right"},{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"150x150px"}],"dsr":[4,45,2,2]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"dsr":[6,43,null,null]}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/150px-Foobar.jpg" height="17" width="150" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"17","width":"150"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></figure>
-<p data-parsoid='{"dsr":[46,49,0,0]}'>456</p>
+<p>123</p>
+<figure class="mw-halign-right" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"right","ak":"right"},{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"150x150px"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/150px-Foobar.jpg" height="17" width="150" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"17","width":"150"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></figure>
+<p>456</p>
 !!end
 
 !! test
@@ -21451,7 +21734,9 @@ parsoid
 [[File:Foobar.jpg|thumb|upright=0.5|caption]]
 [[File:Foobar.jpg|thumb|500x500px|upright=0.5|caption]]
 !! html
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="19" width="170"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="12" width="110"/></a><figcaption>caption</figcaption></figure><figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="57" width="500"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="19" width="170"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="12" width="110"/></a><figcaption>caption</figcaption></figure>
+<figure typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="57" width="500"/></a><figcaption>caption</figcaption></figure>
 !!end
 
 !! test
@@ -21770,9 +22055,9 @@ parsoid=html2wt
 
 ''A'''B'''''
 !! html
-<p><i>A</i><i data-parsoid='{}'>B</i></p>
-<p><b data-parsoid='{}'>A</b><b>B</b></p>
-<p><i>A</i><b data-parsoid='{}'><i data-parsoid='{}'>B</i></b></p>
+<p><i>A</i><i>B</i></p>
+<p><b>A</b><b>B</b></p>
+<p><i>A</i><b><i>B</i></b></p>
 !! end
 
 #------------------------------------
index 4abb4e5..8bcfee0 100644 (file)
@@ -481,7 +481,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                                'page_namespace' => 0,
                                'page_title' => ' ',
                                'page_restrictions' => null,
-                               'page_counter' => 0,
                                'page_is_redirect' => 0,
                                'page_is_new' => 0,
                                'page_random' => 0,
@@ -1148,10 +1147,24 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $this->assertEmpty( $errors, implode( "\n", $errors ) );
        }
 
+       /**
+        * @param array $matcher
+        * @param string $actual
+        * @param bool $isHtml
+        *
+        * @return bool
+        */
+       private static function tagMatch( $matcher, $actual, $isHtml = true ) {
+               $dom = PHPUnit_Util_XML::load( $actual, $isHtml );
+               $tags = PHPUnit_Util_XML::findNodes( $dom, $matcher, $isHtml );
+               return count( $tags ) > 0 && $tags[0] instanceof DOMNode;
+       }
+
        /**
         * Note: we are overriding this method to remove the deprecated error
         * @see https://bugzilla.wikimedia.org/show_bug.cgi?id=69505
         * @see https://github.com/sebastianbergmann/phpunit/issues/1292
+        * @deprecated
         *
         * @param array $matcher
         * @param string $actual
@@ -1161,10 +1174,21 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        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;
+               self::assertTrue( self::tagMatch( $matcher, $actual, $isHtml ), $message );
+       }
+
+       /**
+        * @see MediaWikiTestCase::assertTag
+        * @deprecated
+        *
+        * @param array $matcher
+        * @param string $actual
+        * @param string $message
+        * @param bool $isHtml
+        */
+       public static function assertNotTag( $matcher, $actual, $message = '', $isHtml = true ) {
+               //trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);
 
-               self::assertTrue( $matched, $message );
+               self::assertFalse( self::tagMatch( $matcher, $actual, $isHtml ), $message );
        }
 }
index b248d24..1974162 100644 (file)
@@ -133,6 +133,7 @@ class BlockTest extends MediaWikiLangTestCase {
                $username = 'BlockedUserToCreateAccountWith';
                $u = User::newFromName( $username );
                $u->setPassword( 'NotRandomPass' );
+               $u->setId( 14146 );
                $u->addToDatabase();
                unset( $u );
 
@@ -200,6 +201,12 @@ class BlockTest extends MediaWikiLangTestCase {
                        $oldBlock->delete();
                }
 
+               // Local perspective (blockee on current wiki)...
+               $user = User::newFromName( 'UserOnForeignWiki' );
+               $user->addToDatabase();
+               // Set user ID to match the test value
+               $this->db->update( 'user', array( 'user_id' => 14146 ), array( 'user_id' => $user->getId() ) );
+
                // Foreign perspective (blockee not on current wiki)...
                $block = new Block(
                        /* $address */ 'UserOnForeignWiki',
@@ -221,11 +228,6 @@ class BlockTest extends MediaWikiLangTestCase {
                $res = $block->insert( $this->db );
                $this->assertTrue( (bool)$res['id'], 'Block succeeded' );
 
-               // Local perspective (blockee on current wiki)...
-               $user = User::newFromName( 'UserOnForeignWiki' );
-               $user->addToDatabase();
-               // Set user ID to match the test value
-               $this->db->update( 'user', array( 'user_id' => 14146 ), array( 'user_id' => $user->getId() ) );
                $user = null; // clear
 
                $block = Block::newFromID( $res['id'] );
index 5390dba..a33f6a6 100644 (file)
@@ -3,11 +3,17 @@
  * @group Search
  * @group Database
  */
-class PrefixSearchTest extends MediaWikiTestCase {
+class PrefixSearchTest extends MediaWikiLangTestCase {
 
        protected function setUp() {
                parent::setUp();
 
+               if ( !$this->isWikitextNS( NS_MAIN ) ) {
+                       $this->markTestSkipped( 'Main namespace does not support wikitext.' );
+               }
+
+               $this->insertPages();
+
                // Avoid special pages from extensions interferring with the tests
                $this->setMwGlobals( 'wgSpecialPages', array() );
        }
@@ -27,7 +33,7 @@ class PrefixSearchTest extends MediaWikiTestCase {
                }
        }
 
-       public function addDBData() {
+       public function insertPages() {
                $this->insertPage( 'Sandbox' );
                $this->insertPage( 'Bar' );
                $this->insertPage( 'Example' );
index 610a6ac..39822dc 100644 (file)
@@ -5,24 +5,41 @@
  * like password if we log in via the API.
  */
 class TestUser {
+       /**
+        * @deprecated Since 1.25. Use TestUser::getUser()->getName()
+        * @private
+        * @var string
+        */
        public $username;
+
+       /**
+        * @deprecated Since 1.25. Use TestUser::getPassword()
+        * @private
+        * @var string
+        */
        public $password;
-       public $email;
-       public $groups;
+
+       /**
+        * @deprecated Since 1.25. Use TestUser::getUser()
+        * @private
+        * @var User
+        */
        public $user;
 
+       private function assertNotReal() {
+               global $wgDBprefix;
+               if( $wgDBprefix !== MediaWikiTestCase::DB_PREFIX && $wgDBprefix !== MediaWikiTestCase::ORA_DB_PREFIX ) {
+                       throw new MWException( "Can't create user on real database" );
+               }
+       }
+
        public function __construct( $username, $realname = 'Real Name',
                $email = 'sample@example.com', $groups = array()
        ) {
-               $this->username = $username;
-               $this->realname = $realname;
-               $this->email = $email;
-               $this->groups = $groups;
+               $this->assertNotReal();
 
-               // don't allow user to hardcode or select passwords -- people sometimes run tests
-               // on live wikis. Sometimes we create sysop users in these tests. A sysop user with
-               // a known password would be a Bad Thing.
-               $this->password = User::randomPassword();
+               $this->username = $username;
+               $this->password = 'TestUser';
 
                $this->user = User::newFromName( $this->username );
                $this->user->load();
@@ -31,32 +48,99 @@ class TestUser {
                // But for now, we just need to create or update the user with the desired properties.
                // we particularly need the new password, since we just generated it randomly.
                // In core MediaWiki, there is no functionality to delete users, so this is the best we can do.
-               if ( !$this->user->getID() ) {
+               if ( !$this->user->isLoggedIn() ) {
                        // create the user
                        $this->user = User::createNew(
                                $this->username, array(
-                                       "email" => $this->email,
-                                       "real_name" => $this->realname
+                                       "email" => $email,
+                                       "real_name" => $realname
                                )
                        );
+
                        if ( !$this->user ) {
-                               throw new Exception( "error creating user" );
+                               throw new MWException( "Error creating TestUser " . $username );
                        }
                }
 
-               // update the user to use the new random password and other details
-               $this->user->setPassword( $this->password );
-               $this->user->setEmail( $this->email );
-               $this->user->setRealName( $this->realname );
+               // Update the user to use the password and other details
+               $change = $this->setPassword( $this->password ) ||
+                       $this->setEmail( $email ) ||
+                       $this->setRealName( $realname );
 
                // Adjust groups by adding any missing ones and removing any extras
                $currentGroups = $this->user->getGroups();
-               foreach ( array_diff( $this->groups, $currentGroups ) as $group ) {
+               foreach ( array_diff( $groups, $currentGroups ) as $group ) {
                        $this->user->addGroup( $group );
                }
-               foreach ( array_diff( $currentGroups, $this->groups ) as $group ) {
+               foreach ( array_diff( $currentGroups, $groups ) as $group ) {
                        $this->user->removeGroup( $group );
                }
-               $this->user->saveSettings();
+               if ( $change ) {
+                       $this->user->saveSettings();
+               }
+       }
+
+       /**
+        * @param string $realname
+        * @return bool
+        */
+       private function setRealName( $realname ) {
+               if ( $this->user->getRealName() !== $realname ) {
+                       $this->user->setRealName( $realname );
+                       return true;
+               }
+
+               return false;
+       }
+
+       /**
+        * @param string $email
+        * @return bool
+        */
+       private function setEmail( $email ) {
+               if ( $this->user->getEmail() !== $email ) {
+                       $this->user->setEmail( $email );
+                       return true;
+               }
+
+               return false;
+       }
+
+       /**
+        * @param string $password
+        * @return bool
+        */
+       private function setPassword( $password ) {
+               $passwordFactory = $this->user->getPasswordFactory();
+               $oldDefaultType = $passwordFactory->getDefaultType();
+
+                // B is salted MD5 (thus fast) ... we don't care about security here, this is test only
+               $passwordFactory->setDefaultType( 'B' ); // @TODO: Change this to A once that is fixed: https://gerrit.wikimedia.org/r/167523
+               $newPassword = $passwordFactory->newFromPlaintext( $password , $this->user->getPassword() );
+
+               $change = false;
+               if ( !$this->user->getPassword()->equals( $newPassword ) ) {
+                       // Password changed
+                       $this->user->setPassword( $password );
+                       $change = true;
+               }
+
+               $passwordFactory->setDefaultType( $oldDefaultType );
+
+               return $change;
+       }
+
+       /**
+        * @return User
+        */
+       public function getUser() {
+               return $this->user;
+       }
+
+       /**
+        * @return string
+        */
+       public function getPassword() {
+               return $this->password;
        }
 }
index fb58381..a4bc427 100644 (file)
@@ -428,14 +428,14 @@ class TitleTest extends MediaWikiTestCase {
        public function testGetPageViewLanguage( $expected, $titleText, $contLang,
                $lang, $variant, $msg = ''
        ) {
-               global $wgLanguageCode, $wgContLang, $wgLang, $wgDefaultLanguageVariant, $wgAllowUserJs;
-
                // Setup environnement for this test
-               $wgLanguageCode = $contLang;
-               $wgContLang = Language::factory( $contLang );
-               $wgLang = Language::factory( $lang );
-               $wgDefaultLanguageVariant = $variant;
-               $wgAllowUserJs = true;
+               $this->setMwGlobals( array(
+                       'wgLanguageCode' => $contLang,
+                       'wgContLang' => Language::factory( $contLang ),
+                       'wgLang' => Language::factory( $lang ),
+                       'wgDefaultLanguageVariant' => $variant,
+                       'wgAllowUserJs' => true,
+               ) );
 
                $title = Title::newFromText( $titleText );
                $this->assertInstanceOf( 'Title', $title,
index a0c20bb..f9ef317 100644 (file)
@@ -281,9 +281,7 @@ class UserTest extends MediaWikiTestCase {
         * @covers User::getPasswordExpired()
         */
        public function testPasswordExpire() {
-               global $wgPasswordExpireGrace;
-               $wgTemp = $wgPasswordExpireGrace;
-               $wgPasswordExpireGrace = 3600 * 24 * 7; // 7 days
+               $this->setMwGlobals( 'wgPasswordExpireGrace', 3600 * 24 * 7 ); // 7 days
 
                $user = User::newFromName( 'UnitTestUser' );
                $user->loadDefaults( 'UnitTestUser' );
@@ -296,8 +294,6 @@ class UserTest extends MediaWikiTestCase {
                $ts = time() - ( 3600 * 24 * 10 ); // 10 days ago
                $user->expirePassword( $ts );
                $this->assertEquals( 'hard', $user->getPasswordExpired() );
-
-               $wgPasswordExpireGrace = $wgTemp;
        }
 
        /**
index 5f955bb..bd34018 100644 (file)
@@ -17,8 +17,6 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
        /** @var DerivativeContext */
        private $mContext;
 
-       private $mOldGetPreferencesHooks;
-
        private static $Success = array( 'options' => 'success' );
 
        protected function setUp() {
@@ -50,21 +48,11 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
 
                $this->mTested = new ApiOptions( $main, 'options' );
 
-               global $wgHooks;
-               if ( !isset( $wgHooks['GetPreferences'] ) ) {
-                       $wgHooks['GetPreferences'] = array();
-               }
-               $this->mOldGetPreferencesHooks = $wgHooks['GetPreferences'];
-               $wgHooks['GetPreferences'][] = array( $this, 'hookGetPreferences' );
-       }
-
-       protected function tearDown() {
-               global $wgHooks;
-
-               $wgHooks['GetPreferences'] = $this->mOldGetPreferencesHooks;
-               $this->mOldGetPreferencesHooks = false;
-
-               parent::tearDown();
+               $this->mergeMwGlobalArrayValue( 'wgHooks', array(
+                       'GetPreferences' => array(
+                               array( $this, 'hookGetPreferences' )
+                       )
+               ) );
        }
 
        public function hookGetPreferences( $user, &$preferences ) {
index cd14194..9a552fa 100644 (file)
@@ -8,6 +8,11 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
         */
        protected $apiContext;
 
+       /**
+        * @var array
+        */
+       protected $tablesUsed = array( 'user', 'user_groups', 'user_properties' );
+
        protected function setUp() {
                global $wgServer;
 
@@ -134,10 +139,14 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
                }
 
                if ( isset( $session['wsToken'] ) && $session['wsToken'] ) {
+                       // @todo Why does this directly mess with the session? Fix that.
                        // add edit token to fake session
                        $session['wsEditToken'] = $session['wsToken'];
                        // add token to request parameters
-                       $params['token'] = md5( $session['wsToken'] ) . User::EDIT_TOKEN_SUFFIX;
+                       $timestamp = wfTimestamp();
+                       $params['token'] = hash_hmac( 'md5', $timestamp, $session['wsToken'] ) .
+                               dechex( $timestamp ) .
+                               User::EDIT_TOKEN_SUFFIX;
 
                        return $this->doApiRequest( $params, $session, false, $user );
                } else {
index bce6268..a5f2684 100644 (file)
@@ -62,6 +62,8 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
                }
                if ( $useContinue && !isset( $params['continue'] ) ) {
                        $params['continue'] = '';
+               } else {
+                       $params['rawcontinue'] = '1';
                }
                $count = 0;
                $result = array();
index 56c15b2..1220bb4 100644 (file)
@@ -95,6 +95,9 @@ STR;
                if ( !array_key_exists( 'action', $req ) ) {
                        $req['action'] = 'query';
                }
+               if ( !array_key_exists( 'continue', $req ) ) {
+                       $req['rawcontinue'] = '1';
+               }
                foreach ( $req as &$val ) {
                        if ( is_array( $val ) ) {
                                $val = implode( '|', array_unique( $val ) );
index fc06a50..35ff919 100644 (file)
@@ -60,21 +60,23 @@ class LocalisationCacheTest extends MediaWikiTestCase {
        }
 
        public function testRecacheFallbacksWithHooks() {
-               global $wgHooks;
-
                // Use hook to provide updates for messages. This is what the
                // LocalisationUpdate extension does. See bug 68781.
-               $wgHooks['LocalisationCacheRecacheFallback'][] = function (
-                       LocalisationCache $lc,
-                       $code,
-                       array &$cache
-               ) {
-                       if ( $code === 'ru' ) {
-                               $cache['messages']['present-uk'] = 'ru-override';
-                               $cache['messages']['present-ru'] = 'ru-override';
-                               $cache['messages']['present-en'] = 'ru-override';
-                       }
-               };
+               $this->mergeMwGlobalArrayValue( 'wgHooks', array(
+                       'LocalisationCacheRecacheFallback' => array(
+                               function (
+                                       LocalisationCache $lc,
+                                       $code,
+                                       array &$cache
+                               ) {
+                                       if ( $code === 'ru' ) {
+                                               $cache['messages']['present-uk'] = 'ru-override';
+                                               $cache['messages']['present-ru'] = 'ru-override';
+                                               $cache['messages']['present-en'] = 'ru-override';
+                                       }
+                               }
+                       )
+               ) );
 
                $lc = new LocalisationCache( array( 'store' => 'detect' ) );
                $lc->recache( 'uk' );
index 98903f1..7c2ba1a 100644 (file)
@@ -46,6 +46,7 @@ class RecentChangeTest extends MediaWikiTestCase {
         * - protect/modifyprotect
         * - protect/unprotect
         * - upload/upload
+        * - merge/merge
         *
         * As well as the following Auto Edit Summaries:
         * - blank
@@ -229,6 +230,25 @@ class RecentChangeTest extends MediaWikiTestCase {
                );
        }
 
+       /**
+        * @covers LogFormatter::getIRCActionText
+        */
+       public function testIrcMsgForLogTypeMerge() {
+               $sep = $this->context->msg( 'colon-separator' )->text();
+
+               # merge/merge
+               $this->assertIRCComment(
+                       $this->context->msg( 'pagemerge-logentry', 'SomeTitle', 'Dest', 'timestamp' )->plain()
+                               . $sep . $this->user_comment,
+                       'merge', 'merge',
+                       array(
+                               '4::dest' => 'Dest',
+                               '5::mergepoint' => 'timestamp',
+                       ),
+                       $this->user_comment
+               );
+       }
+
        /**
         * @todo Emulate these edits somehow and extract
         * raw edit summary from RecentChange object
index 70b9e68..28068d5 100644 (file)
@@ -87,34 +87,10 @@ class GlobalVarConfigTest extends MediaWikiTestCase {
                $this->assertEquals( $config->get( $name ), $expected );
        }
 
-       public static function provideSet() {
-               return array(
-                       array( 'Foo', 'wg', 'wgFoo' ),
-                       array( 'SomethingRandom', 'wg', 'wgSomethingRandom' ),
-                       array( 'FromAnExtension', 'eg', 'egFromAnExtension' ),
-                       array( 'NoPrefixHere', '', 'NoPrefixHere' ),
-               );
-       }
-
        private function maybeStashGlobal( $var ) {
                if ( array_key_exists( $var, $GLOBALS ) ) {
                        // Will be reset after this test is over
                        $this->stashMwGlobals( $var );
                }
        }
-
-       /**
-        * @dataProvider provideSet
-        * @covers GlobalVarConfig::set
-        * @covers GlobalVarConfig::setWithPrefix
-        */
-       public function testSet( $name, $prefix, $var ) {
-               $this->hideDeprecated( 'GlobalVarConfig::set' );
-               $this->maybeStashGlobal( $var );
-               $config = new GlobalVarConfig( $prefix );
-               $random = wfRandomString();
-               $config->set( $name, $random );
-               $this->assertArrayHasKey( $var, $GLOBALS );
-               $this->assertEquals( $random, $GLOBALS[$var] );
-       }
 }
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderFileModuleTest.php
new file mode 100644 (file)
index 0000000..fb436ee
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+
+class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
+
+       protected function setUp() {
+               parent::setUp();
+
+               // The return value of the closure shouldn't matter since this test should
+               // never call it
+               SkinFactory::getDefaultInstance()->register(
+                       'fakeskin',
+                       'FakeSkin',
+                       function () {
+                       }
+               );
+       }
+
+       /**
+        * @covers ResourceLoaderFileModule::getAllSkinStyleFiles
+        */
+       public function testGetAllSkinStyleFiles() {
+               $baseParams = array(
+                       'scripts' => array(
+                               'foo.js',
+                               'bar.js',
+                       ),
+                       'styles' => array(
+                               'foo.css',
+                               'bar.css' => array( 'media' => 'print' ),
+                               'screen.less' => array( 'media' => 'screen' ),
+                               'screen-query.css' => array( 'media' => 'screen and (min-width: 400px)' ),
+                       ),
+                       'skinStyles' => array(
+                               'default' => 'quux-fallback.less',
+                               'fakeskin' => array(
+                                       'baz-vector.css',
+                                       'quux-vector.less',
+                               ),
+                       ),
+                       'messages' => array(
+                               'hello',
+                               'world',
+                       ),
+               );
+
+               $module = new ResourceLoaderFileModule( $baseParams );
+
+               $this->assertEquals(
+                       array(
+                               'foo.css',
+                               'baz-vector.css',
+                               'quux-vector.less',
+                               'quux-fallback.less',
+                               'bar.css',
+                               'screen.less',
+                               'screen-query.css',
+                       ),
+                       array_map( 'basename', $module->getAllStyleFiles() )
+               );
+       }
+}
index b0edaaf..b25e9b0 100644 (file)
@@ -2,65 +2,6 @@
 
 class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
 
-       protected function setUp() {
-               parent::setUp();
-
-               // The return value of the closure shouldn't matter since this test should
-               // never call it
-               SkinFactory::getDefaultInstance()->register(
-                       'fakeskin',
-                       'FakeSkin',
-                       function () {
-                       }
-               );
-       }
-
-       /**
-        * @covers ResourceLoaderFileModule::getAllSkinStyleFiles
-        */
-       public function testGetAllSkinStyleFiles() {
-               $context = self::getResourceLoaderContext();
-
-               $baseParams = array(
-                       'scripts' => array(
-                               'foo.js',
-                               'bar.js',
-                       ),
-                       'styles' => array(
-                               'foo.css',
-                               'bar.css' => array( 'media' => 'print' ),
-                               'screen.less' => array( 'media' => 'screen' ),
-                               'screen-query.css' => array( 'media' => 'screen and (min-width: 400px)' ),
-                       ),
-                       'skinStyles' => array(
-                               'default' => 'quux-fallback.less',
-                               'fakeskin' => array(
-                                       'baz-vector.css',
-                                       'quux-vector.less',
-                               ),
-                       ),
-                       'messages' => array(
-                               'hello',
-                               'world',
-                       ),
-               );
-
-               $module = new ResourceLoaderFileModule( $baseParams );
-
-               $this->assertEquals(
-                       array(
-                               'foo.css',
-                               'baz-vector.css',
-                               'quux-vector.less',
-                               'quux-fallback.less',
-                               'bar.css',
-                               'screen.less',
-                               'screen-query.css',
-                       ),
-                       array_map( 'basename', $module->getAllStyleFiles() )
-               );
-       }
-
        /**
         * @covers ResourceLoaderModule::getDefinitionSummary
         * @covers ResourceLoaderFileModule::getDefinitionSummary
index 2bdc9c9..2142061 100644 (file)
@@ -2,27 +2,22 @@
 
 class AutoLoaderTest extends MediaWikiTestCase {
        protected function setUp() {
-               global $wgAutoloadLocalClasses, $wgAutoloadClasses;
-
                parent::setUp();
 
                // Fancy dance to trigger a rebuild of AutoLoader::$autoloadLocalClassesLower
-               $this->testLocalClasses = array(
-                       'TestAutoloadedLocalClass' => __DIR__ . '/../data/autoloader/TestAutoloadedLocalClass.php',
-                       'TestAutoloadedCamlClass' => __DIR__ . '/../data/autoloader/TestAutoloadedCamlClass.php',
+               $this->mergeMwGlobalArrayValue( 'wgAutoloadLocalClasses', array(
+                       'TestAutoloadedLocalClass' =>
+                               __DIR__ . '/../data/autoloader/TestAutoloadedLocalClass.php',
+                       'TestAutoloadedCamlClass' =>
+                               __DIR__ . '/../data/autoloader/TestAutoloadedCamlClass.php',
                        'TestAutoloadedSerializedClass' =>
                                __DIR__ . '/../data/autoloader/TestAutoloadedSerializedClass.php',
-               );
-               $this->setMwGlobals(
-                       'wgAutoloadLocalClasses',
-                       $this->testLocalClasses + $wgAutoloadLocalClasses
-               );
+               ) );
                AutoLoader::resetAutoloadLocalClassesLower();
 
-               $this->testExtensionClasses = array(
+               $this->mergeMwGlobalArrayValue( 'wgAutoloadClasses', array(
                        'TestAutoloadedClass' => __DIR__ . '/../data/autoloader/TestAutoloadedClass.php',
-               );
-               $this->setMwGlobals( 'wgAutoloadClasses', $this->testExtensionClasses + $wgAutoloadClasses );
+               ) );
        }
 
        /**
index 4d24d9d..116065f 100644 (file)
@@ -8,12 +8,25 @@
 class ExtensionsTestSuite extends PHPUnit_Framework_TestSuite {
        public function __construct() {
                parent::__construct();
-               $files = array();
-               wfRunHooks( 'UnitTestsList', array( &$files ) );
-               foreach ( $files as $file ) {
-                       $this->addTestFile( $file );
+               $paths = array();
+               // Extensions can return a list of files or directories
+               wfRunHooks( 'UnitTestsList', array( &$paths ) );
+               foreach ( $paths as $path ) {
+                       if ( is_dir( $path ) ) {
+                               // If the path is a directory, search for test cases.
+                               // @since 1.24
+                               $suffixes = array(
+                                       'Test.php',
+                               );
+                               $fileIterator = new File_Iterator_Facade();
+                               $matchingFiles = $fileIterator->getFilesAsArray( $path, $suffixes );
+                               $this->addTestFiles( $matchingFiles );
+                       } else {
+                               // Add a single test case or suite class
+                               $this->addTestFile( $path );
+                       }
                }
-               if ( !count( $files ) ) {
+               if ( !count( $paths ) ) {
                        $this->addTest( new DummyExtensionsTest( 'testNothing' ) );
                }
        }